Как вставить символ табуляции в «диалог»?

Как вставить символ табуляции в «диалог»?

Я использую утилиту linux "dialog" для создания простого пользовательского интерфейса. Однако в информационном поле есть текст, и я хочу вставить символы табуляции, чтобы правильно выровнять текст.

Но, похоже, этот диалог не принимает символ табуляции. Также не помогла опция --tab-correct. Если я пишу \t, то он появляется в \t в инфобоксе.

dialog --title "Hello" --tab-correct --infobox "tab \t test" 20 100

Если я вставлю табуляцию в командную строку:

dialog --title "Hello" --tab-correct --infobox "tab         test" 20 100

он выглядит как единое пространство.

Есть ли способ вставить табуляцию в текст информационного поля?

решение1

Вам следует использовать --no-collapseопцию вместо --tab-correctи вставлять в строку литеральные символы табуляции, например, с помощью

"star "$'\t'" end" 

или с помощью Ctrl- vи нажатием Tabклавиши .

решение2

Ну, я не знаю, как в диалоге, но иногда в Linux, когда \t не интерпретируется как Tab, попробуйте

"`echo -e "\t"`"

Попробуй это:

declare -r TAB="`echo -e "\t"`"
echo -e "A${TAB}B"

решение3

Строка команды, которая, по вашим словам, отображается как один пробел, здесь отображается как 8 пробелов, а не как табуляция (но, возможно, это StackExchange).

Отладка этого может быть немного сложной. Есть несколько вещей, которые могут или не могут "готовить" вкладки: терминал при вставке символа; оболочка при обработке ввода; базовый режим терминала (готовый режим против необработанного режима) и, в конце концов, сам диалог.

Чтобы еще больше запутать ситуацию, если вы используете echo для генерации вкладки или создаете вкладку каким-то другим способом, все равно есть вероятность, что эмулятор терминала решит ее стереть.

Обычное нажатие клавиши для выхода из этого типа управляющих символов — C-v(то есть, Control+V) CTRL+V. Если нажать ее, а затем табуляция, можно получить настоящую вставку табуляции. Здесь с GNU bashи urxvtэто работает.

Для правильной отладки требуется знаниеточнов чем проблема (то есть, что съедает вкладку). Простое размещение \t там не сработает, если только у вас dialogили у вашей оболочки нет возможности транслировать эти экранированные последовательности. Если вам это нужно, то следуйте совету @Eran Ben-Natan и используйте echoрасширенный режим GNU (другие реализации могут/будут отличаться — в POSIX (IEEE 1003.1 2008, страница 2615, строка 84306) не указано конкретное поведение).

Связанный контент