¿Cómo puedo capturar “CTRL + ARROW_KEY” con PD/NCurses?
Mientras descubría que podía usar algo como #define ctrl(x) ((x) & 0x1f)
2 para la mayoría de caracteres ASCII simples (no numéricos o [obviamente] símbolos), no pude encontrar ninguna información ni documentación sobre cómo capturar CTRL + TECLAS DE FLECHA
u otras combinaciones lógicas\sanas de CTRL + MAYÚS + ch
y así sucesivamente…
La razón por la cual me preocupa esto, es porque estoy tratando de mantener un proyecto llamado unicurses
y mientras tanto, estoy haciendo una demostración prototipo de un editor basado en terminal con él, donde necesito capturar ese tipo de combinaciones de teclas y estaba buscando ayuda (tampoco me importa si la respuesta es en c\c++, python o cualquier otra cosa, solo estoy buscando una manera de hacerlo)
¿Alguna idea?
davy.ai
Como experto en TI especializado en ncurses y pdcurses, capturar combinaciones de teclas como
CTRL + ARROW_KEYS
implica establecer enlaces de teclas específicas para la combinación especificada. Las bibliotecasncurses
ypdcurses
proporcionan funciones para establecer enlaces de teclas y capturar la entrada del usuario.En C o C++, se puede utilizar la función
keypad()
para habilitar la captura de teclas especiales, y la funcióngetch()
para leer la entrada del usuario. Por ejemplo, si quisiera capturarCTRL + UP_ARROW
, podría usar el siguiente código:La macro
ctrl()
se utiliza para generar el código de tecla CTRL para un carácter dado, en este casok
(que corresponde al código ASCII107
). La constanteKEY_UP
representa la tecla de flecha hacia arriba. La funcióndefine_key()
se utiliza para asociar el enlace de tecla con la cadena de entrada especificada. En este ejemplo, estamos utilizando la cadena"^k\x1b[A"
, que corresponde a la combinación de teclasCTRL + UP_ARROW
.El mismo enfoque se puede utilizar para otras combinaciones de teclas, como
CTRL + SHIFT + ch
. Simplemente tendría que generar el código de tecla adecuado para el modificadorCTRL + SHIFT
(por ejemplo,ctrl('[')
), y combinarlo con el código de tecla para el carácter deseado (por ejemplo,KEY_F1
).En Python, se puede utilizar el módulo
curses
para lograr el mismo resultado. El módulocurses
proporciona funciones para establecer enlaces de teclas y capturar la entrada del teclado. Aquí hay un ejemplo:En este ejemplo, se utiliza la función
ord()
para obtener el código ASCII para el carácterk
, y la constantecurses.KEY_UP
se utiliza para representar la tecla de flecha hacia arriba. La funcióncurses.define_key()
se utiliza para asociar el enlace de tecla con la cadena de entrada especificada, y la funciónscreen.getch()
se utiliza para leer la entrada del usuario.En general, capturar combinaciones de teclas en ncurses y pdcurses implica establecer enlaces de teclas específicas utilizando funciones de librería y verificar la combinación de teclas en el código. Con un poco de experimentación, debería poder averiguar los códigos de tecla y cadenas de entrada adecuados para cualquier combinación de teclas que desee capturar.