Eu queria a mesma coisa, e sua ideia de um callback do emacs é o que finalmente funcionou. Eu não testei isso incrível, mas estou usando o dwm, e suponho que eles sejam similares 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 callback e depois o emacsclient normal:
$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'
Espero que ainda seja útil;)
Para mais referências sobre o tipo e os valores das mensagens, consulte as Dicas do Gerenciador de Janelas .
Quanto ao manuseio impressionante dessa mensagem, parece que esse evento é tratado. O código fonte é aqui .