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





Насколько глобальными должны быть ваши горячие клавиши? Достаточно ли им быть глобальными для X-сессии? В этом случае вы сможете открыть соединение Xlib и прослушивать нужные события.
Обычно события клавиатуры в X доставляются в окно, которое в данный момент находится в фокусе, и распространяются вверх по иерархии, пока не будут обработаны. Ясно, что это не то, что мы хотим. Нам нужно обработать событие, прежде чем любое другое окно сможет к нему добраться. Для этого нам нужно вызвать XGrabKey в корневом окне с кодом клавиши и модификаторами нашей горячей клавиши.
Нашел хороший пример здесь.
В UNIX доступ к оболочке командной строки осуществляется через Терминал. Это восходит к тем временам, когда люди получали доступ к своим большим общим компьютерам буквально через терминалы, подключенные непосредственно к машинам (например, с помощью последовательного кабеля).
Фактически, программа 'xterm' или любая производная программа, которую вы используете в своем UNIX-компьютере, правильно называется эмулятор терминала - она ведет себя (как с вашей точки зрения, так и с точки зрения операционной системы) во многом как один из этих старомодных терминалов. машины.
Это немного усложняет обработку ввода интересными способами, поскольку существует множество различных типов терминалов, и ваша система UNIX должна знать о возможностях каждого из них. Эти возможности традиционно хранились в файле termcap, и я думаю, что более современные системы вместо этого используют terminfo. Пытаться
man 5 terminfo
в системе Linux для получения дополнительной информации.
Итак, хорошая новость заключается в том, что вам не нужно слишком много возиться с возможностями терминала и т. д., Чтобы иметь приложение командной строки, которое делает интересные вещи с функциями ввода или работы с окнами. Есть библиотека проклятия, которая поможет. Искать
man 3 ncurses
в вашей системе Linux для получения дополнительной информации. Вероятно, вы сможете найти в Интернете достойное руководство по использованию проклятий.
Один из способов сделать это - заставить ваше приложение прослушивать определенный порт или файл сокета для входящих запросов.
Затем вы можете написать небольшое клиентское приложение, которое подключается к этому порту или файлу сокета и отправляет команды запущенному приложению.
Затем вы можете настроить свой оконный менеджер для привязки определенных комбинаций клавиш для запуска небольшого клиентского приложения.
Я подумал об этом, но поскольку amarok и другие приложения могут это делать, у меня тоже должен быть способ сделать это.
Я думаю, что здесь Smoofra находится на правильном пути; вы хотите зарегистрировать глобальную горячую клавишу с помощью X, чтобы вы могли перехватывать нажатия клавиш и предпринимать соответствующие действия. Я думаю, что Xlib - это то, что вам нужно, а XGrabKey - это функция.
Боюсь, этому непросто научиться; Я нашел этот пример, который кажется мне полезным: TinyWM. Я также нашел пример с использованием Java / JNI (доступ к той же базовой функции Xlib).
Вам следует посмотреть исходный код xbindkeys.
Программирование на Xlib довольно загадочно, трудно найти документацию, и есть тонкие проблемы с переносимостью. Лучше скопировать закаленный в боях код.
Не могли бы вы немного поподробнее?