Цветные справочные страницы с tcsh?

Мне очень нравятся цветные справочные страницы, которые можно получить с помощью

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

в вашем .bashrc или .zshrc. Мой вопрос: как мне экспортировать эти переменные в tcsh? Я должен использовать tcsh на работе и не могу заставить его работать. Я пробовал много вариантов, но ничего не получалось. Простая замена export на setenv и = на " " не помогает. Но это должно как-то работать. Если я запущу tcsh из моего zsh с этим набором экспорта, я также смогу наслаждаться цветными справочными страницами в tcsh. Но это уродливый обходной путь.


person skorgon    schedule 08.02.2011    source источник
comment
Вам, вероятно, лучше спросить об этом на superuser.com   -  person dotalchemy    schedule 08.02.2011


Ответы (2)


Проблема в том, что tcsh не интерпретирует escape-последовательность в имени вашей переменной, поэтому переменная среды заканчивается литералом \E, когда вы пытаетесь установить ее с помощью tcsh. Вот один из способов обойти это, используя Bash для интерпретации escape-последовательностей, хотя это немного уродливо:

% setenv LESS_TERMCAP_md `bash -c 'echo -en "\e[01;31m"'`
% setenv LESS_TERMCAP_me `bash -c 'echo -en "\e[0m"'`
% setenv LESS_TERMCAP_se `bash -c 'echo -en "\e[0m"'`
% setenv LESS_TERMCAP_so `bash -c 'echo -en "\e[01;44;33m"'`
% setenv LESS_TERMCAP_ue `bash -c 'echo -en "\e[0m"'`
% setenv LESS_TERMCAP_us `bash -c 'echo -en "\e[01;32m"'`
person Adam Rosenfield    schedule 08.02.2011
comment
Согласен, немного некрасиво, но работает. Тем не менее, я оставил статус вопроса открытым, возможно, мы получим нативное решение. - person skorgon; 08.02.2011
comment
Вы можете сделать это без использования bash (в зависимости от настройки echo_style. - person Dennis Williamson; 08.02.2011

Способ сделать это, который является родным для tcsh и переносим на различные типы терминалов, заключается в использовании встроенной команды echotc:

setenv LESS_TERMCAP_mb `echotc md; echotc AF 1`
setenv LESS_TERMCAP_md `echotc md; echotc AF 1`
setenv LESS_TERMCAP_me `echotc me`
setenv LESS_TERMCAP_se `echotc me`
setenv LESS_TERMCAP_so `echotc md; echotc AF 3; echotc AB 4`
setenv LESS_TERMCAP_ue `echotc me`
setenv LESS_TERMCAP_us `echotc md; echotc AF 2`

См. man 5 terminfo для кодов termcap и цветовых кодов.

md is enter_bold_mode
me is exit_attribute_mode
AF is set_a_foreground
AB is set_a_background

Кстати, чтобы сделать это в Bash, используйте внешнюю утилиту tput и имена возможностей terminfo:

export LESS_TERMCAP_mb=$(tput bold; tput setaf 1)
export LESS_TERMCAP_md=$(tput bold; tput setaf 1)
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_se=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4)
export LESS_TERMCAP_ue=$(tput sgr0)
export LESS_TERMCAP_us=$(tput bold; tput setaf 2)
person Dennis Williamson    schedule 08.02.2011
comment
В моей старой версии tcsh (6.15.00) мне пришлось добавить 2 аргумента для AF и AB. Я просто повторил числа (AF 3 3 и т. д.), и, похоже, это сработало. - person Greg Ruhl; 27.07.2018