Kann ich die aktuelle Eingabeaufforderungszeile in zsh markieren?

8

Ist es möglich, die gesamte Zeile der Eingabeaufforderung in hervorzuheben (eine Hintergrundfarbe festzulegen) zsh? In meiner Emacs-Konfiguration habe ich die Zeile, in der der Cursor eine etwas andere Farbe als der Fensterhintergrund hat, was eine große visuelle Hilfe ist. Ich frage mich, ob es möglich ist, dasselbe in meiner Terminal / zsh-Eingabeaufforderung zu tun, damit es unter allem, was ausgeführt wird, effektiv "eine Linie zieht".

Ich habe versucht, PROMPT='%{$bg[grey]%}# 'meine Einstellungen vorzunehmen, .zshrcaber die Hervorhebung erstreckt sich nur bis zur Eingabe, nicht bis zum Rand des Terminals.

Ist das, was ich erreichen will, möglich?

Phillip B. Oldham
quelle

Antworten:

1

Versuchen Sie, RPROMPT auf Leerzeichen zu setzen. Die Anzahl der Leerzeichen entspricht der Terminalbreite (abzüglich der #und anderer Zeichen).

Chris Warrick
quelle
1
Können Sie den genauen Befehl angeben?
kirill_igum
1

Mit der Eingabeaufforderungszeile * können Sie alles tun, was Sie wollen. Der problematische Aspekt besteht darin, sie anschließend rückgängig zu machen . Ich gehe davon aus, dass Sie nicht möchten, dass jede einzelne Zeile, auf der jemals eine Eingabeaufforderung angezeigt wurde, in Ihren hellen Farben angezeigt wird.

Es wäre fast einfacher, die Zeile danach zu löschen, aber dann haben Sie Ihren Befehl nicht. Löschen Sie möglicherweise die Eingabeaufforderung und wiederholen Sie den Befehl (mit einer Pseudo-Eingabeaufforderung wie $). Sie könnten die Eingabeaufforderung mit einer ANSI-Cursor-Speichersequenz beginnen lassen ESC [s, sie dann precmdwiederherstellen ESC [uund alles nach dem Cursor löschen ESC [0Jund dann den Befehl wiederholen (ich kann mich nicht erinnern, wie der Befehl von innen abgerufen werden soll precmd).

* Dies ist eine unvollständige Antwort. Ich weiß nicht, wie ich den Befehl in einer anderen Hintergrundfarbe unterstützen soll.

Random832
quelle
1

Wenn ich ändern greyzu white, Ihr Beispiel tatsächlich funktioniert für mich.

Welches Terminal verwenden Sie? Vielleicht behandelt es das Löschen von Hintergrundfarben anders?

Hier sind einige Alternativen zum Ausprobieren:

Geben Sie der gesamten Eingabeaufforderungszeile einen grauen Hintergrund:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="$(tput setab 7)# "

(sollte mit Ihrem Beispiel identisch sein, aber eine andere Schreibweise.)

Drucken Sie eine Zeile vor der Eingabeaufforderung:

precmd() {
    tput smul
    for ((n=0; n<COLUMNS; n++)) { printf " "; }
    printf "\n"
}
preexec() {
    tput sgr0
}

(Wenn Sie ändern "\n"zu "\r", es sollte die aktuelle Zeile, unterstreicht aber das scheint nicht zu arbeiten. Ich denke , zsh die aktuelle Zeile löscht , wenn die Eingabeaufforderung drucken, das ist , was mich zu der ersten Lösung führen.)

Machen Sie Befehle (dh alles, was Sie eingeben) fett:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Mikel
quelle