commit e87644baa3239ce57a5620d3d38352acc1113fa4 (HEAD, refs/remotes/origin/master) Author: Stephen Berman Date: Wed Nov 29 18:44:35 2023 +0100 ; Fix typos in a recent man.el change * lisp/man.el (Man-getpage-in-background): Delete unintended space characters in the strings for the buffer name. diff --git a/lisp/man.el b/lisp/man.el index f18e2f50b7c..3efa29d7aad 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1191,8 +1191,8 @@ Man-getpage-in-background (man-args topic) (bufname (if (file-remote-p default-directory) - (format "*Man %s %s *" (file-remote-p default-directory) man-args) - (format "*Man %s *" man-args))) + (format "*Man %s %s*" (file-remote-p default-directory) man-args) + (format "*Man %s*" man-args))) (buffer (get-buffer bufname))) (if buffer (Man-notify-when-ready buffer) commit c9097639539e394b9d7bdea1d1d642f47246b9ca Author: Ulrich Müller Date: Wed Nov 29 17:02:22 2023 +0100 ; * lisp/calc/calc-units.el (math-standard-units): Fix typo. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 915e15a69d6..05a603c3f56 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -303,7 +303,7 @@ math-standard-units "9.2740100783 10^-24 J/T (*)") ( muN "5.0507837461*10^(-27) J/T" "Nuclear magneton" nil "5.0507837461 10^-27 J/T (*)") - ( mue "−9.2847647043*10^(-24) J/T" "Electron magnetic moment" nil + ( mue "-9.2847647043*10^(-24) J/T" "Electron magnetic moment" nil "-9.2847647043 10^-24 J/T (*)") ( mup "1.41060679736*10^(-26) J/T" "Proton magnetic moment" nil "1.41060679736 10^-26 J/T (*)") commit a811846879d465cc273a106c5e55d3cb1e0bbb8e Author: Ulrich Müller Date: Wed Nov 29 16:48:11 2023 +0100 ; * lisp/calc/calc-units.el: Update dead URL. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 2acc98ed384..915e15a69d6 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -44,7 +44,7 @@ ;;; All conversions are exact unless otherwise noted. ;; Updated November 2018 for the redefinition of the SI -;; https://www.bipm.org/utils/en/pdf/CGPM/Draft-Resolution-A-EN.pdf +;; https://www.bipm.org/en/committees/cg/cgpm/26-2018/resolution-1 ;; CODATA values last updated November 2023, using 2018 adjustment: ;; E. Tiesinga, P. J. Mohr, D. B. Newell, and B. N. Taylor, commit 7742b7cea4fab474371e11d7de877bcf00ebf3c0 Author: Ulrich Müller Date: Wed Nov 29 10:24:06 2023 +0100 Update Calc units table * lisp/calc/calc-units.el (math-standard-units): Update to 2018 CODATA adjustment. Use exact value for V0. Update some spellings, e.g. "Planck constant" instead of "Planck's constant". diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index f20e5801a01..2acc98ed384 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -43,12 +43,13 @@ ;;; Measures, by François Cardarelli) ;;; All conversions are exact unless otherwise noted. -;; CODATA values updated February 2016, using 2014 adjustment -;; https://arxiv.org/pdf/1507.07956.pdf - ;; Updated November 2018 for the redefinition of the SI ;; https://www.bipm.org/utils/en/pdf/CGPM/Draft-Resolution-A-EN.pdf +;; CODATA values last updated November 2023, using 2018 adjustment: +;; E. Tiesinga, P. J. Mohr, D. B. Newell, and B. N. Taylor, +;; Rev. Mod. Phys. 93, 025010 (2021) + (defvar math-standard-units '( ;; Length ( m nil "*Meter" ) @@ -122,7 +123,6 @@ math-standard-units ( mph "mi/hr" "*Miles per hour" ) ( kph "km/hr" "Kilometers per hour" ) ( knot "nmi/hr" "Knot" ) - ( c "299792458 m/s" "Speed of light" ) ;; SI definition ;; Acceleration ( ga "980665*10^(-5) m/s^2" "*\"g\" acceleration" nil @@ -143,8 +143,8 @@ math-standard-units "31.10347680 g") ;; ESUWM, 1/12 exact value for lbt ( ct "(2/10) g" "Carat" nil "0.2 g") ;; ESUWM - ( u "1.660539040*10^(-27) kg" "Unified atomic mass" nil - "1.660539040 10^-27 kg (*)");;(approx) CODATA + ( u "1.66053906660*10^(-27) kg" "Unified atomic mass" nil + "1.66053906660 10^-27 kg (*)") ;; (approx) CODATA ;; Force ( N "m kg/s^2" "*Newton" ) @@ -210,9 +210,6 @@ math-standard-units ( A nil "*Ampere" ) ( C "A s" "Coulomb" ) ( Fdy "ech Nav" "Faraday" ) - ( e "ech" "Elementary charge" ) - ( ech "1.602176634*10^(-19) C" "Elementary charge" nil - "1.602176634 10^-19 C") ;; SI definition ( V "W/A" "Volt" ) ( ohm "V/A" "Ohm" ) ( Ω "ohm" "Ohm" ) @@ -259,53 +256,61 @@ math-standard-units ;; Solid angle ( sr nil "*Steradian" ) + ;; Constants defining the International System of Units (SI) + ( c "299792458 m/s" "*Speed of light" ) + ( h "6.62607015*10^(-34) J s" "Planck constant" nil + "6.62607015 10^-34 J s") + ( ech "1.602176634*10^(-19) C" "Elementary charge" nil + "1.602176634 10^-19 C") + ( e "ech" "Elementary charge" nil + "1.602176634 10^-19 C") + ( k "1.380649*10^(-23) J/K" "Boltzmann constant" nil + "1.380649 10^-23 J/K") + ( Nav "6.02214076*10^(23) / mol" "Avogadro constant" nil + "6.02214076 10^23 / mol") + ;; Other physical quantities ;; Unless otherwise mentioned, the values are from CODATA, ;; and are approximate. - ( h "6.62607015*10^(-34) J s" "*Planck's constant" nil - "6.62607015 10^-34 J s") ;; SI definition - ( hbar "h / (2 pi)" "Planck's constant" ) ;; Exact + ( hbar "h / (2 pi)" "*Reduced Planck constant" ) ;; After the 2018 SI redefinition, eps0 and mu0 are measured quantities, ;; and mu0 no longer has the previous exact value of 4 pi 10^(-7) H/m. ( eps0 "ech^2 / (2 alpha h c)" "Permittivity of vacuum" ) ( ε0 "eps0" "Permittivity of vacuum" ) ( mu0 "1 / (eps0 c^2)" "Permeability of vacuum") ( μ0 "mu0" "Permeability of vacuum") - ( G "6.67408*10^(-11) m^3/(kg s^2)" "Gravitational constant" nil - "6.67408 10^-11 m^3/(kg s^2) (*)") - ( Nav "6.02214076*10^(23) / mol" "Avogadro's constant" nil - "6.02214076 10^23 / mol") ;; SI definition - ( me "9.10938356*10^(-31) kg" "Electron rest mass" nil - "9.10938356 10^-31 kg (*)") - ( mp "1.672621898*10^(-27) kg" "Proton rest mass" nil - "1.672621898 10^-27 kg (*)") - ( mn "1.674927471*10^(-27) kg" "Neutron rest mass" nil - "1.674927471 10^-27 kg (*)") - ( mmu "1.883531594*10^(-28) kg" "Muon rest mass" nil - "1.883531594 10^-28 kg (*)") + ( G "6.67430*10^(-11) m^3/(kg s^2)" "Gravitational constant" nil + "6.67430 10^-11 m^3/(kg s^2) (*)") + ( me "9.1093837015*10^(-31) kg" "Electron rest mass" nil + "9.1093837015 10^-31 kg (*)") + ( mp "1.67262192369*10^(-27) kg" "Proton rest mass" nil + "1.67262192369 10^-27 kg (*)") + ( mn "1.67492749804*10^(-27) kg" "Neutron rest mass" nil + "1.67492749804 10^-27 kg (*)") + ( mmu "1.883531627*10^(-28) kg" "Muon rest mass" nil + "1.883531627 10^-28 kg (*)") ( mμ "mmu" "Muon rest mass" nil - "1.883531594 10^-28 kg (*)") - ( Ryd "10973731.568508 /m" "Rydberg's constant" nil - "10973731.568508 /m (*)") - ( k "1.380649*10^(-23) J/K" "Boltzmann's constant" nil - "1.380649 10^-23 J/K") ;; SI definition + "1.883531627 10^-28 kg (*)") + ( Ryd "10973731.568160 /m" "Rydberg constant" nil + "10973731.568160 /m (*)") ( sigma "2 pi^5 k^4 / (15 h^3 c^2)" "Stefan-Boltzmann constant") ( σ "sigma" "Stefan-Boltzmann constant") - ( alpha "7.2973525664*10^(-3)" "Fine structure constant" nil - "7.2973525664 10^-3 (*)") - ( α "alpha" "Fine structure constant" nil - "7.2973525664 10^-3 (*)") - ( muB "927.4009994*10^(-26) J/T" "Bohr magneton" nil - "927.4009994 10^-26 J/T (*)") - ( muN "5.050783699*10^(-27) J/T" "Nuclear magneton" nil - "5.050783699 10^-27 J/T (*)") - ( mue "-928.4764620*10^(-26) J/T" "Electron magnetic moment" nil - "-928.4764620 10^-26 J/T (*)") - ( mup "1.4106067873*10^(-26) J/T" "Proton magnetic moment" nil - "1.4106067873 10^-26 J/T (*)") - ( R0 "Nav k" "Molar gas constant") ;; Exact - ( V0 "22.710947*10^(-3) m^3/mol" "Standard volume of ideal gas" nil - "22.710947 10^-3 m^3/mol (*)") + ( alpha "7.2973525693*10^(-3)" "Fine structure constant" nil + "7.2973525693 10^-3 (*)") + ( α "alpha" "Fine structure constant" nil + "7.2973525693 10^-3 (*)") + ( muB "9.2740100783*10^(-24) J/T" "Bohr magneton" nil + "9.2740100783 10^-24 J/T (*)") + ( muN "5.0507837461*10^(-27) J/T" "Nuclear magneton" nil + "5.0507837461 10^-27 J/T (*)") + ( mue "−9.2847647043*10^(-24) J/T" "Electron magnetic moment" nil + "-9.2847647043 10^-24 J/T (*)") + ( mup "1.41060679736*10^(-26) J/T" "Proton magnetic moment" nil + "1.41060679736 10^-26 J/T (*)") + ( R0 "Nav k" "Molar gas constant" ) + ( V0 "R0 273.15 K / 10^5 Pa" "Standard volume of ideal gas" ) + ;; IUPAC 1982 standard temperature and pressure + ;; Logarithmic units ( Np nil "*Neper") ( dB "(ln(10)/20) Np" "decibel")) commit e3ed3bc755195a273078dcd577dd0902f7699a7a Author: Stefan Monnier Date: Wed Nov 29 10:45:33 2023 -0500 * lisp/emacs-lisp/eieio-core.el (eieio-set-defaults): Silence errors See bug#66938 diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index a394156c93a..37c5ebdb6da 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -951,7 +951,10 @@ eieio-set-defaults (let ((slots (eieio--class-slots (eieio--object-class obj)))) (dotimes (i (length slots)) (let* ((name (cl--slot-descriptor-name (aref slots i))) - (df (eieio-oref-default obj name))) + ;; If the `:initform` signals an error, just skip it, + ;; since the error is intended to be signal'ed from + ;; `initialize-instance` rather than at the time of `defclass`. + (df (ignore-errors (eieio-oref-default obj name)))) (if (or df set-all) (eieio-oset obj name df)))))) commit 914e9bd4fe5ab9360d98a79e0bf9beb22f6973e2 Author: Eli Zaretskii Date: Wed Nov 29 16:24:48 2023 +0200 ; * lisp/indent.el (indent-for-tab-command): Use 'memq'. (Bug#67158) diff --git a/lisp/indent.el b/lisp/indent.el index f64049d64b2..f856f0c9ab5 100644 --- a/lisp/indent.el +++ b/lisp/indent.el @@ -190,7 +190,7 @@ indent-for-tab-command ('nil t) ('eol (eolp)) ('word (not (eql 2 syn))) - ('word-or-paren (not (memql syn '(2 4 5)))) + ('word-or-paren (not (memq syn '(2 4 5)))) ('word-or-paren-or-punct (not (memq syn '(2 4 5 1)))))))) (completion-at-point)) commit 589e6ae1fb983bfba42f20906773555037246e45 Author: Thierry Volpiatto Date: Sun Nov 19 20:42:56 2023 +0100 Improve register-preview (Fix bug#66394) A minibuffer is used now instead of read-key. Registers in preview buffer are now filtered according to type of registers the current command requires. Navigation with C-n/p or up/down is now provided and update minibuffer. Current register is highlighted in preview buffer. * lisp/register.el: (register-preview-default-keys) (register-use-preview): New user variables. (register-preview-info): New structure to store various info for preview. (register-command-info): New generic. (register-preview-forward-line): New, provide navigation in preview buffer. (register-preview-next, register-preview-previous): New, navigation. (register-type): New, returns register type. (register--type): Generic fn, new, returns register type according to value. (register-of-type-alist): New, filter register-alist according to type. (register-preview): Signature changed, use TYPES now. (register-preview-get-defaults): New generic, compute defauts according to action. (register-read-with-preview): Now use read-from-minibuffer and minibuffer-setup-hook. * lisp/emacs-lisp/cl-generic.el: Add a call to 'cl--generic-prefill-dispatchers' to fix a build error. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 56eb83e6f75..0ef0d1e192a 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -1379,6 +1379,7 @@ cl-generic-generalizers (cl--generic-prefill-dispatchers 0 integer) (cl--generic-prefill-dispatchers 1 integer) (cl--generic-prefill-dispatchers 0 cl--generic-generalizer integer) +(cl--generic-prefill-dispatchers 0 (eql 'x) integer) ;;; Dispatch on major mode. diff --git a/lisp/register.el b/lisp/register.el index ca6de450993..61bef503f91 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -35,6 +35,8 @@ ;; FIXME: Clean up namespace usage! +(declare-function frameset-register-p "frameset") + (cl-defstruct (registerv (:constructor nil) (:constructor registerv--make (&optional data print-func @@ -91,6 +93,7 @@ register-separator :type '(choice (const :tag "None" nil) (character :tag "Use register" :value ?+))) +;; FIXME: This is no more needed, remove it. (defcustom register-preview-delay 1 "If non-nil, time to wait in seconds before popping up register preview window. If nil, do not show register previews, unless `help-char' (or a member of @@ -99,6 +102,14 @@ register-preview-delay :type '(choice number (const :tag "No preview unless requested" nil)) :group 'register) +(defcustom register-preview-default-keys (mapcar #'string (number-sequence ?a ?z)) + "Default keys for setting a new register." + :type '(repeat string)) + +(defcustom register-use-preview t + "Always show register preview when non nil." + :type 'boolean) + (defun get-register (register) "Return contents of Emacs register named REGISTER, or nil if none." (alist-get register register-alist)) @@ -128,53 +139,263 @@ register-preview-function Called with one argument, a cons (NAME . CONTENTS) as found in `register-alist'. The function should return a string, the description of the argument.") -(defun register-preview (buffer &optional show-empty) +(cl-defstruct register-preview-info + "Store data for a specific register command. +TYPES are the types of register supported. +MSG is the minibuffer message to send when a register is selected. +ACT is the type of action the command is doing on register. +SMATCH accept a boolean value to say if command accept non matching register." + types msg act smatch) + +(cl-defgeneric register-command-info (command) + "Returns a `register-preview-info' object storing data for COMMAND." + (ignore command)) +(cl-defmethod register-command-info ((_command (eql insert-register))) + (make-register-preview-info + :types '(string number) + :msg "Insert register `%s'" + :act 'insert + :smatch t)) +(cl-defmethod register-command-info ((_command (eql jump-to-register))) + (make-register-preview-info + :types '(window frame marker kmacro + file buffer file-query) + :msg "Jump to register `%s'" + :act 'jump + :smatch t)) +(cl-defmethod register-command-info ((_command (eql view-register))) + (make-register-preview-info + :types '(all) + :msg "View register `%s'" + :act 'view + :smatch t)) +(cl-defmethod register-command-info ((_command (eql append-to-register))) + (make-register-preview-info + :types '(string number) + :msg "Append to register `%s'" + :act 'modify + :smatch t)) +(cl-defmethod register-command-info ((_command (eql prepend-to-register))) + (make-register-preview-info + :types '(string number) + :msg "Prepend to register `%s'" + :act 'modify + :smatch t)) +(cl-defmethod register-command-info ((_command (eql increment-register))) + (make-register-preview-info + :types '(string number) + :msg "Increment register `%s'" + :act 'modify + :smatch t)) + +(defun register-preview-forward-line (arg) + "Move to next or previous line in register preview buffer. +If ARG is positive goto next line, if negative to previous. +Do nothing when defining or executing kmacros." + ;; Ensure user enter manually key in minibuffer when recording a macro. + (unless (or defining-kbd-macro executing-kbd-macro + (not (get-buffer-window "*Register Preview*" 'visible))) + (let ((fn (if (> arg 0) #'eobp #'bobp)) + (posfn (if (> arg 0) + #'point-min + (lambda () (1- (point-max))))) + str) + (with-current-buffer "*Register Preview*" + (let ((ovs (overlays-in (point-min) (point-max))) + pos) + (goto-char (if ovs + (overlay-start (car ovs)) + (point-min))) + (setq pos (point)) + (and ovs (forward-line arg)) + (when (and (funcall fn) + (or (> arg 0) (eql pos (point)))) + (goto-char (funcall posfn))) + (setq str (buffer-substring-no-properties + (pos-bol) (1+ (pos-bol)))) + (remove-overlays) + (with-selected-window (minibuffer-window) + (delete-minibuffer-contents) + (insert str))))))) + +(defun register-preview-next () + "Goto next line in register preview buffer." + (interactive) + (register-preview-forward-line 1)) + +(defun register-preview-previous () + "Goto previous line in register preview buffer." + (interactive) + (register-preview-forward-line -1)) + +(defun register-type (register) + "Return REGISTER type. +Current register types actually returned are one of: +- string +- number +- marker +- buffer +- file +- file-query +- window +- frame +- kmacro + +One can add new types to a specific command by defining a new `cl-defmethod' +matching this command. Predicate for type in new `cl-defmethod' should +satisfy `cl-typep' otherwise the new type should be defined with +`cl-deftype'." + ;; Call register--type against the register value. + (register--type (if (consp (cdr register)) + (cadr register) + (cdr register)))) + +(cl-defgeneric register--type (regval) + "Returns type of register value REGVAL." + (ignore regval)) + +(cl-defmethod register--type ((_regval string)) 'string) +(cl-defmethod register--type ((_regval number)) 'number) +(cl-defmethod register--type ((_regval marker)) 'marker) +(cl-defmethod register--type ((_regval (eql 'buffer))) 'buffer) +(cl-defmethod register--type ((_regval (eql 'file))) 'file) +(cl-defmethod register--type ((_regval (eql 'file-query))) 'file-query) +(cl-defmethod register--type ((_regval window-configuration)) 'window) +(cl-deftype frame-register () '(satisfies frameset-register-p)) +(cl-defmethod register--type :extra "frame-register" (_regval) 'frame) +(cl-deftype kmacro-register () '(satisfies kmacro-register-p)) +(cl-defmethod register--type :extra "kmacro-register" (_regval) 'kmacro) + +(defun register-of-type-alist (types) + "Filter `register-alist' according to TYPES." + (if (memq 'all types) + register-alist + (cl-loop for register in register-alist + when (memq (register-type register) types) + collect register))) + +(defun register-preview (buffer &optional show-empty types) "Pop up a window showing the registers preview in BUFFER. If SHOW-EMPTY is non-nil, show the window even if no registers. +Argument TYPES (a list) specify the types of register to show, when nil show all +registers, see `register-type' for suitable types. Format of each entry is controlled by the variable `register-preview-function'." - (when (or show-empty (consp register-alist)) - (with-current-buffer-window - buffer - (cons 'display-buffer-below-selected - '((window-height . fit-window-to-buffer) - (preserve-size . (nil . t)))) - nil - (with-current-buffer standard-output - (setq cursor-in-non-selected-windows nil) - (mapc (lambda (elem) - (when (get-register (car elem)) - (insert (funcall register-preview-function elem)))) - register-alist))))) + (let ((registers (register-of-type-alist (or types '(all))))) + (when (or show-empty (consp registers)) + (with-current-buffer-window + buffer + (cons 'display-buffer-below-selected + '((window-height . fit-window-to-buffer) + (preserve-size . (nil . t)))) + nil + (with-current-buffer standard-output + (setq cursor-in-non-selected-windows nil) + (mapc (lambda (elem) + (when (get-register (car elem)) + (insert (funcall register-preview-function elem)))) + registers)))))) + +(cl-defgeneric register-preview-get-defaults (action) + "Returns default registers according to ACTION." + (ignore action)) +(cl-defmethod register-preview-get-defaults ((_action (eql set))) + (cl-loop for s in register-preview-default-keys + unless (assoc (string-to-char s) register-alist) + collect s)) (defun register-read-with-preview (prompt) "Read and return a register name, possibly showing existing registers. -Prompt with the string PROMPT. If `register-alist' and -`register-preview-delay' are both non-nil, display a window -listing existing registers after `register-preview-delay' seconds. +Prompt with the string PROMPT. If `help-char' (or a member of `help-event-list') is pressed, display such a window regardless." (let* ((buffer "*Register Preview*") - (timer (when (numberp register-preview-delay) - (run-with-timer register-preview-delay nil - (lambda () - (unless (get-buffer-window buffer) - (register-preview buffer)))))) - (help-chars (cl-loop for c in (cons help-char help-event-list) - when (not (get-register c)) - collect c))) + (pat "") + (map (let ((m (make-sparse-keymap))) + (set-keymap-parent m minibuffer-local-map) + m)) + (data (register-command-info this-command)) + types msg result timer act win strs smatch) + (if data + (setq types (register-preview-info-types data) + msg (register-preview-info-msg data) + act (register-preview-info-act data) + smatch (register-preview-info-smatch data)) + (setq types '(all) + msg "Overwrite register `%s'" + act 'set)) + (setq strs (mapcar (lambda (x) + (string (car x))) + (register-of-type-alist types))) + (when (and (memq act '(insert jump view)) (null strs)) + (error "No register suitable for `%s'" act)) + (dolist (k (cons help-char help-event-list)) + (define-key map + (vector k) (lambda () + (interactive) + (unless (get-buffer-window buffer) + (with-selected-window (minibuffer-selected-window) + (register-preview buffer 'show-empty types)))))) + (define-key map (kbd "") 'register-preview-next) + (define-key map (kbd "") 'register-preview-previous) + (define-key map (kbd "C-n") 'register-preview-next) + (define-key map (kbd "C-p") 'register-preview-previous) + (unless (or executing-kbd-macro (null register-use-preview)) + (register-preview buffer nil types)) (unwind-protect - (progn - (while (memq (read-key (propertize prompt 'face 'minibuffer-prompt)) - help-chars) - (unless (get-buffer-window buffer) - (register-preview buffer 'show-empty))) - (when (or (eq ?\C-g last-input-event) - (eq 'escape last-input-event) - (eq ?\C-\[ last-input-event)) - (keyboard-quit)) - (if (characterp last-input-event) last-input-event - (error "Non-character input-event"))) - (and (timerp timer) (cancel-timer timer)) + (progn + (minibuffer-with-setup-hook + (lambda () + (setq timer + (run-with-idle-timer + 0.01 'repeat + (lambda () + (with-selected-window (minibuffer-window) + (let ((input (minibuffer-contents))) + (when (> (length input) 1) + (let ((new (substring input 1)) + (old (substring input 0 1))) + (setq input (if (or (null smatch) + (member new strs)) + new old)) + (delete-minibuffer-contents) + (insert input))) + (when (and smatch (not (string= input "")) + (not (member input strs))) + (setq input "") + (delete-minibuffer-contents) + (minibuffer-message "Not matching")) + (when (not (string= input pat)) + (setq pat input)))) + (if (setq win (get-buffer-window buffer)) + (with-selected-window win + (let ((ov (make-overlay (point-min) (point-min)))) + (goto-char (point-min)) + (remove-overlays) + (unless (string= pat "") + (if (re-search-forward (concat "^" pat) nil t) + (progn (move-overlay + ov + (match-beginning 0) (pos-eol)) + (overlay-put ov 'face 'match) + (when msg + (with-selected-window (minibuffer-window) + (minibuffer-message msg pat)))) + (with-selected-window (minibuffer-window) + (minibuffer-message + "Register `%s' is empty" pat)))))) + (unless (string= pat "") + (if (member pat strs) + (with-selected-window (minibuffer-window) + (minibuffer-message msg pat)) + (with-selected-window (minibuffer-window) + (minibuffer-message + "Register `%s' is empty" pat))))))))) + (setq result (read-from-minibuffer + prompt nil map nil nil (register-preview-get-defaults act)))) + (cl-assert (and result (not (string= result ""))) + nil "No register specified") + (string-to-char result)) + (when timer (cancel-timer timer)) (let ((w (get-buffer-window buffer))) (and (window-live-p w) (delete-window w))) (and (get-buffer buffer) (kill-buffer buffer)))))