Subject: bug#3447: suggest minibuffer M-< go to start of text

From: Juri Linkov <[email-masked]>
Date: Wed, 13 Nov 2019 00:04:39 +0200

reopen 3447
quit

>> (define-key minibuffer-local-map "\M-<" 'my-minibuffer-beginning-of-buffer)
>
> I think something like this would be a very good idea.  I frequently
> have long, multiline expressions in the minibuffer, and `M-<' not taking
> me to the start of the editable data is annoying.
>
> Does anybody object to making a change like this?  (It'll have to be
> modernised a bit, of course.)

This still doesn't work with <C-home>.  This can be fixed
by remapping beginning-of-buffer in the patch below.

Like 'C-a' goes to the end of the prompt exactly like <home>,
there is no reason not to do the same for 'M-<' and <C-home>.

Moreover, we don't add defcustoms for simple key bindings
because keybinding are configured with the help of define-key.

This patch should do the right thing:

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 6e72eb73f9..d4b3cb8297 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -2240,7 +2240,7 @@ completion-help-at-point
 
 (let ((map minibuffer-local-map))
   (define-key map "\C-g" 'abort-recursive-edit)
-  (define-key map "\M-<" 'minibuffer-beginning-of-buffer)
+  (define-key map [remap beginning-of-buffer] 'minibuffer-beginning-of-buffer)
 
   (define-key map [remap recenter-top-bottom] 'minibuffer-recenter-top-bottom)
   (define-key map [remap scroll-up-command] 'minibuffer-scroll-up-command)
@@ -2546,14 +2546,6 @@ insert-default-directory
 `set-visited-file-name'."
   :type 'boolean)
 
-(defcustom minibuffer-beginning-of-buffer-movement nil
-  "Control how the `M-<' command in the minibuffer behaves.
-If non-nil, the command will go to the end of the prompt (if
-point is after the end of the prompt).  If nil, it will behave
-like the `beginning-of-buffer' command."
-  :version "27.1"
-  :type 'boolean)
-
 ;; Not always defined, but only called if next-read-file-uses-dialog-p says so.
 (declare-function x-file-dialog "xfns.c"
                   (prompt dir &optional default-filename mustmatch only-dir-p))
@@ -3674,8 +3666,7 @@ minibuffer-beginning-of-buffer
                         (prefix-numeric-value arg))
                      10)))
               ;; Go to the start of the buffer.
-              ((or (null minibuffer-beginning-of-buffer-movement)
-                   (<= (point) (minibuffer-prompt-end)))
+              ((<= (point) (minibuffer-prompt-end))
 	       (point-min))
               ;; Go to the end of the minibuffer.
               (t