Linenoise: Machen Sie Strg nach links und rechts

Erstellt am 24. Nov. 2016  ·  8Kommentare  ·  Quelle: antirez/linenoise

Diese Tastenkombinationen sind sehr nützlich, wenn Sie schnell durch eine bereits vorhandene Zeile navigieren. Gibt es einen Grund, warum sie nicht implementiert werden?

Alle 8 Kommentare

A: Dies ist kein typischer Bewegungsbefehl in POSIX / UNIX. Linenoise ist 100 % POSIX.

Es wäre jedoch einfach, dies zu Ihrer eigenen Kopie von Linenoise hinzuzufügen. Viele Leute, die Linenoise verwenden, hacken es aus dem einen oder anderen Grund. Es ist sehr einfach zu verstehen und zu modifizieren.

Hier ist ein Diagramm, das die Verwendung von Steuertasten unter Win/Unix/Emacs vergleicht: https://en.wikipedia.org/wiki/Control_key


Was ist zu tun?

In Zeile 41 in lineoise.c finden Sie eine Diskussion darüber, wie der Cursor gesteuert wird.

Auf Zeile # 768 finden Sie
static int lineoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

Wenn Sie die Bearbeitungsfunktion ändern würden, wäre dies hier in dieser Funktion.

Denken Sie auch daran, dass die mehrzeilige Bearbeitung mit dem API-Aufruf aktiviert werden muss:

LeinenoiseSetMultiLine(1);

Ich hoffe, das hilft und Happy Thanksgiving! (egal, wo du bist :-)

Bezieht sich das auf die gleiche Idee wie Nr. 64 und Nr. 92 oder etwas anderes?

Ich glaube nicht, dass sich Linenoise auf die von POSIX definierten Zeilenbearbeitungsfunktionen beschränkt (und ich konnte nicht einmal eine Quelle für bestimmte Escape-Sequenzen finden, die POSIX definiert, obwohl ich viele Informationen zu vi/emacs/readline back-word und gefunden habe Vorwärtswortsequenzen). Sie denken vielleicht daran, dass Linenoise auf eine POSIX-Umgebung angewiesen ist, aber das bedeutet nur, dass es sich von betriebssystemspezifischen Aufrufen fernhalten muss.

Vielleicht war ich unklar - mir ist bewusst, dass Strg + Links keinem Steuerzeichen entspricht (so wie Strg + A \ 01 usw. entspricht). Viele Terminal-Emulatoren erzeugen dafür jedoch eine andere Escape-Sequenz (wie \033[1;5D oder \033f ), die einige Zeilenbearbeitungsbibliotheken standardmäßig binden, um wortweise vorwärts/rückwärts zu navigieren. Zumindest gehe ich davon aus, dass dieses Problem darauf hindeutet.

Wenn Sie etwas gefunden haben, das auflistet, welche Zeilenbearbeitungs-Escape-Sequenzen POSIX (nicht) definiert, oder etwas, das besagt, dass Linenoise keine implementiert, die nicht Teil des POSIX-Standards sind, lassen Sie es mich bitte wissen Ich konnte es nicht finden.

Bearbeiten: Wenn Sie sich auf die oben verlinkte Tabelle beziehen, obwohl sich dies nicht auf POSIX bezieht, verstehe ich Ihren Standpunkt. Ich argumentiere zwar nicht speziell für Strg + Links / Rechts, aber ich denke nicht, dass eine Sequenz eine schlechte Idee ist. Außerdem ist dies keine vollständige Liste von Tastenkombinationen oder Readline-Bindungen - ich glaube, dass Readline esc-b/f (und möglicherweise andere, längere Escape-Sequenzen) standardmäßig an Back/Forward-Wort bindet, die dort nicht aufgeführt sind.

Ich denke, das Feature, das JelteF will, beinhaltet das Erweitern der Lineoise-Handles der Eingabe-Escape-Sequenzen ( hier z. B. die Sequenzen, die durch Drücken der Pfeiltasten oder Löschen generiert werden), und Sie beziehen sich auf Ausgabe-Escape-Sequenzen (z. B. Sequenzen, die an die Ausgabe gesendet werden, um den Cursor tatsächlich zu bewegen). . Ich stimme zu, dass der Umgang mit termcap den Rahmen von Linenoise sprengt, und ich schätze die Tatsache, dass Linenoise mit so wenigen Befehlen implementiert wird, wie es ist.

Vielleicht könnte @JelteF klären, was genau diese Feature-Anfrage verlangt. Ich dachte, es ginge darum, zwei zusätzliche Sequenzen in LinenoiseEdit() zu handhaben, aber ich könnte mich irren.

Nur zur Info, wenn es darum geht, ein Wort nach links/rechts zu bewegen, wenn ctrl-left oder ctrl-right gedrückt wird (mit den entsprechenden langen Escape-Sequenzen \033[5;D bzw. C , Ich habe einen Patch dafür in den OCaml-Bindungen: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@c-cube hat Recht, das habe ich gemeint. Entschuldigung, dass ich nicht früher geantwortet habe.

haha, es ist erst anderthalb Jahre her, das ist nichts in der Internetzeit. Und genau dort auch in lineoiseEdit(). Danke @c-cube :+1:

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

fatcerberus picture fatcerberus  ·  5Kommentare

denisvm picture denisvm  ·  9Kommentare

ghost picture ghost  ·  4Kommentare

ozancaglayan picture ozancaglayan  ·  21Kommentare

krux02 picture krux02  ·  8Kommentare