• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/

Lines Matching refs:kmacro

0 ;;; kmacro.el --- enhanced keyboard macros
28 ;; The kmacro package provides the user interface to emacs' basic
29 ;; keyboard macro functionality. With kmacro, two function keys are
69 ;; `kmacro-counter' is inserted using the `kmacro-counter-format', and
70 ;; `kmacro-counter' is incremented by 1 (or the numeric prefix value
73 ;; The initial value of `kmacro-counter' is 0, or the numeric prefix
77 ;; value of `kmacro-counter' is inserted and incremented, making it
118 (defgroup kmacro nil
123 :link '(emacs-commentary-link :tag "Commentary" "kmacro.el")
124 :link '(emacs-library-link :tag "Lisp File" "kmacro.el"))
126 (defcustom kmacro-call-mouse-event 'S-mouse-3
127 "The mouse event used by kmacro to call a macro.
130 :group 'kmacro)
132 (defcustom kmacro-ring-max 8
135 :group 'kmacro)
138 (defcustom kmacro-execute-before-append t
147 :group 'kmacro)
150 (defcustom kmacro-repeat-no-prefix t
153 :group 'kmacro)
155 (defcustom kmacro-call-repeat-key t
161 :group 'kmacro)
163 (defcustom kmacro-call-repeat-with-arg nil
166 :group 'kmacro)
168 (defcustom kmacro-step-edit-mini-window-height 0.75
171 :group 'kmacro)
175 (defvar kmacro-keymap
178 (define-key map "s" 'kmacro-start-macro)
179 (define-key map "\C-s" 'kmacro-start-macro)
180 (define-key map "\C-k" 'kmacro-end-or-call-macro-repeat)
185 (define-key map "\C-n" 'kmacro-cycle-ring-next)
186 (define-key map "\C-p" 'kmacro-cycle-ring-previous)
187 (define-key map "\C-v" 'kmacro-view-macro-repeat)
188 (define-key map "\C-d" 'kmacro-delete-ring-head)
189 (define-key map "\C-t" 'kmacro-swap-ring)
190 (define-key map "\C-l" 'kmacro-call-ring-2nd-repeat)
193 (define-key map "\C-f" 'kmacro-set-format)
194 (define-key map "\C-c" 'kmacro-set-counter)
195 (define-key map "\C-i" 'kmacro-insert-counter)
196 (define-key map "\C-a" 'kmacro-add-counter)
199 (define-key map "\C-e" 'kmacro-edit-macro-repeat)
200 (define-key map "\r" 'kmacro-edit-macro)
202 (define-key map "l" 'kmacro-edit-lossage)
203 (define-key map " " 'kmacro-step-edit-macro)
206 (define-key map "b" 'kmacro-bind-to-key)
207 (define-key map "n" 'kmacro-name-last-macro)
210 (defalias 'kmacro-keymap kmacro-keymap)
213 ;;;###autoload (global-set-key "\C-x(" 'kmacro-start-macro)
214 ;;;###autoload (global-set-key "\C-x)" 'kmacro-end-macro)
215 ;;;###autoload (global-set-key "\C-xe" 'kmacro-end-and-call-macro)
216 ;;;###autoload (global-set-key [f3] 'kmacro-start-macro-or-insert-counter)
217 ;;;###autoload (global-set-key [f4] 'kmacro-end-or-call-macro)
218 ;;;###autoload (global-set-key "\C-x\C-k" 'kmacro-keymap)
219 ;;;###autoload (autoload 'kmacro-keymap "kmacro" "Keymap for keyboard macro commands." t 'keymap)
221 (if kmacro-call-mouse-event
222 (global-set-key (vector kmacro-call-mouse-event) 'kmacro-end-call-mouse))
227 (defun kmacro-keyboard-quit ()
230 (kmacro-ring-empty-p)
231 (kmacro-pop-ring)))
236 (defvar kmacro-counter 0
239 (defvar kmacro-default-counter-format "%d")
241 (defvar kmacro-counter-format "%d"
244 (defvar kmacro-counter-format-start kmacro-counter-format
247 (defvar kmacro-counter-value-start kmacro-counter
250 (defvar kmacro-last-counter 0
253 (defvar kmacro-initial-counter-value nil
257 (defun kmacro-insert-counter (arg)
259 With \\[universal-argument], insert previous `kmacro-counter' (but do not modify counter)."
261 (if kmacro-initial-counter-value
262 (setq kmacro-counter kmacro-initial-counter-value
263 kmacro-initial-counter-value nil))
265 (insert (format kmacro-counter-format kmacro-last-counter))
266 (insert (format kmacro-counter-format kmacro-counter))
267 (kmacro-add-counter (prefix-numeric-value arg))))
270 (defun kmacro-set-format (format)
273 (setq kmacro-counter-format
277 (setq kmacro-default-counter-format kmacro-counter-format)))
280 (defun kmacro-display-counter (&optional value)
282 (unless value (setq value kmacro-counter))
283 (message "New macro counter value: %s (%d)" (format kmacro-counter-format value) value))
286 (defun kmacro-set-counter (arg)
287 "Set `kmacro-counter' to ARG or prompt if missing.
291 (kmacro-display-counter (setq kmacro-initial-counter-value arg))
292 (setq kmacro-last-counter kmacro-counter
293 kmacro-counter (if (and current-prefix-arg (listp current-prefix-arg))
294 kmacro-counter-value-start
297 (kmacro-display-counter))))
300 (defun kmacro-add-counter (arg)
304 (if kmacro-initial-counter-value
305 (setq kmacro-counter kmacro-initial-counter-value
306 kmacro-initial-counter-value nil))
307 (let ((last kmacro-last-counter))
308 (setq kmacro-last-counter kmacro-counter
309 kmacro-counter (if (and current-prefix-arg (listp current-prefix-arg))
311 kmacro-counter (+ kmacro-counter arg))))
313 (kmacro-display-counter)))
316 (defun kmacro-loop-setup-function ()
320 (setq kmacro-counter-format kmacro-counter-format-start)
321 ;; Save initial counter value so we can restore it with C-u kmacro-set-counter.
322 (setq kmacro-counter-value-start kmacro-counter)
329 (defvar kmacro-ring nil
333 instead it is available in the variables `last-kbd-macro', `kmacro-counter',
334 and `kmacro-counter-format'.")
336 ;; Remember what we are currently looking at with kmacro-view-macro.
338 (defvar kmacro-view-last-item nil)
339 (defvar kmacro-view-item-no 0)
342 (defun kmacro-ring-head ()
345 (list last-kbd-macro kmacro-counter kmacro-counter-format-start)))
348 (defun kmacro-push-ring (&optional elt)
349 "Push ELT or current macro onto `kmacro-ring'."
350 (when (setq elt (or elt (kmacro-ring-head)))
352 (add-to-history 'kmacro-ring elt kmacro-ring-max))))
355 (defun kmacro-split-ring-element (elt)
357 kmacro-counter (nth 1 elt)
358 kmacro-counter-format-start (nth 2 elt)))
361 (defun kmacro-pop-ring1 (&optional raw)
364 (prog1 (car kmacro-ring)
366 (kmacro-split-ring-element (car kmacro-ring)))
367 (setq kmacro-ring (cdr kmacro-ring))))
370 (defun kmacro-pop-ring (&optional raw)
373 (unless (kmacro-ring-empty-p)
374 (kmacro-pop-ring1 raw)))
377 (defun kmacro-ring-empty-p (&optional none)
378 "Tell user and return t if `last-kbd-macro' is nil or `kmacro-ring' is empty.
380 (while (and (null last-kbd-macro) kmacro-ring)
381 (kmacro-pop-ring1))
386 ((and (null none) (null kmacro-ring))
392 (defun kmacro-display (macro &optional trunc descr empty)
403 (if (= kmacro-counter 0) ""
405 (format kmacro-counter-format-start kmacro-counter)))
410 (defun kmacro-repeat-on-last-key (keys)
411 "Process kmacro commands keys immediately after cycling the ring."
419 (setq repeat (get cmd 'kmacro-repeat)))
423 (if kmacro-ring
424 (let ((kmacro-repeat-no-prefix nil))
426 (kmacro-display last-kbd-macro t)))
428 (let ((kmacro-repeat-no-prefix nil))
439 (defun kmacro-get-repeat-prefix ()
441 (and kmacro-repeat-no-prefix
447 (defun kmacro-exec-ring-item (item arg)
450 (let ((kmacro-counter (nth 1 item))
451 (kmacro-counter-format-start (nth 2 item)))
452 (execute-kbd-macro (car item) arg #'kmacro-loop-setup-function)
453 (setcar (cdr item) kmacro-counter)))
456 (defun kmacro-call-ring-2nd (arg)
459 (unless (kmacro-ring-empty-p)
460 (kmacro-exec-ring-item (car kmacro-ring) arg)))
463 (defun kmacro-call-ring-2nd-repeat (arg)
465 This is like `kmacro-call-ring-2nd', but allows repeating macro commands
468 (let ((keys (kmacro-get-repeat-prefix)))
469 (kmacro-call-ring-2nd arg)
470 (if (and kmacro-ring keys)
471 (kmacro-repeat-on-last-key keys))))
473 (put 'kmacro-call-ring-2nd-repeat 'kmacro-repeat 'head)
476 (defun kmacro-view-ring-2nd ()
479 (unless (kmacro-ring-empty-p)
480 (kmacro-display (car (car kmacro-ring)) "2nd macro")))
483 (defun kmacro-cycle-ring-next (&optional arg)
487 (unless (kmacro-ring-empty-p)
488 (kmacro-push-ring)
489 (let* ((keys (kmacro-get-repeat-prefix))
490 (len (length kmacro-ring))
491 (tail (nthcdr (- len 2) kmacro-ring))
494 (kmacro-split-ring-element elt)
495 (kmacro-display last-kbd-macro t)
497 (kmacro-repeat-on-last-key keys)))))
499 (put 'kmacro-cycle-ring-next 'kmacro-repeat 'ring)
502 (defun kmacro-cycle-ring-previous (&optional arg)
506 (unless (kmacro-ring-empty-p)
507 (let ((keys (kmacro-get-repeat-prefix))
508 (cur (kmacro-ring-head)))
509 (kmacro-pop-ring1)
510 (if kmacro-ring
511 (nconc kmacro-ring (list cur))
512 (setq kmacro-ring (list cur)))
513 (kmacro-display last-kbd-macro t)
515 (kmacro-repeat-on-last-key keys)))))
517 (put 'kmacro-cycle-ring-previous 'kmacro-repeat 'ring)
520 (defun kmacro-swap-ring ()
523 (unless (kmacro-ring-empty-p)
524 (let ((cur (kmacro-ring-head)))
525 (kmacro-pop-ring1)
526 (kmacro-push-ring cur))
527 (kmacro-display last-kbd-macro t)))
530 (defun kmacro-delete-ring-head (&optional arg)
533 (unless (kmacro-ring-empty-p t)
534 (if (null kmacro-ring)
536 (kmacro-pop-ring))
537 (kmacro-display last-kbd-macro t nil "Keyboard macro ring is now empty.")))
539 (put 'kmacro-delete-ring-head 'kmacro-repeat 'head)
545 (defun kmacro-start-macro (arg)
548 Use \\[kmacro-end-macro] to finish recording and make the macro available.
549 Use \\[kmacro-end-and-call-macro] to execute the macro.
554 defined. Depending on `kmacro-execute-before-append', this may begin
557 Otherwise, it sets `kmacro-counter' to ARG or 0 if missing before
560 Use \\[kmacro-insert-counter] to insert (and increment) the macro counter.
561 The counter value can be set or modified via \\[kmacro-set-counter] and \\[kmacro-add-counter].
562 The format of the counter can be modified via \\[kmacro-set-format].
564 Use \\[kmacro-name-last-macro] to give it a permanent name.
565 Use \\[kmacro-bind-to-key] to bind it to a key sequence."
572 (kmacro-push-ring
573 (list last-kbd-macro kmacro-counter kmacro-counter-format-start)))
574 (setq kmacro-counter (or (if arg (prefix-numeric-value arg))
575 kmacro-initial-counter-value
577 kmacro-initial-counter-value nil
578 kmacro-counter-value-start kmacro-counter
579 kmacro-last-counter kmacro-counter
580 kmacro-counter-format kmacro-default-counter-format
581 kmacro-counter-format-start kmacro-default-counter-format))
585 (if kmacro-execute-before-append
593 (defun kmacro-end-macro (arg)
595 The definition was started by \\[kmacro-start-macro].
596 The macro is now available for use via \\[kmacro-call-macro],
597 or it can be given a name with \\[kmacro-name-last-macro] and then invoked
604 ;; Isearch may push the kmacro-end-macro key sequence onto the macro.
607 (end-kbd-macro arg #'kmacro-loop-setup-function)
610 (kmacro-pop-ring))))
614 (defun kmacro-call-macro (arg &optional no-repeat end-macro)
615 "Call the last keyboard macro that you defined with \\[kmacro-start-macro].
620 command. See `kmacro-call-repeat-key' and `kmacro-call-repeat-with-arg'
624 others, use \\[kmacro-name-last-macro]."
631 (kmacro-end-macro arg)
632 (call-last-kbd-macro arg #'kmacro-loop-setup-function))
637 (if (eq kmacro-call-repeat-key t)
639 kmacro-call-repeat-key)))
644 (if (and kmacro-call-repeat-with-arg
650 (call-last-kbd-macro (and kmacro-call-repeat-with-arg arg)
651 #'kmacro-loop-setup-function)
662 (defun kmacro-start-macro-or-insert-counter (arg)
666 Sets the `kmacro-counter' to ARG (or 0 if no prefix arg) before defining the
670 the current value of `kmacro-counter').
674 inserts previous `kmacro-counter' (but do not modify counter).
676 The macro counter can be modified via \\[kmacro-set-counter] and \\[kmacro-add-counter].
677 The format of the counter can be modified via \\[kmacro-set-format]."
680 (kmacro-insert-counter arg)
681 (kmacro-start-macro arg)))
685 (defun kmacro-end-or-call-macro (arg &optional no-repeat)
692 (if kmacro-call-repeat-key
693 (kmacro-call-macro arg no-repeat t)
694 (kmacro-end-macro arg)))
695 ((and (eq this-command 'kmacro-view-macro) ;; We are in repeat mode!
696 kmacro-view-last-item)
697 (kmacro-exec-ring-item (car kmacro-view-last-item) arg))
699 (kmacro-call-ring-2nd 1))
701 (kmacro-call-macro arg no-repeat))))
704 (defun kmacro-end-or-call-macro-repeat (arg)
705 "As `kmacro-end-or-call-macro' but allows repeat without repeating prefix."
707 (let ((keys (kmacro-get-repeat-prefix)))
708 (kmacro-end-or-call-macro arg t)
710 (kmacro-repeat-on-last-key keys))))
712 (put 'kmacro-end-or-call-macro-repeat 'kmacro-repeat 'head)
716 (defun kmacro-end-and-call-macro (arg &optional no-repeat)
722 even after defining other macros, use \\[kmacro-name-last-macro]."
725 (kmacro-end-macro nil))
726 (kmacro-call-macro arg no-repeat))
730 (defun kmacro-end-call-mouse (event)
737 (kmacro-call-macro nil t))
752 (defun kmacro-lambda-form (mac &optional counter format)
759 (kmacro-exec-ring-item ',mac arg)))
761 (defun kmacro-extract-lambda (mac)
762 "Extract kmacro from a kmacro lambda form."
765 (setq mac (assoc 'kmacro-exec-ring-item mac))
776 (defun kmacro-bind-to-key (arg)
811 (kmacro-lambda-form (kmacro-ring-head)))
815 (defun kmacro-name-last-macro (symbol)
824 (not (get symbol 'kmacro))
831 (fset symbol (kmacro-lambda-form (kmacro-ring-head)))
832 (put symbol 'kmacro t))
835 (defun kmacro-view-macro (&optional arg)
840 ((or (kmacro-ring-empty-p)
841 (not (eq last-command 'kmacro-view-macro)))
842 (setq kmacro-view-last-item nil))
843 ((null kmacro-view-last-item)
844 (setq kmacro-view-last-item kmacro-ring
845 kmacro-view-item-no 2))
846 ((consp kmacro-view-last-item)
847 (setq kmacro-view-last-item (cdr kmacro-view-last-item)
848 kmacro-view-item-no (1+ kmacro-view-item-no)))
850 (setq kmacro-view-last-item nil)))
851 (setq this-command 'kmacro-view-macro
853 (kmacro-display (if kmacro-view-last-item
854 (car (car kmacro-view-last-item))
857 (if kmacro-view-last-item
858 (concat (cond ((= kmacro-view-item-no 2) "2nd")
859 ((= kmacro-view-item-no 3) "3nd")
860 (t (format "%dth" kmacro-view-item-no)))
864 (defun kmacro-view-macro-repeat (&optional arg)
869 This is like `kmacro-view-macro', but allows repeating macro commands
872 (let ((keys (kmacro-get-repeat-prefix)))
873 (kmacro-view-macro arg)
875 (kmacro-repeat-on-last-key keys))))
877 (put 'kmacro-view-macro-repeat 'kmacro-repeat 'ring)
880 (defun kmacro-edit-macro-repeat (&optional arg)
885 (put 'kmacro-edit-macro-repeat 'kmacro-repeat 'stop)
888 (defun kmacro-edit-macro (&optional arg)
889 "As edit last keyboard macro, but without kmacro-repeat property."
894 (defun kmacro-edit-lossage ()
897 (kmacro-push-ring)
903 (defvar kmacro-step-edit-active) ;; step-editing active
904 (defvar kmacro-step-edit-new-macro) ;; storage for new macro
905 (defvar kmacro-step-edit-inserting) ;; inserting into macro
906 (defvar kmacro-step-edit-appending) ;; append to end of macro
907 (defvar kmacro-step-edit-replace) ;; replace orig macro when done
908 (defvar kmacro-step-edit-prefix-index) ;; index of first prefix arg key
909 (defvar kmacro-step-edit-key-index) ;; index of current key
910 (defvar kmacro-step-edit-action) ;; automatic action on next pre-command hook
911 (defvar kmacro-step-edit-help) ;; kmacro step edit help enabled
912 (defvar kmacro-step-edit-num-input-keys) ;; to ignore duplicate pre-command hook
914 (defvar kmacro-step-edit-map (make-sparse-keymap)
915 "Keymap that defines the responses to questions in `kmacro-step-edit-macro'.
925 (set-keymap-parent kmacro-step-edit-map query-replace-map)
927 (define-key kmacro-step-edit-map "\t" 'act-repeat)
928 (define-key kmacro-step-edit-map [tab] 'act-repeat)
929 (define-key kmacro-step-edit-map "\C-k" 'skip-rest)
930 (define-key kmacro-step-edit-map "c" 'automatic)
931 (define-key kmacro-step-edit-map "f" 'skip-keep)
932 (define-key kmacro-step-edit-map "q" 'quit)
933 (define-key kmacro-step-edit-map "d" 'skip)
934 (define-key kmacro-step-edit-map "\C-d" 'skip)
935 (define-key kmacro-step-edit-map "i" 'insert)
936 (define-key kmacro-step-edit-map "I" 'insert-1)
937 (define-key kmacro-step-edit-map "r" 'replace)
938 (define-key kmacro-step-edit-map "R" 'replace-1)
939 (define-key kmacro-step-edit-map "a" 'append)
940 (define-key kmacro-step-edit-map "A" 'append-end)
942 (defvar kmacro-step-edit-prefix-commands
947 (defun kmacro-step-edit-prompt (macro index)
949 (let ((keys (and (not kmacro-step-edit-appending)
951 (future (and (not kmacro-step-edit-appending)
960 (format-kbd-macro kmacro-step-edit-new-macro 1)
961 (if (and kmacro-step-edit-new-macro (> (length kmacro-step-edit-new-macro) 0)) " " "")
963 (if kmacro-step-edit-appending "<APPEND>" "<INSERT>")) 'face 'region)
982 (if kmacro-step-edit-help "\
994 (if (numberp kmacro-step-edit-inserting) "" "s")
995 (if (numberp kmacro-step-edit-inserting) "" " (end with C-j)"))
998 (defun kmacro-step-edit-query ()
1001 (max-mini-window-height kmacro-step-edit-mini-window-height)
1007 (not (eq kmacro-step-edit-action t)))
1024 ((eq kmacro-step-edit-action t) ;; Reentry for actual command @ end of prefix arg.
1030 (setq kmacro-step-edit-new-macro
1031 (vconcat kmacro-step-edit-new-macro (recent-keys)))
1033 (setq kmacro-step-edit-new-macro
1034 (substring kmacro-step-edit-new-macro 0 (- (length unread-command-events)))
1041 (setq kmacro-step-edit-action nil))
1042 ((eq this-command kmacro-step-edit-action) ;; TAB -> activate while same command
1045 (setq kmacro-step-edit-action nil)))
1050 ((memq this-command kmacro-step-edit-prefix-commands)
1051 (unless kmacro-step-edit-prefix-index
1052 (setq kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1057 (kmacro-step-edit-prompt macro (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1058 (setq act (lookup-key kmacro-step-edit-map
1069 (setq kmacro-step-edit-action this-command)
1072 (setq kmacro-step-edit-replace nil)
1073 (setq kmacro-step-edit-active 'ignore)
1076 (setq kmacro-step-edit-prefix-index nil)
1082 (setq kmacro-step-edit-active 'ignore)
1085 (setq kmacro-step-edit-active nil)
1089 (setq executing-kbd-macro-index (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1090 (setq kmacro-step-edit-inserting (if (eq act 'insert-1) 1 t))
1093 (setq kmacro-step-edit-inserting (if (eq act 'replace-1) 1 t))
1094 (setq kmacro-step-edit-prefix-index nil)
1097 kmacro-step-edit-appending t))
1100 (setq kmacro-step-edit-inserting t)
1103 kmacro-step-edit-appending t))
1108 kmacro-step-edit-inserting t
1109 kmacro-step-edit-appending t)
1110 (setq kmacro-step-edit-active 'append-end))
1114 (setq executing-kbd-macro-index (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1115 (setq kmacro-step-edit-help (not kmacro-step-edit-help))
1118 (setq executing-kbd-macro-index (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1120 (if (> executing-kbd-macro-index (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index))
1121 (setq kmacro-step-edit-new-macro
1122 (vconcat kmacro-step-edit-new-macro
1124 (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index)
1126 kmacro-step-edit-prefix-index nil))
1131 (setq kmacro-step-edit-key-index next-index)))
1133 (defun kmacro-step-edit-insert ()
1136 (max-mini-window-height kmacro-step-edit-mini-window-height)
1141 (setq executing-kbd-macro-index (or kmacro-step-edit-prefix-index kmacro-step-edit-key-index)
1142 kmacro-step-edit-prefix-index nil)
1143 (kmacro-step-edit-prompt macro nil)
1158 (when (numberp kmacro-step-edit-inserting)
1159 (setq kmacro-step-edit-inserting nil)
1167 ((memq cmd kmacro-step-edit-prefix-commands)
1172 (setq kmacro-step-edit-action t)
1175 (if (numberp kmacro-step-edit-inserting)
1176 (setq kmacro-step-edit-inserting nil))
1178 ((numberp kmacro-step-edit-inserting)
1179 (setq kmacro-step-edit-inserting nil)
1182 (setq kmacro-step-edit-inserting nil)
1183 (setq kmacro-step-edit-action nil)
1185 (setq kmacro-step-edit-prefix-index nil)
1189 (setq next-index kmacro-step-edit-key-index)
1197 (setq kmacro-step-edit-new-macro (vconcat kmacro-step-edit-new-macro keys))))
1198 (setq kmacro-step-edit-key-index next-index)))
1200 (defun kmacro-step-edit-pre-command ()
1201 (remove-hook 'post-command-hook 'kmacro-step-edit-post-command)
1202 (when kmacro-step-edit-active
1204 ((eq kmacro-step-edit-active 'ignore)
1206 ((eq kmacro-step-edit-active 'append-end)
1209 kmacro-step-edit-inserting t
1210 kmacro-step-edit-appending t
1211 kmacro-step-edit-active t)))
1212 ((/= kmacro-step-edit-num-input-keys num-input-keys)
1213 (if kmacro-step-edit-inserting
1214 (kmacro-step-edit-insert)
1215 (kmacro-step-edit-query))
1216 (setq kmacro-step-edit-num-input-keys num-input-keys)
1217 (if (and kmacro-step-edit-appending (not kmacro-step-edit-inserting))
1218 (setq kmacro-step-edit-appending nil
1219 kmacro-step-edit-active 'ignore)))))
1220 (when (eq kmacro-step-edit-active t)
1221 (add-hook 'post-command-hook 'kmacro-step-edit-post-command t)))
1223 (defun kmacro-step-edit-minibuf-setup ()
1224 (remove-hook 'pre-command-hook 'kmacro-step-edit-pre-command t)
1225 (when kmacro-step-edit-active
1226 (add-hook 'pre-command-hook 'kmacro-step-edit-pre-command nil t)))
1228 (defun kmacro-step-edit-post-command ()
1229 (remove-hook 'pre-command-hook 'kmacro-step-edit-pre-command)
1230 (when kmacro-step-edit-active
1231 (add-hook 'pre-command-hook 'kmacro-step-edit-pre-command nil nil)
1232 (if kmacro-step-edit-key-index
1233 (setq executing-kbd-macro-index kmacro-step-edit-key-index)
1234 (setq kmacro-step-edit-key-index executing-kbd-macro-index))))
1237 (defun kmacro-step-edit-macro ()
1240 To customize possible responses, change the \"bindings\" in `kmacro-step-edit-map'."
1242 (let ((kmacro-step-edit-active t)
1243 (kmacro-step-edit-new-macro "")
1244 (kmacro-step-edit-inserting nil)
1245 (kmacro-step-edit-appending nil)
1246 (kmacro-step-edit-replace t)
1247 (kmacro-step-edit-prefix-index nil)
1248 (kmacro-step-edit-key-index 0)
1249 (kmacro-step-edit-action nil)
1250 (kmacro-step-edit-help nil)
1251 (kmacro-step-edit-num-input-keys num-input-keys)
1255 (add-hook 'pre-command-hook 'kmacro-step-edit-pre-command nil)
1256 (add-hook 'post-command-hook 'kmacro-step-edit-post-command t)
1257 (add-hook 'minibuffer-setup-hook 'kmacro-step-edit-minibuf-setup t)
1259 (when (and kmacro-step-edit-replace
1260 kmacro-step-edit-new-macro
1261 (not (equal last-kbd-macro kmacro-step-edit-new-macro)))
1262 (kmacro-push-ring)
1263 (setq last-kbd-macro kmacro-step-edit-new-macro))))
1265 (provide 'kmacro)
1268 ;;; kmacro.el ends here