From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Repeat lambda Date: Mon, 29 Mar 2021 22:28:43 +0300 Organization: LINKOV.NET Message-ID: <87mtul7tcs.fsf@mail.linkov.net> References: <87o8fhekvx.fsf@mail.linkov.net> <385DDC1B-F508-4165-87FD-FFE2461348A6@kuaishou.com> <87ft0nyrfb.fsf@mail.linkov.net> <87blb969vc.fsf_-_@mail.linkov.net> <8FE23CF4-90D9-4633-9CCF-B1FDD24DABCE@kuaishou.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25975"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) Cc: emacs-devel To: Zhiwei Chen Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Mar 29 21:39:28 2021 Return-path: Envelope-to: ged-emacs-devel@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 ) id 1lQxjT-0006fF-VU for ged-emacs-devel@m.gmane-mx.org; Mon, 29 Mar 2021 21:39:27 +0200 Original-Received: from localhost ([::1]:53780 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lQxjT-0001xY-0V for ged-emacs-devel@m.gmane-mx.org; Mon, 29 Mar 2021 15:39:27 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42274) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lQxhh-0000X9-3K for emacs-devel@gnu.org; Mon, 29 Mar 2021 15:37:37 -0400 Original-Received: from relay1-d.mail.gandi.net ([217.70.183.193]:54401) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lQxhd-0003RA-64 for emacs-devel@gnu.org; Mon, 29 Mar 2021 15:37:36 -0400 X-Originating-IP: 91.129.107.223 Original-Received: from mail.gandi.net (m91-129-107-223.cust.tele2.ee [91.129.107.223]) (Authenticated sender: juri@linkov.net) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id E417D240002; Mon, 29 Mar 2021 19:37:29 +0000 (UTC) In-Reply-To: <8FE23CF4-90D9-4633-9CCF-B1FDD24DABCE@kuaishou.com> (Zhiwei Chen's message of "Fri, 26 Mar 2021 06:00:23 +0000") Received-SPF: pass client-ip=217.70.183.193; envelope-from=juri@linkov.net; helo=relay1-d.mail.gandi.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:267153 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit >> diff --git a/lisp/repeat.el b/lisp/repeat.el >> index 84a613da0c..4be4f766ef 100644 >> --- a/lisp/repeat.el >> +++ b/lisp/repeat.el >> @@ -398,7 +398,7 @@ repeat-post-hook >> (when repeat-exit-key >> (define-key map repeat-exit-key 'ignore)) >> - (set-transient-map map))))))) >> + (set-transient-map map t))))))) > > So there is no help message “[Repeat with o, O, ...]” displayed when use 'C-x o O’. Also I noticed another problem with using `t' for KEEP-PRED in set-transient-map: it doesn't handle `repeat-exit-key' after every command. So `t' can't be used. > Maybe we can wrap all commands in `repeat-map’ and show the help > message first, then invoke the bound function? The problem is that currently we get `repeat-map' only from command symbol: (get this-command 'repeat-map) But maybe we could allow the command to set its next repeat-map explicitly: (define-key map "O" (lambda () (interactive) (setq repeat-map 'other-window-repeat-map) (other-window -1))) with such patch: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=repeat-map.patch diff --git a/lisp/repeat.el b/lisp/repeat.el index a2b04b81b0..5ae2ec2967 100644 --- a/lisp/repeat.el +++ b/lisp/repeat.el @@ -342,6 +342,8 @@ repeat-exit-key :group 'convenience :version "28.1") +;;;###autoload (defvar repeat-map nil) + ;;;###autoload (define-minor-mode repeat-mode "Toggle Repeat mode. @@ -364,8 +366,9 @@ repeat-mode (defun repeat-post-hook () "Function run after commands to set transient keymap for repeatable keys." (when repeat-mode - (let ((repeat-map (and (symbolp this-command) - (get this-command 'repeat-map)))) + (let ((repeat-map (or (and (symbolp this-command) + (get this-command 'repeat-map)) + repeat-map))) (when repeat-map (when (boundp repeat-map) (setq repeat-map (symbol-value repeat-map))) @@ -398,7 +401,8 @@ repeat-post-hook (when repeat-exit-key (define-key map repeat-exit-key 'ignore)) - (set-transient-map map))))))) + (set-transient-map map)))))) + (setq repeat-map nil)) (provide 'repeat) --=-=-=--