/ / PS1 als Geister-Text? - Linux, Arch-Linux, zsh

PS1 als Geister-Text? - Linux, Arch-Linux, zsh

Wie genau würde ich davon ausgehen, den Wert von$ PS1 und das Trennzeichen zuerst mit dem Text im Hintergrund setzen? Ich habe einen Vorschlag erhalten, den Text an das Terminal auszugeben und dann len (extended_PS1) zerstörungsfreie Backspaces zu senden. (Am besten wird es auch gelöscht, wenn der Text eingegeben wurde, und es wird möglicherweise sogar angezeigt, wenn die Eingabeaufforderung gelöscht wurde.)

Antworten:

3 fĂĽr Antwort â„– 1

Sie könnten (falsch-) verwenden RPROMPT anstatt PROMPT (aka PS1), um dies zu erreichen, oder zumindest etwas Ähnliches

RPROMPT wird rechtsbündig in derselben Zeile wie die Eingabeaufforderung angezeigt. Wenn Ihr eingegebener Befehl lang genug ist, um ihn zu erreichen, RPROMPT wird automatisch ausgeblendet (und auch wieder angezeigt, wenn Sie genug löschen).

So konnte man einstellen PROMPT nur das Eingabeaufforderungszeichen enthalten und alles andere in RPROMPT. Dann fĂĽllst du RPROMPT mit Leerzeichen, bis es den Rest der Zeile ausfĂĽllt, so dass es fast berĂĽhrt PROMPT. Beispielsweise

setopt PROMPT_SUBST
PROMPT="%# "
RPROMPT="%$((COLUMNS-4))>> %n@%m %~${(r:$COLUMNS:)}"

Dies sollte so etwas zeigen

% â–’ user@machine ~

woher â–’ ist die Position des Cursors. Sobald Sie anfangen zu tippen, wird alles ausgeblendet. Beispielsweise

% echo fooâ–’

Erläuterung:

  • setopt PROMPT_SUBST Aktiviert die Ersetzung von Parametern in der Eingabeaufforderung bei jeder Anzeige der Eingabeaufforderung.
  • RPROMPT muss in einfachen AnfĂĽhrungszeichen angegeben werden, damit die darin enthaltenen Parameter bei der Definition nicht sofort erweitert werden, sondern nur dann, wenn die Eingabeaufforderung angezeigt wird (mit PROMPT_SUBST aktiviert). Dadurch wird sichergestellt, dass die Polsterung auch dann ordnungsgemäß funktioniert, wenn die Größe des Terminalfensters geändert wird.
  • %# ist das Eingabeaufforderungszeichen: # fĂĽr root % fĂĽr alle anderen.
  • $COLUMNS ist die aktuelle Breite des Terminals.
  • %n>> schneidet alles rechts davon ab n Zeichen, Schneiden auf der rechten Seite.
  • $((COLUMNS-4)) berechnet die verbleibende Breite nach der linken Eingabeaufforderung (PROMPT). Neben den beiden Zeichen in PROMPT Sie mĂĽssen eine fĂĽr den Cursor und eine andere wegen subtrahieren RPROMPT deckt nicht die letzte Spalte einer Zeile ab. (Wenn Sie a verwenden möchten PROMPT von variabler Länge, dann mĂĽssen Sie seine Länge dynamisch berechnen.)
  • %n@%m %~ ist nur ein Beispiel und zeigt den Benutzernamen (%n), Maschinenname (%m) und aktuelles Verzeichnis (%~).
  • ${(r:$COLUMNS:)} wird auf eine Zeichenfolge mit der Breite des Terminals erweitert. Dies stellt sicher, dass immer genĂĽgend Platz zum AuffĂĽllen vorhanden ist.