여러 Emacs 창에서 wmctrl 사용

여러 Emacs 창에서 wmctrl 사용

저는 포커스를 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가 작업을 하도록 하세요. 이렇게 하면 활성 프레임이 여러 개 있을 때 "최적의" 프레임을 선택할 가능성이 더 높아집니다.

관련 정보