Tengo un pequeño script en mi camino en el host remoto en ~/bin/ec
, abreviatura de emacsclient.
#!/bin/bash
params=()
for p in "$@"; do
if [ "$p" == "-n" ]; then
params+=( "$p" )
elif [ "${p:0:1}" == "+" ]; then
params+=( "$p" )
else
params+=( "/ssh:z:"$(readlink -f $p) )
fi
done
emacsclient --server-file=$HOME/.emacs.d/server/server "${params[@]}"
Esta secuencia de comandos pasa -n
y los argumentos +
no cambian a emacsclient; de lo contrario, los argumentos se tratan como archivos para que los abra su Emacs local. Cada archivo tiene como prefijo el protocolo TRAMP y el host para que Emacs sepa cómo abrirlo. Es posible que pueda cambiar ssh:
a un protocolo TRAMP diferente si lo prefiere.
Debe reemplazarlo z
con el nombre de host de su máquina remota. Emacs local lo utiliza para conectarse a través de TRAMP. (Es posible que pueda usar hostname
aquí por generalidad. Prefiero usar entradas pequeñas como z
en mi local ssh_config
por brevedad, y el control remoto no tiene idea de que estoy haciendo esto. ¡Pruébelo!)
Uso:
ec file
en el shell remoto abre el archivo en Emacs local y espera
ec -n file
en el shell remoto abre el archivo en Emacs local y devuelve
export EDITOR=~/bin/ec
en remoto .bashrc
hace que la magia suceda
Para asegurarme de que mi server
archivo es bueno, tengo esto en mi local .emacs
, nuevamente usando el pequeño nombre de host z
:
(setq server-use-tcp t
server-port 9999)
(defun server-start-and-copy ()
"Start server and copy server file to remote box."
(interactive)
(server-start)
(copy-file "~/.emacs.d/server/server" "/z:.emacs.d/server/server" t)
(chmod "/z:.emacs.d/server/server" (string-to-number "644" 8))
)
(add-hook 'emacs-startup-hook 'server-start-and-copy)
El puerto 9999 es un RemoteForward. Puse esto en mi local ~/.ssh/ssh_config
para automatizar el reenvío, además de las cosas ControlMaster para la velocidad.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Finalmente, asegúrese de que TRAMP sepa de usted ssh_config
si lo usa:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
relaciona esta biblioteca con la pregunta? Suena útil