Mercurial > emacs
comparison lisp/eshell/em-unix.el @ 106390:4eee659fa954
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.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Thu, 03 Dec 2009 11:34:11 +0000 |
parents | 12c2a6b10caf |
children | 1d1d5d9bd884 |
comparison
equal
deleted
inserted
replaced
106389:b537bb8db7d9 | 106390:4eee659fa954 |
---|---|
35 ;; processes for common operations. | 35 ;; processes for common operations. |
36 | 36 |
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 |
43 "This module defines many of the more common UNIX utilities as | 45 "This module defines many of the more common UNIX utilities as |
44 aliases implemented in Lisp. These include mv, ln, cp, rm, etc. If | 46 aliases implemented in Lisp. These include mv, ln, cp, rm, etc. If |
1046 ;; Pacify the byte-compiler. | 1048 ;; Pacify the byte-compiler. |
1047 (defvar tramp-default-proxies-alist) | 1049 (defvar tramp-default-proxies-alist) |
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") |
1058 :usage "[- | -l | --login] [USER] | 1061 :usage "[- | -l | --login] [USER] |
1059 Become another USER during a login session.") | 1062 Become another USER during a login session.") |
1060 (throw 'eshell-replace-command | 1063 (throw 'eshell-replace-command |
1061 (let ((user "root") | 1064 (let ((user "root") |
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)))) |
1075 (eshell-parse-command | 1083 (eshell-parse-command |
1076 "cd" (list (format "/su:%s@%s:%s" user host dir)))))))) | 1084 "cd" (list (format "/su:%s@%s:%s" user host dir)))))))) |
1077 | 1085 |
1078 (put 'eshell/su 'eshell-no-numeric-conversions t) | 1086 (put 'eshell/su 'eshell-no-numeric-conversions t) |
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") |
1087 (?u "user" t user "execute a command as another USER") | 1096 (?u "user" t user "execute a command as another USER") |
1088 :show-usage | 1097 :show-usage |
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 |
1108 (provide 'em-unix) | 1124 (provide 'em-unix) |
1109 | 1125 |