tutorial sirve que para español comandos básicos buscar emacs dvorak emacsclient

sirve - emacs tutorial



Ejecute el comando en el nuevo marco con daemon/client en Emacs (2)

Esto es quizás bastante simple, pero no he encontrado nada útil cuando busco en Google. Así que aquí va :)

Yo uso Emacs en modo daemon ( emacs --daemon ) y es realmente útil. También uso dvorak y he descubierto que reasignar Cj a Cc (y viceversa) es realmente útil a largo plazo, y usa lo siguiente para hacer esa traducción:

(keyboard-translate ?/C-j ?/C-c) (keyboard-translate ?/C-c ?/C-j)

Esto funciona muy bien cuando no se usa Emacs como daemon. Cuando comienzo un nuevo cliente (cli / gui) Cj ya no está obligado a Cc . Whaaat?

Así que supongo que tendré que ejecutar el keyboard-translate después de crear un nuevo marco de cliente, pero no tengo idea de cómo hacerlo. Lo intenté con un defadvice que encontré en alguna parte, pero no pude hacerlo funcionar, así que me di por vencido y lo defadvice .


Ch f keyboard-translate RET dice que:

Esta variable tiene un enlace por separado para cada terminal. Ver nodo Info `(elisp) Múltiples pantallas ''.

lo que nos indica la dirección correcta, aunque hay un error en esa documentación, ya que el nodo de información referenciado no existe. Una búsqueda sugiere que el nodo es realmente renombrado (elisp)Multiple terminals , que también puede leer aquí: http://www.gnu.org/s/emacs/manual/html_node/elisp/Multiple-Terminals.html

En los sistemas GNU y Unix, cada pantalla X es una terminal gráfica [...] separada. Emacs incluso puede conectarse a otros terminales de solo texto, al interactuar con el programa emacsclient.

Por lo tanto, cuando inicia emacs como daemon, aún no se ha conectado a un terminal (o al menos, no a uno que le sea útil), por lo que sus comandos no generan enlaces para el (los) terminal (es) que termina utilizando.

La variable after-make-frame-functions proporciona una forma de resolver esto.

(defun my-dvorak-translations (&optional frame) "Re-map keys in the current terminal." (keyboard-translate ?/C-j ?/C-c) (keyboard-translate ?/C-c ?/C-j)) ;; Evaluate both now (for non-daemon emacs) and upon frame creation ;; (for new terminals via emacsclient). (my-dvorak-translations) (add-hook ''after-make-frame-functions ''my-dvorak-translations)

Experimentalmente parece seguro repetir tus comandos, por lo que no tenemos que preocuparte por ejecutar esto una vez por terminal (pero si lo hiciéramos, podríamos usar (get-device-terminal FRAME) para (get-device-terminal FRAME) ).


Otro gancho que se ejecuta cada vez que se invoca emacsclient es server-visit-hook , que tal vez sea más apropiado que after-make-frame-functions .

(add-hook ''server-visit-hook (lambda () (keyboard-translate ?/C-j ?/C-c) (keyboard-translate ?/C-c ?/C-j)))