Don't bind standard-output in substitute-command-keys

This fixes a regression with regards to the old C version of
substitute-command-keys.

* lisp/help.el (substitute-command-keys): Don't bind standard-output.
See Bug#39149.
* test/lisp/help-tests.el
(help-tests--was-in-buffer): New variable.
(help-substitute-command-keys/menu-filter-in-correct-buffer): New
test.
This commit is contained in:
Stefan Kangas 2020-11-01 16:31:12 +01:00
parent 8761c155e4
commit 8ad9932f11
2 changed files with 21 additions and 2 deletions

View file

@ -1013,8 +1013,7 @@ Otherwise, return a new string (without any text properties)."
(insert string)
(goto-char (point-min))
(while (< (point) (point-max))
(let ((standard-output (current-buffer))
(orig-point (point))
(let ((orig-point (point))
end-point active-maps
close generate-summary)
(cond

View file

@ -361,6 +361,26 @@ C-b undefined
")))))
(defvar help-tests--was-in-buffer nil)
(ert-deftest help-substitute-command-keys/menu-filter-in-correct-buffer ()
"Evaluate menu-filter in the original buffer. See Bug#39149."
(unwind-protect
(progn
(define-key global-map (kbd "C-c C-l r")
`(menu-item "2" identity
:filter ,(lambda (cmd)
(setq help-tests--was-in-buffer
(current-buffer))
cmd)))
(with-temp-buffer
(substitute-command-keys "\\[identity]")
(should (eq help-tests--was-in-buffer
(current-buffer)))))
(setq help-tests--was-in-buffer nil)
(define-key global-map (kbd "C-c C-l r") nil)
(define-key global-map (kbd "C-c C-l") nil)))
(provide 'help-tests)
;;; help-tests.el ends here