Linenoise: Faire ctrl gauche et droite

Créé le 24 nov. 2016  ·  8Commentaires  ·  Source: antirez/linenoise

Ces raccourcis clavier sont très utiles pour naviguer rapidement dans une ligne déjà existante. Y a-t-il une raison pour laquelle ils ne sont pas mis en œuvre ?

Tous les 8 commentaires

R : Il ne s'agit pas d'une commande de mouvement typique sous POSIX/UNIX. Linenoise est 100% POSIX.

Cependant, il serait facile de l'ajouter à votre propre copie de Linenoise. Beaucoup de gens qui utilisent Linenoise le piratent pour une raison ou une autre. Il est très facile à comprendre et à moduler.

Voici un tableau qui compare l'utilisation de la clé de contrôle sur Win/Unix/Emacs : https://en.wikipedia.org/wiki/Control_key


Ce qu'il faut faire?

à la ligne # 41 dans linenoise.c, vous trouverez une discussion sur la façon dont le curseur est contrôlé.

Sur la ligne # 768 vous trouverez
static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

Si vous deviez modifier la fonctionnalité d'édition, ce serait ici dans cette fonction.

N'oubliez pas non plus que l'édition multiligne doit être activée avec l'appel d'API :

linoiseEnsembleMultiLigne(1);

J'espère que cela aide et joyeux Thanksgiving ! (peu importe où vous êtes :-)

Est-ce que cela fait référence à la même idée que #64 et #92, ou autre chose ?

Je ne pense pas que Linenoise se limite aux fonctionnalités d'édition de ligne définies par POSIX (et je n'ai même pas pu trouver de source de séquences d'échappement spécifiques définies par POSIX, bien que j'ai trouvé beaucoup d'informations sur vi/emacs/readline back-word et séquences de mots en avant). Vous pensez peut-être au fait que linenoise s'appuie sur un environnement POSIX, mais cela signifie seulement qu'il doit rester à l'écart des appels spécifiques au système d'exploitation.

Peut-être que je n'étais pas clair - je suis conscient que control + left ne correspond pas à un caractère de contrôle (de la même manière que ctrl + a correspond à \ 01, etc.). Cependant, de nombreux émulateurs de terminaux produisent une séquence d'échappement différente pour cela (comme \033[1;5D ou \033f ), que certaines bibliothèques d'édition de ligne lient par défaut pour naviguer en avant/en arrière par un mot. Du moins, je suppose que c'est ce que ce problème suggère.

Si vous avez trouvé quelque chose qui répertorie les séquences d'échappement d'édition de ligne que POSIX ne définit pas, ou quelque chose qui indique que linoise n'en implémentera aucune qui ne fait pas partie de la norme POSIX, veuillez me le faire savoir, comme Je n'ai pas pu le trouver.

Edit: si vous faites référence au tableau que vous avez lié ci-dessus, bien que cela ne fasse pas référence à POSIX, je pense que je comprends votre point. Cependant, je ne plaide pas spécifiquement en faveur de ctrl + gauche / droite, mais je ne pense pas qu'une séquence soit une mauvaise idée. De plus, ce n'est pas une liste complète des combinaisons de touches ou des liaisons readline - je pense que readline lie esc-b/f (et éventuellement d'autres séquences d'échappement plus longues) à back/forward-word par défaut, qui ne sont pas répertoriés ici.

Je pense que la fonctionnalité que JelteF souhaite consiste à étendre les poignées de linoise des séquences d'échappement d'entrée ( ici , par exemple, les séquences générées en appuyant sur les touches fléchées ou supprimer), et vous faites référence aux séquences d'échappement de sortie (par exemple, les séquences envoyées à la sortie pour réellement déplacer le curseur) . Je suis d'accord que traiter avec termcap dépasse le cadre de linenoise, et j'apprécie le fait que linenoise soit implémenté avec aussi peu de commandes qu'il l'est.

Peut-être que @JelteF pourrait clarifier ce que demande exactement cette demande de fonctionnalité. Je pensais qu'il s'agissait de gérer deux séquences supplémentaires dans linenoiseEdit(), mais je peux me tromper.

Juste pour info, s'il s'agit de déplacer un mot vers la gauche/droite lorsque ctrl-left ou ctrl-right est pressé (avec les longues séquences d'échappement correspondantes \033[5;D et C respectivement, J'ai un patch pour ça dans les liaisons OCaml : https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@c-cube a raison, c'est ce que je voulais dire. Désolé de ne pas avoir répondu plus tôt.

haha, ça ne fait qu'un an et demi, c'est rien à l'heure d'internet. Et là aussi dans linenoiseEdit(). Merci @c-cube :+1:

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ozancaglayan picture ozancaglayan  ·  21Commentaires

fatcerberus picture fatcerberus  ·  5Commentaires

krux02 picture krux02  ·  8Commentaires

denisvm picture denisvm  ·  9Commentaires

ghost picture ghost  ·  4Commentaires