2009-10-26 5 views
1

Используя концевые последовательности, можно окрасить текст в эмуляторе терминала:Можно ли выделить символы вкладки в терминале?

$ echo -e '\e[37;41m--this is white on red--\e[0m' 

И это работает.

Следующая печатает красный прямоугольник, т.е. символы пробела красный фон и пустой передний план:

$ echo -e '\e[37;41m  \e[0m ' 

Но следующие печатает две красные прямоугольники, разделенные табуляцией:

$ echo -e '\e[37;41m \t \e[0m ' 

Это , символ табуляции не получает подсветку красного фона. Он принимает цвет фона терминала по умолчанию.

Почему вкладка не выделяется как пространство? Могу ли я это сделать другим способом?

ответ

2

Я нашел ответ: нет, вкладка не может быть выделена в эмуляторе терминала, совместимом с стандартами. Вкладка на самом деле не является пробелом в терминале; это явно символ перемещения курсора, чтобы перейти к следующей остановке табуляции. Таким образом, на самом деле мой пример говорит «напечатайте два пробела на красном фоне, перейдите к следующей вкладке, а затем распечатайте еще два пробела на красном фоне».

Обходным решением было бы предложить ankon для преобразования вкладок в пробелы перед печатью.

+0

Он работает в терминале Mac OS X (я использую 10.8). Он окрашивает вкладки с текущим цветом фона. У вас есть ссылка на документацию, в которой говорится, что она не должна? –

2

Если вам не нужны вкладки для вкладок, вы можете предварительно обработать свой текст с помощью расширения (1).

+0

Это хорошее предложение, и, скорее всего, я в конечном итоге сделаю что-то подобное. – Dhskjlkakdh

0

Потому что это было трудно для меня, чтобы найти хорошее решение (и эта страница была первым результатом поиска) ... Это то, что я имею в файле .bashrc (от http://pastebin.com/Pn1fkkJq с изменениями):

catt() { # Highlight whitespace on the terminal -- rolfwr 
    local C=`printf '\033[0;36m'` R=`printf '\033[0m'` 
    #cat "[email protected]" | sed -e "s/  /${C}▹▹▹▹▹▹▹▹$R/g" -e "s/ /${C}·$R/g" -e "s/$/${C}⁋$R/" 
    #cat "[email protected]" | sed -e "s/ /${C}·$R/g" -e "s/\t/${C} ▹▹ $R/g" -e "s/$/${C}⁋$R/" 
    cat "[email protected]" | sed -e "s/ /${C}·$R/g" | expand | sed -e "s/ \(*\)/${C}▹\1$R/g" -e "s/$/${C}⁋$R/" 
    #cat "[email protected]" | sed -e "s/ /${C}.$R/g" | expand | sed -e "s/ \(*\)/${C}>\1$R/g" -e "s/$/${C}P$R/" 
} 

Надеюсь, это поможет и другому.

+0

Почему downvote? –

+0

, который знает, это отличная идея :-) хотя, возможно, немного беспорядочно исполнен, я предпочитаю: 'hl-nonprinting() {local C = $ (printf '\ 033 [0; 36m') R = $ (printf '\ 033 [0m '); sed -e "s/\ t/$ {C} ▹ & $ R/g" -e "s/$/$ {C} ⁋ $ R /";} ' - это дает мне ' $ echo -e 'foo \ tbar fie' | hl-nonprinting foo▹ bar fie⁋ ' – unhammer

Смежные вопросы