Wie kann man ein Caret-C in der abgebrochenen Kommandozeile in zsh anzeigen, wie es Bash tut?

5

Wenn ich gerade dabei bin, eine Linie zu meiner bevorzugten Shell einzugeben und meine Meinung zu ändern, kann ich schnell werfen C-c und neu anfangen. Unter bash es sieht aus wie das:

user@machine:~$ rm everything^C
user@machine:~$ 

Aber weiter zsh, was ich insgesamt wirklich bevorzuge, zeigt nichts:

(~) rm -rf /
(~) 

Ja, Sie werden vielleicht sehen, warum ich diese Caret-C- oder ähnliche Meldung über die Leitung sehen möchte, damit ich nicht verstehe, welche Leitung tatsächlich ausgeführt wurde und in der Geschichte ist.

Dieses kleine Problem ist weitgehend unklar.

souser12345
quelle
Hast du versucht stty echoctl ?
wurtel
@wurtel: das hat auswirkungen auf bash aber nicht auf zsh.
souser12345
1
Du könntest das benutzen kill-whole-line Widget - standardmäßig gebunden an ^U ( C-u ) - anstatt ^C. Dadurch wird nur alles aus der aktuellen Zeile entfernt, und es bleibt nichts Verwirrendes übrig.
Adaephon
@Adaephon: Nun, das ist das aktuelle Training, wann immer ich das benutze. Ich denke, es sollte eine Möglichkeit geben, diesen Charakter zur Schau zu stellen. Oder irgendeine andere Botschaft.
souser12345

Antworten:

6

Sie können eine Falle für definieren ZEICHEN (ausgelöst durch CTRL-C ), das gedruckt wird ^C (oder jeder andere Text, den Sie möchten):

TRAPINT() {
  print -n "^C"
  return $(( 128 + $1 ))
}

Dieses Beispiel stammt aus man zshmisc. Der return Befehl hat folgenden Hintergrund:

Programme, die durch nicht erfasste Signale beendet werden, geben normalerweise den Status 128 plus die Signalnummer zurück. Daher veranlasst der [obige Code] den Handler für SIGINT, eine Nachricht zu drucken und dann den üblichen Effekt des Signals nachzuahmen.

mpy
quelle