是否可以侦听某个热键(例如: Ctrl - I )然后执行特定操作?我的应用程序是用C语言编写的,只能在Linux上运行,而且它没有GUI。是否有任何图书馆可以帮助完成这类任务?
编辑:作为一个例子,amarok有全局快捷方式,例如,如果你将一组键映射到一个动作(假设 Ctrl - + , Ctrl 和 + )您可以在按键时执行该操作。如果我将 Ctrl - + 映射到音量增加动作,每次按 ctrl - + 音量应增加一定量。
由于
答案 0 :(得分:4)
您的热键需要全球化吗?它们足以让它成为X会话的全球性吗?在这种情况下,您应该能够打开Xlib连接并监听所需的事件。
通常,X中的键盘事件被传递到当前具有焦点的窗口,并在层次结构中向上传播直到它们被处理。显然,这不是我们想要的。我们需要在任何其他窗口到达之前处理该事件。我们需要使用热键的键码和修饰符在根窗口上调用XGrabKey来完成此操作。
我找到了一个很好的例子here。
答案 1 :(得分:3)
我认为smoofra在这里正确;您正在寻找使用X注册全局热键,以便您可以拦截按键并采取适当的操作。 Xlib可能就是你想要的,我认为XGrabKey就是这个功能。
这很难学,我害怕;我确实找到了这个看似有用的例子:TinyWM。我还发现了使用Java / JNI的example(访问相同的底层Xlib函数)。
答案 2 :(得分:2)
您应该查看xbindkeys的源代码。
Xlib编程非常神秘,文档很难找到,并且存在微妙的可移植性问题。你最好复制一些经过强化处理的代码。
答案 3 :(得分:1)
实现此目的的一种方法是让您的应用程序侦听某个端口或套接字文件,以获取传入请求。
然后,您可以编写一个连接到该端口或套接字文件的小型客户端应用程序,并将命令发送到正在运行的应用程序。
然后,您可以将窗口管理器配置为绑定某些组合键以启动小型客户端应用程序。
答案 4 :(得分:0)
在UNIX中,您通过终端访问命令行shell。这可以追溯到人们通过直接连接到机器的终端(例如通过串行电缆)访问大型共享计算机的日子。
事实上,'xterm'程序或你在UNIX机器上使用的任何派生物被正确地称为终端模拟器 - 它的行为(从您的角度和操作的角度来看)系统)就像那些老式的终端机器一样。
这使得以有趣的方式处理输入变得有点复杂,因为有许多不同类型的终端,并且您的UNIX系统必须知道每种类型的功能。这些功能传统上存储在 termcap 文件中,我认为更现代的系统使用 terminfo 。尝试
man 5 terminfo
在Linux系统上获取更多信息。
现在,好消息是你不需要对终端功能等进行过多的混乱,以使命令行应用程序通过输入或窗口功能执行有趣的操作。有一个图书馆,诅咒,这将有所帮助。查找
man 3 ncurses
Linux系统上的以获取更多信息。您可能会找到一个关于在线使用curses的体面教程。