2008-09-16 4 views
2

Можно ли слушать определенную горячую клавишу (например: Ctrl-I), а затем выполнить определенное действие? Мое приложение написано на C, будет работать только в Linux, и у него нет графического интерфейса. Существуют ли библиотеки, которые помогают в решении такого рода задач?Есть ли способ, чтобы мой бинар реагировал на некоторые глобальные горячие клавиши в Linux?

EDIT: В качестве примера, Amarok имеет глобальные ярлыки, например, если вы карту сочетание клавиш для действия (скажем, Ctrl-+, Ctrl и +) вы может выполнить это действие, когда вы нажимаете клавиши. Если бы я карту Ctrl-+ на увеличение объема действия, каждый раз, когда я нажимаю Ctrl-+ объем должен увеличиться на определенную сумму.

Thanks

ответ

4

Насколько глобальны ваши горячие клавиши? Достаточно ли для них быть глобальным для X-сессии? В этом случае вы должны иметь возможность открыть соединение Xlib и прослушать нужные события.

Обычно события клавиатуры в X доставляются в окно, которое в настоящее время имеет фокус, и распространяют иерархию до тех пор, пока они не будут обработаны. Ясно, что это не то, что мы хотим. Нам нужно обработать событие, прежде чем какое-либо другое окно сможет его получить. Нам нужно позвонить XGrabKey в корневое окно с кодом и модификаторами нашей горячей клавиши, чтобы выполнить это.

Я нашел хороший пример here.

+0

Не могли бы вы подробно остановиться? – Vhaerun 2008-09-16 17:48:36

0

В UNIX ваш доступ к оболочке командной строки осуществляется через терминал . Это возвращается к тем временам, когда люди обращались к своим общим общим компьютерам буквально через терминалы, подключенные непосредственно к машинам (например, по последовательному кабелю).

В самом деле, программа «Xterm» или любой другой производной вы используете на вашем компьютере UNIX правильно называется эмулятор терминала а - он ведет себя (как от вашей точки зрения и что операционной системы) так же, как одна из тех старомодных терминальных машин.

Это затрудняет обработку ввода интересными способами, поскольку существует множество различных типов терминалов, и ваша система UNIX должна знать о возможностях каждого типа. Эти возможности традиционно хранятся в файле termcap, и я думаю, что более современные системы используют вместо этого terminfo. Задайте вопрос

man 5 terminfo 

для получения дополнительной информации.

Теперь хорошая новость заключается в том, что вам не нужно слишком много возиться с возможностями терминала и т. Д., Чтобы иметь приложение командной строки, которое делает интересные вещи с функциями ввода или окон. Там есть библиотека, curses, что поможет.Поиск

man 3 ncurses 

для вашей системы Linux для получения дополнительной информации. Вероятно, вы сможете найти достойный учебник по использованию проклятий в Интернете.

1

Один из способов сделать это, чтобы ваше приложение прослушивало определенный порт или файл сокета для входящих запросов.

Затем вы можете написать небольшое клиентское приложение, которое подключается к этому порту или файлу сокета и отправляет команды запущенному приложению.

Затем вы можете настроить диспетчер окон для привязки определенных комбинаций клавиш для запуска небольшого клиентского приложения.

+0

Я считал, что, поскольку amarok и другие приложения могут это сделать, для меня должен быть способ сделать это тоже. – Vhaerun 2008-09-16 17:52:17

3

Я думаю, smoofra находится на правильном пути здесь; вы хотите зарегистрировать глобальную горячую клавишу с X, чтобы вы могли перехватывать нажатия клавиш и предпринимать соответствующие действия. Xlib, вероятно, то, что вы хотите, и XGrabKey - это функция, я думаю.

Это нелегко узнать, я боюсь; Я нашел этот пример, который кажется полезным: TinyWM. Я также нашел example с использованием Java/JNI (доступ к той же базовой функции Xlib).

2

Вы должны посмотреть исходный код xbindkeys.

Программирование Xlib довольно загадочно, документация трудно найти, и есть тонкие проблемы с переносимостью. Вам будет лучше скопировать какой-то боевой код.

 Смежные вопросы

  • Нет связанных вопросов^_^