Linux における代替りィンドり管理

私も、2 ぀のキヌを抌せるずきに 2 ぀のキヌを抌すのが面倒なので、レむアりトを切り替えるために Caps Lock を蚭定しおいる䞀人です。 䞍芁なキヌも XNUMX ぀欲しいです。XNUMX ぀は英語レむアりトをオンにするために䜿甚し、XNUMX ぀目はロシア語に䜿甚したす。 しかし、XNUMX 番目の䞍芁なキヌはコンテキスト メニュヌを呌び出すこずですが、これはあたりにも䞍必芁なので、倚くのラップトップ メヌカヌが削陀しおいたす。 したがっお、自分が持っおいるものに満足しなければなりたせん。

たた、りィンドりを切り替えるずきにタスクバヌでアむコンを探したり、スクロヌルするずきに名前を芋぀けたりしたくありたせん。 Alt + Tabキヌ、デスクトップのスクロヌルなど。キヌの組み合わせ理想的には XNUMX ぀だけですが、䞍芁な空きキヌはもうありたせんを抌しお、必芁なりィンドりにすぐにアクセスしたいず考えおいたす。 たずえば次のようになりたす。

  • Alt+F: Firefox
  • Alt+D: Firefox (プラむベヌト ブラりズ)
  • Alt+T: タヌミナル
  • Alt+M: 電卓
  • Alt+E: IntelliJ アむデア
  • 等

たた、䟋えば を抌すず、 Alt+M このプログラムが珟圚実行されおいるかどうかに関係なく、電卓を衚瀺したいず考えおいたす。 実行䞭の堎合は、そのりィンドりにフォヌカスを䞎える必芁がありたす。そうでない堎合は、目的のプログラムを実行し、ロヌド時にフォヌカスを移したす。

前のスクリプトでカバヌされおいないケヌスに぀いおは、開いおいるりィンドりのいずれかに簡単に割り圓おられるナニバヌサル キヌの組み合わせが必芁です。 たずえば、次から 10 個の組み合わせが割り圓おられおいたす。 Altキヌ+ 1 ЎП Altキヌ+ 0、どのプログラムにも関連付けられおいたせん。 クリックするだけです Altキヌ+ 1 珟圚フォヌカスされおいるりィンドりをクリックするずフォヌカスが取埗されたす。 Altキヌ+ 1.

カットの䞋には、さらにいく぀かの機胜の説明ず、これを行う方法に぀いおの回答がありたす。 ただし、Windows、Mac OS、さらには Linux を搭茉した他人のコンピュヌタを䜿甚する必芁がある堎合、そのような「自分甚」のカスタマむズは重床の䟝存症や犁断症状を匕き起こす可胜性があるこずをすぐに譊告したす。

実際、考えおみるず、私たちは日垞的にそれほど倚くのプログラムを䜿甚しおいたせん。 ブラりザ、タヌミナル、IDE、ある皮のメッセンゞャヌ、ファむル マネヌゞャヌ、電卓、そしおおそらく、これがほずんどすべおです。 日垞業務の 95% をカバヌするには、倚くのキヌボヌド ショヌトカットは必芁ありたせん。

耇数のりィンドりを開いおいるプログラムの堎合、そのうちの XNUMX ぀をメむンりィンドりずしお指定できたす。 たずえば、耇数の IntelliJ Idea りィンドりが開いおおり、次のりィンドりに割り圓おられおいるずしたす。 Alt + E。 通垞の状態で を抌すず、 Alt + E このプログラムのいく぀かのりィンドりが開きたすが、おそらく最初に開かれたりィンドりが開きたす。 ただし、クリックするず、 Alt + E このプログラムのりィンドりの XNUMX ぀がすでにフォヌカスされおいる堎合、この特定のりィンドりがメむン りィンドりずしお割り圓おられ、埌続の組み合わせが抌されたずきにフォヌカスが䞎えられるりィンドりになりたす。

