Linenoise: Hacer ctrl izquierda y derecha

Creado en 24 nov. 2016  ·  8Comentarios  ·  Fuente: antirez/linenoise

Estos atajos de teclado son muy útiles cuando se navega rápidamente por una línea ya existente. ¿Hay alguna razón por la que no se implementen?

Todos 8 comentarios

R: Este no es un comando de movimiento típico en POSIX/UNIX. Linenoise es 100% POSIX.

Sin embargo, sería fácil agregar esto a su propia copia de linenoise. Mucha gente que usa linenoise lo piratea por una u otra razón. Es muy fácil de entender y mod.

Aquí hay un gráfico que compara el uso de la clave de control en Win/Unix/Emacs: https://en.wikipedia.org/wiki/Control_key


¿Qué hacer?

en la línea # 41 en linenoise.c encontrará una discusión sobre cómo se controla el cursor.

En la línea #768 encontrarás
static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

Si tuviera que cambiar la funcionalidad de edición, estaría aquí en esta función.

Recuerde también que la edición multilínea debe activarse con la llamada a la API:

ruido de líneaSetMultiLine(1);

Espero que esto ayude y ¡Feliz Día de Acción de Gracias! (No importa dónde estés :-)

¿Se refiere esto a la misma idea que #64 y #92, o algo más?

No creo que linenoise se limite a las funciones de edición de línea definidas por POSIX (y ni siquiera pude encontrar una fuente de secuencias de escape específicas que define POSIX, aunque encontré mucha información en vi/emacs/readline back-word y secuencias de palabras hacia adelante). Es posible que esté pensando en el hecho de que linenoise se basa en un entorno POSIX, pero eso solo significa que debe mantenerse alejado de las llamadas específicas del sistema operativo.

Tal vez no estaba claro: soy consciente de que control+left no corresponde a un carácter de control (de la forma en que ctrl+a corresponde a \01, etc.). Sin embargo, muchos emuladores de terminal producen una secuencia de escape diferente para esto (como \033[1;5D o \033f ), que algunas bibliotecas de edición de líneas vinculan de forma predeterminada para navegar hacia adelante/atrás por una palabra. Al menos, supongo que eso es lo que sugiere este problema.

Si ha encontrado algo que enumera qué secuencias de escape de edición de línea define POSIX, o algo que establece que linenoise no implementará ninguna que no sea parte del estándar POSIX, hágamelo saber, como No he podido encontrarlo.

Editar: si se refiere a la tabla que vinculó anteriormente, aunque eso no se refiere a POSIX, creo que entiendo su punto. Sin embargo, no estoy argumentando a favor de ctrl+izquierda/derecha específicamente, pero no creo que alguna secuencia sea una mala idea. Además, esa no es una lista completa de combinaciones de teclas o enlaces de línea de lectura: creo que la línea de lectura une esc-b/f (y posiblemente otras secuencias de escape más largas) para retroceder/avanzar palabra de forma predeterminada, que no se enumeran allí.

Creo que la función que JelteF quiere implica extender las secuencias de escape de entrada que manejan el ruido de línea ( aquí , por ejemplo, las secuencias generadas al presionar las teclas de flecha o eliminar), y te refieres a las secuencias de escape de salida (por ejemplo, las secuencias enviadas a la salida para realmente mover el cursor) . Estoy de acuerdo en que tratar con termcap está más allá del alcance de linenoise, y aprecio el hecho de que linenoise se implemente con tan pocos comandos como lo es.

Quizás @JelteF podría aclarar qué es exactamente lo que solicita esta solicitud de función. Pensé que se trataba de manejar dos secuencias adicionales en linenoiseEdit(), pero podría estar equivocado.

Solo para tu información, si se trata de mover una palabra hacia la izquierda/derecha cuando se presiona ctrl-left o ctrl-right (con las secuencias de escape largas correspondientes \033[5;D y C respectivamente, Tengo un parche para eso en los enlaces de OCaml: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@ c-cube tiene razón en que eso es lo que quise decir. Lo siento por no responder antes.

jaja, solo ha pasado un año y medio, eso no es nada en el tiempo de Internet. Y ahí mismo en linenoiseEdit() también. Gracias @c-cube :+1:

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

denisvm picture denisvm  ·  9Comentarios

ghost picture ghost  ·  4Comentarios

ozancaglayan picture ozancaglayan  ·  21Comentarios

fatcerberus picture fatcerberus  ·  5Comentarios

krux02 picture krux02  ·  8Comentarios