11

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

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

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

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

Есть идеи? :)

1 ответ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'

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .