저는 포커스를 Emacs로 전환하는 스크립트를 작성하려고 합니다. 이것이 내가 가진 것입니다:
#!/bin/bash
wmctrl -a 'emacs@pat-ubuntu-desktop'
하나의 Emacs 창(또는 Emacs 용어로 "프레임")만 열려 있으면 제대로 작동하지만 여러 Emacs 창이 열려 있으면 아무 작업도 수행하지 않습니다. 문제는 두 번째 창이 열릴 때 창 제목이 변경되는 것 같습니다. 창이 열리면 그 이름은 다음과 같습니다 emacs@pat-ubuntu-desktop
.
➜ ~ wmctrl -l
0x05c000a3 0 pat-ubuntu-desktop emacs@pat-ubuntu-desktop
하지만 두 번째 창을 열면 창 제목이 다음과 같이 변경됩니다.
➜ ~ wmctrl -l
0x05c000a3 0 pat-ubuntu-desktop *scratch*
0x05c00921 0 pat-ubuntu-desktop *scratch*
편집하다: 다음 질문은 허구이며 내 웹 브라우저의 제목에 "emacs"가 포함된 결과입니다(첫 번째 질문에 대한 정보를 검색했기 때문에).
wmctrl -a 'emacs'
또 다른 문제(관련될 수도 있고 아닐 수도 있음)는 Emacs 창이 하나만 열려 있어도 명령이 작동하지 않지만 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가 작업을 하도록 하세요. 이렇게 하면 활성 프레임이 여러 개 있을 때 "최적의" 프레임을 선택할 가능성이 더 높아집니다.