私はフォーカスを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