Mercurial > emacs
annotate lisp/edmacro.el @ 12689:83ef0f002ecf
(pascal-mode): Added imenu support.
(pascal-imenu-generic-expression): New variable.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 27 Jul 1995 18:50:02 +0000 |
parents | 993431cf1f89 |
children | 2e80892d4b39 |
rev | line source |
---|---|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
1 ;;; edmacro.el --- keyboard macro editor |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
2 |
7300 | 3 ;; Copyright (C) 1993, 1994 Free Software Foundation, Inc. |
845 | 4 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
5 ;; Author: Dave Gillespie <daveg@synaptics.com> |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
6 ;; Maintainer: Dave Gillespie <daveg@synaptics.com> |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
7 ;; Version: 2.01 |
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
845
diff
changeset
|
8 ;; Keywords: abbrev |
109 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; 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:
662
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
109 | 15 ;; any later version. |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to | |
24 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
25 | |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
26 ;;; Commentary: |
109 | 27 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
28 ;;; Usage: |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
29 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
30 ;; The `C-x C-k' (`edit-kbd-macro') command edits a keyboard macro |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
31 ;; in a special buffer. It prompts you to type a key sequence, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
32 ;; which should be one of: |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
33 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
34 ;; * RET or `C-x e' (call-last-kbd-macro), to edit the most |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
35 ;; recently defined keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
36 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
37 ;; * `M-x' followed by a command name, to edit a named command |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
38 ;; whose definition is a keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
39 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
40 ;; * `C-h l' (view-lossage), to edit the 100 most recent keystrokes |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
41 ;; and install them as the "current" macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
42 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
43 ;; * any key sequence whose definition is a keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
44 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
45 ;; This file includes a version of `insert-kbd-macro' that uses the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
46 ;; more readable format defined by these routines. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
47 ;; |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
48 ;; Also, the `read-kbd-macro' command parses the region as |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
49 ;; a keyboard macro, and installs it as the "current" macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
50 ;; This and `format-kbd-macro' can also be called directly as |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
51 ;; Lisp functions. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
52 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
53 ;; Type `C-h m', or see the documentation for `edmacro-mode' below, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
54 ;; for information about the format of written keyboard macros. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
55 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
56 ;; `edit-kbd-macro' formats the macro with one command per line, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
57 ;; including the command names as comments on the right. If the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
58 ;; formatter gets confused about which keymap was used for the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
59 ;; characters, the command-name comments will be wrong but that |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
60 ;; won't hurt anything. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
61 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
62 ;; With a prefix argument, `edit-kbd-macro' will format the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
63 ;; macro in a more concise way that omits the comments. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
64 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
65 ;; This package requires GNU Emacs 19 or later, and daveg's CL |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
66 ;; package 2.02 or later. (CL 2.02 comes standard starting with |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
67 ;; Emacs 19.18.) This package does not work with Emacs 18 or |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
68 ;; Lucid Emacs. |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
69 |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
70 ;;; Code: |
109 | 71 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
72 (require 'cl) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
73 |
109 | 74 ;;; The user-level commands for editing macros. |
75 | |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
76 ;;;###autoload (define-key ctl-x-map "\C-k" 'edit-kbd-macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
77 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
78 ;;;###autoload |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
79 (defvar edmacro-eight-bits nil |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
80 "*Non-nil if edit-kbd-macro should leave 8-bit characters intact. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
81 Default nil means to write characters above \\177 in octal notation.") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
82 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
83 (defvar edmacro-mode-map nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
84 (unless edmacro-mode-map |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
85 (setq edmacro-mode-map (make-sparse-keymap)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
86 (define-key edmacro-mode-map "\C-c\C-c" 'edmacro-finish-edit) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
87 (define-key edmacro-mode-map "\C-c\C-q" 'edmacro-insert-key)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
88 |
258 | 89 ;;;###autoload |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
90 (defun edit-kbd-macro (keys &optional prefix finish-hook store-hook) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
91 "Edit a keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
92 At the prompt, type any key sequence which is bound to a keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
93 Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
94 the last 100 keystrokes as a keyboard macro, or `M-x' to edit a macro by |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
95 its command name. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
96 With a prefix argument, format the macro in a more concise way." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
97 (interactive "kKeyboard macro to edit (C-x e, M-x, C-h l, or keys): \nP") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
98 (when keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
99 (let ((cmd (if (arrayp keys) (key-binding keys) keys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
100 (mac nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
101 (cond (store-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
102 (setq mac keys) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
103 (setq cmd nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
104 ((or (eq cmd 'call-last-kbd-macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
105 (member keys '("\r" [return]))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
106 (or last-kbd-macro |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
107 (y-or-n-p "No keyboard macro defined. Create one? ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
108 (keyboard-quit)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
109 (setq mac (or last-kbd-macro "")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
110 (setq cmd 'last-kbd-macro)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
111 ((eq cmd 'execute-extended-command) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
112 (setq cmd (read-command "Name of keyboard macro to edit: ")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
113 (setq mac (symbol-function cmd))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
114 ((eq cmd 'view-lossage) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
115 (setq mac (recent-keys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
116 (setq cmd 'last-kbd-macro)) |
11870
993431cf1f89
(edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents:
10692
diff
changeset
|
117 ((null cmd) |
993431cf1f89
(edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents:
10692
diff
changeset
|
118 (error "Key sequence %s is not defined" (key-description keys))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
119 ((symbolp cmd) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
120 (setq mac (symbol-function cmd))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
121 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
122 (setq mac cmd) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
123 (setq cmd nil))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
124 (unless (arrayp mac) |
11870
993431cf1f89
(edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents:
10692
diff
changeset
|
125 (error "Key sequence %s is not a keyboard macro" |
993431cf1f89
(edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents:
10692
diff
changeset
|
126 (key-description keys))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
127 (message "Formatting keyboard macro...") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
128 (let* ((oldbuf (current-buffer)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
129 (mmac (edmacro-fix-menu-commands mac)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
130 (fmt (edmacro-format-keys mmac 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
131 (fmtv (edmacro-format-keys mmac (not prefix))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
132 (buf (get-buffer-create "*Edit Macro*"))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
133 (message "Formatting keyboard macro...done") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
134 (switch-to-buffer buf) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
135 (kill-all-local-variables) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
136 (use-local-map edmacro-mode-map) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
137 (setq buffer-read-only nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
138 (setq major-mode 'edmacro-mode) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
139 (setq mode-name "Edit Macro") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
140 (set (make-local-variable 'edmacro-original-buffer) oldbuf) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
141 (set (make-local-variable 'edmacro-finish-hook) finish-hook) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
142 (set (make-local-variable 'edmacro-store-hook) store-hook) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
143 (erase-buffer) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
144 (insert ";; Keyboard Macro Editor. Press C-c C-c to finish; " |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
145 "press C-x k RET to cancel.\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
146 (insert ";; Original keys: " fmt "\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
147 (unless store-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
148 (insert "\nCommand: " (if cmd (symbol-name cmd) "none") "\n") |
5772
daac61915408
(edit-kbd-macro, edmacro-finish-edit, insert-kbd-macro):
Richard M. Stallman <rms@gnu.org>
parents:
5307
diff
changeset
|
149 (let ((keys (where-is-internal (or cmd mac) '(keymap)))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
150 (if keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
151 (while keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
152 (insert "Key: " (edmacro-format-keys (pop keys) 1) "\n")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
153 (insert "Key: none\n")))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
154 (insert "\nMacro:\n\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
155 (save-excursion |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
156 (insert fmtv "\n")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
157 (recenter '(4)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
158 (when (eq mac mmac) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
159 (set-buffer-modified-p nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
160 (run-hooks 'edmacro-format-hook))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
161 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
162 ;;; The next two commands are provided for convenience and backward |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
163 ;;; compatibility. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
164 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
165 ;;;###autoload |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
166 (defun edit-last-kbd-macro (&optional prefix) |
109 | 167 "Edit the most recently defined keyboard macro." |
168 (interactive "P") | |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
169 (edit-kbd-macro 'call-last-kbd-macro prefix)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
170 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
171 ;;;###autoload |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
172 (defun edit-named-kbd-macro (&optional prefix) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
173 "Edit a keyboard macro which has been given a name by `name-last-kbd-macro'." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
174 (interactive "P") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
175 (edit-kbd-macro 'execute-extended-command prefix)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
176 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
177 ;;;###autoload |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
178 (defun read-kbd-macro (start &optional end) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
179 "Read the region as a keyboard macro definition. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
180 The region is interpreted as spelled-out keystrokes, e.g., \"M-x abc RET\". |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
181 See documentation for `edmacro-mode' for details. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
182 Leading/trailing \"C-x (\" and \"C-x )\" in the text are allowed and ignored. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
183 The resulting macro is installed as the \"current\" keyboard macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
184 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
185 In Lisp, may also be called with a single STRING argument in which case |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
186 the result is returned rather than being installed as the current macro. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
187 The result will be a string if possible, otherwise an event vector. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
188 Second argument NEED-VECTOR means to return an event vector always." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
189 (interactive "r") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
190 (if (stringp start) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
191 (edmacro-parse-keys start end) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
192 (setq last-kbd-macro (edmacro-parse-keys (buffer-substring start end))))) |
109 | 193 |
258 | 194 ;;;###autoload |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
195 (defun format-kbd-macro (&optional macro verbose) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
196 "Return the keyboard macro MACRO as a human-readable string. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
197 This string is suitable for passing to `read-kbd-macro'. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
198 Second argument VERBOSE means to put one command per line with comments. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
199 If VERBOSE is `1', put everything on one line. If VERBOSE is omitted |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
200 or nil, use a compact 80-column format." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
201 (and macro (symbolp macro) (setq macro (symbol-function macro))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
202 (edmacro-format-keys (or macro last-kbd-macro) verbose)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
203 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
204 ;;; Commands for *Edit Macro* buffer. |
109 | 205 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
206 (defun edmacro-finish-edit () |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
207 (interactive) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
208 (unless (eq major-mode 'edmacro-mode) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
209 (error |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
210 "This command is valid only in buffers created by `edit-kbd-macro'")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
211 (run-hooks 'edmacro-finish-hook) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
212 (let ((cmd nil) (keys nil) (no-keys nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
213 (top (point-min))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
214 (goto-char top) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
215 (let ((case-fold-search nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
216 (while (cond ((looking-at "[ \t]*\\($\\|;;\\|REM[ \t\n]\\)") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
217 t) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
218 ((looking-at "Command:[ \t]*\\([^ \t\n]*\\)[ \t]*$") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
219 (when edmacro-store-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
220 (error "\"Command\" line not allowed in this context")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
221 (let ((str (buffer-substring (match-beginning 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
222 (match-end 1)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
223 (unless (equal str "") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
224 (setq cmd (and (not (equalp str "none")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
225 (intern str))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
226 (and (fboundp cmd) (not (arrayp (symbol-function cmd))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
227 (not (y-or-n-p |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
228 (format "Command %s is already defined; %s" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
229 cmd "proceed? "))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
230 (keyboard-quit)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
231 t) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
232 ((looking-at "Key:\\(.*\\)$") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
233 (when edmacro-store-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
234 (error "\"Key\" line not allowed in this context")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
235 (let ((key (edmacro-parse-keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
236 (buffer-substring (match-beginning 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
237 (match-end 1))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
238 (unless (equal key "") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
239 (if (equalp key "none") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
240 (setq no-keys t) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
241 (push key keys) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
242 (let ((b (key-binding key))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
243 (and b (commandp b) (not (arrayp b)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
244 (or (not (fboundp b)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
245 (not (arrayp (symbol-function b)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
246 (not (y-or-n-p |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
247 (format "Key %s is already defined; %s" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
248 (edmacro-format-keys key 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
249 "proceed? "))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
250 (keyboard-quit)))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
251 t) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
252 ((looking-at "Macro:[ \t\n]*") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
253 (goto-char (match-end 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
254 nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
255 ((eobp) nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
256 (t (error "Expected a `Macro:' line"))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
257 (forward-line 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
258 (setq top (point))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
259 (let* ((buf (current-buffer)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
260 (str (buffer-substring top (point-max))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
261 (modp (buffer-modified-p)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
262 (obuf edmacro-original-buffer) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
263 (store-hook edmacro-store-hook) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
264 (finish-hook edmacro-finish-hook)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
265 (unless (or cmd keys store-hook (equal str "")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
266 (error "No command name or keys specified")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
267 (when modp |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
268 (when (buffer-name obuf) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
269 (set-buffer obuf)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
270 (message "Compiling keyboard macro...") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
271 (let ((mac (edmacro-parse-keys str))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
272 (message "Compiling keyboard macro...done") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
273 (if store-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
274 (funcall store-hook mac) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
275 (when (eq cmd 'last-kbd-macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
276 (setq last-kbd-macro (and (> (length mac) 0) mac)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
277 (setq cmd nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
278 (when cmd |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
279 (if (= (length mac) 0) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
280 (fmakunbound cmd) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
281 (fset cmd mac))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
282 (if no-keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
283 (when cmd |
5772
daac61915408
(edit-kbd-macro, edmacro-finish-edit, insert-kbd-macro):
Richard M. Stallman <rms@gnu.org>
parents:
5307
diff
changeset
|
284 (loop for key in (where-is-internal cmd '(keymap)) do |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
285 (global-unset-key key))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
286 (when keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
287 (if (= (length mac) 0) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
288 (loop for key in keys do (global-unset-key key)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
289 (loop for key in keys do |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
290 (global-set-key key (or cmd mac))))))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
291 (kill-buffer buf) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
292 (when (buffer-name obuf) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
293 (switch-to-buffer obuf)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
294 (when finish-hook |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
295 (funcall finish-hook))))) |
109 | 296 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
297 (defun edmacro-insert-key (key) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
298 "Insert the written name of a key in the buffer." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
299 (interactive "kKey to insert: ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
300 (if (bolp) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
301 (insert (edmacro-format-keys key t) "\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
302 (insert (edmacro-format-keys key) " "))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
303 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
304 (defun edmacro-mode () |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
305 "\\<edmacro-mode-map>Keyboard Macro Editing mode. Press |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
306 \\[edmacro-finish-edit] to save and exit. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
307 To abort the edit, just kill this buffer with \\[kill-buffer] RET. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
308 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
309 Press \\[edmacro-insert-key] to insert the name of any key by typing the key. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
310 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
311 The editing buffer contains a \"Command:\" line and any number of |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
312 \"Key:\" lines at the top. These are followed by a \"Macro:\" line |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
313 and the macro itself as spelled-out keystrokes: `C-x C-f foo RET'. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
314 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
315 The \"Command:\" line specifies the command name to which the macro |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
316 is bound, or \"none\" for no command name. Write \"last-kbd-macro\" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
317 to refer to the current keyboard macro (as used by \\[call-last-kbd-macro]). |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
318 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
319 The \"Key:\" lines specify key sequences to which the macro is bound, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
320 or \"none\" for no key bindings. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
321 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
322 You can edit these lines to change the places where the new macro |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
323 is stored. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
324 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
325 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
326 Format of keyboard macros during editing: |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
327 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
328 Text is divided into \"words\" separated by whitespace. Except for |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
329 the words described below, the characters of each word go directly |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
330 as characters of the macro. The whitespace that separates words |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
331 is ignored. Whitespace in the macro must be written explicitly, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
332 as in \"foo SPC bar RET\". |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
333 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
334 * The special words RET, SPC, TAB, DEL, LFD, ESC, and NUL represent |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
335 special control characters. The words must be written in uppercase. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
336 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
337 * A word in angle brackets, e.g., <return>, <down>, or <f1>, represents |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
338 a function key. (Note that in the standard configuration, the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
339 function key <return> and the control key RET are synonymous.) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
340 You can use angle brackets on the words RET, SPC, etc., but they |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
341 are not required there. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
342 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
343 * Keys can be written by their ASCII code, using a backslash followed |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
344 by up to six octal digits. This is the only way to represent keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
345 with codes above \\377. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
346 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
347 * One or more prefixes M- (meta), C- (control), S- (shift), A- (alt), |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
348 H- (hyper), and s- (super) may precede a character or key notation. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
349 For function keys, the prefixes may go inside or outside of the |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
350 brackets: C-<down> = <C-down>. The prefixes may be written in |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
351 any order: M-C-x = C-M-x. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
352 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
353 Prefixes are not allowed on multi-key words, e.g., C-abc, except |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
354 that the Meta prefix is allowed on a sequence of digits and optional |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
355 minus sign: M--123 = M-- M-1 M-2 M-3. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
356 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
357 * The `^' notation for control characters also works: ^M = C-m. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
358 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
359 * Double angle brackets enclose command names: <<next-line>> is |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
360 shorthand for M-x next-line RET. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
361 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
362 * Finally, REM or ;; causes the rest of the line to be ignored as a |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
363 comment. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
364 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
365 Any word may be prefixed by a multiplier in the form of a decimal |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
366 number and `*': 3*<right> = <right> <right> <right>, and |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
367 10*foo = foofoofoofoofoofoofoofoofoofoo. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
368 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
369 Multiple text keys can normally be strung together to form a word, |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
370 but you may need to add whitespace if the word would look like one |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
371 of the above notations: `; ; ;' is a keyboard macro with three |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
372 semicolons, but `;;;' is a comment. Likewise, `\\ 1 2 3' is four |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
373 keys but `\\123' is a single key written in octal, and `< right >' |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
374 is seven keys but `<right>' is a single function key. When in |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
375 doubt, use whitespace." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
376 (interactive) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
377 (error "This mode can be enabled only by `edit-kbd-macro'")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
378 (put 'edmacro-mode 'mode-class 'special) |
109 | 379 |
380 ;;; Formatting a keyboard macro as human-readable text. | |
381 | |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
382 (defun edmacro-format-keys (macro &optional verbose) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
383 (setq macro (edmacro-fix-menu-commands macro)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
384 (let* ((maps (append (current-minor-mode-maps) |
9199
712e13833ad8
(edmacro-format-keys): Cope if local keymap is nil.
Richard M. Stallman <rms@gnu.org>
parents:
7300
diff
changeset
|
385 (if (current-local-map) |
712e13833ad8
(edmacro-format-keys): Cope if local keymap is nil.
Richard M. Stallman <rms@gnu.org>
parents:
7300
diff
changeset
|
386 (list (current-local-map))) |
712e13833ad8
(edmacro-format-keys): Cope if local keymap is nil.
Richard M. Stallman <rms@gnu.org>
parents:
7300
diff
changeset
|
387 (list (current-global-map)))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
388 (pkeys '(end-macro ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?\C-u |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
389 ?\M-- ?\M-0 ?\M-1 ?\M-2 ?\M-3 ?\M-4 ?\M-5 ?\M-6 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
390 ?\M-7 ?\M-8 ?\M-9)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
391 (mdigs (nthcdr 13 pkeys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
392 (maxkey (if edmacro-eight-bits 255 127)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
393 (case-fold-search nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
394 (res-words '("NUL" "TAB" "LFD" "RET" "ESC" "SPC" "DEL" "REM")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
395 (rest-mac (vconcat macro [end-macro])) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
396 (res "") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
397 (len 0) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
398 (one-line (eq verbose 1))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
399 (if one-line (setq verbose nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
400 (when (stringp macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
401 (loop for i below (length macro) do |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
402 (when (>= (aref rest-mac i) 128) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
403 (incf (aref rest-mac i) (- ?\M-\^@ 128))))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
404 (while (not (eq (aref rest-mac 0) 'end-macro)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
405 (let* ((prefix |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
406 (or (and (integerp (aref rest-mac 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
407 (memq (aref rest-mac 0) mdigs) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
408 (memq (key-binding (subseq rest-mac 0 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
409 '(digit-argument negative-argument)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
410 (let ((i 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
411 (while (memq (aref rest-mac i) (cdr mdigs)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
412 (incf i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
413 (and (not (memq (aref rest-mac i) pkeys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
414 (prog1 (concat "M-" (subseq rest-mac 0 i) " ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
415 (callf subseq rest-mac i))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
416 (and (eq (aref rest-mac 0) ?\C-u) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
417 (eq (key-binding [?\C-u]) 'universal-argument) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
418 (let ((i 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
419 (while (eq (aref rest-mac i) ?\C-u) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
420 (incf i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
421 (and (not (memq (aref rest-mac i) pkeys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
422 (prog1 (loop repeat i concat "C-u ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
423 (callf subseq rest-mac i))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
424 (and (eq (aref rest-mac 0) ?\C-u) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
425 (eq (key-binding [?\C-u]) 'universal-argument) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
426 (let ((i 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
427 (when (eq (aref rest-mac i) ?-) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
428 (incf i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
429 (while (memq (aref rest-mac i) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
430 '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
431 (incf i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
432 (and (not (memq (aref rest-mac i) pkeys)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
433 (prog1 (concat "C-u " (subseq rest-mac 1 i) " ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
434 (callf subseq rest-mac i))))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
435 (bind-len (apply 'max 1 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
436 (loop for map in maps |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
437 for b = (lookup-key map rest-mac) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
438 when b collect b))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
439 (key (subseq rest-mac 0 bind-len)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
440 (fkey nil) tlen tkey |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
441 (bind (or (loop for map in maps for b = (lookup-key map key) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
442 thereis (and (not (integerp b)) b)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
443 (and (setq fkey (lookup-key function-key-map rest-mac)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
444 (setq tlen fkey tkey (subseq rest-mac 0 tlen) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
445 fkey (lookup-key function-key-map tkey)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
446 (loop for map in maps |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
447 for b = (lookup-key map fkey) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
448 when (and (not (integerp b)) b) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
449 do (setq bind-len tlen key tkey) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
450 and return b |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
451 finally do (setq fkey nil))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
452 (first (aref key 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
453 (text (loop for i from bind-len below (length rest-mac) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
454 for ch = (aref rest-mac i) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
455 while (and (integerp ch) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
456 (> ch 32) (< ch maxkey) (/= ch 92) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
457 (eq (key-binding (char-to-string ch)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
458 'self-insert-command) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
459 (or (> i (- (length rest-mac) 2)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
460 (not (eq ch (aref rest-mac (+ i 1)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
461 (not (eq ch (aref rest-mac (+ i 2)))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
462 finally return i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
463 desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
464 (if (stringp bind) (setq bind nil)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
465 (cond ((and (eq bind 'self-insert-command) (not prefix) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
466 (> text 1) (integerp first) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
467 (> first 32) (<= first maxkey) (/= first 92) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
468 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
469 (if (> text 30) (setq text 30)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
470 (setq desc (concat (subseq rest-mac 0 text))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
471 (when (string-match "^[ACHMsS]-." desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
472 (setq text 2) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
473 (callf substring desc 0 2)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
474 (not (string-match |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
475 "^;;\\|^<.*>$\\|^\\\\[0-9]+$\\|^[0-9]+\\*." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
476 desc)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
477 (when (or (string-match "^\\^.$" desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
478 (member desc res-words)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
479 (setq desc (mapconcat 'char-to-string desc " "))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
480 (when verbose |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
481 (setq bind (format "%s * %d" bind text))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
482 (setq bind-len text)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
483 ((and (eq bind 'execute-extended-command) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
484 (> text bind-len) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
485 (memq (aref rest-mac text) '(return 13)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
486 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
487 (setq desc (concat (subseq rest-mac bind-len text))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
488 (commandp (intern-soft desc)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
489 (if (commandp (intern-soft desc)) (setq bind desc)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
490 (setq desc (format "<<%s>>" desc)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
491 (setq bind-len (1+ text))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
492 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
493 (setq desc (mapconcat |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
494 (function |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
495 (lambda (ch) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
496 (cond |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
497 ((integerp ch) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
498 (concat |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
499 (loop for pf across "ACHMsS" |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
500 for bit in '(?\A-\^@ ?\C-\^@ ?\H-\^@ |
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
501 ?\M-\^@ ?\s-\^@ ?\S-\^@) |
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
502 when (/= (logand ch bit) 0) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
503 concat (format "%c-" pf)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
504 (let ((ch2 (logand ch (1- (lsh 1 18))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
505 (cond ((<= ch2 32) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
506 (case ch2 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
507 (0 "NUL") (9 "TAB") (10 "LFD") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
508 (13 "RET") (27 "ESC") (32 "SPC") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
509 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
510 (format "C-%c" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
511 (+ (if (<= ch2 26) 96 64) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
512 ch2))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
513 ((= ch2 127) "DEL") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
514 ((<= ch2 maxkey) (char-to-string ch2)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
515 (t (format "\\%o" ch2)))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
516 ((symbolp ch) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
517 (format "<%s>" ch)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
518 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
519 (error "Unrecognized item in macro: %s" ch))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
520 (or fkey key) " ")))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
521 (if prefix (setq desc (concat prefix desc))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
522 (unless (string-match " " desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
523 (let ((times 1) (pos bind-len)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
524 (while (not (mismatch rest-mac rest-mac |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
525 :end1 bind-len :start2 pos |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
526 :end2 (+ bind-len pos))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
527 (incf times) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
528 (incf pos bind-len)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
529 (when (> times 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
530 (setq desc (format "%d*%s" times desc)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
531 (setq bind-len (* bind-len times))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
532 (setq rest-mac (subseq rest-mac bind-len)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
533 (if verbose |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
534 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
535 (unless (equal res "") (callf concat res "\n")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
536 (callf concat res desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
537 (when (and bind (or (stringp bind) (symbolp bind))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
538 (callf concat res |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
539 (make-string (max (- 3 (/ (length desc) 8)) 1) 9) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
540 ";; " (if (stringp bind) bind (symbol-name bind)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
541 (setq len 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
542 (if (and (> (+ len (length desc) 2) 72) (not one-line)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
543 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
544 (callf concat res "\n ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
545 (setq len 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
546 (unless (equal res "") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
547 (callf concat res " ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
548 (incf len))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
549 (callf concat res desc) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
550 (incf len (length desc))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
551 res)) |
109 | 552 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
553 (defun edmacro-fix-menu-commands (macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
554 (when (vectorp macro) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
555 (let ((i 0) ev) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
556 (while (< i (length macro)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
557 (when (consp (setq ev (aref macro i))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
558 (cond ((equal (cadadr ev) '(menu-bar)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
559 (setq macro (vconcat (subseq macro 0 i) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
560 (vector 'menu-bar (car ev)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
561 (subseq macro (1+ i)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
562 (incf i)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
563 ;; It would be nice to do pop-up menus, too, but not enough |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
564 ;; info is recorded in macros to make this possible. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
565 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
566 (error "Macros with mouse clicks are not %s" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
567 "supported by this command")))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
568 (incf i)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
569 macro) |
109 | 570 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
571 ;;; Parsing a human-readable keyboard macro. |
109 | 572 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
573 (defun edmacro-parse-keys (string &optional need-vector) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
574 (let ((case-fold-search nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
575 (pos 0) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
576 (res [])) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
577 (while (and (< pos (length string)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
578 (string-match "[^ \t\n\f]+" string pos)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
579 (let ((word (substring string (match-beginning 0) (match-end 0))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
580 (key nil) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
581 (times 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
582 (setq pos (match-end 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
583 (when (string-match "\\([0-9]+\\)\\*." word) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
584 (setq times (string-to-int (substring word 0 (match-end 1)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
585 (setq word (substring word (1+ (match-end 1))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
586 (cond ((string-match "^<<.+>>$" word) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
587 (setq key (vconcat (if (eq (key-binding [?\M-x]) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
588 'execute-extended-command) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
589 [?\M-x] |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
590 (or (car (where-is-internal |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
591 'execute-extended-command)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
592 [?\M-x])) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
593 (substring word 2 -2) "\r"))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
594 ((and (string-match "^\\(\\([ACHMsS]-\\)*\\)<\\(.+\\)>$" word) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
595 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
596 (setq word (concat (substring word (match-beginning 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
597 (match-end 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
598 (substring word (match-beginning 3) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
599 (match-end 3)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
600 (not (string-match |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
601 "\\<\\(NUL\\|RET\\|LFD\\|ESC\\|SPC\\|DEL\\)$" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
602 word)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
603 (setq key (list (intern word)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
604 ((or (equal word "REM") (string-match "^;;" word)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
605 (setq pos (string-match "$" string pos))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
606 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
607 (let ((orig-word word) (prefix 0) (bits 0)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
608 (while (string-match "^[ACHMsS]-." word) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
609 (incf bits (cdr (assq (aref word 0) |
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
610 '((?A . ?\A-\^@) (?C . ?\C-\^@) |
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
611 (?H . ?\H-\^@) (?M . ?\M-\^@) |
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
612 (?s . ?\s-\^@) (?S . ?\S-\^@))))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
613 (incf prefix 2) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
614 (callf substring word 2)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
615 (when (string-match "^\\^.$" word) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
616 (incf bits ?\C-\^@) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
617 (incf prefix) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
618 (callf substring word 1)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
619 (let ((found (assoc word '(("NUL" . "\0") ("RET" . "\r") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
620 ("LFD" . "\n") ("TAB" . "\t") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
621 ("ESC" . "\e") ("SPC" . " ") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
622 ("DEL" . "\177"))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
623 (when found (setq word (cdr found)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
624 (when (string-match "^\\\\[0-7]+$" word) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
625 (loop for ch across word |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
626 for n = 0 then (+ (* n 8) ch -48) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
627 finally do (setq word (vector n)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
628 (cond ((= bits 0) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
629 (setq key word)) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
630 ((and (= bits ?\M-\^@) (stringp word) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
631 (string-match "^-?[0-9]+$" word)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
632 (setq key (loop for x across word collect (+ x bits)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
633 ((/= (length word) 1) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
634 (error "%s must prefix a single character, not %s" |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
635 (substring orig-word 0 prefix) word)) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
636 ((and (/= (logand bits ?\C-\^@) 0) (stringp word) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
637 (string-match "[@-_.a-z?]" word)) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
638 (setq key (list (+ bits (- ?\C-\^@) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
639 (if (equal word "?") 127 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
640 (logand (aref word 0) 31)))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
641 (t |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
642 (setq key (list (+ bits (aref word 0))))))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
643 (when key |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
644 (loop repeat times do (callf vconcat res key))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
645 (when (and (>= (length res) 4) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
646 (eq (aref res 0) ?\C-x) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
647 (eq (aref res 1) ?\() |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
648 (eq (aref res (- (length res) 2)) ?\C-x) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
649 (eq (aref res (- (length res) 1)) ?\))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
650 (setq res (subseq res 2 -2))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
651 (if (and (not need-vector) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
652 (loop for ch across res |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
653 always (and (integerp ch) |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
654 (let ((ch2 (logand ch (lognot ?\M-\^@)))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
655 (and (>= ch2 0) (<= ch2 127)))))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
656 (concat (loop for ch across res |
10692
58ab3325da3b
(edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents:
9199
diff
changeset
|
657 collect (if (= (logand ch ?\M-\^@) 0) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
658 ch (+ ch 128)))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
659 res))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
660 |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
661 ;;; The following probably ought to go in macros.el: |
109 | 662 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
663 ;;;###autoload |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
664 (defun insert-kbd-macro (macroname &optional keys) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
665 "Insert in buffer the definition of kbd macro NAME, as Lisp code. |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
666 Optional second arg KEYS means also record the keys it is on |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
667 \(this is the prefix argument, when calling interactively). |
109 | 668 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
669 This Lisp code will, when executed, define the kbd macro with the same |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
670 definition it has now. If you say to record the keys, the Lisp code |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
671 will also rebind those keys to the macro. Only global key bindings |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
672 are recorded since executing this Lisp code always makes global |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
673 bindings. |
109 | 674 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
675 To save a kbd macro, visit a file of Lisp code such as your `~/.emacs', |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
676 use this command, and then save the file." |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
677 (interactive "CInsert kbd macro (name): \nP") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
678 (let (definition) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
679 (if (string= (symbol-name macroname) "") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
680 (progn |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
681 (setq definition (format-kbd-macro)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
682 (insert "(setq last-kbd-macro")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
683 (setq definition (format-kbd-macro macroname)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
684 (insert (format "(defalias '%s" macroname))) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
685 (if (> (length definition) 50) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
686 (insert " (read-kbd-macro\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
687 (insert "\n (read-kbd-macro ")) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
688 (prin1 definition (current-buffer)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
689 (insert "))\n") |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
690 (if keys |
5772
daac61915408
(edit-kbd-macro, edmacro-finish-edit, insert-kbd-macro):
Richard M. Stallman <rms@gnu.org>
parents:
5307
diff
changeset
|
691 (let ((keys (where-is-internal macroname '(keymap)))) |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
692 (while keys |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
693 (insert (format "(global-set-key %S '%s)\n" (car keys) macroname)) |
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
694 (setq keys (cdr keys))))))) |
109 | 695 |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
696 (provide 'edmacro) |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
697 |
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
258
diff
changeset
|
698 ;;; edmacro.el ends here |
4754
463663a999ee
Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents:
2247
diff
changeset
|
699 |