1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

Treat non-erroring lisp call as successful eshell command (Bug#26161)

This lets a compound command like 'cd .. && echo ok' print 'ok',
similar to how most other shells behave.

* lisp/eshell/esh-cmd.el (eshell-exit-success-p): Only check if the
last exit code was zero, rather than first checking whether the last
command returned nil.
(eshell-exec-lisp): Set `eshell-last-command-status' to 1 on error.

Copyright-paperwork-exempt: yes
This commit is contained in:
George D. Plymale II 2017-04-20 14:05:11 -04:00 committed by Noam Postavsky
parent a6b375ba4b
commit e8875bcbe0

View file

@ -575,14 +575,9 @@ must be implemented via rewriting, rather than as a function."
(defvar eshell-last-command-result) ;Defined in esh-io.el.
(defun eshell-exit-success-p ()
"Return non-nil if the last command was \"successful\".
For a bit of Lisp code, this means a return value of non-nil.
For an external command, it means an exit code of 0."
(if (save-match-data
(string-match "#<\\(Lisp object\\|function .*\\)>"
eshell-last-command-name))
eshell-last-command-result
(= eshell-last-command-status 0)))
"Return non-nil if the last command was successful.
This means an exit code of 0."
(= eshell-last-command-status 0))
(defvar eshell--cmd)
@ -1257,6 +1252,7 @@ represent a lisp form; ARGS will be ignored in that case."
(and result (funcall printer result))
result)
(error
(setq eshell-last-command-status 1)
(let ((msg (error-message-string err)))
(if (and (not form-p)
(string-match "^Wrong number of arguments" msg)