Eu tenho um pequeno script no meu caminho no host remoto em ~/bin/ec
, abreviação 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[@]}"
Este script passa -n
e +
args inalterados para o emacsclient, caso contrário, os args são tratados como arquivos para o seu Emacs local abrir. Cada arquivo é prefixado com o protocolo TRAMP e o host para que o Emacs saiba como abri-lo. Você pode mudar ssh:
para um protocolo TRAMP diferente, se preferir.
Você deve substituir z
pelo nome do host da sua máquina remota. Isso é usado pelo Emacs local para se conectar via TRAMP. (Você pode usar hostname
aqui por generalidade. Prefiro usar pequenas entradas como z
no meu local ssh_config
por questões de brevidade, e o controle remoto não faz ideia de que estou fazendo isso. Experimente!)
Uso:
ec file
no shell remoto abre o arquivo no Emacs local e aguarda
ec -n file
no shell remoto abre o arquivo no Emacs local e retorna
export EDITOR=~/bin/ec
no controle remoto .bashrc
faz a mágica acontecer
Para garantir que meu server
arquivo seja bom, eu tenho isso no meu local .emacs
, novamente usando o pequeno nome 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)
A porta 9999 é um RemoteForward. Coloquei isso no meu local ~/.ssh/ssh_config
para automatizar o encaminhamento, além do material do ControlMaster para obter velocidade.
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
Por fim, verifique se o TRAMP conhece o seu ssh_config
se você o usar:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
biblioteca se relaciona com a pergunta? Soa útil