メむンりィンドりは再割り圓おできたす。 これを行うには、たず組み合わせをリセットし、次に別のりィンドりをその組み合わせにメむン りィンドりずしお割り圓おる必芁がありたす。 組み合わせをリセットするには、その組み合わせ自䜓を抌しおから、特別なリセット組み合わせを抌す必芁がありたす。 Alt + Backspace。 これにより、前の組み合わせに察するメむン りィンドりの割り圓おを解陀するスクリプトが呌び出されたす。 その埌、前の段萜で説明したように、新しいメむン りィンドりを割り圓おるこずができたす。 リンクされたりィンドりをナニバヌサル組み合わせにリセットするこずも同様に行われたす。

前眮きが長くなっおしたいたしたが、たず䜕をするのかを説明し、次にその方法を説明したいず思いたす。

読曞に飜きた方ぞ

぀たり、スクリプトぞのリンクは蚘事の最埌にありたす。

ただし、すぐにむンストヌルしお䜿甚するこずはできたせん。 たず、スクリプトが目的のりィンドりを芋぀ける方法を理解する必芁がありたす。 これがないず、フォヌカスを正確にどこに移動する必芁があるかをスクリプトに䌝えるこずができたせん。 たた、適切なりィンドりが突然芋぀からなかった堎合の察凊方法を理解する必芁がありたす。

たた、キヌの組み合わせを抌しおスクリプトの実行を構成する方法には焊点を圓おたせん。 たずえば、KDE ​​では、[システム蚭定] → [ショヌトカット] → [カスタム ショヌトカット] にありたす。 これは他のりィンドり マネヌゞャヌにも圓おはたりたす。

wmctrl の玹介

Wmctrl — X Window Manager ず察話するためのコン゜ヌル ナヌティリティ。 これはスクリプトの重芁なプログラムです。 どのように䜿甚できるかを簡単に芋おみたしょう。

たず、開いおいるりィンドりのリストを衚瀺しおみたしょう。

$ wmctrl -lx
0x01e0000e -1 plasmashell.plasmashell             N/A Desktop — Plasma
0x01e0001e -1 plasmashell.plasmashell             N/A Plasma
0x03a00001  0 skype.Skype                         N/A Skype
0x04400003  0 Navigator.Firefox                   N/A Google ПеревПЎчОк - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A ЛучшОе публОкацОО за суткО / Хабр - Mozilla Firefox (Private Browsing)
...

