2011-02-08 10 views
5

Mi piace molto le pagine di manuale di colore che possono vengono raggiunti daManpage colorate con 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' 

nel vostro .bashrc o .zshrc. La mia domanda è: come esportare queste variabili in tcsh? Devo usare tcsh al lavoro e non riesco a farlo funzionare. Ho provato un sacco di varianti, ma non ha funzionato. Sostituire semplicemente l'esportazione con setenv e = con "" non fa il trucco. Ma dovrebbe funzionare in qualche modo. Se avvio un tcsh dal mio zsh con questo set di esportazioni, posso anche godermi le manpage colorate in tcsh. Ma questa è una brutta soluzione.

+1

Saresti probabilmente essere chiedilo a superuser.com – dotalchemy

risposta

4

Il problema è che tcsh non sta interpretando la sequenza di escape nel nome della variabile, quindi la variabile di ambiente finisce con un letterale \E quando si tenta di impostarlo con tcsh. Ecco un modo che si può andare in giro che, utilizzando Bash di interpretare le sequenze di escape, anche se è un po 'brutto:

% 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"'` 
+0

Sono d'accordo, è un po 'brutto, ma funziona. Tuttavia, ho lasciato aperto lo stato della domanda, forse avremmo ottenuto una soluzione nativa. – skorgon

+1

Si potrebbe fare ciò senza usare bash (a seconda delle impostazioni di 'echo_style'. –

6

Il modo per farlo che è nativo di tcsh ed è portabile su diversi tipi di terminale è quello di utilizzare il comando echotc incorporato:

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` 

Vedi man 5 terminfo per le termcap codici e codici colore.

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

Tra l'altro, per fare questo in Bash, utilizzare l'utilità tput e la capacità terminfo nomi esterni:

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)