Question

Supposons que je souhaite ouvrir un fichier dans une session Emacs existante à l'aide de su ou de sudo , sans passer par un shell et effectuer une sudoedit . ou sudo emacs . Une façon de le faire est

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

mais cela nécessite un aller-retour coûteux via SS . Y a-t-il un moyen plus direct?

[EDIT] @JBB a raison. Je veux pouvoir appeler su / sudo pour enregistrer et ouvrir. Ce serait OK (mais pas idéal) de ré-autoriser lors de la sauvegarde. Ce que je recherche, ce sont des variantes de find-file et save-buffer , qui peuvent être "pipées". via su / sudo .

Était-ce utile?

La solution

La bonne chose à propos de Tramp est que vous ne payez que cet aller-retour vers SSH lorsque vous ouvrez le premier fichier. Sudo met ensuite vos informations d'identification en mémoire cache et Emacs enregistre un descripteur afin que les fichiers ouverts par sudo prennent beaucoup moins de temps.

Je n'ai pas trouvé le temps supplémentaire qu'il faut pour économiser moins, C'est assez rapide, IMO.

Autres conseils

Tramp n'effectue pas l'aller-retour sudo par SSH, il utilise un sous-shell . Voir le manuel: https://www.gnu.org/software/tramp/#Inline -méthodes

Par conséquent, je vous recommande de vous en tenir à TRAMP.

Si vous utilisez helm , helm-find-files prend en charge l'ouverture d'un fichier en tant que root avec C-c .

Ce n'est pas vraiment une réponse à la question initiale, mais voici une fonction d'aide qui facilite un peu la route 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)))

Au moins pour la sauvegarde, un paquet sudo-save a été écrit exactement pour ce type de problème. .

Votre exemple ne commence pas du tout ssh, du moins pas avec ma version de TRAMP ("2.1.13-pre"). Find-file et save-buffer fonctionnent très bien.

Je vous recommande d'utiliser des commandes de conseil. Mettez cette fonction dans votre ~ / .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))))

(fonctionne uniquement localement. Nécessite une mise à jour pour fonctionner correctement via tramp)

Un peu prolongé la réponse de Burton:

(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))
      ))
    )
)

Ugh. Peut-être pourriez-vous ouvrir un shell dans Emacs et exécuter Sudo Emacs.

Le problème est que vous ne voulez probablement pas simplement ouvrir le fichier. Vous voulez pouvoir le sauvegarder plus tard. Par conséquent, vous devez faire en sorte que vos droits racine persistent, et non seulement pour l’ouverture du fichier.

On dirait que vous voulez qu'Emacs devienne votre gestionnaire de fenêtres. C'est assez gonflé sans ça. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top