XTerm-Steuersequenzen zum Rückwärts-/Vorwärtslöschen von Wörtern?

XTerm-Steuersequenzen zum Rückwärts-/Vorwärtslöschen von Wörtern?

Ich glaubeDieser Artikelsollte mir helfen, die Steuersequenz für die Rückwärts-/Vorwärtslöschung von Wörtern zu finden.

Nach meinem Verständnis würde die Steuersequenz mit beginnen, \u001b[da dies ist„der Kontrollsequenz-Einführer“(Ich habe das vondiese andere Antwort), weiß aber nicht wirklich, wie die vollständige Zeichenfolge aussehen soll.

Kontext (wie bei der anderen SO-Frage): Mein Ziel ist es, die Steuersequenz zum Löschen von Wörtern im VSCode-Terminal über eine Tastenkombination (Tastenkombination) auszugeben.

Antwort1

So etwas gibt es nicht, man sieht dasctlseqDokument enthält keine einzige Erwähnung derWortWort. Es stellt sich auch die Frage, welche Hintergrundfarbe zum Löschen verwendet werden soll und ob das, was rechts vom Wort steht, nach links verschoben werden soll oder nicht. Möglicherweise müssen Sie Wörter berücksichtigen, die am rechten Rand des Terminals umbrochen werden.

Einige Ihrer Optionen sind:

  • Senden Sie so viele BS-Zeichen, wie das zu löschende Wort Zellen enthält, gefolgt von so vielen SPC (Achtung, es wird die aktuelle Hintergrundfarbe verwendet), gefolgt von erneut so vielen BS-Zeichen (um den Cursor wieder zurück zu bewegen):

    $ printf 'foo bar\b\b\b   \b\b\b+\n'
    foo +
    

    dass man auf praktisch allen Endgeräten funktionieren sollte.

  • dasselbe, aber verwenden Sie tput cub x(wobei xdie Anzahl der Zellen ist), um den Cursor um diesen Betrag zurück zu bewegen, anstatt eine Folge von BS zu verwenden. Und Sie können verwenden, tput ech xum diese Zellen zu löschen (mit der aktuellen Hintergrundfarbe oder nicht, je nach Terminal).

    $ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n'
    foo +
    
  • anstelle von tput ech xkönnen Sie verwenden, tput elum bis zum Zeilenende zu löschen, oder tput dch xumlöschenx Zellen (und den Rest danach nach links verschieben).

( tputHier ist die Shell-Schnittstelle zur Terminfo-Datenbank. Die Idee dahinter ist, fest codierte Escape-Sequenzen zu vermeiden und das Äquivalent für Ihre Sprache zu verwenden.)

backward-kill-wordWenn ich mir die Widgets einiger Shells ansehe (die scriptsie beispielsweise verwenden, um ihre Ausgabe zu protokollieren), sehe ich, readlinedass sie BS für Bewegung und dchzum Löschen verwenden, während zshsie eine Kombination aus BS und cubund Umschreiben verwenden. tcshscheint eine absolute Spaltenpositionierung ( hba) durchzuführen und dchzum Löschen zu verwenden, ksh93 sendet einen CR und schreibt die ganze Zeile um.

Antwort2

Ich habe noch nie eine solche Sequenz gesehen. Wenn man darüber nachdenkt, ist das Löschen eines Wortes ziemlich komplex, komplexer als andere Operationen, und ich glaube nicht, dass sich eine andere Operation in irgendeiner Weise darum kümmert, was auf dem Bildschirm angezeigt wird. Was beendet beispielsweise ein Wort? '_'? '-'? '.'?

verwandte Informationen