You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.0 KiB

Dev - Sudo

Package

Define sudo dev package.

  (use-package emacs
    :after uno-dev
    :config
    (provide 'uno-dev-sudo))

Sudo File Support

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