Ho un piccolo script nel mio percorso sull'host remoto su ~/bin/ec
, stenografia per 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[@]}"
Questo script passa -n
e gli +
argomenti sono invariati rispetto a emacsclient, altrimenti gli argomenti vengono trattati come file per l'apertura di Emacs locale. Ogni file è preceduto dal protocollo TRAMP e dall'host in modo che Emacs sappia come aprirlo. ssh:
Se lo desideri, potresti essere in grado di passare a un protocollo TRAMP diverso.
È necessario sostituire z
con il nome host del computer remoto. Viene utilizzato da Emacs locale per connettersi tramite TRAMP. (Potresti essere in grado di utilizzare hostname
qui per generalità. Preferisco usare piccole voci come z
nel mio locale ssh_config
per brevità, e il telecomando non ha idea che lo stia facendo. Provalo!)
Uso:
ec file
nella shell remota apre il file in Emacs locale e attende
ec -n file
nella shell remota apre il file in Emacs locale e ritorna
export EDITOR=~/bin/ec
in remoto .bashrc
fa accadere la magia
Per essere sicuro che il mio server
file sia buono, lo ho nel mio locale .emacs
, usando di nuovo il piccolo nome 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)
La porta 9999 è RemoteForward. L'ho messo nel mio locale ~/.ssh/ssh_config
per automatizzare l'inoltro, più le cose ControlMaster per la velocità.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Infine, assicurati che TRAMP sia a conoscenza del tuo ssh_config
se lo usi:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
biblioteca si collega alla domanda? Sembra utile