GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, das nicht zerbrechliche Leerzeichen in zsh / terminal hervorzuheben?

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:


Linux
  1. Wie überprüfe ich HZ im Terminal?

  2. Das Konzept von 'Hold space' und 'Pattern space' in sed

  3. Wie kann ich versehentliches Kopieren/Einfügen im Terminal verhindern oder unterbrechen?

  4. Wie ändere ich den Terminal-Cursor von Box zu Zeile?

  5. Ersetzen Sie jedes Leerzeichen am Ende jeder Zeile durch '_'

Die Linux-Befehlszeile kann aus der Ferne Spaß machen

Potenzen von zwei, Potenzen von Linux:2048 auf der Kommandozeile

Meistern Sie die Linux-Befehlszeile

Passen Sie die Debian-Befehlszeile an

Finden Sie die Befehlszeile?

Vier Webbrowser für die Linux-Befehlszeile