Я использую утилиту 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) не указано конкретное поведение).