繁体   English   中英

在Linux C应用程序中创建自定义键盘快捷键

[英]Creating custom keyboard shortcuts in a linux c application

我正在尝试处理键盘快捷键,我已经知道如何使用信号进行操作,但是问题是信号列表没有太多选择。 所以我想知道是否有可能处理诸如CTRL +'key'之类的快捷方式,并且key可以是诸如AZERTY类的任何键盘键。

这是使用GNU readline的示例。 您可以捕获键序列Ctrl + PCtrl + 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 + CCtrl + 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM