[emacs-berlin] Automatic sudo
Arne Brasseur
arne.brasseur at gmail.com
Wed Aug 26 20:32:00 UTC 2015
Here's the latest version. I switched to the new style of advising
functions, which is actually convenient because now I can use the same
definition to advise multiple functions. It also now keeps track of point,
and retries the attempted command.
(setq last-command-event) is needed because, when prompted for a password,
and then re-executing self-insert-command afterwards, it will insert the
<return> that terminated the password into the buffer, instead of the key
that triggered this advice.
(defun autosudo--edit-command-wrapper (orig-fun &rest args)
"Ask to re-open a file with sudo if it's read-only and you try to edit it.
Will maintain the position of point, and insert the typed character after
switching to the sudo version."
(if buffer-read-only
(let ((path (buffer-file-name))
(buff (current-buffer))
(point (point))
(event last-command-event))
(when (and path (y-or-n-p "File is read-only, reopen with sudo?"))
(find-file (concat "/sudo:root at localhost:" path))
(goto-char point)
(kill-buffer buff)
(setq last-command-event event)))))
(advice-add 'self-insert-command :before #'autosudo--edit-command-wrapper)
(advice-add 'newline :before #'autosudo--edit-command-wrapper)
(advice-add 'yank :before #'autosudo--edit-command-wrapper)
(advice-add 'indent-for-tab-command :before
#'autosudo--edit-command-wrapper)
So this is already pretty close. It works fine for self-insert-command and
for tab, but not for newline and yank. Any ideas what the difference would
be?
I also like the idea to make it work on remote servers, but that might be a
next step.
I'd like to make this a repo on Github under Emacs Berlin, and submit it to
MELPA, since I try to avoid custom functions in my config that aren't on
(M)ELPA :)
Til, your version is also cool, for instance Magnar Sveen and Spacemacs
include this function
(defun sudo-edit (&optional arg)
(interactive "p")
(if (or arg (not buffer-file-name))
(find-file (concat "/sudo:root at localhost:" (ido-read-file-name "File:
")))
(find-alternate-file (concat "/sudo:root at localhost:"
buffer-file-name))))
But I like the automatic version personally.
Cheers,
Arne
On 24 August 2015 at 23:30, Rasmus <rasmus at gmx.us> wrote:
> Arne Brasseur <arne.brasseur at gmail.com> writes:
>
> > (defadvice self-insert-command (around automagic-sudo activate)
>
> Perhaps you'd also want to look into the "nadvice" style of advising,
>
>
> https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Named-Functions.html
>
> https://www.gnu.org/software/emacs/manual/html_node/elisp/Porting-old-advices.html
>
> Rasmus
>
> --
> Hooray!
>
> _______________________________________________
> emacs-berlin mailing list
> emacs-berlin at emacs-berlin.org
> https://mailb.org/mailman/listinfo/emacs-berlin
>
--
| @plexus <https://twitter.com/plexus> | arnebrasseur.net | The Happy
Lambda <https://leanpub.com/happylambda> |
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailb.org/pipermail/emacs-berlin/attachments/20150826/67e5ea37/attachment.html>
More information about the emacs-berlin
mailing list