annotate lisp/macros.el @ 68498:528aecb860cf

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-30 Creator: Michael Olson <mwolson@gnu.org> Merge from erc--main--0 2006-01-30 Michael Olson <mwolson@gnu.org> * erc-stamp.el (erc-timestamp-right-align-by-pixel): New option that determines whether to use pixel values to align right timestamps. The default is not to do so, since it only works with Emacs22 on X, and even then some people have trouble. (erc-insert-aligned): Use `erc-timestamp-right-align-by-pixel'.
author Miles Bader <miles@gnu.org>
date Tue, 31 Jan 2006 00:24:36 +0000
parents 41bb365f41c4
children 3bd95f4f2941 2d92f5c9d6ae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 33281
diff changeset
1 ;;; macros.el --- non-primitive commands for keyboard macros
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 427
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1995, 2002, 2003,
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
4 ;; 2004, 2005 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
6 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1470
diff changeset
7 ;; Keywords: abbrev
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12923
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 58609
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 58609
diff changeset
24 ;; Boston, MA 02110-1301, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
26 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
27
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
28 ;; Extension commands for keyboard macros. These permit you to assign
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
29 ;; a name to the last-defined keyboard macro, expand and insert the
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
30 ;; lisp corresponding to a macro, query the user from within a macro,
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
31 ;; or apply a macro to each line in the reason.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
32
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
33 ;;; Code:
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 217
diff changeset
35 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 (defun name-last-kbd-macro (symbol)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 "Assign a name to the last keyboard macro defined.
216
2c663336acaf *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
38 Argument SYMBOL is the name to define.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 The symbol's function definition becomes the keyboard macro string.
217
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
40 Such a \"function\" cannot be called from Lisp, but it is a valid editor command."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 (interactive "SName for last kbd macro: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42 (or last-kbd-macro
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 (error "No keyboard macro defined"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 (and (fboundp symbol)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
45 (not (stringp (symbol-function symbol)))
4331
c75a5c7d4f39 (name-last-kbd-macro): Handle macros that are vectors.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
46 (not (vectorp (symbol-function symbol)))
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 33281
diff changeset
47 (error "Function %s is already defined and not a keyboard macro"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48 symbol))
14398
ad30f677493e (name-last-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents: 14321
diff changeset
49 (if (string-equal symbol "")
ad30f677493e (name-last-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents: 14321
diff changeset
50 (error "No command name given"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
51 (fset symbol last-kbd-macro))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 217
diff changeset
53 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 (defun insert-kbd-macro (macroname &optional keys)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 "Insert in buffer the definition of kbd macro NAME, as Lisp code.
217
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
56 Optional second arg KEYS means also record the keys it is on
1469
af4fe5e670f2 (insert-kbd-macro): Replace nonprinting chars with escapes.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
57 \(this is the prefix argument, when calling interactively).
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58
217
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
59 This Lisp code will, when executed, define the kbd macro with the same
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
60 definition it has now. If you say to record the keys, the Lisp code
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
61 will also rebind those keys to the macro. Only global key bindings
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
62 are recorded since executing this Lisp code always makes global
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
63 bindings.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64
1469
af4fe5e670f2 (insert-kbd-macro): Replace nonprinting chars with escapes.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
65 To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 use this command, and then save the file."
58609
d6d7c44e2b68 (insert-kbd-macro): Handle kmacro functions.
Kim F. Storm <storm@cua.dk>
parents: 57969
diff changeset
67 (interactive (list (intern (completing-read "Insert kbd macro (name): "
d6d7c44e2b68 (insert-kbd-macro): Handle kmacro functions.
Kim F. Storm <storm@cua.dk>
parents: 57969
diff changeset
68 obarray
57969
e661f2202106 (insert-kbd-macro): Do completions based on macros,
Eli Zaretskii <eliz@gnu.org>
parents: 56857
diff changeset
69 (lambda (elt)
e661f2202106 (insert-kbd-macro): Do completions based on macros,
Eli Zaretskii <eliz@gnu.org>
parents: 56857
diff changeset
70 (and (fboundp elt)
e661f2202106 (insert-kbd-macro): Do completions based on macros,
Eli Zaretskii <eliz@gnu.org>
parents: 56857
diff changeset
71 (or (stringp (symbol-function elt))
58609
d6d7c44e2b68 (insert-kbd-macro): Handle kmacro functions.
Kim F. Storm <storm@cua.dk>
parents: 57969
diff changeset
72 (vectorp (symbol-function elt))
d6d7c44e2b68 (insert-kbd-macro): Handle kmacro functions.
Kim F. Storm <storm@cua.dk>
parents: 57969
diff changeset
73 (get elt 'kmacro))))
57969
e661f2202106 (insert-kbd-macro): Do completions based on macros,
Eli Zaretskii <eliz@gnu.org>
parents: 56857
diff changeset
74 t))
e661f2202106 (insert-kbd-macro): Do completions based on macros,
Eli Zaretskii <eliz@gnu.org>
parents: 56857
diff changeset
75 current-prefix-arg))
1470
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
76 (let (definition)
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
77 (if (string= (symbol-name macroname) "")
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
78 (progn
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
79 (setq macroname 'last-kbd-macro definition last-kbd-macro)
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
80 (insert "(setq "))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
81 (setq definition (symbol-function macroname))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
82 (insert "(fset '"))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
83 (prin1 macroname (current-buffer))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
84 (insert "\n ")
11170
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
85 (if (stringp definition)
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
86 (let ((beg (point)) end)
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
87 (prin1 definition (current-buffer))
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
88 (setq end (point-marker))
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
89 (goto-char beg)
10153
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
90 (while (< (point) end)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
91 (let ((char (following-char)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
92 (cond ((= char 0)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
93 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
94 (insert "\\C-@"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
95 ((< char 27)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
96 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
97 (insert "\\C-" (+ 96 char)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
98 ((= char ?\C-\\)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
99 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
100 (insert "\\C-\\\\"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
101 ((< char 32)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
102 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
103 (insert "\\C-" (+ 64 char)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
104 ((< char 127)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
105 (forward-char 1))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
106 ((= char 127)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
107 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
108 (insert "\\C-?"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
109 ((= char 128)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
110 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
111 (insert "\\M-\\C-@"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
112 ((= char (aref "\M-\C-\\" 0))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
113 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
114 (insert "\\M-\\C-\\\\"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
115 ((< char 155)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
116 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
117 (insert "\\M-\\C-" (- char 32)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
118 ((< char 160)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
119 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
120 (insert "\\M-\\C-" (- char 64)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
121 ((= char (aref "\M-\\" 0))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
122 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
123 (insert "\\M-\\\\"))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
124 ((< char 255)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
125 (delete-region (point) (1+ (point)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
126 (insert "\\M-" (- char 128)))
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
127 ((= char 255)
2279074cd821 (insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents: 9851
diff changeset
128 (delete-region (point) (1+ (point)))
11170
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
129 (insert "\\M-\\C-?"))))))
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
130 (if (vectorp definition)
12923
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
131 (let ((len (length definition)) (i 0) char mods)
11170
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
132 (while (< i len)
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
133 (insert (if (zerop i) ?\[ ?\ ))
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
134 (setq char (aref definition i)
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
135 i (1+ i))
12923
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
136 (cond ((not (numberp char))
11170
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
137 (prin1 char (current-buffer)))
12923
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
138 (t
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
139 (insert "?")
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
140 (setq mods (event-modifiers char)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
141 char (event-basic-type char))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
142 (while mods
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
143 (cond ((eq (car mods) 'control)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
144 (insert "\\C-"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
145 ((eq (car mods) 'meta)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
146 (insert "\\M-"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
147 ((eq (car mods) 'hyper)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
148 (insert "\\H-"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
149 ((eq (car mods) 'super)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
150 (insert "\\s-"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
151 ((eq (car mods) 'alt)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
152 (insert "\\A-"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
153 ((and (eq (car mods) 'shift)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
154 (>= char ?a)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
155 (<= char ?z))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
156 (setq char (upcase char)))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
157 ((eq (car mods) 'shift)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
158 (insert "\\S-")))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
159 (setq mods (cdr mods)))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
160 (cond ((= char ?\\)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
161 (insert "\\\\"))
52035
f08b70837398 (insert-kbd-macro): Escape double quote character. From Thomas W
Glenn Morris <rgm@gnu.org>
parents: 49597
diff changeset
162 ((= char ?\")
56857
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
163 (insert "\\\""))
33281
e321e58206ac (insert-kbd-macro): Print semi-colons as `?\;'.
Gerd Moellmann <gerd@gnu.org>
parents: 18383
diff changeset
164 ((= char ?\;)
e321e58206ac (insert-kbd-macro): Print semi-colons as `?\;'.
Gerd Moellmann <gerd@gnu.org>
parents: 18383
diff changeset
165 (insert "\\;"))
12923
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
166 ((= char 127)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
167 (insert "\\C-?"))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
168 ((< char 127)
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
169 (insert char))
f1e05398634b (insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
170 (t (insert "\\" (format "%o" char)))))))
11170
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
171 (insert ?\]))
4d33c7615a5c (insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents: 10153
diff changeset
172 (prin1 definition (current-buffer))))
1470
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
173 (insert ")\n")
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
174 (if keys
5773
54baa5a15850 (insert-kbd-macro): Pass (keymap) as KEYMAP arg to where-is-internal.
Richard M. Stallman <rms@gnu.org>
parents: 5307
diff changeset
175 (let ((keys (where-is-internal macroname '(keymap))))
1470
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
176 (while keys
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
177 (insert "(global-set-key ")
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
178 (prin1 (car keys) (current-buffer))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
179 (insert " '")
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
180 (prin1 macroname (current-buffer))
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
181 (insert ")\n")
eb4043bd65ef (insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents: 1469
diff changeset
182 (setq keys (cdr keys)))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 217
diff changeset
184 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 (defun kbd-macro-query (flag)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 "Query user during kbd macro execution.
217
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
187 With prefix argument, enters recursive edit, reading keyboard
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
188 commands even within a kbd macro. You can give different commands
8977ce293397 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 216
diff changeset
189 each time the macro executes.
2708
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
190 Without prefix argument, asks whether to continue running the macro.
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
191 Your options are: \\<query-replace-map>
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
192 \\[act] Finish this iteration normally and continue with the next.
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
193 \\[skip] Skip the rest of this iteration, and start the next.
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
194 \\[exit] Stop the macro entirely right now.
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
195 \\[recenter] Redisplay the screen, then ask again.
a9d400ee1c0e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 2707
diff changeset
196 \\[edit] Enter recursive edit; ask again when you exit from that."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 (interactive "P")
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
198 (or executing-kbd-macro
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 defining-kbd-macro
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 (error "Not defining or executing kbd macro"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201 (if flag
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
202 (let (executing-kbd-macro defining-kbd-macro)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 (recursive-edit))
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
204 (if (not executing-kbd-macro)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 nil
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
206 (let ((loop t)
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
207 (msg (substitute-command-keys
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
208 "Proceed with macro?\\<query-replace-map>\
2753
c824ba373cc2 (kbd-macro-query): Fix prompt string.
Richard M. Stallman <rms@gnu.org>
parents: 2708
diff changeset
209 (\\[act], \\[skip], \\[exit], \\[recenter], \\[edit]) ")))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 (while loop
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
211 (let ((key (let ((executing-kbd-macro nil)
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
212 (defining-kbd-macro nil))
14321
24189cc67176 (kbd-macro-query): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
213 (message "%s" msg)
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
214 (read-event)))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
215 def)
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
216 (setq key (vector key))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
217 (setq def (lookup-key query-replace-map key))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
218 (cond ((eq def 'act)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 (setq loop nil))
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
220 ((eq def 'skip)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 (setq loop nil)
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
222 (setq executing-kbd-macro ""))
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
223 ((eq def 'exit)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 (setq loop nil)
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
225 (setq executing-kbd-macro t))
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
226 ((eq def 'recenter)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 (recenter nil))
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
228 ((eq def 'edit)
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14398
diff changeset
229 (let (executing-kbd-macro defining-kbd-macro)
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
230 (recursive-edit)))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
231 ((eq def 'quit)
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
232 (setq quit-flag t))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
233 (t
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
234 (or (eq def 'help)
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
235 (ding))
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
236 (with-output-to-temp-buffer "*Help*"
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
237 (princ
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
238 (substitute-command-keys
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2753
diff changeset
239 "Specify how to proceed with keyboard macro execution.
2707
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
240 Possibilities: \\<query-replace-map>
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
241 \\[act] Finish this iteration normally and continue with the next.
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
242 \\[skip] Skip the rest of this iteration, and start the next.
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
243 \\[exit] Stop the macro entirely right now.
4661157d5c60 (kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
244 \\[recenter] Redisplay the screen, then ask again.
9851
0e1748cc2f32 (kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
245 \\[edit] Enter recursive edit; ask again when you exit from that."))
0e1748cc2f32 (kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
246 (save-excursion
0e1748cc2f32 (kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
247 (set-buffer standard-output)
0e1748cc2f32 (kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
248 (help-mode)))))))))))
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 217
diff changeset
249
268
2dd411fe2f72 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 256
diff changeset
250 ;;;###autoload
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
251 (defun apply-macro-to-region-lines (top bottom &optional macro)
56857
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
252 "Apply last keyboard macro to all lines in the region.
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
253 For each line that begins in the region, move to the beginning of
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
254 the line, and run the last keyboard macro.
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
255
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
256 When called from lisp, this function takes two arguments TOP and
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
257 BOTTOM, describing the current region. TOP must be before BOTTOM.
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
258 The optional third argument MACRO specifies a keyboard macro to
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
259 execute.
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
260
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
261 This is useful for quoting or unquoting included text, adding and
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
262 removing comments, or producing tables where the entries are regular.
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
263
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
264 For example, in Usenet articles, sections of text quoted from another
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
265 author are indented, or have each line start with `>'. To quote a
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
266 section of text, define a keyboard macro which inserts `>', put point
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
267 and mark at opposite ends of the quoted section, and use
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
268 `\\[apply-macro-to-region-lines]' to mark the entire section.
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
269
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
270 Suppose you wanted to build a keyword table in C where each entry
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
271 looked like this:
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
272
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47352
diff changeset
273 { \"foo\", foo_data, foo_function },
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
274 { \"bar\", bar_data, bar_function },
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
275 { \"baz\", baz_data, baz_function },
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
276
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
277 You could enter the names in this format:
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
278
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
279 foo
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
280 bar
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
281 baz
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
282
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
283 and write a macro to massage a word into a table entry:
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
284
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
285 \\C-x (
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
286 \\M-d { \"\\C-y\", \\C-y_data, \\C-y_function },
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
287 \\C-x )
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
288
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
289 and then select the region of un-tablified names and use
56857
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
290 `\\[apply-macro-to-region-lines]' to build the table from the names."
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
291 (interactive "r")
391
4b1d23627759 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 274
diff changeset
292 (or macro
4b1d23627759 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 274
diff changeset
293 (progn
4b1d23627759 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 274
diff changeset
294 (if (null last-kbd-macro)
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 33281
diff changeset
295 (error "No keyboard macro has been defined"))
391
4b1d23627759 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 274
diff changeset
296 (setq macro last-kbd-macro)))
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
297 (save-excursion
56857
be5ab1230982 (apply-macro-to-region-lines): Make it operate on all lines that begin
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
298 (let ((end-marker (copy-marker bottom))
427
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
299 next-line-marker)
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
300 (goto-char top)
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
301 (if (not (bolp))
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
302 (forward-line 1))
427
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
303 (setq next-line-marker (point-marker))
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
304 (while (< next-line-marker end-marker)
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
305 (goto-char next-line-marker)
274
7121f18e0114 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 273
diff changeset
306 (save-excursion
427
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
307 (forward-line 1)
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
308 (set-marker next-line-marker (point)))
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
309 (save-excursion
47352
d817d0837c74 (apply-macro-to-region-lines): Let-bind mark-active to
Kim F. Storm <storm@cua.dk>
parents: 38412
diff changeset
310 (let ((mark-active nil))
d817d0837c74 (apply-macro-to-region-lines): Let-bind mark-active to
Kim F. Storm <storm@cua.dk>
parents: 38412
diff changeset
311 (execute-kbd-macro (or macro last-kbd-macro)))))
427
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
312 (set-marker end-marker nil)
1507978a453c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 391
diff changeset
313 (set-marker next-line-marker nil))))
273
0740875c024a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
314
5307
069c54e77fd1 Don't repeat at load time any bindings that are autoloaded.
Richard M. Stallman <rms@gnu.org>
parents: 4331
diff changeset
315 ;;;###autoload (define-key ctl-x-map "q" 'kbd-macro-query)
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 427
diff changeset
316
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
317 (provide 'macros)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
318
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52035
diff changeset
319 ;;; arch-tag: 346ed1a5-1220-4bc8-b533-961ee704361f
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 427
diff changeset
320 ;;; macros.el ends here