* lisp/eshell: Minor fixes.

* lisp/eshell/em-ls.el (show-almost-all): Declare.
(eshell-do-ls): Add support for -A argument.
* lisp/eshell/esh-proc.el (eshell/kill): Rewrite.
This commit is contained in:
Aidan Gauland 2013-02-08 10:07:03 -05:00 committed by Stefan Monnier
parent 8ca3092052
commit 276a61a690
3 changed files with 56 additions and 40 deletions

View file

@ -1,3 +1,10 @@
2013-02-08 Aidan Gauland <aidalgol@no8wireless.co.nz>
* eshell/esh-proc.el (eshell/kill): Rewrite.
* eshell/em-ls.el (show-almost-all): Declare.
(eshell-do-ls): Add support for -A argument.
2013-02-08 Jambunathan K <kjambunathan@gmail.com>
* icomplete.el (icomplete-forward-completions)

View file

@ -328,6 +328,7 @@ instead."
(defvar numeric-uid-gid)
(defvar reverse-list)
(defvar show-all)
(defvar show-almost-all)
(defvar show-recursive)
(defvar show-size)
(defvar sort-method)
@ -337,13 +338,15 @@ instead."
(defun eshell-do-ls (&rest args)
"Implementation of \"ls\" in Lisp, passing ARGS."
(funcall flush-func -1)
;; process the command arguments, and begin listing files
;; Process the command arguments, and begin listing files.
(eshell-eval-using-options
"ls" (if eshell-ls-initial-args
(list eshell-ls-initial-args args)
args)
`((?a "all" nil show-all
"show all files in directory")
"do not ignore entries starting with .")
(?A "almost-all" nil show-almost-all
"do not list implied . and ..")
(?c nil by-ctime sort-method
"sort by last status change time")
(?d "directory" nil dir-literal
@ -558,7 +561,17 @@ relative to that directory."
;; later when we are going to
;; display user and group names.
(if numeric-uid-gid 'integer 'string))))
(when (and (not show-all) eshell-ls-exclude-regexp)
(when (and show-almost-all
(not show-all))
(setq entries
(remove-if
(lambda (entry)
(let ((filename (caar entry)))
(or (string= filename ".")
(string= filename ".."))))
entries)))
(when (and (not show-all)
eshell-ls-exclude-regexp)
(while (and entries (string-match eshell-ls-exclude-regexp
(caar entries)))
(setq entries (cdr entries)))

View file

@ -165,43 +165,39 @@ The signals which will cause this to happen are matched by
(list-processes)))
(defun eshell/kill (&rest args)
"Kill processes, buffers, symbol or files."
(let ((ptr args)
(signum 'SIGINT))
(while ptr
(if (or (eshell-processp (car ptr))
(and (stringp (car ptr))
(string-match "^[A-Za-z/][A-Za-z0-9<>/]+$"
(car ptr))))
;; What about when $lisp-variable is possible here?
;; It could very well name a process.
(setcar ptr (get-process (car ptr))))
(setq ptr (cdr ptr)))
(while args
(let ((id (if (eshell-processp (car args))
(process-id (car args))
(car args))))
(when id
(cond
((null id)
(error "kill: bad signal spec"))
((and (numberp id) (= id 0))
(error "kill: bad signal spec `%d'" id))
((and (stringp id)
(string-match "^-?[0-9]+$" id))
(setq signum (abs (string-to-number id))))
((stringp id)
(let (case-fold-search)
(if (string-match "^-\\([A-Z]+[12]?\\)$" id)
(setq signum
(intern (concat "SIG" (match-string 1 id))))
(error "kill: bad signal spec `%s'" id))))
((< id 0)
(setq signum (abs id)))
(t
(signal-process id signum)))))
(setq args (cdr args)))
nil))
"Kill processes.
Usage: kill [-<signal>] <pid>|<process> ...
Accepts PIDs and process objects."
;; If the first argument starts with a dash, treat it as the signal
;; specifier.
(let ((signum 'SIGINT))
(let ((arg (car args))
(case-fold-search nil))
(when (stringp arg)
(cond
((string-match "^-[[:digit:]]+$" arg)
(setq signum (abs (string-to-number arg)))
((or (string-match "^-[[:upper:]]+$" arg)
(string-match "^-[[:lower:]]+$" arg))
(setq signum (abs (string-to-number arg))))))
(setq args (cdr args))))
(while args
(let ((arg (if (eshell-processp (car args))
(process-id (car args))
(car args))))
(when arg
(cond
((null arg)
(error "kill: null pid. Process may actually be a network connection."))
((not (numberp arg))
(error "kill: invalid argument type: %s" (type-of arg)))
((and (numberp arg)
(<= arg 0))
(error "kill: bad pid: %d" arg))
(t
(signal-process arg signum)))))
(setq args (cdr args))))
nil)
(defun eshell-read-process-name (prompt)
"Read the name of a process from the minibuffer, using completion.