Pregunta

Supongamos que quiero abrir un archivo en una sesión de Emacs existente usando su o sudo, sin caer en un caparazón y hacer sudoedit o sudo emacs.Una forma de hacer esto es

C-x C-f /sudo::/path/to/file

pero esto requiere un costoso ida y vuelta a través de SSH.¿Existe una forma más directa?

[EDITAR] @JBB tiene razón.quiero poder invocar su/sudo para guardar y abrir.Estaría bien (pero no ideal) volver a autorizar al guardar.Lo que estoy buscando son variaciones de find-file y save-buffer que se puede "canalizar" a través su/sudo.

¿Fue útil?

Solución

Lo bueno de Tramp es que sólo pagas por ese viaje de ida y vuelta a SSH cuando abres el primer archivo.Luego, Sudo almacena en caché sus credenciales y Emacs guarda un identificador, de modo que los archivos posteriores abiertos por Sudo toman mucho menos tiempo.

Tampoco he encontrado el tiempo extra que se necesita para ahorrar cargas.Es lo suficientemente rápido, en mi opinión.

Otros consejos

vagabundo hace no Sudo de ida y vuelta vía SSH, utiliza un subcapa.Ver el manual: https://www.gnu.org/software/tramp/#Inline-methods

Por lo tanto, te recomiendo que te quedes con TRAMP.

Si utiliza helm, helm-find-files admite la apertura de un archivo como root con C-c r.

Realmente no es una respuesta a la pregunta original, pero aquí hay una función auxiliar para facilitar un poco la ruta tramp/sudo:

(defun sudo-find-file (file-name)
  "Like find file, but opens the file as root."
  (interactive "FSudo Find File: ")
  (let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
    (find-file tramp-file-name)))

Al menos para ahorrar, un paquete sudo-guardar fue escrito exactamente para ese tipo de problema.

Su ejemplo no inicia ssh en absoluto, al menos no con mi versión de TRAMP ("2.1.13-pre").Tanto buscar archivo como guardar búfer funcionan muy bien.

Te recomiendo que utilices comandos de asesoramiento.Pon esta función en tu ~/.emacs

(defadvice ido-find-file (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

(funciona sólo localmente.Es necesario actualizarlo para que funcione correctamente a través de tramp)

La respuesta de Burton un poco extendida:

(defun sudo-find-file (file-name)
"Like find file, but opens the file as root."
(interactive "FSudo Find File: ")
(let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
(find-file tramp-file-name)))


(add-hook 'dired-mode-hook
    (lambda ()
      ;; open current file as sudo 
      (local-set-key (kbd "C-x <M-S-return>") (lambda()
        (interactive)
        (message "!!! SUDO opening %s" (dired-file-name-at-point))
        (sudo-find-file (dired-file-name-at-point))
      ))
    )
)

Puaj.Quizás podrías abrir un shell en Emacs y ejecutar sudo emacs.

El problema es que probablemente no quieras simplemente abrir el archivo.Quieres poder guardarlo más tarde.Por lo tanto, necesita que sus privilegios raíz persistan, no solo existan para abrir el archivo.

Parece que quieres que Emacs se convierta en tu administrador de ventanas.Ya está bastante hinchado sin eso.:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top