1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-08 16:52:40 -08:00

comint-insert-previous-argument doesn't detect and ignore trailing &

This function is invoked in shell-mode by the user, and is meant to
emulate what M-. does in zsh and bash: it inserts an argument from a
previous command.  Neither zsh nor bash treat a trailing & specially:
M-. simply inserts it if it is encountered.  Emacs DID have extra
logic to detect and discard trailing &, but this logic was buggy, and
a && anywhere in the sequence would confuse it.  This patch simply
removes that logic to fix the bug and to emulate zsh and bash more
closely

* lisp/comint.el (comint-insert-previous-argument): don't detect and
  ignore trailing &
  (Bug#25271)
* etc/NEWS: Document this.
This commit is contained in:
Dima Kogan 2016-12-25 11:49:44 -08:00
parent 74f377b395
commit ba2ddadb53
2 changed files with 5 additions and 3 deletions

View file

@ -191,6 +191,11 @@ It now treats the optional 2nd argument to mean that the URL should be
shown in the currently selected window.
** Comint
*** 'comint-insert-previous-argument' no longer interprets &.
This worked strangely in shell-mode in the presence of &&. And omitting this
logic makes sense since 'comint-insert-previous-argument' exists to emulate M-.
in bash and zsh, and neither of those treat & specially.
*** 'comint-insert-previous-argument' knows how to count args
from the beginning or from the end. This is useful because
'comint-insert-previous-argument' exists to emulate M-. in bash and zsh; and

View file

@ -2705,9 +2705,6 @@ is the last argument. This command is like `M-.' in bash and zsh."
(set-marker comint-insert-previous-argument-last-start-pos (point))
;; Insert the argument.
(let ((input-string (comint-previous-input-string 0)))
(when (string-match "[ \t\n]*&" input-string)
;; strip terminating '&'
(setq input-string (substring input-string 0 (match-beginning 0))))
(insert (comint-arguments input-string index index)))
;; Make next invocation return arg from previous input
(setq comint-input-ring-index (1+ (or comint-input-ring-index 0)))