]> git.eshelyaron.com Git - emacs.git/commitdiff
minibuf-eldef.el: Simplify
authorEshel Yaron <me@eshelyaron.com>
Sat, 8 Jun 2024 09:47:36 +0000 (11:47 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sat, 8 Jun 2024 09:47:36 +0000 (11:47 +0200)
lisp/minibuf-eldef.el
lisp/minibuffer.el

index 0edc10fd1315f254ffaedcc506b0b572910c0474..8bab1f9388ac624550495a3ea88b6f8e6b8eeabb 100644 (file)
 
 ;;; Code:
 
-(defvar minibuffer-eldef-shorten-default)
-
-(defun minibuffer-default--in-prompt-regexps ()
-  (cons
-   (list
-    (concat
-     "\\("
-     (if (string-match "%s" minibuffer-default-prompt-format)
-         (concat
-          (regexp-quote (substring minibuffer-default-prompt-format
-                                   0 (match-beginning 0)))
-          "\\(.*?\\)"
-          (regexp-quote (substring minibuffer-default-prompt-format
-                                   (match-end 0))))
-       (regexp-quote minibuffer-default-prompt-format))
-     "\\): ")
-    1 (and minibuffer-eldef-shorten-default " [\\2]"))
-   `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
-      1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
-     ("([^(]+?\\(, default\\(?: is\\)? \\(.*\\)\\)):? \\'" 1)
-     ("\\( \\[.*\\]\\):? *\\'" 1))))
-
-(defcustom minibuffer-eldef-shorten-default nil
-  "If non-nil, shorten \"(default ...)\" to \"[...]\" in minibuffer prompts."
-  :set (lambda (symbol value)
-         (set-default symbol value)
-        (setq-default minibuffer-default-in-prompt-regexps
-                      (minibuffer-default--in-prompt-regexps)))
-  :type 'boolean
-  :group 'minibuffer
-  :version "24.3")
-(make-obsolete-variable 'minibuffer-eldef-shorten-default
-                        'minibuffer-default-prompt-format "29.1")
-
-(defvar minibuffer-default-in-prompt-regexps
-  (minibuffer-default--in-prompt-regexps)
-  "A list of regexps matching the parts of minibuffer prompts showing defaults.
-When `minibuffer-electric-default-mode' is active, these regexps are
-used to identify the portions of prompts to elide.
-
-Each entry is of the form (REGEXP MATCH-NUM &optional REWRITE),
-where REGEXP should match the default part of the prompt,
-MATCH-NUM is the subgroup that matched the actual default indicator,
-and REWRITE, if present, is a string to pass to `replace-match' that
-should be displayed in its place.")
-
-\f
 ;;; Internal variables
 
-;; A list of minibuffers to which we've added a post-command-hook.
-(defvar minibuf-eldef-frobbed-minibufs nil)
+(defvar minibuf-eldef-frobbed-minibufs nil
+  "A list of minibuffers to which we've added a `post-command-hook'.")
 
 ;;; The following are all local variables in the minibuffer
 
-;; Input pre-inserted into the minibuffer before the user can edit it.
-(defvar minibuf-eldef-initial-input)
-(make-variable-buffer-local 'minibuf-eldef-initial-input)
-;; and the length of the buffer with it inserted.
-(defvar minibuf-eldef-initial-buffer-length)
-(make-variable-buffer-local 'minibuf-eldef-initial-buffer-length)
+(defvar-local minibuf-eldef-initial-input nil
+  "Input pre-inserted into the minibuffer before the user can edit it.")
 
-;; True if the current minibuffer prompt contains the default spec.
-(defvar minibuf-eldef-showing-default-in-prompt)
-(make-variable-buffer-local 'minibuf-eldef-showing-default-in-prompt)
+(defvar-local minibuf-eldef-initial-buffer-length nil
+  "The length of the minibuffer with initial input inserted.")
 
-;; An overlay covering the default portion of the prompt
-(defvar minibuf-eldef-overlay)
-(make-variable-buffer-local 'minibuf-eldef-overlay)
+(defvar-local minibuf-eldef-showing-default-in-prompt nil
+  "Non-nil if the current minibuffer prompt contains the default spec.")
+
+(defvar-local minibuf-eldef-overlay nil
+  "An overlay covering the default portion of the prompt")
 
 \f
 ;;; Hook functions
@@ -109,54 +59,19 @@ should be displayed in its place.")
 (defun minibuf-eldef-setup-minibuffer ()
   "Set up a minibuffer for `minibuffer-electric-default-mode'.
 The prompt and initial input should already have been inserted."
-  (let ((regexps minibuffer-default-in-prompt-regexps)
-       (match nil))
-    (save-excursion
-      (save-restriction
-       ;; Narrow to only the prompt.
-       (goto-char (point-min))
-       (narrow-to-region (point) (minibuffer-prompt-end))
-       ;; See if the prompt contains a default input indicator.
-       (while regexps
-         (setq match (pop regexps))
-         (cond
-           ((not (re-search-forward (if (stringp match) match (car match))
-                                    nil t))
-            ;; No match yet, try the next rule.
-           (setq match nil))
-           ((and (consp (cdr-safe match)) (nth 2 match))
-            ;; Matched a replacement rule.
-            (let* ((inhibit-read-only t)
-                   (buffer-undo-list t)
-                   (submatch (nth 1 match))
-                   (replacement (nth 2 match))
-                   (props (text-properties-at (match-beginning submatch))))
-              (replace-match replacement nil nil nil submatch)
-              (set-text-properties (match-beginning submatch)
-                                   (match-end submatch)
-                                   props)
-              ;; Replacement done, now keep trying with subsequent rules.
-              (setq match nil)
-              (goto-char (point-min))))
-           ;; Matched a non-replacement (i.e. electric hide) rule, no need to
-           ;; keep trying.
-           (t (setq regexps nil))))))
-    (if (not match)
-       ;; No match for electric hiding, so just make sure our
-       ;; post-command-hook isn't left around.
-       (remove-hook 'post-command-hook #'minibuf-eldef-update-minibuffer t)
-      ;; Yup; set things up so we can frob the prompt as the state of
-      ;; the input string changes.
-      (setq match (if (consp match) (cdr match) 0))
-      (setq match (if (consp match) (car match) match))
-      (setq minibuf-eldef-overlay
-           (make-overlay (match-beginning match) (match-end match)))
-      (setq minibuf-eldef-showing-default-in-prompt t)
-      (setq minibuf-eldef-initial-input
-           (minibuffer-contents-no-properties))
-      (setq minibuf-eldef-initial-buffer-length (point-max))
-      (add-to-list 'minibuf-eldef-frobbed-minibufs (current-buffer))
-      (add-hook 'post-command-hook #'minibuf-eldef-update-minibuffer nil t))))
+  (save-excursion
+    (goto-char (point-min))
+    (if-let ((match (text-property-search-forward 'minibuffer-default)))
+        (progn
+          (setq minibuf-eldef-overlay
+               (make-overlay (prop-match-beginning match)
+                              (prop-match-end match))
+                minibuf-eldef-showing-default-in-prompt t
+                minibuf-eldef-initial-input (minibuffer-contents-no-properties)
+                minibuf-eldef-initial-buffer-length (point-max))
+          (add-to-list 'minibuf-eldef-frobbed-minibufs (current-buffer))
+          (add-hook 'post-command-hook #'minibuf-eldef-update-minibuffer nil t))
+      (remove-hook 'post-command-hook #'minibuf-eldef-update-minibuffer t))))
 
 ;; post-command-hook to swap prompts when necessary
 (defun minibuf-eldef-update-minibuffer ()
@@ -198,7 +113,5 @@ is modified to remove the default indication."
        (remove-hook 'post-command-hook #'minibuf-eldef-update-minibuffer t)))
     (setq minibuf-eldef-frobbed-minibufs nil)))
 
-
 (provide 'minibuf-eldef)
-
 ;;; minibuf-eldef.el ends here
index 2579e3712fca3ed2023dc01737923f1419c5217c..73dca4cd9ae9533812f289a79ff7d596fd6b34b4 100644 (file)
@@ -5921,10 +5921,12 @@ is included in the return value."
    (and default
         (or (not (stringp default))
             (length> default 0))
-        (format (substitute-command-keys minibuffer-default-prompt-format)
-                (if (consp default)
-                    (car default)
-                  default)))
+        (propertize
+         (format (substitute-command-keys minibuffer-default-prompt-format)
+                 (if (consp default)
+                     (car default)
+                   default))
+         'minibuffer-default t))
    ": "))
 
 \f