GNU/Linux >> Znalost Linux >  >> Linux

Je možné zvýraznit nerozbitný prostor v zsh / terminálu?

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:


Linux
  1. Jak číst předposlední řádek v souboru pomocí Bash?

  2. Koncept 'Hold space' a 'Pattern space' v sed

  3. Jak mohu zabránit nebo přerušit náhodné kopírování/vložení v terminálu?

  1. Jak změnit kurzor terminálu z pole na řádek?

  2. Příkazový řádek pro návrat do GUI po Ctrl-Alt-F1?

  3. Nahraďte každý znak prázdného místa na konci každého řádku '_'

  1. Který terminál je lepší:Bash vs Zsh

  2. Co se stalo s volným prostorem?

  3. Linux – Je možné získat přístup k Framebufferu, aby bylo možné umístit pixel na obrazovku z příkazového řádku?