Génial-wm un signal pour élever le client lorsque le focus est reçu

13

J'ai mes Emacs en cours d'exécution sur une balise workeravec server-startlancé. J'ai un gestionnaire de fichiers ouvert ailleurs (un autre moniteur par exemple) et lorsque j'ouvre un fichier texte avec lui, emacsclientil s'ouvre avec succès dans emacs mais ne passe pas à lui et ne le fait pas monter.

Ce que je recherche, c'est un signal spécifique au client dans le rc.lua. Quelque chose comme:

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

Je veux que ce soit uniquement Emacs spécifique. Et passez au workertag en même temps. Sinon, puis-je le faire à partir du rappel de règle Emacs?

Des idées? :)

platforma
la source
1
Personne n'a jamais rencontré ça?
platforma

Réponses:

0

Je voulais la même chose, et votre idée d'un rappel emacs est ce qui a finalement fonctionné. Je ne l'ai pas testé sur génial, mais j'utilise dwm, et je suppose qu'ils sont suffisamment similaires pour que cela fonctionne.

C'est la fonction de rappel dans 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
   )
  )

Il existe plusieurs façons d'appeler le rappel. Pour plus de simplicité et de flexibilité, j'ai opté pour un alias shell qui invoque le callback puis l'emacsclient normal:

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

J'espère que cela sera toujours utile;)

Pour plus d'informations sur le type et les valeurs des messages, voir Conseils sur le gestionnaire de fenêtres .

Quant à la gestion impressionnante de ce message, il semble que cet événement soit géré. Le code source est ici .

Tiago
la source