Awesome-wm сигнал, чтобы поднять клиента, когда фокус получен


13

Я запустил Emacs на теге workerс server-startзапущенным. У меня есть файловый менеджер, открытый где-то еще (например, другой монитор), и когда я открываю текстовый файл с emacsclientним, он успешно открывается в emacs, но не переключается на него и не поднимает его.

То, что я ищу, это специфический для клиента сигнал в rc.lua. Что-то вроде:

client.add_signal("focus", function(c) c:raise() end)

Я хочу, чтобы это было только для Emacs. И переключиться на workerтег одновременно. Или я могу сделать это из правила обратного вызова Emacs?

Есть идеи? :)


1
Никто никогда не сталкивался с этим?
Платформа

Ответы:


0

Я хотел то же самое, и ваша идея обратного вызова emacs - это то, что наконец сработало. Я не проверял это на удивительном, но я использую 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'

Надеюсь, это все еще будет полезно;)

Для получения дополнительной информации о типе и значениях сообщения см. Подсказки диспетчера окон .

Что касается удивительной обработки этого сообщения, похоже, что это событие обработано. Исходный код здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.