Mercurial > emacs
annotate lisp/macros.el @ 45098:06120f91eb06
(eshell-modify-global-environment): Added this customization variable,
which will cause any "export" commands within any eshell buffer to
modify the global Emacs environment. It defaults to nil, which means
that such commands will only modify that Eshell buffer's environment.
(eshell-var-initialize): Initialize `eshell-modify-global-environment'.
author | John Wiegley <johnw@newartisans.com> |
---|---|
date | Fri, 03 May 2002 20:43:53 +0000 |
parents | 253f761ad37b |
children | d817d0837c74 |
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 |
11235 | 3 ;; Copyright (C) 1985, 86, 87, 92, 94, 95 Free Software Foundation, Inc. |
845 | 4 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
5 ;; Maintainer: FSF |
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1470
diff
changeset
|
6 ;; Keywords: abbrev |
36 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; 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
|
12 ;; the Free Software Foundation; either version 2, or (at your option) |
36 | 13 ;; any later version. |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
36 | 24 |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
25 ;;; Commentary: |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
26 |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
27 ;; 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
|
28 ;; 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
|
29 ;; 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
|
30 ;; 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
|
31 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
32 ;;; Code: |
36 | 33 |
256 | 34 ;;;###autoload |
36 | 35 (defun name-last-kbd-macro (symbol) |
36 "Assign a name to the last keyboard macro defined. | |
216 | 37 Argument SYMBOL is the name to define. |
36 | 38 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
|
39 Such a \"function\" cannot be called from Lisp, but it is a valid editor command." |
36 | 40 (interactive "SName for last kbd macro: ") |
41 (or last-kbd-macro | |
42 (error "No keyboard macro defined")) | |
43 (and (fboundp symbol) | |
44 (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
|
45 (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
|
46 (error "Function %s is already defined and not a keyboard macro" |
36 | 47 symbol)) |
14398
ad30f677493e
(name-last-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents:
14321
diff
changeset
|
48 (if (string-equal symbol "") |
ad30f677493e
(name-last-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents:
14321
diff
changeset
|
49 (error "No command name given")) |
36 | 50 (fset symbol last-kbd-macro)) |
51 | |
256 | 52 ;;;###autoload |
36 | 53 (defun insert-kbd-macro (macroname &optional keys) |
54 "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
|
55 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
|
56 \(this is the prefix argument, when calling interactively). |
36 | 57 |
217
8977ce293397
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
216
diff
changeset
|
58 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
|
59 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
|
60 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
|
61 are recorded since executing this Lisp code always makes global |
8977ce293397
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
216
diff
changeset
|
62 bindings. |
36 | 63 |
1469
af4fe5e670f2
(insert-kbd-macro): Replace nonprinting chars with escapes.
Richard M. Stallman <rms@gnu.org>
parents:
845
diff
changeset
|
64 To save a kbd macro, visit a file of Lisp code such as your `~/.emacs', |
36 | 65 use this command, and then save the file." |
66 (interactive "CInsert kbd macro (name): \nP") | |
1470
eb4043bd65ef
(insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents:
1469
diff
changeset
|
67 (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
|
68 (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
|
69 (progn |
eb4043bd65ef
(insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents:
1469
diff
changeset
|
70 (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
|
71 (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
|
72 (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
|
73 (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
|
74 (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
|
75 (insert "\n ") |
11170
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
76 (if (stringp definition) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
77 (let ((beg (point)) end) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
78 (prin1 definition (current-buffer)) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
79 (setq end (point-marker)) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
80 (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
|
81 (while (< (point) end) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
82 (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
|
83 (cond ((= char 0) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
84 (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
|
85 (insert "\\C-@")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
86 ((< char 27) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
87 (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
|
88 (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
|
89 ((= char ?\C-\\) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
90 (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
|
91 (insert "\\C-\\\\")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
92 ((< char 32) |
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-" (+ 64 char))) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
95 ((< char 127) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
96 (forward-char 1)) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
97 ((= char 127) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
98 (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
|
99 (insert "\\C-?")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
100 ((= char 128) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
101 (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
|
102 (insert "\\M-\\C-@")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
103 ((= 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
|
104 (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
|
105 (insert "\\M-\\C-\\\\")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
106 ((< char 155) |
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 "\\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
|
109 ((< char 160) |
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-" (- char 64))) |
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-\\" 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-\\\\")) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
115 ((< char 255) |
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-" (- char 128))) |
2279074cd821
(insert-kbd-macro): Specially handle C-\, M-\ and C-M-\.
Richard M. Stallman <rms@gnu.org>
parents:
9851
diff
changeset
|
118 ((= char 255) |
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))) |
11170
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
120 (insert "\\M-\\C-?")))))) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
121 (if (vectorp definition) |
12923
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
122 (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
|
123 (while (< i len) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
124 (insert (if (zerop i) ?\[ ?\ )) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
125 (setq char (aref definition i) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
126 i (1+ i)) |
12923
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
127 (cond ((not (numberp char)) |
11170
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
128 (prin1 char (current-buffer))) |
12923
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
129 (t |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
130 (insert "?") |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
131 (setq mods (event-modifiers char) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
132 char (event-basic-type char)) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
133 (while mods |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
134 (cond ((eq (car mods) 'control) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
135 (insert "\\C-")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
136 ((eq (car mods) 'meta) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
137 (insert "\\M-")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
138 ((eq (car mods) 'hyper) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
139 (insert "\\H-")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
140 ((eq (car mods) 'super) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
141 (insert "\\s-")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
142 ((eq (car mods) 'alt) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
143 (insert "\\A-")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
144 ((and (eq (car mods) 'shift) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
145 (>= char ?a) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
146 (<= char ?z)) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
147 (setq char (upcase char))) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
148 ((eq (car mods) 'shift) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
149 (insert "\\S-"))) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
150 (setq mods (cdr mods))) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
151 (cond ((= char ?\\) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
152 (insert "\\\\")) |
33281
e321e58206ac
(insert-kbd-macro): Print semi-colons as `?\;'.
Gerd Moellmann <gerd@gnu.org>
parents:
18383
diff
changeset
|
153 ((= char ?\;) |
e321e58206ac
(insert-kbd-macro): Print semi-colons as `?\;'.
Gerd Moellmann <gerd@gnu.org>
parents:
18383
diff
changeset
|
154 (insert "\\;")) |
12923
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
155 ((= char 127) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
156 (insert "\\C-?")) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
157 ((< char 127) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
158 (insert char)) |
f1e05398634b
(insert-kbd-macro): Express vector char modifiers with
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
159 (t (insert "\\" (format "%o" char))))))) |
11170
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
160 (insert ?\])) |
4d33c7615a5c
(insert-kbd-macro): Do something reasonable for vectors.
Karl Heuer <kwzh@gnu.org>
parents:
10153
diff
changeset
|
161 (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
|
162 (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
|
163 (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
|
164 (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
|
165 (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
|
166 (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
|
167 (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
|
168 (insert " '") |
eb4043bd65ef
(insert-kbd-macros): If arg is empty, use last macro as default.
Richard M. Stallman <rms@gnu.org>
parents:
1469
diff
changeset
|
169 (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
|
170 (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
|
171 (setq keys (cdr keys))))))) |
36 | 172 |
256 | 173 ;;;###autoload |
36 | 174 (defun kbd-macro-query (flag) |
175 "Query user during kbd macro execution. | |
217
8977ce293397
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
216
diff
changeset
|
176 With prefix argument, enters recursive edit, reading keyboard |
8977ce293397
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
216
diff
changeset
|
177 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
|
178 each time the macro executes. |
2708 | 179 Without prefix argument, asks whether to continue running the macro. |
180 Your options are: \\<query-replace-map> | |
181 \\[act] Finish this iteration normally and continue with the next. | |
182 \\[skip] Skip the rest of this iteration, and start the next. | |
183 \\[exit] Stop the macro entirely right now. | |
184 \\[recenter] Redisplay the screen, then ask again. | |
185 \\[edit] Enter recursive edit; ask again when you exit from that." | |
36 | 186 (interactive "P") |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
187 (or executing-kbd-macro |
36 | 188 defining-kbd-macro |
189 (error "Not defining or executing kbd macro")) | |
190 (if flag | |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
191 (let (executing-kbd-macro defining-kbd-macro) |
36 | 192 (recursive-edit)) |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
193 (if (not executing-kbd-macro) |
36 | 194 nil |
2707
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
195 (let ((loop t) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
196 (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
|
197 "Proceed with macro?\\<query-replace-map>\ |
2753
c824ba373cc2
(kbd-macro-query): Fix prompt string.
Richard M. Stallman <rms@gnu.org>
parents:
2708
diff
changeset
|
198 (\\[act], \\[skip], \\[exit], \\[recenter], \\[edit]) "))) |
36 | 199 (while loop |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
200 (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
|
201 (defining-kbd-macro nil)) |
14321
24189cc67176
(kbd-macro-query): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
202 (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
|
203 (read-event))) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
204 def) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
205 (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
|
206 (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
|
207 (cond ((eq def 'act) |
36 | 208 (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
|
209 ((eq def 'skip) |
36 | 210 (setq loop nil) |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
211 (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
|
212 ((eq def 'exit) |
36 | 213 (setq loop nil) |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
214 (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
|
215 ((eq def 'recenter) |
36 | 216 (recenter nil)) |
2707
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
217 ((eq def 'edit) |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14398
diff
changeset
|
218 (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
|
219 (recursive-edit))) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
220 ((eq def 'quit) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
221 (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
|
222 (t |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
223 (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
|
224 (ding)) |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
225 (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
|
226 (princ |
4661157d5c60
(kbd-macro-query): Use query-replace-map to define answers.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
227 (substitute-command-keys |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2753
diff
changeset
|
228 "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
|
229 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
|
230 \\[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
|
231 \\[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
|
232 \\[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
|
233 \\[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
|
234 \\[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
|
235 (save-excursion |
0e1748cc2f32
(kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
236 (set-buffer standard-output) |
0e1748cc2f32
(kbd-macro-query): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
7300
diff
changeset
|
237 (help-mode))))))))))) |
256 | 238 |
268 | 239 ;;;###autoload |
273 | 240 (defun apply-macro-to-region-lines (top bottom &optional macro) |
391 | 241 "For each complete line between point and mark, move to the beginning |
242 of the line, and run the last keyboard macro. | |
273 | 243 |
244 When called from lisp, this function takes two arguments TOP and | |
245 BOTTOM, describing the current region. TOP must be before BOTTOM. | |
246 The optional third argument MACRO specifies a keyboard macro to | |
247 execute. | |
248 | |
249 This is useful for quoting or unquoting included text, adding and | |
250 removing comments, or producing tables where the entries are regular. | |
251 | |
252 For example, in Usenet articles, sections of text quoted from another | |
253 author are indented, or have each line start with `>'. To quote a | |
254 section of text, define a keyboard macro which inserts `>', put point | |
255 and mark at opposite ends of the quoted section, and use | |
256 `\\[apply-macro-to-region-lines]' to mark the entire section. | |
257 | |
258 Suppose you wanted to build a keyword table in C where each entry | |
259 looked like this: | |
260 | |
261 { \"foo\", foo_data, foo_function }, | |
262 { \"bar\", bar_data, bar_function }, | |
263 { \"baz\", baz_data, baz_function }, | |
264 | |
265 You could enter the names in this format: | |
266 | |
267 foo | |
268 bar | |
269 baz | |
270 | |
271 and write a macro to massage a word into a table entry: | |
272 | |
273 \\C-x ( | |
274 \\M-d { \"\\C-y\", \\C-y_data, \\C-y_function }, | |
275 \\C-x ) | |
276 | |
277 and then select the region of un-tablified names and use | |
278 `\\[apply-macro-to-region-lines]' to build the table from the names. | |
279 " | |
280 (interactive "r") | |
391 | 281 (or macro |
282 (progn | |
283 (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
|
284 (error "No keyboard macro has been defined")) |
391 | 285 (setq macro last-kbd-macro))) |
273 | 286 (save-excursion |
287 (let ((end-marker (progn | |
288 (goto-char bottom) | |
289 (beginning-of-line) | |
427 | 290 (point-marker))) |
291 next-line-marker) | |
273 | 292 (goto-char top) |
293 (if (not (bolp)) | |
294 (forward-line 1)) | |
427 | 295 (setq next-line-marker (point-marker)) |
296 (while (< next-line-marker end-marker) | |
297 (goto-char next-line-marker) | |
274 | 298 (save-excursion |
427 | 299 (forward-line 1) |
300 (set-marker next-line-marker (point))) | |
301 (save-excursion | |
302 (execute-kbd-macro (or macro last-kbd-macro)))) | |
303 (set-marker end-marker nil) | |
304 (set-marker next-line-marker nil)))) | |
273 | 305 |
5307
069c54e77fd1
Don't repeat at load time any bindings that are autoloaded.
Richard M. Stallman <rms@gnu.org>
parents:
4331
diff
changeset
|
306 ;;;###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
|
307 |
18383 | 308 (provide 'macros) |
309 | |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
427
diff
changeset
|
310 ;;; macros.el ends here |