diff options
author | Martin Polden <mpolden@mpolden.no> | 2024-02-19 15:11:39 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2024-02-19 15:11:39 +0100 |
commit | 013841bc506236bec456a9804d9f4377c14cede1 (patch) | |
tree | a0a60f6fcdbf8a8e23d61f9d2163c4ca70c506d1 /lisp | |
parent | 9b56507b742bbc3abde268f310e3c9ab80ef54d0 (diff) |
tramp: support doas
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/init-tramp.el | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/lisp/init-tramp.el b/lisp/init-tramp.el index 97e1caa..8c9c579 100644 --- a/lisp/init-tramp.el +++ b/lisp/init-tramp.el @@ -2,28 +2,24 @@ ;;; Commentary: ;;; Code: -(defun mpolden/sudo-prefix-p (prefix) - "Return non-nil if PREFIX is a sudo prefix." - (member prefix '("/sudo" "/sudo:"))) - -(defun mpolden/ssh-prefix-p (prefix) - "Return non-nil if PREFIX is a ssh prefix." - (string-equal prefix "/ssh")) - (defun mpolden/sudo-file-name (filename) - "Return FILENAME with a sudo prefix. - -If FILENAME already has a sudo prefix, do nothing. If FILENAME is -accessed over SSH, prefix it with \"/sudo:\". Otherwise, assume -FILENAME is a local path and prefix it with \"/sudo::\"." + "Add a sudo-like TRAMP method to FILENAME. + +If FILENAME already contains a sudo-like method, do nothing. If +FILENAME is accessed over SSH, replace \"/ssh:\" with +\"/sudo:\" or \"/doas:\". Otherwise, assume FILENAME is a local +path and prefix it with \"/sudo::\" or \"/doas::\"." + ;; sudo:remote-host works because of the special tramp-default-proxies-alist + ;; configuration below (let* ((splitname (split-string filename ":")) - (prefix (car splitname))) - (if (mpolden/sudo-prefix-p prefix) + (method (car splitname))) + (if (member method '("/sudo" "/doas")) filename - (let* ((ssh (mpolden/ssh-prefix-p prefix)) - (sudo-prefix (if ssh "/sudo" "/sudo:")) - (components (if ssh (cdr splitname) splitname))) - (mapconcat 'identity (cons sudo-prefix components) ":"))))) + (let* ((is-ssh (equal method "/ssh")) + (sudo-method (concat (if (executable-find "doas" t) "/doas" "/sudo") + (if is-ssh "" ":"))) + (components (if is-ssh (cdr splitname) splitname))) + (mapconcat 'identity (cons sudo-method components) ":"))))) (defun mpolden/sudo-find-file (&optional arg) "Find file and open it with sudo. |