From: storm@cua.dk (Kim F. Storm)
Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: Another bug with the macro counter
Date: Sat, 30 Oct 2004 23:57:48 +0200 [thread overview]
Message-ID: <m3zn23na1v.fsf@kfs-l.imdomain.dk> (raw)
In-Reply-To: <200410301451.i9UEpNG02900@raven.dms.auburn.edu> (Luc Teirlinck's message of "Sat, 30 Oct 2004 09:51:23 -0500 (CDT)")
Thanks for working on this problem!
I don't quite follow the logic here:
+ (or (not (featurep 'kmacro))
+ appending-to-kbd-macro
+ ;; never exits the or.
+ (setq appending-to-kbd-macro nil)
+ (with-no-warnings (kmacro-ring-empty-p))
+ (with-no-warnings (kmacro-pop-ring)))
If appending-to-kbd-macro is non-nil in the second line, you don't get
to the third line which sets it to nil (i.e. it is only set to nil if
it is already nil).
I think it will be better if kmacro.el defines a function
(defun kmacro-quit ()
(or appending-to-kbd-macro
(kmacro-ring-empty-p)
(kmacro-pop-ring))
(setq appending-to-kbd-macro nil))
which does the cleanup and then simply call this as
(if (fboundp 'kmacro-quit)
(kmacro-quit))
in keyboard-quit.
Or even better, define a keyboard-quit-hook and add kmacro-quit to it.
Here is a patch which does that:
*** simple.el 25 Oct 2004 10:45:18 +0200 1.664
--- simple.el 30 Oct 2004 23:51:40 +0200
***************
*** 3910,3920 ****
--- 3910,3926 ----
;; This executes C-g typed while Emacs is waiting for a command.
;; Quitting out of a program does not go through here;
;; that happens in the QUIT macro at the C code level.
+
+ (defvar keyboard-quit-hook nil
+ "Normal hook run by `keyboard-quit'.
+ It is called before any of the normal cleanup performed by `keyboard-quit'.")
+
(defun keyboard-quit ()
"Signal a `quit' condition.
During execution of Lisp code, this character causes a quit directly.
At top-level, as an editor command, this simply beeps."
(interactive)
+ (run-hooks 'keyboard-quit-hook)
(deactivate-mark)
(setq defining-kbd-macro nil)
(signal 'quit nil))
*** kmacro.el 19 Oct 2004 12:54:29 +0200 1.23
--- kmacro.el 30 Oct 2004 23:52:43 +0200
***************
*** 222,227 ****
--- 222,239 ----
(global-set-key (vector kmacro-call-mouse-event) 'kmacro-end-call-mouse))
+ ;;; Keyboard Quit Handler
+
+ (defvar kmacro-appending-p nil)
+
+ (defun kmacro-keyboard-quit ()
+ (or kmacro-appending-p
+ (kmacro-ring-empty-p)
+ (kmacro-pop-ring))
+ (setq kmacro-appending-p nil))
+
+ (add-hook 'keyboard-quit-hook 'kmacro-keyboard-quit)
+
;;; Keyboard macro counter
***************
*** 564,569 ****
--- 576,582 ----
(if (or defining-kbd-macro executing-kbd-macro)
(message "Already defining keyboard macro.")
(let ((append (and arg (listp arg))))
+ (setq kmacro-appending-p append)
(unless append
(if last-kbd-macro
(let ((len (length kmacro-ring)))
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
next prev parent reply other threads:[~2004-10-30 21:57 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-21 1:07 Another bug with the macro counter Luc Teirlinck
2004-10-30 2:38 ` Luc Teirlinck
2004-10-30 3:27 ` Luc Teirlinck
2004-10-30 4:06 ` Stefan
2004-10-30 14:19 ` Luc Teirlinck
2004-10-30 16:12 ` Stefan
2004-10-30 18:06 ` David Kastrup
2004-10-30 23:13 ` Luc Teirlinck
2004-10-31 0:09 ` Stefan
2004-10-31 7:43 ` David Kastrup
2004-10-31 13:30 ` Andreas Schwab
2004-10-31 17:05 ` Stefan
2004-10-31 18:36 ` David Kastrup
2004-10-31 18:52 ` Luc Teirlinck
2004-10-30 14:24 ` Luc Teirlinck
2004-10-30 14:51 ` Luc Teirlinck
2004-10-30 21:57 ` Kim F. Storm [this message]
2004-10-30 22:04 ` Luc Teirlinck
2004-10-30 22:09 ` Luc Teirlinck
2004-10-30 22:43 ` Kim F. Storm
2004-10-31 21:01 ` Luc Teirlinck
2004-10-31 23:23 ` Kim F. Storm
2004-11-01 7:24 ` Richard Stallman
2004-10-31 9:42 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3zn23na1v.fsf@kfs-l.imdomain.dk \
--to=storm@cua.dk \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).