diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el index 9f9e58e83d7..42f8f273b52 100644 --- a/lisp/eshell/em-prompt.el +++ b/lisp/eshell/em-prompt.el @@ -180,7 +180,8 @@ negative, find the Nth next match." (text-property-search-forward 'field 'prompt t)) (setq n (1- n))) (let (match this-match) - (forward-line 0) ; Don't count prompt on current line. + ;; Don't count the current prompt. + (text-property-search-backward 'field 'prompt t) (while (and (< n 0) (setq this-match (text-property-search-backward 'field 'prompt t))) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index d6efd5d75a4..52c5d183dec 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -3394,7 +3394,9 @@ position of the end of the unsafe construct." (goto-char (nth 8 state)) ; beginning of this here-doc (cperl-backward-to-noncomment ; skip back over more (point-min)) ; here-documents (if any) - (beginning-of-line)))) ; skip back over here-doc starters + (beginning-of-line)) ; skip back over here-doc starters + ((nth 4 state) ; in a comment (or POD) + (goto-char (nth 8 state))))) ; ...so go to its beginning (while (and pos (progn (beginning-of-line) (get-text-property (setq pos (point)) 'syntax-type))) diff --git a/lisp/treesit.el b/lisp/treesit.el index ea701ce1ff7..d79e7732387 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3070,7 +3070,9 @@ nil, the grammar is installed to the standard location, the nil 'treesit--install-language-grammar-out-dir-history default-out-dir) - out-dir))) + ;; When called non-interactively, OUT-DIR should + ;; default to DEFAULT-OUT-DIR. + (or out-dir default-out-dir)))) (condition-case err (progn (apply #'treesit--install-language-grammar-1 diff --git a/test/lisp/eshell/em-prompt-tests.el b/test/lisp/eshell/em-prompt-tests.el index 257549e40fb..93bf9d84ab3 100644 --- a/test/lisp/eshell/em-prompt-tests.el +++ b/test/lisp/eshell/em-prompt-tests.el @@ -80,8 +80,13 @@ This tests the case when `eshell-highlight-prompt' is nil." (apply #'propertize "hello\n" eshell-command-output-properties))))))) -(ert-deftest em-prompt-test/next-previous-prompt () - "Check that navigating forward/backward through old prompts works correctly." +(defmacro em-prompt-test--with-multiline (&rest body) + "Execute BODY with a multiline Eshell prompt." + `(let ((eshell-prompt-function (lambda () "multiline prompt\n$ "))) + ,@body)) + +(defun em-prompt-test/next-previous-prompt-with () + "Helper for checking forward/backward navigation of old prompts." (with-temp-eshell (eshell-insert-command "echo one") (eshell-insert-command "echo two") @@ -98,8 +103,17 @@ This tests the case when `eshell-highlight-prompt' is nil." (eshell-next-prompt 3) (should (equal (eshell-get-old-input) "echo fou")))) -(ert-deftest em-prompt-test/forward-backward-matching-input () - "Check that navigating forward/backward via regexps works correctly." +(ert-deftest em-prompt-test/next-previous-prompt () + "Check that navigating forward/backward through old prompts works correctly." + (em-prompt-test/next-previous-prompt-with)) + +(ert-deftest em-prompt-test/next-previous-prompt-multiline () + "Check old prompt forward/backward navigation for multiline prompts." + (em-prompt-test--with-multiline + (em-prompt-test/next-previous-prompt-with))) + +(defun em-prompt-test/forward-backward-matching-input-with () + "Helper for checking forward/backward navigation via regexps." (with-temp-eshell (eshell-insert-command "echo one") (eshell-insert-command "printnl something else") @@ -117,4 +131,13 @@ This tests the case when `eshell-highlight-prompt' is nil." (eshell-forward-matching-input "echo" 3) (should (equal (eshell-get-old-input) "echo fou")))) +(ert-deftest em-prompt-test/forward-backward-matching-input () + "Check that navigating forward/backward via regexps works correctly." + (em-prompt-test/forward-backward-matching-input-with)) + +(ert-deftest em-prompt-test/forward-backward-matching-input-multiline () + "Check forward/backward regexp navigation for multiline prompts." + (em-prompt-test--with-multiline + (em-prompt-test/forward-backward-matching-input-with))) + ;;; em-prompt-tests.el ends here