2008-09-16 9 views
2

は、それが(ICtrlキー例えば)特定のホットキーをリッスンすることは可能ですか?私のアプリケーションはC言語で書かれており、Linux上でのみ動作し、GUIはありません。この種の仕事に役立つ図書館はありますか?バイナリがLinuxのいくつかのグローバルホットキーに反応する方法はありますか?その後、特定のアクションを実行 - :

EDIT:例として、例えばあなたがアクションにキーの組み合わせをマッピングした場合ので、Amarokのは、グローバルなショートカットを持っている(のがCtrlキーを言わせから+ Ctrlキーと+)あなたにキーを押すとそのアクションを実行できます。私はCtrlキーマップする場合 - 体積増加作用に+を、私は押すたびはCTRL-+量が一定量だけ増やす必要があります。

ありがとうございました

答えて

4

あなたのホットキーはどのようにグローバルに対応する必要がありますか?彼らがXセッションのためにグローバルであれば十分ですか?その場合は、Xlib接続を開き、必要なイベントを聞くことができるはずです。

通常、Xのキーボードイベントは、現在フォーカスを持っているウィンドウに配信され、処理されるまで階層の上に伝播されます。明らかにこれは私たちが望むものではありません。他のウィンドウが表示される前にイベントを処理する必要があります。これを達成するには、ルートウィンドウでXGrabKeyとキーコードとホットキーの修飾子を使用して呼び出す必要があります。

良い例が見つかりましたhereです。

+0

詳細をお聞かせください。 – Vhaerun

0

UNIXでは、コマンドラインシェルへのアクセスは端末経由です。これは、人々が機械に直接接続された端末(例えば、シリアルケーブル)を介して文字通り大きな共有コンピュータにアクセスした時代にまでさかのぼる。

実際に、UNIXのボックスで使用する 'xterm'プログラムまたはその派生語は、端末エミュレータとよく呼ばれています。これは、(あなたの視点とオペレーティングシステムの両方から)それらの昔ながらの端末装置の1つ。

これは、さまざまな種類の端末があり、UNIXシステムが各種類の機能について知っておく必要があるため、興味深い方法で入力を処理するのが少し複雑です。これらの機能は伝統的にはtermcapファイルに格納されていましたが、最近のシステムではterminfoを代わりに使用していると思います。詳細については、

man 5 terminfo 

を入力してください。

ここで、入力機能やウィンドウ機能を使って面白いことを行うコマンドラインアプリケーションを使用するために、端末機能などを混乱させる必要はありません。ライブラリがありますcurses、それが役立ちます。ルックアップ

man 3 ncurses 

Linuxシステムの詳細あなたはたぶん、cursesをオンラインで使用する上で適切なチュートリアルを見つけることができます。

1

アプリケーションを特定のポートまたはソケットファイルで受信要求に対してリッスンさせる方法の1つです。

次に、そのポートまたはソケットファイルに接続し、実行中のアプリケーションにコマンドを送信する小さなクライアントアプリケーションを作成できます。

次に、小さなクライアントアプリケーションを起動するために特定のキーの組み合わせをバインドするようにウィンドウマネージャを設定できます。

+0

私はそれを考えましたが、amarokや他のアプリケーションがそれを行うことができるので、私がそれをやる方法もなければなりません。 – Vhaerun

3

私はsmoofraが正しい軌道にあると思います。 Xでグローバルホットキーを登録しようとしているので、キー押下を傍受して適切な処置をとることができます。 Xlibはおそらくあなたが望むもので、XGrabKeyが関数だと思います。

私は恐れがあります。役に立つと思われるこの例を見つけました:TinyWM。私はまた、exampleがJava/JNI(同じ基礎となるXlib関数にアクセスする)を使用していることを発見しました。

2

xbindkeysのソースコードを見てください。

Xlibのプログラミングは非常に難解で、ドキュメントは見つけにくく、微妙な移植性の問題があります。バトル強化コードをコピーする方が良いでしょう。