
Wie finde ich die Länge des Modus-Strings von readline (z. B. @
oder (cmd)
oder (ins)
), der vor der Bash-Eingabeaufforderung ausgegeben wird? Dieser Modus-String wird aktiviert durchset show-mode-in-prompt on
In .inputrc
.
Ich möchte die Länge dieser Zeichenfolge von innen bestimmen $PROMPT_COMMAND
.
Ich versuche, innerhalb der Eingabeaufforderung einige Cursorbewegungen auszuführen, tput
um auf der rechten Seite des Terminals einige Informationen auszudrucken (damit sie bei Bedarf überschrieben werden können) und dann mit dem Ausdrucken der Eingabeaufforderung auf der linken Seite fortzufahren. Dabei muss ich jedoch die Länge der Moduszeichenfolge berücksichtigen.
Wird $PROMPT_COMMAND
erneut aufgerufen und die Eingabeaufforderung erneut ausgegeben, wenn der Modus (zB) emacs-mode-string
auf vi-ins-mode-string
als Präfix geändert wird?
Antwort1
Keine wirkliche Antwort auf die Frage bezüglich der Modus-Stringlänge, aber ein Workaround:
Ich habe schließlich verwendetANSI CSI-Codesum die Position des Cursors zu speichern und wiederherzustellen. (Danke @tripleee für den Hinweis).
Ich konnte die Länge der Moduszeichenfolge immer noch nicht herausfinden, selbst als ich versuchte, die Cursorposition mithilfe verschiedener Dinge zu ermitteln PS1=$(getColumn)
, die ich basierend auf Folgendem ausprobiert habe:getColumn
- Vertikale Cursorposition abrufen
- https://stackoverflow.com/questions/2575037/wie-ermittelt-man-die-cursor-position-in-bash
Mein Workaround mit ANSI CSI-Codes finden Sie hier:als Antwort auf „Teil der Eingabeaufforderung rechtsbündig ausrichten“.
Ich bin mit der Problemumgehung ziemlich zufrieden, da ich es ohne einen einzigen Unterprozess und shellcheck
sauber geschafft habe.