2008-09-16 5 views
2

은 특정 단축키를 수신 할 수 있습니까? 내 응용 프로그램은 C로 작성되었으며 Linux에서만 실행되며 GUI가 없습니다. 이런 종류의 작업에 도움이되는 도서관이 있습니까?바이너리가 Linux의 일부 글로벌 단축키에 반응하는 방법이 있습니까? (: <kbd>Ctrl 키</kbd><kbd>-</kbd><kbd>I</kbd> 예컨대) 한 후 특정 작업을 수행

편집 : 예로서, 예를 들어 당신이 작업에 키 조합을하게되면, 그래서 아마록은 글로벌 단축키를 가지고 (의이 Ctrl 키을 가정 해 봅시다 -+, Ctrl 키와 +) 당신에게 키를 누를 때 그 동작을 실행할 수 있습니다. 내가 에게 Ctrl 키매핑 할 경우 - 볼륨 증가 액션에+, 때마다 나는 누르면 Ctrl 키를-+ 볼륨이 어느 정도 증가한다.

감사합니다.

답변

4

단축키는 얼마나 자세하게 표시해야합니까? X 세션에서 전역 적이면 충분합니까? 이 경우 Xlib 연결을 열고 필요한 이벤트를 수신 할 수 있어야합니다.

일반적으로 X의 키보드 이벤트는 현재 포커스가있는 창으로 전달되고 처리 될 때까지 계층 구조 위로 전파됩니다. 분명히 이것은 우리가 원하는 것이 아닙니다. 다른 창이 나타나기 전에 이벤트를 처리해야합니다. 이 작업을 수행하려면 루트 윈도우에서 XGrabKey을 단축키의 키 코드와 수정 자로 호출해야합니다.

나는 좋은 예를 발견했다 here.

+0

조금 자세하게 설명해 주시겠습니까? – Vhaerun

0

UNIX에서 명령 줄 셸에 대한 액세스는 터미널을 통해 이루어집니다. 이것은 사람들이 기계에 직접 연결된 터미널 (예 : 직렬 케이블)을 통해 문자 그대로 큰 공유 컴퓨터에 액세스 한 날로 거슬러 올라갑니다.

는 사실, 'xterm을'프로그램 또는 UNIX 상자의 파생 무엇이든 사용이 적절하게 터미널 에뮬레이터라고 - 훨씬처럼 (당신의 관점과 운영 체제의 모두에서) 동작 그 구식 터미널 기계 중 하나.

다른 종류의 터미널이 많고 유닉스 시스템이 각 종류의 기능을 알아야하기 때문에 흥미로운 방식으로 입력을 처리하는 것이 약간 복잡합니다. 이러한 기능은 전통적으로 termcap 파일에 저장되어 있었고, 더 현대적인 시스템에서는 terminfo을 대신 사용한다고 생각합니다. 자세한 내용은

man 5 terminfo 

을 사용해보십시오.

이제 좋은 점은 터미널 기능 등으로 입력 또는 창 기능과 관련된 흥미로운 작업을 수행하는 명령 줄 응용 프로그램을 너무 많이 사용하지 않아도된다는 것입니다. 도서관이 있으니 저주, 도움이 될 것입니다.조회 자세한 내용은 Linux 시스템에서

man 3 ncurses 

자세한 내용은 Linux 시스템에서 참조하십시오. curses를 온라인에서 사용하는 방법에 대한 자습서를 찾을 수있을 것입니다.

1

수신하는 요청에 대해 응용 프로그램이 특정 포트 또는 소켓 파일에서 수신 대기하도록하는 한 가지 방법이 있습니다.

그러면 해당 포트 또는 소켓 파일에 연결하고 실행중인 응용 프로그램에 명령을 보내는 작은 클라이언트 응용 프로그램을 작성할 수 있습니다.

그런 다음 특정 키 조합을 바인드하여 소규모 클라이언트 응용 프로그램을 실행하도록 창 관리자를 구성 할 수 있습니다.

+0

나는 그것을 고려했다. 그러나 amarok와 다른 어플리케이션들이 그것을 할 수 있기 때문에, 나 역시 그것을 할 수있는 방법이 있어야한다. – Vhaerun

3

smoofra은 여기 오른쪽 경로에 있습니다. X 키로 글로벌 단축키를 등록하면 키 누르기를 가로 챌 수 있고 적절한 조치를 취할 수 있습니다. Xlib은 아마도 당신이 원하는 것이며, XGrabKey이 함수라고 생각합니다.

배우기가 쉽지 않은데, 두려워요. 유용하게 보이는이 예제를 찾았습니다 : TinyWM. 나는 또한 example (동일한 기본 Xlib 함수에 액세스)을 사용하여 Java/JNI를 찾았습니다.

2

xbindkeys의 소스 코드를 살펴 봐야합니다.

프로그래밍은 매우 정교하고 문서를 찾기가 쉽지 않으며 미묘한 이식성 문제가 있습니다. 전투 강화 코드를 복사하는 것이 좋습니다.