From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Thierry Volpiatto <thievol@posteo.net> Newsgroups: gmane.emacs.bugs Subject: bug#66394: 29.1; Make register-read-with-preview more useful Date: Mon, 11 Dec 2023 17:32:29 +0000 Message-ID: <871qbsk5le.fsf@posteo.net> References: <87il7ib6cu.fsf@posteo.net> <8734xyc8z0.fsf@web.de> <87zg05rewi.fsf@posteo.net> <87ttqcg8gw.fsf@web.de> <87h6mcr8ol.fsf@posteo.net> <87r0l73029.fsf@web.de> <877cmdx8ud.fsf@posteo.net> <jwvjzqcxrnq.fsf-monnier+emacs@gnu.org> <87sf50s1gh.fsf@posteo.net> <83o7ficesp.fsf@gnu.org> <878r6leh9d.fsf@posteo.net> <83il5pbnmh.fsf@gnu.org> <87zfz1cz7s.fsf@posteo.net> <83bkbc7j1o.fsf@gnu.org> <8734wov2wv.fsf@posteo.net> <83v89j6arv.fsf@gnu.org> <87cyvpf8y6.fsf@posteo.net> <83plzp82mb.fsf@gnu.org> <87a5qhxf05.fsf@posteo.net> <83jzpkvs4z.fsf@gnu.org> <87v8947ulo.fsf@posteo.net> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2365"; mail-complaints-to="usenet@ciao.gmane.io" Cc: michael_heerdegen@web.de, 66394@debbugs.gnu.org, monnier@iro.umontreal.ca, stefankangas@gmail.com To: Eli Zaretskii <eliz@gnu.org> Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Dec 11 18:33:33 2023 Return-path: <bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org> Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org>) id 1rCk9s-0000Lb-Cn for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 11 Dec 2023 18:33:32 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <bug-gnu-emacs-bounces@gnu.org>) id 1rCk9O-0006HM-Ng; Mon, 11 Dec 2023 12:33:02 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1rCk9A-0005dg-4U for bug-gnu-emacs@gnu.org; Mon, 11 Dec 2023 12:32:49 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1rCk99-0005FI-Pj for bug-gnu-emacs@gnu.org; Mon, 11 Dec 2023 12:32:47 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1rCk9O-0002GI-JH for bug-gnu-emacs@gnu.org; Mon, 11 Dec 2023 12:33:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Thierry Volpiatto <thievol@posteo.net> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces@debbugs.gnu.org> Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Dec 2023 17:33:02 +0000 Resent-Message-ID: <handler.66394.B66394.17023159818677@debbugs.gnu.org> Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66394 X-GNU-PR-Package: emacs Original-Received: via spool by 66394-submit@debbugs.gnu.org id=B66394.17023159818677 (code B ref 66394); Mon, 11 Dec 2023 17:33:02 +0000 Original-Received: (at 66394) by debbugs.gnu.org; 11 Dec 2023 17:33:01 +0000 Original-Received: from localhost ([127.0.0.1]:54530 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces@debbugs.gnu.org>) id 1rCk9M-0002Fo-6M for submit@debbugs.gnu.org; Mon, 11 Dec 2023 12:33:01 -0500 Original-Received: from mout01.posteo.de ([185.67.36.65]:39091) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <thievol@posteo.net>) id 1rCk9I-0002FT-8f for 66394@debbugs.gnu.org; Mon, 11 Dec 2023 12:32:58 -0500 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id B456C240027 for <66394@debbugs.gnu.org>; Mon, 11 Dec 2023 18:32:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1702315955; bh=p500uktwSvuVYfCDNYMcYEKtxqswveeeFUiJIb/VCgo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Autocrypt:OpenPGP: From; b=o+Fky7XsaV80umviwzDxGETVGSwcFxAB2JuGr7669gQAYlkc3RErFndTDkIB6GWkv dIUbX+EVOIFBMV2CxD6C06Fbln+Rv/X66oBZ1W/amBH4RdphDIe9+bleuDyZ4Dw79Z gCzzRcxD6FqqTQ1bSnzXqavDEd1p7ZJV+qfSxWR+sKx82fcddeVj5OxRkYzzcR5SHX ZyjSXMbGW5tpSQ/qNx46arGiH6UmXWMNX6qYOXwVC9H1LmXJr9uzaR8e1kIUQ8SVsN RvfQbFR5srsire9fxmdl+kYlY0HzqGjmzSqEV8LEFstameyjGAcdcK6s1A3ZU+lRtm r44IuQhYv3x5Q== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4SppjD4QcYz6txS; Mon, 11 Dec 2023 18:32:32 +0100 (CET) In-Reply-To: <87v8947ulo.fsf@posteo.net> (Thierry Volpiatto's message of "Mon, 11 Dec 2023 14:10:43 +0100 (3 hours, 53 minutes, 35 seconds ago)") Autocrypt: addr=thievol@posteo.net; prefer-encrypt=mutual; keydata=xsDNBF8ylcIBDADG+hy+zR6L4/vbdDDZuSaMmSrU3A5QZJpeBCvxTr7MpzzruZbhLPW1K3R6N2MA edi8Y+C8o27FVRIjpdbaKMGu9je7JV/TbUQYo3SOwCK1vM4LUn4V6ZLzSYkuiEt4eyMoiDdyvN0p kcK6P9x9DCetcEVszXzQg+yzCVrQ2hXWDXWT4M18EC3wtO7RHPouMqGiwBFhBAYErCqFWFxQHkfb tG/4yGyJ58rglb65O3qijjMWvYwcWZun9/7qm8Z4/4mHopmo2zgU+OrptnLSZfkZGz3Y7Uf452xQ GVq0Fv75NPvQru7y+DYVhuVXXyAmGxt+vf4rIiixMBbhKEPjcxEPAa2LTzex2IsTZR+QVG9uDnqC WcgaOEQ58fzXNvNhtwwF/Rgio2XWAJVdmFWS59/k9W58CIUSNKBMZh2XeGdEmtHvDtCxW3z6FJha 36RzOM3fMNNiAGdFZJA84gcdloJR+sHCDTTPT3784fjr+V8An7sI581NGFzkRQqPvEQCZbUAEQEA Ac0SdGhpZXZvbEBwb3N0ZW8ubmV0wsEOBBMBCgA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA FiEEI9twfRN7r3nig/xwDsVtFB0W75MFAmL3HCoACgkQDsVtFB0W75OVEAv/f6XxmtIFz08fUb8h Bp/zJP6IC4/rhhh+0GMRIRzLN8DK0jV8JCzYdFHiRJOy2lNIOpmrrCmjRRxferc2G42+ePFIsslx hU46VSz1Z83NwIG3mpdYNV5WUTUdgzxExHTNTFCd7NKv0nlHKQaA OpenPGP: url=https://posteo.de/keys/thievol@posteo.net.asc; preference=encrypt X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs.gnu.org> List-Unsubscribe: <https://lists.gnu.org/mailman/options/bug-gnu-emacs>, <mailto:bug-gnu-emacs-request@gnu.org?subject=unsubscribe> List-Archive: <https://lists.gnu.org/archive/html/bug-gnu-emacs> List-Post: <mailto:bug-gnu-emacs@gnu.org> List-Help: <mailto:bug-gnu-emacs-request@gnu.org?subject=help> List-Subscribe: <https://lists.gnu.org/mailman/listinfo/bug-gnu-emacs>, <mailto:bug-gnu-emacs-request@gnu.org?subject=subscribe> Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:276000 Archived-At: <http://permalink.gmane.org/gmane.emacs.bugs/276000> --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Thierry Volpiatto <thievol@posteo.net> writes: > Eli Zaretskii <eliz@gnu.org> writes: > >>> From: Thierry Volpiatto <thievol@posteo.net> >>> Cc: monnier@iro.umontreal.ca, michael_heerdegen@web.de, >>> stefankangas@gmail.com, 66394@debbugs.gnu.org >>> Date: Mon, 11 Dec 2023 09:30:50 +0000 >>>=20 >>> here the last patch that provide Emacs-29 previous behavior as asked on= emacs-dev, >>> I made it the default for now. >>> The only customization one have to do to make a change is through >>> register-use-preview which have now three options: >>>=20 >>> - basic (default - same as Emacs-29- ) >>> - nil (simple preview with filtering, default and no confirm) >>> - never (same as nil but without any preview) >>> - t (the improved version with navigation etc...) >>>=20 >>> I don't know if you want to restore previous behavior (emacs-29), if so= this patch >>> will apply against the previous one. >>> (0001-Don-t-confirm-with-RET-even-when-overwriting-in-regi.patch). >> >> Thank you for all your efforts in this matter. >> >> I asked on emacs-devel that people try this and your previous >> proposal, and provide opinions. (Those CC'ed here are also invited, >> of course.) Let's wait for their responses for a couple of days >> before we make the decision how to proceed. > > Thanks, there is no hurry, let me know if something else is needed, I > will make the needed changes in NEWS and regs.texi once the changes will = be > accepted. I made a little error in one of the patch when merging from a working file for emacs-29.1, attaching here the two patches again with error corrected (read `register-use-preview` instead of `register-preview-use-preview`), sorry for this. =2D-=20 Thierry --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Don-t-confirm-with-RET-even-when-overwriting-in-regi.patch Content-Transfer-Encoding: quoted-printable From=20792ca690f24913d39ca24c8e0088de4ce60533a7 Mon Sep 17 00:00:00 2001 From: Thierry Volpiatto <thievol@posteo.net> Date: Mon, 11 Dec 2023 07:02:40 +0100 Subject: [PATCH 1/2] Don't confirm with RET even when overwriting in regist= er commands This happen when register-use-preview is nil or never. This reproduce what we had previously in 29.1 but with filtering in the preview and default registers are provided for the commands of type 'set'. This is implemented with cl-defmethod to keep the code as much as possible configurable. * lisp/register.el (register-preview-info): New slot. (register-command-info): Add new methods for copy-to-register, point-to-register, number-to-register, window-configuration-to-register, frameset-to-register and copy-rectangle-to-register. (register-read-with-preview): Bind noconfirm. =2D-- lisp/register.el | 67 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/lisp/register.el b/lisp/register.el index ade65b5bdc2..734f351299e 100644 =2D-- a/lisp/register.el +++ b/lisp/register.el @@ -155,7 +155,7 @@ register-preview-info 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 regist= er." =2D types msg act smatch) + types msg act smatch noconfirm) =20 (cl-defgeneric register-command-info (command) "Returns a `register-preview-info' object storing data for COMMAND." @@ -178,24 +178,66 @@ register-command-info :types '(all) :msg "View register `%s'" :act 'view + :noconfirm (memq register-use-preview '(nil never)) :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 + :noconfirm (memq register-use-preview '(nil never)) :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 + :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info :types '(string number) :msg "Increment register `%s'" :act 'modify + :noconfirm (memq register-use-preview '(nil never)) + :smatch t)) +(cl-defmethod register-preview-command-info ((_command (eql copy-to-regist= er))) + (make-register-preview-info + :types '(all) + :msg "Copy to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)))) +(cl-defmethod register-preview-command-info ((_command (eql point-to-regis= ter))) + (make-register-preview-info + :types '(all) + :msg "Point to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)))) +(cl-defmethod register-preview-command-info ((_command (eql number-to-regi= ster))) + (make-register-preview-info + :types '(all) + :msg "Number to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)))) +(cl-defmethod register-preview-command-info + ((_command (eql window-configuration-to-register))) + (make-register-preview-info + :types '(all) + :msg "Window configuration to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)))) +(cl-defmethod register-preview-command-info ((_command (eql frameset-to-re= gister))) + (make-register-preview-info + :types '(all) + :msg "Frameset to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)))) +(cl-defmethod register-preview-command-info ((_command (eql copy-rectangle= -to-register))) + (make-register-preview-info + :types '(all) + :msg "Copy rectangle to register `%s'" + :act 'set + :noconfirm (memq register-use-preview '(nil never)) :smatch t)) =20 (defun register-preview-forward-line (arg) @@ -327,12 +369,13 @@ register-read-with-preview m)) (data (register-command-info this-command)) (enable-recursive-minibuffers t) =2D types msg result timer act win strs smatch) + types msg result timer act win strs smatch noconfirm) (if data =2D (setq types (register-preview-info-types data) =2D msg (register-preview-info-msg data) =2D act (register-preview-info-act data) =2D smatch (register-preview-info-smatch 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) + noconfirm (register-preview-info-noconfirm data)) (setq types '(all) msg "Overwrite register `%s'" act 'set)) @@ -399,13 +442,15 @@ register-read-with-preview "Register `%s' is empty" pat)))))) (unless (string=3D pat "") (with-selected-window (minibuffer-window) =2D (if (and (member pat strs) (memq act '(s= et modify))) + (if (and (member pat strs) + (memq act '(set modify)) + (null noconfirm)) (with-selected-window (minibuffer-wind= ow) (minibuffer-message msg pat)) =2D ;; An empty register or an existing =2D ;; one but the action is insert or =2D ;; jump, don't ask for confirmation =2D ;; and exit immediately (bug#66394). + ;; The action is insert or + ;; jump or noconfirm is specifed + ;; explicitely, don't ask for + ;; confirmation and exit immediately (bu= g#66394). (setq result pat) (exit-minibuffer))))))))) (setq result (read-from-minibuffer =2D-=20 2.34.1 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0002-Provide-emacs-29-behavior-for-register-preview.patch Content-Transfer-Encoding: quoted-printable From=203833b91b7f332e5c9461746ce88cc008ad21778a Mon Sep 17 00:00:00 2001 From: Thierry Volpiatto <thievol@posteo.net> Date: Mon, 11 Dec 2023 18:25:25 +0100 Subject: [PATCH 2/2] Provide emacs-29 behavior for register-preview It is now the default with a value of register-use-preview eq to basic. To change this one have now to customize register-use-preview to another value. * lisp/register.el (register-preview-delay): Remove obsolescence. (register--read-with-preview-function): New. (register-use-preview): New option basic, it is now the default. (register-preview-default-1): New the register-preview-default used by `register-read-with-preview-fancy`. (register-preview-default): Restored (same as Emacs-29). (register--preview-function): Generic fn that return the right function for register--preview-function. (register-preview): Restored (same behavior as Emacs-29). (register-preview-1): Used by `register-read-with-preview-fancy'. (register-read-with-preview-basic): The old register-read-with-preview. (register-read-with-preview-fancy): The new register-read-with-preview. =2D-- lisp/register.el | 133 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 121 insertions(+), 12 deletions(-) diff --git a/lisp/register.el b/lisp/register.el index 734f351299e..fd6c9af060e 100644 =2D-- a/lisp/register.el +++ b/lisp/register.el @@ -100,24 +100,49 @@ register-preview-delay :version "24.4" :type '(choice number (const :tag "No preview unless requested" nil)) :group 'register) =2D(make-obsolete-variable 'register-preview-delay "No longer used." "30.1") =20 (defcustom register-preview-default-keys (mapcar #'string (number-sequence= ?a ?z)) "Default keys for setting a new register." =2D :type '(repeat string)) =2D =2D(defcustom register-use-preview t + :type '(repeat string) + :version 30.1) + +(defvar register--read-with-preview-function nil + "The register read preview function to use. +Two functions are provided, one that provide navigation and +highlighting of the register selected, filtering of register +according to command in use, defaults register to use when +setting a new register, confirmation and notification when you +are about to overwrite a register and generic functions to +configure how each existing commands behave. The other function +provided is the same as what was used in Emacs-29, no filtering, +no navigation, no defaults.") + +(defcustom register-use-preview 'basic "Maybe show register preview. =20 +This have no effect when `register--read-with-preview-function' value +is `register-read-with-preview-basic'. + When set to `t' show a preview buffer with navigation and highlighting. When nil show a basic preview buffer and exit minibuffer immediately after insertion in minibuffer. When set to \\=3D'never behave as above but with no preview buffer at =2Dall." +all. +When set to \\=3D'basic provide a much more basic preview according to +`register-preview-delay', it have the exact same behavior as in Emacs-29." :type '(choice (const :tag "Use preview" t) (const :tag "Use quick preview" nil) =2D (const :tag "Never use preview" never))) + (const :tag "Never use preview" never) + (const :tag "Basic preview like Emacs-29" basic)) + :version 30.1 + :set (lambda (var val) + (set var val) + (setq register--read-with-preview-function + (if (eq val 'basic) + #'register-read-with-preview-basic + #'register-read-with-preview-fancy)) + (setq register-preview-function nil))) =20 (defun get-register (register) "Return contents of Emacs register named REGISTER, or nil if none." @@ -137,17 +162,34 @@ register-describe-oneline (substring d (match-end 0)) d))) =20 =2D(defun register-preview-default (r) +(defun register-preview-default-1 (r) "Function that is the default value of the variable `register-preview-fu= nction'." (format "%s: %s\n" (propertize (string (car r)) 'display (single-key-description (car r))) (register-describe-oneline (car r)))) =20 =2D(defvar register-preview-function #'register-preview-default +(defun register-preview-default (r) + "Function that is the default value of the variable `register-preview-fu= nction'." + (format "%s: %s\n" + (single-key-description (car r)) + (register-describe-oneline (car r)))) + +(defvar register-preview-function nil "Function to format a register for previewing. Called with one argument, a cons (NAME . CONTENTS) as found in `register-a= list'. =2DThe function should return a string, the description of the argument.") +The function should return a string, the description of the argument. +It is set according to the value of `register--read-with-preview-function'= .") + +(cl-defgeneric register--preview-function (read-preview-function) + "Returns a function to format a register for previewing. +This accorfing to the value of read-preview-function.") +(cl-defmethod register--preview-function ((read-preview-function + (eql 'register-read-with-previe= w-basic))) + #'register-preview-default) +(cl-defmethod register--preview-function ((read-preview-function + (eql 'register-read-with-previe= w-fancy))) + #'register-preview-default-1) =20 (cl-defstruct register-preview-info "Store data for a specific register command. @@ -326,12 +368,39 @@ register-of-type-alist when (memq (register-type register) types) collect register))) =20 =2D(defun register-preview (buffer &optional show-empty types) +(defun register-preview (buffer &optional show-empty) + "Pop up a window showing the registers preview in BUFFER. +If SHOW-EMPTY is non-nil, show the window even if no registers. +Format of each entry is controlled by the variable `register-preview-funct= ion'." + (unless register-preview-function + (setq register-preview-function (register--preview-function + register--read-with-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))))) + +(defun register-preview-1 (buffer &optional show-empty types) "Pop up a window showing the registers preview in BUFFER. + +This is the preview function use with +`register-read-with-preview-fancy' function. 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 sh= ow all registers, see `register-type' for suitable types. Format of each entry is controlled by the variable `register-preview-funct= ion'." + (unless register-preview-function + (setq register-preview-function (register--preview-function + register--read-with-preview-function)= )) (let ((registers (register-of-type-alist (or types '(all))))) (when (or show-empty (consp registers)) (with-current-buffer-window @@ -359,6 +428,46 @@ register-read-with-preview "Read and return a register name, possibly showing existing registers. Prompt with the string PROMPT. If `help-char' (or a member of `help-event-list') is pressed, +display such a window regardless." + (funcall register--read-with-preview-function prompt)) + +(defun register-read-with-preview-basic (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. +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))) + (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)) + (let ((w (get-buffer-window buffer))) + (and (window-live-p w) (delete-window w))) + (and (get-buffer buffer) (kill-buffer buffer))))) + +(defun register-read-with-preview-fancy (prompt) + "Read and return a register name, possibly showing existing registers. +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*") (buffer1 "*Register quick preview*") @@ -391,13 +500,13 @@ register-read-with-preview ;; Do nothing when buffer1 is in use. (unless (get-buffer-window buf) (with-selected-window (minibuffer-selected-window) =2D (register-preview buffer 'show-empty types)))= ))) + (register-preview-1 buffer 'show-empty types)))= ))) (define-key map (kbd "<down>") 'register-preview-next) (define-key map (kbd "<up>") '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 (eq register-use-preview 'never)) =2D (register-preview buf nil types)) + (register-preview-1 buf nil types)) (unwind-protect (progn (minibuffer-with-setup-hook =2D-=20 2.34.1 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQHHBAEBCgAxFiEEI9twfRN7r3nig/xwDsVtFB0W75MFAmV3R60THHRoaWV2b2xA cG9zdGVvLm5ldAAKCRAOxW0UHRbvkwfdDACZrHlB/z3lq86O4ubiE9LDLCybFm61 1ZMzjlRX4dp17XrQWmReRUU9Tz262QrRLWUNST5AfveFUhvhQA44q/PVIqZ5K8DQ m8Rp1MX4BFV/nH3+gFdswjKPbJdiKjXmUBQ9ozhiOmP0zeIRrmMtMN/lcewDpZYd g8t/K1txn4euWkWjJf6/myxVBc1VJg6QEFToyjxLBq22Mi0KzbSS0GksirjZQJJX E3Kr7pieANRXWY1A/4WPnzvpELtGKtYWVvO8Cx+QoPF83UhdrHTfSTHAm0du50Ug ZxTmcT49CeIhQ7C2u+a43QbsRhj7A8ATAe+s2AmbiNU+R+NITxO4o83j/0ll/dQ4 64W//XUvLjL6VZ5ZmSfT//VAf8Gvh4lMNEQ+Qnzj1dMu0hmEDFHK6RMEsu9VUVPe wBjNy0aXMWiXt/cFtBVfZAPN1K8bsAJBue0aN1IXS/0bGaulzXVNIxWqhwxXorLt 5BC9BE0GmF3U8fIsp7SnjgMg6X3vmg5xKPk= =uCUI -----END PGP SIGNATURE----- --==-=-=--