diff options
| author | Michael Albinus | 2009-12-03 11:34:11 +0000 |
|---|---|---|
| committer | Michael Albinus | 2009-12-03 11:34:11 +0000 |
| commit | a09dc9bf9c3c40638d3fe6bf1905de05d7dac6fb (patch) | |
| tree | 8f271dddbc5629879fa1e0c6aa4dfb84dbaef5ab /lisp/eshell | |
| parent | 228fb9b59ea7328f34c799835ae6dd9310a49f25 (diff) | |
| download | emacs-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.el | 44 |
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 |
| 1090 | Execute a COMMAND as the superuser or another USER.") | 1099 | Execute 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 | ||