From 1c0216af0c2b48854fa200dc519d5153de352c51 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Sat, 8 Jun 2024 11:47:36 +0200 Subject: [PATCH] minibuf-eldef.el: Simplify --- lisp/minibuf-eldef.el | 135 ++++++++---------------------------------- lisp/minibuffer.el | 10 ++-- 2 files changed, 30 insertions(+), 115 deletions(-) diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el index 0edc10fd131..8bab1f9388a 100644 --- a/lisp/minibuf-eldef.el +++ b/lisp/minibuf-eldef.el @@ -33,74 +33,24 @@ ;;; 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.") - - ;;; 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") ;;; 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 diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 2579e3712fc..73dca4cd9ae 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -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)) ": ")) -- 2.39.5