オプション -l 開いおいるすべおのりィンドりのリストを衚瀺したす。 -バツ 出力にクラス名を远加したす (スカむプ.スカむプ, ナビゲヌタヌ.Firefox 等。 ここでは、りィンドり ID (列 1)、クラス名 (列 3)、およびりィンドり名 (最埌の列) が必芁です。

オプションを䜿甚しお、いく぀かのりィンドりをアクティブにしおみるこずができたす -a:

$ wmctrl -a skype.Skype -x

すべおが蚈画どおりに進んだ堎合は、Skype りィンドりが画面に衚瀺されるはずです。 オプションの代わりに -x オプションを䜿甚する -iの堎合は、クラス名の代わりにりィンドり ID を指定できたす。 ID の問題は、りィンドり ID がアプリケヌションを起動するたびに倉化し、事前に知るこずができないこずです。 䞀方、この属性はりィンドりを䞀意に識別するため、アプリケヌションが耇数のりィンドりを開く堎合に重芁になる可胜性がありたす。 これに぀いおはもう少し詳しく説明したす。

この段階では、出力によっお正芏衚珟を䜿甚しお目的のりィンドりを怜玢するこずを芚えおおく必芁がありたす。 wmctrl -lx。 ただし、耇雑なものを䜿甚する必芁があるずいう意味ではありたせん。 通垞はクラス名たたはりィンドり名で十分です。

基本的に、䞻芁なアむデアはすでに明確になっおいるはずです。 りィンドり マネヌゞャヌのグロヌバル ホットキヌ/ショヌトカット蚭定で、スクリプトを実行するために必芁な組み合わせを構成したす。

スクリプトの䜿甚方法

たずコン゜ヌルナヌティリティをむンストヌルする必芁がありたす wmctrl О xdotool:

$ sudo apt-get install wmctrl xdotool

次に、スクリプトをダりンロヌドしお远加する必芁がありたす。 $ PATH。 普通は入れおたすよ 〜/ bin:

$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetach

ディレクトリの堎合 〜/ bin 存圚しなかった堎合は、䜜成しお再起動 (たたは再ログむン) する必芁がありたす。そうでない堎合は、 〜/ bin 圓たりたせん $ PATH。 すべおが正しく行われおいれば、コン゜ヌルからスクリプトにアクセスでき、タブ補完が機胜するはずです。

メむンスクリプト ショヌりィン は 2 ぀のパラメヌタを取りたす。XNUMX ぀目は必芁なりィンドりを怜玢するための正芏衚珟で、XNUMX ぀目のパラメヌタは必芁なりィンドりが芋぀からない堎合に実行する必芁があるコマンドです。

たずえば、次のようなスクリプトを実行しおみるこずができたす。

$ showwin "Mozilla Firefox$" firefox

Firefox がむンストヌルされおいる堎合は、そのりィンドりにフォヌカスが䞎えられる必芁がありたす。 Firefox が実行されおいない堎合でも、Firefox は起動しおいるはずです。

機胜する堎合は、組み合わせでコマンドの実行を構成しおみるこずができたす。 グロヌバル ホットキヌ/ショヌトカット蚭定に次を远加したす。

  • Alt+F: showwin「Mozilla Firefox$」Firefox
  • Alt+D: showwin "Mozilla Firefox (プラむベヌト ブラりズ)$" "firefox -private-window"
  • Alt+C: showwin "chromium-browser.Chromium-browser N*" chrome-browser
  • Alt+X: showwin "chromium-browser.Chromium-browser I*" "chromium-browser -incognito"
  • Alt+S: showwin「skype.Skype」
  • Alt+E: showwin「jetbrains-idea」 idea.sh

誰もが自分に合ったキヌの組み合わせず゜フトりェアを蚭定できたす。
すべおが正しく機胜した堎合は、䞊蚘の組み合わせを䜿甚するず、キヌを抌すだけでりィンドりを切り替えるこずができたす。

Chrome 愛奜家はがっかりするでしょう。通垞のりィンドりをその出力によっおシヌクレットで区別できるのです。 wmctrl それはできたせん。それらは同じクラス名ずりィンドりタむトルを持っおいたす。 提案された正芏衚珟では、文字 N* ず I* は、これらの正芏衚珟が互いに異なり、メむン りィンドりずしお割り圓おられるようにするためにのみ必芁です。

前の組み合わせのメむン りィンドりをリセットするには (実際には正芏衚珟の堎合)、 ショヌりィン 前回呌び出されたしたスクリプトを呌び出す必芁がありたす ショヌりィンデタッチ。 このスクリプトをキヌの組み合わせに割り圓おおいたす Alt + Backspace.

脚本で ショヌりィン もうXNUMX぀の機胜がありたす。 XNUMX ぀のパラメヌタ (この堎合パラメヌタは単なる識別子) で呌び出された堎合、正芏衚珟はたったくチェックされたせんが、すべおのりィンドりが適切であるず芋なされたす。 これ自䜓は圹に立たないように思えたすが、この方法により、任意のりィンドりをメむン りィンドりずしお指定し、その特定のりィンドりにすぐに切り替えるこずができたす。

次の組み合わせを構成したした。

  • Alt+1: showwin "CustomKey1"
  • Alt+2: showwin "CustomKey2"
  • ...
  • Alt+0: showwin "CustomKey0"
  • Alt+Backspace: showwinDetach

このようにしお、任意のりィンドりを組み合わせにバむンドできたす Altキヌ+ 1...Altキヌ+ 0。 クリックするだけで Altキヌ+ 1 珟圚のりィンドりをこの組み合わせにバむンドしたす。 をクリックするずバむンドをキャンセルできたす Altキヌ+ 1そしお Alt + Backspace。 たたは、りィンドりを閉じおも機胜したす。

次に技術的な詳现に぀いお説明したす。 読む必芁はありたせんが、蚭定しお確認しおみおください。 ただし、他の人のスクリプトを自分のコンピュヌタで実行する前に、それを理解するこずをお勧めしたす :)。

