@end defun
@defvar history-add-new-input
-If the value of this variable is @code{nil}, standard functions that
-read from the minibuffer don't add new elements to the history list.
-This lets Lisp programs explicitly manage input history by using
+If the value of this variable is @code{nil} in a minibuffer, Emacs
+doesn't add new elements to the history list of that minibuffer. This
+lets Lisp programs explicitly manage input history by using
@code{add-to-history}. The default value is @code{t}.
@end defvar
crm-separator))
(crm-canonical-separator (cdr-safe crm-separator))
(string (minibuffer-with-setup-hook
- #'completing-read-multiple-mode
+ (lambda ()
+ (setq-local history-add-new-input nil)
+ (completing-read-multiple-mode))
(completing-read prompt (apply-partially #'crm--table table)
predicate require-match initial-input hist
def inherit-input-method)))
(results (split-string string crm-current-separator t)))
- (when-let ((hist-var (and hist (not (eq hist t))
+ (when-let ((hist-var (and history-add-new-input
+ hist (not (eq hist t))
(if (consp hist) (car hist) hist)))
(hist-list (symbol-value hist)))
- (when (string= (car hist-list) string) (pop (symbol-value hist)))
(dolist (res results) (add-to-history hist-var res)))
results))
(interactive)
(with-isearch-suspended
(let* ((message-log-max nil)
- ;; Don't add a new search string to the search ring here
- ;; in `read-from-minibuffer'. It should be added only
- ;; by `isearch-update-ring' called from `isearch-done'.
- (history-add-new-input nil)
;; Binding minibuffer-history-symbol to nil is a work-around
;; for some incompatibility with gmhist.
(minibuffer-history-symbol)
(minibuffer-allow-text-properties t))
(setq isearch-new-string
(minibuffer-with-setup-hook
- (minibuffer-lazy-highlight-setup)
+ (let ((setup (minibuffer-lazy-highlight-setup)))
+ (lambda ()
+ ;; Don't add a new search string to the search ring here
+ ;; in `read-from-minibuffer'. It should be added only
+ ;; by `isearch-update-ring' called from `isearch-done'.
+ (setq-local history-add-new-input nil)
+ (funcall setup)))
(read-from-minibuffer
(isearch-message-prefix nil isearch-nonincremental)
(cons isearch-string (1+ (or (isearch-fail-pos)
Prompt with PROMPT. REGEXP-FLAG non-nil means the response should be a regexp.
The return value can also be a pair (FROM . TO) indicating that the user
wants to replace FROM with TO."
- (let* ((history-add-new-input nil)
- (separator-string
+ (let* ((separator-string
(when query-replace-from-to-separator
;; Check if the first non-whitespace char is displayable
(if (char-displayable-p
(lambda ()
(setq-local text-property-default-nonsticky
(append '((separator . t) (face . t))
- text-property-default-nonsticky)))
+ text-property-default-nonsticky)
+ history-add-new-input nil))
(if regexp-flag
(read-regexp
(if query-replace-read-from-regexp-default
should a regexp."
(query-replace-compile-replacement
(save-excursion
- (let* ((history-add-new-input nil)
- (to (read-from-minibuffer
- (format "%s %s with: " prompt (query-replace-descr from))
- nil nil nil
- query-replace-to-history-variable from t)))
+ (let* ((to
+ (minibuffer-with-setup-hook
+ (lambda () (setq-local history-add-new-input nil))
+ (read-from-minibuffer
+ (format "%s %s with: " prompt (query-replace-descr from))
+ nil nil nil
+ query-replace-to-history-variable from t))))
(add-to-history query-replace-to-history-variable to nil t)
(add-to-history 'query-replace-defaults (cons from to) nil t)
to))
(suggestions (if (listp defaults) defaults (list defaults)))
(suggestions (append suggestions (read-regexp-suggestions)))
(suggestions (delete-dups (delq nil (delete "" suggestions))))
- ;; Do not automatically add default to the history for empty input.
- (history-add-new-input nil)
;; `read-regexp--case-fold' dynamically bound and may be
;; altered by `M-c'.
(read-regexp--case-fold case-fold-search)
- (input (read-from-minibuffer
- (if (string-match-p ":[ \t]*\\'" prompt)
- prompt
- (format-prompt prompt (and (length> default 0)
- (query-replace-descr default))))
- nil read-regexp-map
- nil (or history 'regexp-history) suggestions t))
+ (input (minibuffer-with-setup-hook
+ (lambda () (setq-local history-add-new-input nil))
+ (read-from-minibuffer
+ (if (string-match-p ":[ \t]*\\'" prompt)
+ prompt
+ (format-prompt prompt (and (length> default 0)
+ (query-replace-descr default))))
+ nil read-regexp-map
+ nil (or history 'regexp-history) suggestions t)))
(result (if (equal input "")
;; Return the default value when the user enters
;; empty input.
PROMPT is a string to prompt with."
;; `current-kill' updates `kill-ring' with a possible interprogram-paste
(current-kill 0)
- (let* ((history-add-new-input nil)
- (history-pos (when yank-from-kill-ring-rotate
+ (let* ((history-pos (when yank-from-kill-ring-rotate
(- (length kill-ring)
(length kill-ring-yank-pointer))))
(ellipsis (if (char-displayable-p ?…) "…" "..."))
s))
read-from-kill-ring-history)))
(minibuffer-with-setup-hook
- (lambda ()
- ;; Allow ‘SPC’ to be self-inserting
- (use-local-map
- (let ((map (make-sparse-keymap)))
- (set-keymap-parent map (current-local-map))
- (define-key map " " nil)
- (define-key map "?" nil)
- map)))
+ (lambda () (setq-local history-add-new-input nil))
(completing-read
prompt
(completion-table-with-metadata
/* String to add to the history. */
Lisp_Object histstring;
Lisp_Object histval;
+ bool nohist = false;
Lisp_Object empty_minibuf;
/* Don't allow the user to undo past this point. */
bset_undo_list (current_buffer, Qnil);
+ /* Cache the buffer-local value. */
+ nohist = NILP (find_symbol_value (Qhistory_add_new_input));
+
recursive_edit_1 ();
/* If cursor is on the minibuffer line,
/* Add the value to the appropriate history list, if any. This is
done after the previous buffer has been made current again, in
case the history variable is buffer-local. */
- if (! (NILP (Vhistory_add_new_input) || NILP (histstring)))
+ if (! (nohist || NILP (histstring)))
call2 (Qadd_to_history, histvar, histstring);
/* If Lisp form desired instead of string, parse it. */
Fset (Qcustom_variable_history, Qnil);
DEFSYM (Qminibuffer_history, "minibuffer-history");
+ DEFSYM (Qhistory_add_new_input, "history-add-new-input");
DEFSYM (Qbuffer_name_history, "buffer-name-history");
Fset (Qbuffer_name_history, Qnil);