From: Luc Teirlinck <teirllm@dms.auburn.edu>
Cc: emacs-devel@gnu.org
Subject: Re: Another bug with the macro counter
Date: Fri, 29 Oct 2004 21:38:24 -0500 (CDT) [thread overview]
Message-ID: <200410300238.i9U2cOD02290@raven.dms.auburn.edu> (raw)
In-Reply-To: <200410210107.i9L176B10842@raven.dms.auburn.edu> (message from Luc Teirlinck on Wed, 20 Oct 2004 20:07:06 -0500 (CDT))
>From my earlier message:
Do `emacs -q'.
C-x ( a C-x C-k C-i b RET C-x )
C-x e e e
C-x ( C-g
C-x e
Result:
a0b
a1b
a2b
a3b
a0b
Of course, the newly to be defined macro got its counter reset to 0.
But after we changed our mind, decided not to define a macro and quit,
there is no reason why the counter for the previously defined macro
should be reset to 0.
Actually, that was a misinterpretation. There is a problem in the
above, but not the one I suspected.
The problem is that after the user quits while defining a macro, the
old head of the keyboard macro ring is still the head, with a reset
counter (because `kmacro-start-macro' reset it). That _same_ macro is
now however _also_ the previous macro on the ring (but with the
original counter) because `kmacro-start-macro' already pushed it onto
the macro ring. That duplication is confusing to the user, _even_ if
the user does not care about the counter.
The patches below fix the bug. If they look OK, I will install them
after doing some extra final checking.
There is one thing that the patches below do not fix: they do not
reset `kmacro-last-counter' correctly. To fix that, as well as
several other bugs related to the keyboard macro counter, the elements
of `kmacro-ring' should be quadruples (MACRO COUNTER LAST-COUNTER FORMAT)
rather than triples (MACRO COUNTER FORMAT). If there is more than one
keyboard macro _all_ the relevant information needs to be stored in
`kmacro-ring'. The patches below do not do that.
The patch to simple.el also quiets the compiler for `edebug-active'.
This is unrelated, but while getting rid of compiler warnings related
to my patch, I can quite as well get rid of all warnings. (I checked
that the warnings are really false alarms.)
===File ~/kmacro.el-diff====================================
*** kmacro.el 11 Oct 2004 17:28:10 -0500 1.23
--- kmacro.el 29 Oct 2004 20:17:12 -0500
***************
*** 218,223 ****
--- 218,226 ----
;;;###autoload (global-set-key "\C-x\C-k" 'kmacro-keymap)
;;;###autoload (autoload 'kmacro-keymap "kmacro" "Keymap for keyboard macro commands." t 'keymap)
+ (defvar appending-to-kbd-macro nil
+ "Non-nil when appending to a keyboard macro definition.")
+
(if kmacro-call-mouse-event
(global-set-key (vector kmacro-call-mouse-event) 'kmacro-end-call-mouse))
***************
*** 564,569 ****
--- 567,573 ----
(if (or defining-kbd-macro executing-kbd-macro)
(message "Already defining keyboard macro.")
(let ((append (and arg (listp arg))))
+ (setq appending-to-kbd-macro append)
(unless append
(if last-kbd-macro
(let ((len (length kmacro-ring)))
============================================================
===File ~/simple-diff=======================================
*** simple.el 25 Oct 2004 07:40:49 -0500 1.664
--- simple.el 29 Oct 2004 20:39:08 -0500
***************
*** 865,873 ****
(if (and (integerp value)
(or (not (memq this-command '(eval-last-sexp eval-print-last-sexp)))
(eq this-command last-command)
! (and (boundp 'edebug-active) edebug-active)))
(let ((char-string
! (if (or (and (boundp 'edebug-active) edebug-active)
(memq this-command '(eval-last-sexp eval-print-last-sexp)))
(prin1-char value))))
(if char-string
--- 865,874 ----
(if (and (integerp value)
(or (not (memq this-command '(eval-last-sexp eval-print-last-sexp)))
(eq this-command last-command)
! (and (boundp 'edebug-active) (with-no-warnings edebug-active))))
(let ((char-string
! (if (or (and (boundp 'edebug-active)
! (with-no-warnings edebug-active))
(memq this-command '(eval-last-sexp eval-print-last-sexp)))
(prin1-char value))))
(if char-string
***************
*** 3916,3921 ****
--- 3917,3927 ----
At top-level, as an editor command, this simply beeps."
(interactive)
(deactivate-mark)
+ (or (not (featurep 'kmacro))
+ (with-no-warnings appending-to-kbd-macro)
+ (kmacro-ring-empty-p)
+ (kmacro-pop-ring)
+ (with-no-warnings (setq appending-to-kbd-macro nil)))
(setq defining-kbd-macro nil)
(signal 'quit nil))
============================================================
next prev parent reply other threads:[~2004-10-30 2:38 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 [this message]
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
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=200410300238.i9U2cOD02290@raven.dms.auburn.edu \
--to=teirllm@dms.auburn.edu \
--cc=emacs-devel@gnu.org \
/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).