
Eu tenho meu Emacs rodando em uma tag worker
launch server-start
. Eu tenho um gerenciador de arquivos aberto em outro lugar (outro monitor, por exemplo) e quando abro um arquivo de texto com emacsclient
ele abre com sucesso no emacs, mas não muda para ele e não o aumenta.
O que estou procurando é um sinal específico do cliente no arquivo rc.lua
. Algo como:
client.add_signal("focus", function(c) c:raise() end)
Eu quero que seja apenas específico do Emacs. E mude para a worker
tag ao mesmo tempo. Alternativamente, posso fazer isso no retorno de chamada da regra do Emacs?
Alguma ideia? :)
Responder1
Eu queria a mesma coisa, e sua ideia de retorno de chamada do emacs foi o que finalmente funcionou. Não testei no incrível, mas estou usando o dwm e suponho que eles sejam semelhantes o suficiente para que isso funcione.
Esta é a função de retorno de chamada no 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
)
)
Existem várias maneiras de invocar o retorno de chamada. Para simplicidade e flexibilidade, optei por um alias de shell que invoca o retorno de chamada e depois o emacsclient normal:
$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'
Espero que ainda seja útil ;)
Para obter mais referências sobre o tipo de mensagem e valores, consulteDicas do gerenciador de janelas.
Quanto ao tratamento desta mensagem por Awesome, parece que este evento foi tratado. O código fonte éaqui.