[英]Creating custom keyboard shortcuts in a linux c application
我正在尝试处理键盘快捷键,我已经知道如何使用信号进行操作,但是问题是信号列表没有太多选择。 所以我想知道是否有可能处理诸如CTRL +'key'之类的快捷方式,并且key
可以是诸如AZERTY
类的任何键盘键。
这是使用GNU readline
的示例。 您可以捕获键序列Ctrl + P , Ctrl + G等。
int keyPressed(int count, int key) {
printf("key pressed: %d\n",key);
rl_on_new_line();
return 0;
}
int main() {
rl_catch_signals = 0;
rl_bind_keyseq("\\C-g",keyPressed);
rl_bind_keyseq("\\C-p",keyPressed);
rl_bind_keyseq("\\C-z",keyPressed);
while(1) {
char *line = readline("rl> ");
}
对于特殊字符,例如信号字符Ctrl + C , Ctrl + Z,您将需要rl_catch_signals=0
。 这样,您可以定义自己的信号处理程序。
我发现的一件事是,即使在调用readline
之前将终端置于raw
模式,也不会调用rl_bind_keyseq("\\\\Cz",keyPressed)
。 相反,终端仍将Ctrl + Z解释为SIGTSTP
。
查看源代码,很明显,每次调用readline()
时,都会重置终端设置。
//rltty.c
#if defined (HANDLE_SIGNALS)
tiop->c_lflag &= ~ISIG;
#else
tiop->c_lflag |= ISIG;
#endif
除非您想修改readline
,否则建议为特殊字符定义信号处理程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.