
Ich habe meinen Emacs auf einem Tag worker
mit server-start
„gelauncht“ laufen. Ich habe irgendwo anders einen Dateimanager geöffnet (beispielsweise auf einem anderen Monitor) und wenn ich eine Textdatei damit öffne, emacsclient
wird sie erfolgreich in Emacs geöffnet, wechselt aber nicht dorthin und ruft sie nicht auf.
Ich suche nach einem kundenspezifischen Signal in der rc.lua
. So etwas wie:
client.add_signal("focus", function(c) c:raise() end)
worker
Ich möchte, dass es nur Emacs-spezifisch ist. Und gleichzeitig zum Tag wechseln . Kann ich es alternativ über den Emacs-Regel-Callback tun?
Irgendwelche Ideen? :)
Antwort1
Ich wollte dasselbe, und Ihre Idee eines Emacs-Rückrufs hat letztendlich funktioniert. Ich habe es nicht auf Awesome getestet, aber ich verwende dwm, und ich nehme an, sie sind ähnlich genug, damit es funktioniert.
Dies ist die Rückruffunktion in 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
)
)
Es gibt mehrere Möglichkeiten, den Rückruf aufzurufen. Der Einfachheit und Flexibilität halber habe ich mich für einen Shell-Alias entschieden, der den Rückruf und dann den regulären Emacs-Client aufruft:
$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'
Hoffe, es ist trotzdem noch nützlich ;)
Weitere Informationen zum Nachrichtentyp und den Werten finden Sie unterHinweise zum Fenstermanager.
Was die Verarbeitung dieser Nachricht durch Awesome betrifft, so scheint es, dass dieses Ereignis verarbeitet wird. Der Quellcode istHier.