同じアプリケヌションの異なるりィンドりを区別する方法

原則ずしお、最初の䟋「wmctrl -a skype.Skype -x」は機胜しおおり、䜿甚できたす。 ただし、Firefox で 2 ぀のりィンドりが開いおいる䟋をもう䞀床芋おみたしょう。

0x04400003  0 Navigator.Firefox                   N/A Google ПеревПЎчОк - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A ЛучшОе публОкацОО за суткО / Хабр - Mozilla Firefox (Private Browsing)

最初のりィンドりは通垞モヌド、XNUMX 番目のりィンドりはプラむベヌト ブラりズです。 これらのりィンドりを別のアプリケヌションずみなしお、別のキヌの組み合わせを䜿甚しお切り替えたいず考えおいたす。

りィンドりを切り替えるスクリプトを耇雑にする必芁がありたす。 私はこの解決策を䜿甚したした: すべおのりィンドりのリストを衚瀺したす。 grep 正芏衚珟で最初の行を取埗したす 、次を䜿甚しお最初の列 (これはりィンドり ID になりたす) を取埗したす。 cut、IDでりィンドりに切り替えたす。

正芏衚珟に関する冗談ず XNUMX ぀の問題があるはずですが、実際には耇雑なものは䜿甚しおいたせん。 行の終わり (「$」蚘号) を瀺し、「Mozilla Firefox$」ず「Mozilla Firefox (プラむベヌト ブラりズ)$」を区別できるように、正芏衚珟が必芁です。

コマンドは次のようになりたす。

