私はフォーカスをEmacsに切り替えるスクリプトを書こうとしています。これが私が持っているものです:
#!/bin/bash
wmctrl -a 'emacs@pat-ubuntu-desktop'
1つのEmacsウィンドウ(またはEmacs用語で「フレーム」)を開いている場合は正常に動作しますが、複数のEmacsウィンドウが開いている場合は何もしません。問題は、2番目のウィンドウが開かれるとウィンドウのタイトルが変わるようです。ウィンドウが開いたら、その名前は次のようになりますemacs@pat-ubuntu-desktop
。
➜ ~ wmctrl -l
0x05c000a3 0 pat-ubuntu-desktop emacs@pat-ubuntu-desktop
ただし、2番目のウィンドウを開くと、ウィンドウのタイトルは次のように変更されます。
➜ ~ wmctrl -l
0x05c000a3 0 pat-ubuntu-desktop *scratch*
0x05c00921 0 pat-ubuntu-desktop *scratch*
編集する:次の質問はフィクションで、私のWebブラウザのタイトルに「emacs」が含まれています(最初の質問に関する情報を検索したため)。
wmctrl -a 'emacs'
もう1つの問題(関連する場合もありません)は、Emacsウィンドウが1つだけ開いていても、コマンドは機能しませんがwmctrl -a 'emacs@'
(またはwmctrl -a 'emacs@pat-ubuntu-desktop'
)機能することです。なぜ@
含めるべきですか?
答え1
ただフォーカスを切り替えたい場合は、emacsclientを使用するのはどうですか?
emacsclient --eval '(select-frame-set-input-focus (selected-frame))'
ファイルを同時に開く場合は、次のものを使用することもできます。
emacsclient -n FILE
他の理由でwmctrlを使用する必要がある場合は、emacsclientを介して、、(emacs-pid)
などをインポートしてから。(frame-parameter frame 'display)
(frame-parameter frame 'window-id)
wmctrl
また確認してください: https://github.com/tkf/emacs-wmctrl
答え2
ウィンドウタイトルの一致の信頼性が低下します。たとえば、ブラウザでこの質問を見ると、wmctrl -a 'emacs'
ブラウザがアクティブになることがあります。
以下を使用してフレームタイトル形式をカスタマイズできます。frame-title-format
。私は使用します(multiple-frames "%b" ("" invocation-name "@" system-name))
。しかし、スクリプトではこれに依存しないことをお勧めします。
wmctrl
このオプションを使用して、カテゴリ別にウィンドウを見つけることができます-x
。シンプルで信頼できます。
wmctrl -x -a Emacs
またはできますEmacsに仕事をさせる。これにより、アクティブフレームが複数ある場合に「最適な」フレームを選択する可能性が高くなります。