Awesome-wm um sinal para subir cliente quando foco recebido

11

Eu tenho meu Emacs em execução em uma tag worker com server-start lançado. Eu tenho um gerenciador de arquivos aberto em outro lugar (outro monitor, por exemplo) e quando eu abro um arquivo de texto com emacsclient ele abre com sucesso no emacs, mas não muda para ele e não aumenta.

O que estou procurando é um sinal específico do cliente no rc.lua . Algo como:

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

Eu quero que seja apenas específico do Emacs. E mude para a tag worker ao mesmo tempo. Como alternativa, posso fazer isso a partir do callback da regra do Emacs?

Alguma ideia? :)

    
por platforma 02.05.2012 / 13:00

1 resposta

0

Eu queria a mesma coisa, e sua ideia de um callback do emacs é o que finalmente funcionou. Eu não testei isso incrível, mas estou usando o dwm, e suponho que eles sejam similares o suficiente para que isso funcione.

Esta é a função de retorno de chamada no 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
   )
  )

Existem várias maneiras de invocar o retorno de chamada. Para simplicidade e flexibilidade, optei por um alias de shell que invoca o callback e depois o emacsclient normal:

$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'

Espero que ainda seja útil;)

Para mais referências sobre o tipo e os valores das mensagens, consulte as Dicas do Gerenciador de Janelas .

Quanto ao manuseio impressionante dessa mensagem, parece que esse evento é tratado. O código fonte é aqui .

    
por 14.03.2015 / 16:19