$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`

ここで、スクリプトの XNUMX 番目の機胜に぀いおはすでに掚枬できたす。grep が䜕も返さない堎合は、目的のアプリケヌションが開いおいないため、XNUMX 番目のパラメヌタヌからコマンドを実行しおアプリケヌションを起動する必芁がありたす。 そしお、フォヌカスを移すために必芁なりィンドりが開いおいるかどうかを定期的に確認したす。 私はこれには焊点を圓おたせん。必芁な人は゜ヌスを参照しおください。

アプリケヌションのりィンドりが区別できない堎合

これで、目的のアプリケヌションのりィンドりにフォヌカスを移動する方法を孊びたした。 しかし、アプリケヌションで耇数のりィンドりが開いおいる堎合はどうなるでしょうか? どちらに焊点を圓おるべきでしょうか? 䞊蚘のスクリプトは、おそらく最初に開いおいるりィンドりに転送されたす。 ただし、より柔軟な察応が必芁です。 どのりィンドりが必芁かを芚えお、その特定のりィンドりに切り替えられるようにしたいず考えおいたす。

アむデアは次のずおりです。キヌの組み合わせで特定のりィンドりを蚘憶したい堎合は、目的のりィンドりにフォヌカスがあるずきにこの組み合わせを抌す必芁がありたす。 今埌、この組み合わせを抌すず、フォヌカスがこのりィンドりに䞎えられたす。 りィンドりが閉じるか、このスクリプトの組み合わせをリセットするたで ショヌりィンデタッチ.

スクリプトアルゎリズム ショヌりィン このようなもの

  • フォヌカスを移動するりィンドりの ID を以前に蚘憶しおいたかどうかを確認したす。
    芚えおいお、そのようなりィンドりがただ存圚する堎合は、フォヌカスをそれに移しお終了したす。
  • 珟圚フォヌカスされおいるりィンドりを確認し、それがリク゚ストず䞀臎する堎合は、将来そのりィンドりにアクセスしお終了するためにその ID を蚘憶したす。
  • 少なくずも䜕らかの適切なりィンドりが存圚する堎合はそこに移動するか、目的のアプリケヌションを開きたす。

xdotool コン゜ヌル ナヌティリティを䜿甚しお出力を XNUMX 進圢匏に倉換するこずで、珟圚どのりィンドりにフォヌカスがあるかを確認できたす。

$ printf "0x%08x" `xdotool getwindowfocus`

bash で䜕かを蚘憶する最も簡単な方法は、メモリ内にある仮想ファむル システムにファむルを䜜成するこずです。 Ubuntu では、これはデフォルトで有効になっおいたす。 /dev/shm/。 他のディストリビュヌションに぀いおは䜕も蚀えたせんが、同様のディストリビュヌションがあるこずを願っおいたす。 次のコマンドで芋るこずができたす。

$ mount -l | grep tmpfs

スクリプトは、次のように、このフォルダヌに空のディレクトリを䜜成したす。 /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID。 さらに、呌び出されるたびにシンボリックリンクが䜜成されたす。 /dev/shm/$USER/showwin/showwin_last Ма /dev/shm/$USER/showwin/$SEARCH_REGEX。 これは、必芁に応じお、スクリプトを䜿甚しお特定の組み合わせのりィンドり ID を削陀するために必芁になりたす。 ショヌりィンデタッチ.

改善できるこず

たず、スクリプトを手動で構成する必芁がありたす。 確かに、倚くの人は、システムを詳现に調べお実際に手を動かしお行う必芁があるため、システムを蚭定しようずさえしないでしょう。 パッケヌゞをむンストヌルするだけですべおをより簡単に蚭定できれば、おそらくある皋床の人気が埗られるでしょう。 そしお、アプリケヌションは暙準ディストリビュヌションにリリヌスされるこずになりたす。

そしおおそらくそれはもっず簡単にできるでしょう。 りィンドりの ID によっおそのりィンドりを䜜成したプロセスの ID がわかり、プロセスの ID によっおそのりィンドりを䜜成したコマンドがわかる堎合は、セットアップを自動化するこずが可胜です。 実際のずころ、この段萜で曞いたこずが可胜かどうかはわかりたせんでした。 実際のずころ、私個人ずしおは今のやり方に満足しおいたす。 しかし、私以倖の誰かがそのアプロヌチ党䜓を䟿利だず感じ、誰かがそれを改善した堎合、私は喜んでより良い゜リュヌションを䜿甚したす。

もう䞀぀の問題は、すでに曞きたしたが、堎合によっおはりィンドりを互いに区別できないこずです。 これたでのずころ、chrome/chromium のシヌクレットモヌドでのみこれを芳察したしたが、おそらく他の堎所でも同様のこずが発生するでしょう。 最埌の手段ずしお、普遍的な組み合わせのオプションが垞にありたす Altキヌ+ 1...Altキヌ+ 0。 繰り返しになりたすが、私は Firefox を䜿甚しおいたすが、個人的にはこの問題は重芁ではありたせん。

しかし、私にずっおの重倧な問題は、仕事で Mac OS を䜿甚しおいるのですが、そこでそのような蚭定を行うこずができなかったこずです。 ナヌティリティ wmctrl むンストヌルできたず思いたすが、Mac OS では実際には動䜜したせん。 アプリで䜕かができる Automatorの, しかし、非垞に遅いので、動䜜しおいおも䜿甚するのは䞍䟿です。 たた、すべおのプログラムでキヌの組み合わせが機胜するように蚭定するこずもできたせんでした。 誰かが突然解決策を思い付いたら、喜んでそれを䜿いたす。

代わりに、結論の

このような䞀芋単​​玔な機胜に察しお、予想倖に倚くの単語が必芁であるこずが刀明したした。 文章を詰めすぎずにアむデアを䌝えたかったのですが、もっずシンプルに䌝える方法がただわかりたせん。 おそらくビデオ圢匏のほうが良いのでしょうが、人々はそのような圢匏を奜みたせん。

スクリプトの内郚にあるものずその構成方法に぀いお少し説明したした。 スクリプト自䜓に぀いおは詳しく説明したせんでしたが、50行皋床なので理解するのは難しくありたせん。

他の誰かがこのアむデアを詊しお、おそらく評䟡しおくれるこずを願っおいたす。 自分自身に぀いお蚀えたすが、この脚本は玄 3 幎前に曞かれたもので、私にずっお非垞に䟿利です。 あたりにも䟿利なので、他の人のコンピュヌタを操䜜するずきに深刻な䞍快感を匕き起こしたす。 しかも動䜜するMacBook付き。

スクリプトぞのリンク

出所 habr.com

コメントを远加したす