Este destaque é IMHO mais facilmente implementado no emulador de terminal do que no shell. E como benefício você obtém o destaque independente do shell - por isso, ele está trabalhando com less
etc.
Já que você está bem em trocar o shell, eu suponho que você está bem em mudar para o URxVt também.
Em conjunto com as extensões perl urxvt-perls , é possível tornar os URLs clicáveis. Mas podemos abusar desse recurso apenas para sublinhar os espaços não quebráveis.
A configuração é feita em ~/.Xdefaults
:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\240)
URxvt.matcher.launcher.0: /bin/true
- a linha 1 ativa a extensão apropriada
- a linha 2 configura o uso do botão do meio do mouse para clicar no "hyperlink"
- a linha 3 define o regex para corresponder, aqui cada espaço não quebrável; %código%
- a linha 4 define a ação, no seu caso você não quer abrir um navegador ou qualquer programa, então
A0 (hex) = 240 (oct)
deve ficar bem
Recarregue /bin/true
reiniciando o servidor X (isso pode ser um exagero, mas não tenho certeza se um ~/.Xdefaults
é suficiente ...) e você obtém o resultado desejado. Com uma lupa, é até possível distinguir entre espaços não quebráveis e sublinhados (observe a mudança em 1 pixel) xrdb ~/.Xdefaults
:
Oseguinteéumaespéciedeprovadeconceitoparaumasolução"backend". Esteja ciente de que isso quebrará muitas coisas, como programas interativos como ;)
, man
etc. ( less
está reclamando, mas ainda está trabalhando). Essa abordagem foi postada por Atom Smasher na lista de discussão vim
em Sáb, 16 de maio de 2009 para colorir zsh-users
. Adotei as suas necessidades:
# ## highlight_nbs.zsh ##
zmodload zsh/terminfo zsh/system
autoload colors is-at-least
if [[ "${terminfo[colors]}" -ge 8 ]] { colors }
highlight_nbs() {
while sysread line
do
syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
done
}
precmd() { sleep 0 }
## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec > >(highlight_nbs)
A parte complicada é STDERR
, que processa a saída completa do shell de substituição através da função exec > >(highlight_nbs)
. A definição highlight_nbs
é necessária para evitar uma condição de corrida, caso contrário, o novo prompt será impresso antes da saída real do comando executado.
Aqui está uma demonstração: