
У меня запущен Emacs на теге worker
с server-start
запущенным. У меня открыт файловый менеджер где-то еще (например, на другом мониторе), и когда я открываю текстовый файл, emacsclient
он успешно открывается в emacs, но не переключается на него и не поднимает его.
Я ищу специфический для клиента сигнал в rc.lua
. Что-то вроде:
client.add_signal("focus", function(c) c:raise() end)
Я хочу, чтобы это было только специфично для Emacs. И переключиться на worker
тег в то же время. Или я могу сделать это из обратного вызова правила Emacs?
Есть идеи? :)
решение1
Я хотел того же самого, и ваша идея обратного вызова emacs в итоге сработала. Я не тестировал это на awesome, но я использую 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'
Надеюсь, это все равно будет полезно ;)
Дополнительную информацию о типе сообщения и значениях см.Советы по работе с оконным менеджером.
Что касается обработки этого сообщения awesome, то, похоже, это событие обрабатывается. Исходный кодздесь.