web-dev-qa-db-ja.com

マウスイベントがターミナルを通過できるようにします

私は小さな画面のラップトップで作業しており、仕事中のようにこのマシンの複数のモニターにアクセスすることはできません。ターミナルの背後にあるブラウザで開発しているものをすべて見ることができるように、ターミナルを透明に設定しましたが、ターミナルをクリックしてブラウザと直接やり取りできるようになりたいです。

このタイプのことは経験がないので、グーグル検索以外で試したことはありません。

編集:「可能性のある重複」の質問は、基本的には、より高速なalt + tabウィンドウ切り替えを行うためのスクリプトを作成するだけなので、私の質問には答えません。 alt + tabを使用してウィンドウを切り替えるのに問題はありません。ウィンドウをまったく切り替える必要はありません。キーボードが端末と対話する間、マウスはブラウザと対話します。

2
CaldwellYSR

なぜこれが不可能なのか

あなたが尋ねるものは、本質的に不可能です。説明を簡単にするために、スタックとタイルの2種類のグラフィカルデスクトップがあります。 Unityは、デスクトップのスタックの例です。ここには、現在アクティブなウィンドウが一番上にあるウィンドウのスタック(カフェテリアトレイスタックのようなもの)があります。

マウスの動作はX11で定義されており、ウィンドウをクリックするとスタックの最上部に移動します。ウィンドウを他のウィンドウの下に保持する方法がありますが(特にwmctrlを使用)、ウィンドウをフォーカスなしでクリックせずにクリックする方法はありません。残念ながら、これを微調整することはできません。GUIの新しいレイヤーを自分で作成する場合を除き、これまでのところそのようなプロジェクトは聞いたことがありません。

あなたがそう要請した場合、私はこの質問に報奨金を置くことさえできます、しかし、私はあなたの正確な要件を満たす答えがないと確信できます。

やや回避策の

これを行うには、透明なターミナルウィンドウを最小サイズに設定し、「常に上」として設定し、ウィンドウ自体の周囲の*何かをクリックします。

enter image description here このスクリーンショットでは、これに対する2つのアプローチを見ることができます。1つは、ウィンドウの境界をデフォルトで右クリックする方法と、wmctrlコマンドを使用する方法です。最後のものは、これへのスクリプトのアプローチを可能にすることができますが、基本的な前提は同じです-ターミナル自体の周りのものをクリックする必要があります。

可能な代替案

  • Guakeなどのドロップダウンターミナルがあります。 F12キーにリンクされたドロップダウンターミナルを使用できます。ウィンドウは上部に位置を保持し、その周囲の何かをクリックできます
  • 端末と希望する他のウィンドウで分割画面を使用します 一緒にリンク

Guakeの例

enter image description here

8

反問:

このための「すぐに使える」ソリューションが必要ですか、それとも独自のCプログラムを作成する予定ですか。

「すぐに使用できる」ソリューションが必要な場合は、何も見つからないと思います。このようなプログラムを必要とする人はほとんどいないため、これまでにこのようなプログラムを実装した人はいないと思います。

このようなプログラムを自分で作成する場合は、次のことを試みます。

100%の透過性を持つ大きなウィンドウ(画面全体をカバーする)を備えたプログラムを作成します。 (残念ながら、私は透明性を扱ったことがないので、これが本当に機能するかどうかはわかりません。)

これには低レベルX11ライブラリ(libX11)を使用し、高レベルAPI(Gnomeなど)は使用しません。

このウィンドウは前面にあるため、すべてのキーボードとマウスの情報を受け取ります。

XSendEvent()APIを使用して、コンソールおよびブラウザーでキーボードおよびマウスイベントをエミュレートします...

残念ながら、これは思ったほど簡単ではありません。特に、ブラウザでマウスイベントをエミュレートするのは簡単ではありません!

1
Martin Rosenau