Dev - Sudo
Define sudo dev package.
(use-package emacs
:after uno-dev
:config
(provide 'uno-dev-sudo))
Borrowed from doom-emacs.
(use-package emacs
:after uno-dev-sudo
:init
(defun uno/dev/sudo/file-path (file)
"Get FILE path for sudo access."
(let ((host (or (file-remote-p file 'host) "localhost")))
(concat "/" (when (file-remote-p file)
(concat (file-remote-p file 'method) ":"
(if-let (user (file-remote-p file 'user))
(concat user "@" host)
host)
"|"))
"sudo:root@" host
":" (or (file-remote-p file 'localname)
file))))
(defun uno/dev/sudo/find-file (file)
"Open FILE as root."
(interactive "FOpen file as root: ")
(find-file (uno/dev/sudo/file-path file)))
(defun uno/dev/sudo/open-this-file ()
"Open the current file as root."
(interactive)
(uno/dev/sudo/find-file
(or buffer-file-name
(when (or (derived-mode-p 'dired-mode)
(derived-mode-p 'wdired-mode))
default-directory))))
(defun uno/dev/sudo/save-this-file ()
"Save this file as root."
(interactive)
(let ((file (uno/dev/sudo/file-path buffer-file-name)))
(if-let (buffer (find-file-noselect file))
(let ((origin (current-buffer)))
(copy-to-buffer buffer (point-min) (point-max))
(unwind-protect
(with-current-buffer buffer
(save-buffer))
(unless (eq origin buffer)
(kill-buffer buffer))
(with-current-buffer origin
(revert-buffer t t))))
(user-error "Unable to open %S" file)))))