Subject: bug#65980: 30.0.50; C-e behaves surprisingly in minibuffer

From: Stephen Berman <[email-masked]>
Date: Thu, 14 Sep 2023 18:51:36 +0200

0. emacs -Q
Sanity checks:
1. Type a command that prompts in the minibuffer and includes text that
   ends before window-width, resulting e.g. in this in the minibuffer:
   Find file: ~/src/emacs/emacs-master/INSTALL
2. Typing C-a moves point to the beginning of the file name and then
   typing C-e moves point to the end of the file name.
3. Typing M-< moves point to the beginning of the prompt and then typing
   C-e moves point to the end of the file name.
Change the input:
4. Now type a command that includes text that extends beyond
   window-width, resulting e.g. in this in the minibuffer:
   Find file: ~/src/emacs/emacs-master/java/org/gnu/emacs/EmacsLauncherPreferencesActivity.java
5. Typing C-a moves point to the beginning of the file name and then
   typing C-e moves point to the end of the file name (same as step 2).
Here's the surprising behavior:
6. Typing M-< moves point to the beginning of the prompt but now typing
   C-e fails to move point.  And if you move point to any position
   within the prompt, e.g. M-f to put point after "Find", then typing
   C-e moves point to the beginning of the prompt.

It certainly seems like a bug that C-e, i.e. move-end-of-line, fails to
move to the end of the line in step 6, and the inconsistency between the
results in step 3 and step 6 also seems like a bug.  The attached patch
ensures that C-e in step 6 moves to the end of the file name, as in step
2, and should only affect the use of C-e in the minibuffer.

In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.17.6) of 2023-09-13 built on strobelfs2
Repository revision: 9838f786ded35fe49bbe84dd78af84df1337adbf
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101008
System Description: Linux From Scratch r12.0-19

Configured using:
 'configure -C 'CFLAGS=-Og -g3' PKG_CONFIG_PATH=/opt/qt5/lib/pkgconfig'
diff --git a/lisp/simple.el b/lisp/simple.el
index 35dd0f59e29..564265d8c60 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -8053,8 +8053,9 @@ line-move-1
 		  ;; We avoid vertical-motion when possible
 		  ;; because that has to fontify.
 		  (forward-line 1))
-		 ;; Otherwise move a more sophisticated way.
-		 ((zerop (vertical-motion 1))
+		 ;; Otherwise move a more sophisticated way, unless
+		 ;; we're in the minibuffer.
+		 ((or (zerop (vertical-motion 1)) (minibufferp))
 		  (if (not noerror)
 		      (signal 'end-of-buffer nil)
 		    (setq done t))))