aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/eshell
diff options
context:
space:
mode:
authorMichael Albinus2009-12-03 11:34:11 +0000
committerMichael Albinus2009-12-03 11:34:11 +0000
commita09dc9bf9c3c40638d3fe6bf1905de05d7dac6fb (patch)
tree8f271dddbc5629879fa1e0c6aa4dfb84dbaef5ab /lisp/eshell
parent228fb9b59ea7328f34c799835ae6dd9310a49f25 (diff)
downloademacs-a09dc9bf9c3c40638d3fe6bf1905de05d7dac6fb.tar.gz
emacs-a09dc9bf9c3c40638d3fe6bf1905de05d7dac6fb.zip
Cleanup.
* eshell/em-unix.el (top): Require 'esh-opt and 'pcomplete. (eshell/su, eshell/sudo): Require 'tramp. Fix problems reading arguments. Expand `default-directory'. * net/tramp.el (tramp-handle-file-remote-p): Expand FILENAME for the benefit of returning an expanded localname. (tramp-tramp-file-p): Handle the case NAME is not a string.
Diffstat (limited to 'lisp/eshell')
-rw-r--r--lisp/eshell/em-unix.el44
1 files changed, 30 insertions, 14 deletions
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index dfd72f6b2ac..7de13d0b8ac 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -37,6 +37,8 @@
37;;; Code: 37;;; Code:
38 38
39(require 'eshell) 39(require 'eshell)
40(require 'esh-opt)
41(require 'pcomplete)
40 42
41;;;###autoload 43;;;###autoload
42(eshell-defgroup eshell-unix nil 44(eshell-defgroup eshell-unix nil
@@ -1048,10 +1050,11 @@ Show wall-clock time elapsed during execution of COMMAND.")
1048 1050
1049(defun eshell/su (&rest args) 1051(defun eshell/su (&rest args)
1050 "Alias \"su\" to call Tramp." 1052 "Alias \"su\" to call Tramp."
1053 (require 'tramp)
1051 (setq args (eshell-stringify-list (eshell-flatten-list args))) 1054 (setq args (eshell-stringify-list (eshell-flatten-list args)))
1052 (let (login) 1055 (let ((orig-args (copy-tree args)))
1053 (eshell-eval-using-options 1056 (eshell-eval-using-options
1054 "sudo" args 1057 "su" args
1055 '((?h "help" nil nil "show this usage screen") 1058 '((?h "help" nil nil "show this usage screen")
1056 (?l "login" nil login "provide a login environment") 1059 (?l "login" nil login "provide a login environment")
1057 (? nil nil login "provide a login environment") 1060 (? nil nil login "provide a login environment")
@@ -1062,13 +1065,18 @@ Become another USER during a login session.")
1062 (host (or (file-remote-p default-directory 'host) 1065 (host (or (file-remote-p default-directory 'host)
1063 "localhost")) 1066 "localhost"))
1064 (dir (or (file-remote-p default-directory 'localname) 1067 (dir (or (file-remote-p default-directory 'localname)
1065 default-directory))) 1068 (expand-file-name default-directory))))
1066 (eshell-for arg args 1069 (eshell-for arg args
1067 (if (string-equal arg "-") (setq login t) (setq user arg))) 1070 (if (string-equal arg "-") (setq login t) (setq user arg)))
1071 ;; `eshell-eval-using-options' does not handle "-".
1072 (if (member "-" orig-args) (setq login t))
1068 (if login (setq dir "~/")) 1073 (if login (setq dir "~/"))
1069 (if (and (file-remote-p default-directory) 1074 (if (and (file-remote-p default-directory)
1070 (not (string-equal 1075 (or
1071 user (file-remote-p default-directory 'user)))) 1076 (not (string-equal
1077 "su" (file-remote-p default-directory 'method)))
1078 (not (string-equal
1079 user (file-remote-p default-directory 'user)))))
1072 (add-to-list 1080 (add-to-list
1073 'tramp-default-proxies-alist 1081 'tramp-default-proxies-alist
1074 (list host user (file-remote-p default-directory)))) 1082 (list host user (file-remote-p default-directory))))
@@ -1079,8 +1087,9 @@ Become another USER during a login session.")
1079 1087
1080(defun eshell/sudo (&rest args) 1088(defun eshell/sudo (&rest args)
1081 "Alias \"sudo\" to call Tramp." 1089 "Alias \"sudo\" to call Tramp."
1090 (require 'tramp)
1082 (setq args (eshell-stringify-list (eshell-flatten-list args))) 1091 (setq args (eshell-stringify-list (eshell-flatten-list args)))
1083 (let (user) 1092 (let ((orig-args (copy-tree args)))
1084 (eshell-eval-using-options 1093 (eshell-eval-using-options
1085 "sudo" args 1094 "sudo" args
1086 '((?h "help" nil nil "show this usage screen") 1095 '((?h "help" nil nil "show this usage screen")
@@ -1089,19 +1098,26 @@ Become another USER during a login session.")
1089 :usage "[(-u | --user) USER] COMMAND 1098 :usage "[(-u | --user) USER] COMMAND
1090Execute a COMMAND as the superuser or another USER.") 1099Execute a COMMAND as the superuser or another USER.")
1091 (throw 'eshell-external 1100 (throw 'eshell-external
1092 (let* ((user (or user "root")) 1101 (let ((user (or user "root"))
1093 (host (or (file-remote-p default-directory 'host) 1102 (host (or (file-remote-p default-directory 'host)
1094 "localhost")) 1103 "localhost"))
1095 (dir (or (file-remote-p default-directory 'localname) 1104 (dir (or (file-remote-p default-directory 'localname)
1096 default-directory))) 1105 (expand-file-name default-directory))))
1106 ;; `eshell-eval-using-options' reads options of COMMAND.
1107 (while (and (stringp (car orig-args))
1108 (member (car orig-args) '("-u" "--user")))
1109 (setq orig-args (cddr orig-args)))
1097 (if (and (file-remote-p default-directory) 1110 (if (and (file-remote-p default-directory)
1098 (not (string-equal 1111 (or
1099 user (file-remote-p default-directory 'user)))) 1112 (not (string-equal
1113 "sudo" (file-remote-p default-directory 'method)))
1114 (not (string-equal
1115 user (file-remote-p default-directory 'user)))))
1100 (add-to-list 1116 (add-to-list
1101 'tramp-default-proxies-alist 1117 'tramp-default-proxies-alist
1102 (list host user (file-remote-p default-directory)))) 1118 (list host user (file-remote-p default-directory))))
1103 (let ((default-directory (format "/sudo:%s@%s:%s" user host dir))) 1119 (let ((default-directory (format "/sudo:%s@%s:%s" user host dir)))
1104 (eshell-named-command (car args) (cdr args)))))))) 1120 (eshell-named-command (car orig-args) (cdr orig-args))))))))
1105 1121
1106(put 'eshell/sudo 'eshell-no-numeric-conversions t) 1122(put 'eshell/sudo 'eshell-no-numeric-conversions t)
1107 1123