summaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2024-02-19 15:11:39 +0100
committerMartin Polden <mpolden@mpolden.no>2024-02-19 15:11:39 +0100
commit013841bc506236bec456a9804d9f4377c14cede1 (patch)
treea0a60f6fcdbf8a8e23d61f9d2163c4ca70c506d1 /lisp
parent9b56507b742bbc3abde268f310e3c9ab80ef54d0 (diff)
tramp: support doas
Diffstat (limited to 'lisp')
-rw-r--r--lisp/init-tramp.el34
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.