unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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

  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).