Toto zvýraznění je IMHO snadněji implementováno v emulátoru terminálu než v shellu. A jako výhoda získáte zvýraznění nezávislé na shellu – takže to funguje i s less
atd. Vzhledem k tomu, že jste v pohodě s přepínáním shellu, předpokládám, že jste v pohodě i s přepínáním na URxVt.
Ve spojení s rozšířením perlu urxvt-perls je možné vytvořit URL atd. klikací. Tuto funkci ale můžeme zneužít jen k podtržení nerozbitných mezer.
Konfigurace se provádí v ~/.Xdefaults
:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\\240)
URxvt.matcher.launcher.0: /bin/true
- řádek 1 aktivuje příslušné rozšíření
- Řádek 2 konfiguruje použití prostředního tlačítka myši pro kliknutí na ,,hypertextový odkaz''
- řádek 3 definuje regulární výraz, který se má shodovat, zde každá nezlomitelná mezera;
A0 (hex) = 240 (oct)
- řádek 4 definuje akci, ve vašem případě nechcete otevírat prohlížeč ani žádný program, takže
/bin/true
by mělo být v pořádku
Znovu načtěte ~/.Xdefaults
restartováním X serveru (to může být přehnané, ale nejsem si jistý, zda xrdb ~/.Xdefaults
stačí...) a získáte požadovaný výsledek. Pomocí lupy je dokonce možné rozlišit nerozbitné mezery a podtržítka (všimněte si posunu o 1 pixel) ;)
:
Následující text je jakýmsi důkazem konceptu pro „backendové“ řešení. Uvědomte si, že to naruší spoustu věcí, konkrétně interaktivní programy jako man
, less
atd. (vim
si stěžuje, ale stále funguje). Tento přístup zveřejnil Atom Smasher na zsh-users
mailinglist v sobotu, 16. května 2009 k vybarvení STDERR
. Přijal jsem to podle vašich požadavků:
# ## 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)
Záludná část je exec > >(highlight_nbs)
který zpracuje kompletní výstup nahrazujícího shellu přes highlight_nbs
funkce. precmd
definice je nezbytná k zamezení sporu, jinak se nová výzva vytiskne před skutečným výstupem provedeného příkazu.
Zde je ukázka: