Diese Hervorhebung ist IMHO einfacher im Terminal-Emulator als in der Shell zu implementieren. Und als Vorteil erhalten Sie die Hervorhebung unabhängig von der Shell -- es funktioniert also sogar mit less
usw. Da Sie mit dem Wechseln der Shell zufrieden sind, nehme ich an, dass Sie auch mit dem Wechseln zu URxVt zufrieden sind.
In Verbindung mit den Perl-Erweiterungen urxvt-perls ist es möglich, URLs etc. anklickbar zu machen. Aber wir können diese Funktion missbrauchen, nur um die nicht unterbrechbaren Leerzeichen zu unterstreichen.
Die Konfiguration erfolgt in ~/.Xdefaults
:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\\240)
URxvt.matcher.launcher.0: /bin/true
- Zeile 1 aktiviert die entsprechende Erweiterung
- Zeile 2 konfiguriert die Verwendung der mittleren Maustaste zum Klicken auf den ,,Hyperlink''
- Zeile 3 definiert den passenden Regex, hier jedes nicht zerbrechliche Leerzeichen;
A0 (hex) = 240 (oct)
- Zeile 4 definiert die Aktion, in Ihrem Fall möchten Sie keinen Browser oder irgendein Programm öffnen, also
/bin/true
sollte in Ordnung sein
~/.Xdefaults
neu laden durch einen Neustart des X-Servers (das könnte übertrieben sein, aber ich bin mir nicht sicher, ob ein xrdb ~/.Xdefaults
reicht...) und Sie erhalten Ihr gewünschtes Ergebnis. Mit einer Lupe ist es sogar möglich, zwischen unzerbrechlichen Leerzeichen und Unterstrichen zu unterscheiden (beachten Sie die Verschiebung um 1 Pixel) ;)
:
Das Folgende ist eine Art Proof of Concept für eine "Backend"-Lösung. Beachten Sie, dass dadurch viele Dinge kaputt gehen, insbesondere interaktive Programme wie man
, less
usw. (vim
beschwert sich, funktioniert aber noch). Dieser Ansatz wurde von Atom Smasher auf der zsh-users
gepostet Mailingliste am Sa, 16. Mai 2009 zum Kolorieren von STDERR
. Ich habe es Ihren Anforderungen angepasst:
# ## 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)
Der knifflige Teil ist exec > >(highlight_nbs)
die die komplette Ausgabe der ersetzenden Shell durch den highlight_nbs
verarbeitet Funktion. Die precmd
Definition ist notwendig, um eine Race-Condition zu vermeiden, ansonsten wird die neue Eingabeaufforderung vor der eigentlichen Ausgabe des ausgeführten Befehls ausgegeben.
Hier ist eine Demo: