
Tengo mi Emacs ejecutándose worker
con una etiqueta server-start
lanzada. Tengo un administrador de archivos abierto en otro lugar (otro monitor, por ejemplo) y cuando abro un archivo de texto, emacsclient
se abre correctamente en emacs pero no cambia a él ni lo abre.
Lo que estoy buscando es una señal específica del cliente en el archivo rc.lua
. Algo como:
client.add_signal("focus", function(c) c:raise() end)
Quiero que sea sólo específico de Emacs. Y cambie a la worker
etiqueta al mismo tiempo. Alternativamente, ¿puedo hacerlo desde la devolución de llamada de la regla de Emacs?
¿Algunas ideas? :)
Respuesta1
Quería lo mismo y tu idea de una devolución de llamada de emacs es lo que finalmente funcionó. No lo he probado en Awesome, pero estoy usando dwm y supongo que son lo suficientemente similares como para que esto funcione.
Esta es la función de devolución de llamada en 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
)
)
Hay varias formas de invocar la devolución de llamada. Por simplicidad y flexibilidad, he optado por un alias de shell que invoca la devolución de llamada y luego el emacsclient normal:
$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'
Espero que siga siendo útil ;)
Para obtener más referencia sobre el tipo de mensaje y los valores, consulteConsejos para el administrador de ventanas.
En cuanto al manejo de este mensaje por parte de Awesome, parece que este evento está manejado. El código fuente esaquí.