J'ai un petit script sur mon chemin sur l'hôte distant à ~/bin/ec, raccourci pour 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[@]}"
Ce script passe -net +args inchangé à emacsclient, sinon les args sont traités comme des fichiers que votre Emacs local peut ouvrir. Chaque fichier est préfixé avec le protocole TRAMP et l’hôte afin que Emacs sache l’ouvrir. Vous pourrez peut-être changer ssh:de protocole TRAMP si vous préférez.
Vous devez remplacer zpar le nom d'hôte de votre ordinateur distant. Emacs local utilise cette méthode pour se connecter via TRAMP. (Vous pourriez peut-être utiliser hostnameici pour la généralité. Je préfère utiliser des entrées minuscules comme zdans mon local ssh_configpour la brièveté, et la télécommande n'a aucune idée de ce que je suis en train de faire. Essayez-le!)
Usage:
ec file dans le shell distant ouvre le fichier dans Emacs local et attend
ec -n file dans le shell distant ouvre le fichier dans Emacs local et retourne
export EDITOR=~/bin/ecà distance .bashrcrend la magie arriver
Pour m'assurer que mon serverfichier est bon, j'ai ceci dans mon local .emacs, en utilisant à nouveau le petit nom d'hôte 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)
Le port 9999 est une RemoteForward. Je mets cela dans mon local ~/.ssh/ssh_configpour automatiser le transfert, ainsi que le logiciel ControlMaster pour plus de rapidité.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Enfin, assurez-vous que TRAMP sait ssh_configsi vous l'utilisez:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editorbibliothèque et la question? Cela semble utile