gpt4 book ai didi

在 linux c 应用程序中创建自定义键盘快捷键

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:51 25 4
gpt4 key购买 nike

我正在尝试处理键盘快捷键,我已经知道如何处理信号,但问题是信号列表没有提供很多选择。所以我想知道是否可以处理像 CTRL+'key' 这样的快捷方式key 可以是任何键盘键,例如 A Z E R T Y

最佳答案

这是一个使用 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> ");
}

对于 special characters例如信号字符,Ctrl+C,Ctrl+Z 你需要rl_catch_signals=0。这样,您就可以定义自己的信号处理程序。

我发现的一件事是 rl_bind_keyseq("\\C-z",keyPressed) 不会被调用,即使您在调用之前将终端置于 raw 模式 阅读线。相反,终端仍会将 Ctrl+Z 解释为 SIGTSTP

查看源代码,显然每次调用readline()时,终端设置都是reset。 .

//rltty.c
#if defined (HANDLE_SIGNALS)
tiop->c_lflag &= ~ISIG;
#else
tiop->c_lflag |= ISIG;
#endif

除非你想修改readline,否则我建议为特殊字符定义信号处理程序。

关于在 linux c 应用程序中创建自定义键盘快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com