Como posso usar o Emacs tramp para ssh para um host remoto e editar um arquivo como outro usuário em uma base ad-hoc?
Pergunta
/ multi costumava funcionar para mim, agora acabou e estou frustrado.
O que eu quero fazer é, no meu mundo dos sonhos:
/ myuser @ remotehost: sudo: anotheruser: / some / path / to / file
... e o modo ido funciona.
O principal aqui é que 'myuser', 'remotehost' e 'anotheruser' são todos muito ad-hoc, eu uso uma grande variedade de hosts remotos, geralmente com diferentes usuários e sudo-ing para uma ampla gama de diferentesusuários.
O que preciso adicionar e como posso testá-lo sem recarregar o emacs repetidamente?
Solução
A partir de este commit, o TRAMP é compatível com vários saltos ad-hoc novamente.
Grosso modo, você o usa assim:
/ssh:transituser@remotehost|sudo:user@remotehost:/some/file
Ainda não o fiz funcionar de forma fiável com ido-mode
, o que é uma pena, mas é muito melhor do que nada!:-)
Outras dicas
O código a seguir pode ajudar:
(defun find-file-as-root ()
"Find a file as root."
(interactive)
(let* ((parsed (when (tramp-tramp-file-p default-directory)
(coerce (tramp-dissect-file-name default-directory)
'list)))
(default-directory
(if parsed
(apply 'tramp-make-tramp-file-name
(append '("sudo" "root") (cddr parsed)))
(tramp-make-tramp-file-name "sudo" "root" "localhost"
default-directory))))
(call-interactively 'find-file)))
Eu o tinha em meu arquivo .emacs e parece vir daqui: http://atomized.org/2011/01/toggle-between-root-non-root-in-emacs-with-tramp/
Não usei muito, mas parece que é um passo na direção certa.