포커스가 수신되면 클라이언트를 상승시키는 신호 : 다른 모니터). 텍스트 파일을 emacsclient열면 성공적으로

내 Emacs workerserver-start시작된 태그 에서 실행 중입니다. 다른 곳에서 파일 관리자를 열었습니다 (예 : 다른 모니터). 텍스트 파일을 emacsclient열면 성공적으로 emacs에서 열리지 만 전환되지 않고 올라가지 않습니다.

내가 찾고있는 것은의 클라이언트 특정 신호입니다 rc.lua. 다음과 같은 것 :

client.add_signal("focus", function(c) c:raise() end)

나는 Emacs에만 해당되기를 원합니다. 그리고 worker동시에 태그로 전환하십시오 . 또는 Emacs 규칙 콜백에서 할 수 있습니까?

어떤 아이디어? 🙂



답변

나는 똑같은 것을 원했고, emacs 콜백에 대한 당신의 생각은 마침내 작동했습니다. 나는 그것을 훌륭하게 테스트하지는 않았지만 dwm을 사용하고 있으며 이것들이 작동하기에 충분히 비슷하다고 가정합니다.

이것은 emacs의 콜백 함수입니다.

(defun raiseme ()
  (x-send-client-message
   nil                ; DISPLAY - nil is selected frame
   0                  ; DEST - 0 is root window of display
   nil                ; FROM - nil is selected frame
   "_NET_ACTIVE_WINDOW"    ; MESSAGE-TYPE - name of an Atom as a string
   32                 ; FORMAT  - size of the values in bits
   '(1 "_NET_WM_USER_TIME" 0) ; VALUES
   )
  )

콜백을 호출하는 방법에는 여러 가지가 있습니다. 단순성과 유연성을 위해 콜백을 호출하는 쉘 별명과 일반 emacsclient를 선택했습니다.

$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'

그것이 여전히 유용하기를 바랍니다.)

메시지 유형 및 값에 대한 자세한 내용은 창 관리자 힌트를 참조하십시오 .

이 메시지를 굉장히 다루는 것은이 이벤트가 처리 된 것 같습니다. 소스 코드는 여기에 있습니다 .