annotate lisp/edmacro.el @ 30408:e3e2c9051c5f

Got rid of all byte-compiler warnings on Emacs. Add to the menu when the file is loaded, not in ada-mode-hook. Add -toolbar to the default ddd command Switches moved from ada-prj-default-comp-cmd and ada-prj-default-make-cmd to ada-prj-default-comp-opt (ada-add-ada-menu): Remove the map and name parameters Add the Ada Reference Manual to the menu (ada-check-current): rewritten as a call to ada-compile-current (ada-compile): Removed. (ada-compile-application, ada-compile-current, ada-check-current): Set the compilation-search-path so that compile.el automatically finds the sources in src_dir. Automatic scrollong of the compilation buffer. C-uC-cC-c asks for confirmation before compiling (ada-compile-current): New parameter, prj-field (ada-complete-identifier): Load the .ali file before doing processing (ada-find-ali-file-in-dir): prepend build_dir to obj_dir to conform to gnatmake's behavior. (ada-find-file-in-dir): New function (ada-find-references): Set the environment variables for gnatfind (ada-find-src-file-in-dir): New function. (ada-first-non-nil): Removed (ada-gdb-application): Add support for jdb, the java debugger. (ada-get-ada-file-name): Load the original-file first if not done yet. (ada-get-all-references): Handles the new ali syntax (parent types are found between <>). (ada-initialize-runtime-library): New function (ada-mode-hook): Always load a project file when a file is opened, so that the casing exceptions are correctly read. (ada-operator-re): Add all missing operators ("abs", "rem", "**"). (ada-parse-prj-file): Use find-file-noselect instead of find-file to open the project file, since the latter does not work with speedbar Get default values before loading the prj file, or the default executable file name is wrong. Use the absolute value of src_dir to initialize ada-search-directories and compilation-search-path,... Add the standard runtime library to the search path for find-file. (ada-prj-default-debugger): Was missing an opening '{' (ada-prj-default-bind-opt, ada-prj-default-link-opt): New variables. (ada-prj-default-gnatmake-opt): New variable (ada-prj-find-prj-file): Handles non-file buffers For non-Ada buffers, the project file is the default one Save the windows configuration before displaying the menu. (ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed (ada-read-identifier): Fix xrefs on operators (for "mod", "and", ...) regexp-quote identifiers names to support operators +, -,... in regexps. (ada-remote): New function. (ada-run-application): Erase the output buffer before starting the run Support remote execution of the application. Use call-process, or the arguments are incorrectly parsed (ada-set-default-project-file): Reread the content of the active project file, not the one from the current buffer When a project file is set as the default project, all directories are automatically associated with it. (ada-set-environment): New function (ada-treat-cmd-string): New special variable ${current} (ada-treat-cmd-string): Revised. The substitution is now done for any ${...} substring (ada-xref-current): If no body was found, compiles the spec instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the compiler to get rid of command line length limitations. (ada-xref-get-project-field): New function (ada-xref-project-files): New variable (ada-xref-runtime-library-specs-path) (ada-xref-runtime-library-ali-path): New variables (ada-xref-set-default-prj-values): Default run command now does a cd to the build directory. New field: main_unit Provide a default file name even if the current buffer has no prj file.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:13:11 +0000
parents 26c9122ca008
children b174db545cfd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
cc7cd83ccf3f Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 5772
diff changeset
3 ;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
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
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
9
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
11
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
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
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
15 ;; any later version.
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
16
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
21
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12955
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12955
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12955
diff changeset
25 ;; Boston, MA 02111-1307, USA.
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
26
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
27 ;;; Commentary:
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
28
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
29 ;;; Usage:
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
30 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
31 ;; 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
32 ;; 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
33 ;; which should be one of:
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
34 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
35 ;; * 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
36 ;; recently defined keyboard macro.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
37 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
38 ;; * `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
39 ;; whose definition is a keyboard macro.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
40 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
41 ;; * `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
42 ;; and install them as the "current" macro.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
43 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
44 ;; * any key sequence whose definition is a keyboard macro.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
45 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
46 ;; 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
47 ;; more readable format defined by these routines.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
48 ;;
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
49 ;; 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
50 ;; 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
51 ;; 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
52 ;; Lisp functions.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
53
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
54 ;; 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
55 ;; for information about the format of written keyboard macros.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
56
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
57 ;; `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
58 ;; 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
59 ;; 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
60 ;; 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
61 ;; won't hurt anything.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
62
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
63 ;; 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
64 ;; 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
65
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
66 ;; 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
67 ;; 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
68 ;; 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
69 ;; Lucid Emacs.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
70
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
71 ;;; Code:
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
72
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
73 (eval-when-compile
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
74 (require 'cl))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
75
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
76 ;;; The user-level commands for editing macros.
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
77
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
78 ;;;###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
79
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
80 ;;;###autoload
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
81 (defvar edmacro-eight-bits nil
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
82 "*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
83 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
84
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
85 (defvar edmacro-mode-map nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
86 (unless edmacro-mode-map
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
87 (setq edmacro-mode-map (make-sparse-keymap))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
88 (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
89 (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
90
14464
fea038c6da68 (edmacro-original-buffer, edmacro-finish-hook)
Richard M. Stallman <rms@gnu.org>
parents: 14397
diff changeset
91 (defvar edmacro-store-hook)
fea038c6da68 (edmacro-original-buffer, edmacro-finish-hook)
Richard M. Stallman <rms@gnu.org>
parents: 14397
diff changeset
92 (defvar edmacro-finish-hook)
fea038c6da68 (edmacro-original-buffer, edmacro-finish-hook)
Richard M. Stallman <rms@gnu.org>
parents: 14397
diff changeset
93 (defvar edmacro-original-buffer)
fea038c6da68 (edmacro-original-buffer, edmacro-finish-hook)
Richard M. Stallman <rms@gnu.org>
parents: 14397
diff changeset
94
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 199
diff changeset
95 ;;;###autoload
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
96 (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
97 "Edit a keyboard macro.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
98 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
99 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
100 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
101 its command name.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
102 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
103 (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
104 (when keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
105 (let ((cmd (if (arrayp keys) (key-binding keys) keys))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
106 (mac nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
107 (cond (store-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
108 (setq mac keys)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
109 (setq cmd nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
110 ((or (eq cmd 'call-last-kbd-macro)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
111 (member keys '("\r" [return])))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
112 (or last-kbd-macro
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
113 (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
114 (keyboard-quit))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
115 (setq mac (or last-kbd-macro ""))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
116 (setq cmd 'last-kbd-macro))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
117 ((eq cmd 'execute-extended-command)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
118 (setq cmd (read-command "Name of keyboard macro to edit: "))
14397
49d961cdc9d6 (edit-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
119 (if (string-equal cmd "")
49d961cdc9d6 (edit-kbd-macro): Reject empty cmd name.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
120 (error "No command name given"))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
121 (setq mac (symbol-function cmd)))
23945
688314651e5a (edit-kbd-macro): Recognize electric-view-lossage.
Richard M. Stallman <rms@gnu.org>
parents: 16977
diff changeset
122 ((memq cmd '(view-lossage electric-view-lossage))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
123 (setq mac (recent-keys))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
124 (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
125 ((null cmd)
993431cf1f89 (edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents: 10692
diff changeset
126 (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
127 ((symbolp cmd)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
128 (setq mac (symbol-function cmd)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
129 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
130 (setq mac cmd)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
131 (setq cmd nil)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
132 (unless (arrayp mac)
11870
993431cf1f89 (edit-kbd-macro): Better error messages for undefined keys
Karl Heuer <kwzh@gnu.org>
parents: 10692
diff changeset
133 (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
134 (key-description keys)))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
135 (message "Formatting keyboard macro...")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
136 (let* ((oldbuf (current-buffer))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
137 (mmac (edmacro-fix-menu-commands mac))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
138 (fmt (edmacro-format-keys mmac 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
139 (fmtv (edmacro-format-keys mmac (not prefix)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
140 (buf (get-buffer-create "*Edit Macro*")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
141 (message "Formatting keyboard macro...done")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
142 (switch-to-buffer buf)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
143 (kill-all-local-variables)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
144 (use-local-map edmacro-mode-map)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
145 (setq buffer-read-only nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
146 (setq major-mode 'edmacro-mode)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
147 (setq mode-name "Edit Macro")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
148 (set (make-local-variable 'edmacro-original-buffer) oldbuf)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
149 (set (make-local-variable 'edmacro-finish-hook) finish-hook)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
150 (set (make-local-variable 'edmacro-store-hook) store-hook)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
151 (erase-buffer)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
152 (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
153 "press C-x k RET to cancel.\n")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
154 (insert ";; Original keys: " fmt "\n")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
155 (unless store-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
156 (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
157 (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
158 (if keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
159 (while keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
160 (insert "Key: " (edmacro-format-keys (pop keys) 1) "\n"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
161 (insert "Key: none\n"))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
162 (insert "\nMacro:\n\n")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
163 (save-excursion
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
164 (insert fmtv "\n"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
165 (recenter '(4))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
166 (when (eq mac mmac)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
167 (set-buffer-modified-p nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
168 (run-hooks 'edmacro-format-hook)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
169
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
170 ;;; 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
171 ;;; compatibility.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
172
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
173 ;;;###autoload
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
174 (defun edit-last-kbd-macro (&optional prefix)
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
175 "Edit the most recently defined keyboard macro."
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
176 (interactive "P")
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
177 (edit-kbd-macro 'call-last-kbd-macro prefix))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
178
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
179 ;;;###autoload
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
180 (defun edit-named-kbd-macro (&optional prefix)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
181 "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
182 (interactive "P")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
183 (edit-kbd-macro 'execute-extended-command prefix))
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 ;;;###autoload
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
186 (defun read-kbd-macro (start &optional end)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
187 "Read the region as a keyboard macro definition.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
188 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
189 See documentation for `edmacro-mode' for details.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
190 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
191 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
192
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
193 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
194 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
195 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
196 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
197 (interactive "r")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
198 (if (stringp start)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
199 (edmacro-parse-keys start end)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
200 (setq last-kbd-macro (edmacro-parse-keys (buffer-substring start end)))))
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
201
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 199
diff changeset
202 ;;;###autoload
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
203 (defun format-kbd-macro (&optional macro verbose)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
204 "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
205 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
206 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
207 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
208 or nil, use a compact 80-column format."
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
209 (and macro (symbolp macro) (setq macro (symbol-function macro)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
210 (edmacro-format-keys (or macro last-kbd-macro) verbose))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
211
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
212 ;;; Commands for *Edit Macro* buffer.
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
213
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
214 (defun edmacro-finish-edit ()
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
215 (interactive)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
216 (unless (eq major-mode 'edmacro-mode)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
217 (error
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
218 "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
219 (run-hooks 'edmacro-finish-hook)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
220 (let ((cmd nil) (keys nil) (no-keys nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
221 (top (point-min)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
222 (goto-char top)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
223 (let ((case-fold-search nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
224 (while (cond ((looking-at "[ \t]*\\($\\|;;\\|REM[ \t\n]\\)")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
225 t)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
226 ((looking-at "Command:[ \t]*\\([^ \t\n]*\\)[ \t]*$")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
227 (when edmacro-store-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
228 (error "\"Command\" line not allowed in this context"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
229 (let ((str (buffer-substring (match-beginning 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
230 (match-end 1))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
231 (unless (equal str "")
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
232 (setq cmd (and (not (equal str "none"))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
233 (intern str)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
234 (and (fboundp cmd) (not (arrayp (symbol-function cmd)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
235 (not (y-or-n-p
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
236 (format "Command %s is already defined; %s"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
237 cmd "proceed? ")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
238 (keyboard-quit))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
239 t)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
240 ((looking-at "Key:\\(.*\\)$")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
241 (when edmacro-store-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
242 (error "\"Key\" line not allowed in this context"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
243 (let ((key (edmacro-parse-keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
244 (buffer-substring (match-beginning 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
245 (match-end 1)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
246 (unless (equal key "")
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
247 (if (equal key "none")
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
248 (setq no-keys t)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
249 (push key keys)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
250 (let ((b (key-binding key)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
251 (and b (commandp b) (not (arrayp b))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
252 (or (not (fboundp b))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
253 (not (arrayp (symbol-function b))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
254 (not (y-or-n-p
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
255 (format "Key %s is already defined; %s"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
256 (edmacro-format-keys key 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
257 "proceed? ")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
258 (keyboard-quit))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
259 t)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
260 ((looking-at "Macro:[ \t\n]*")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
261 (goto-char (match-end 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
262 nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
263 ((eobp) nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
264 (t (error "Expected a `Macro:' line")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
265 (forward-line 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
266 (setq top (point)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
267 (let* ((buf (current-buffer))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
268 (str (buffer-substring top (point-max)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
269 (modp (buffer-modified-p))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
270 (obuf edmacro-original-buffer)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
271 (store-hook edmacro-store-hook)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
272 (finish-hook edmacro-finish-hook))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
273 (unless (or cmd keys store-hook (equal str ""))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
274 (error "No command name or keys specified"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
275 (when modp
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
276 (when (buffer-name obuf)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
277 (set-buffer obuf))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
278 (message "Compiling keyboard macro...")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
279 (let ((mac (edmacro-parse-keys str)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
280 (message "Compiling keyboard macro...done")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
281 (if store-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
282 (funcall store-hook mac)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
283 (when (eq cmd 'last-kbd-macro)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
284 (setq last-kbd-macro (and (> (length mac) 0) mac))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
285 (setq cmd nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
286 (when cmd
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 (fmakunbound cmd)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
289 (fset cmd mac)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
290 (if no-keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
291 (when cmd
5772
daac61915408 (edit-kbd-macro, edmacro-finish-edit, insert-kbd-macro):
Richard M. Stallman <rms@gnu.org>
parents: 5307
diff changeset
292 (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
293 (global-unset-key key)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
294 (when keys
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
295 (if (= (length mac) 0)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
296 (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
297 (loop for key in keys do
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
298 (global-set-key key (or cmd mac)))))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
299 (kill-buffer buf)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
300 (when (buffer-name obuf)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
301 (switch-to-buffer obuf))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
302 (when finish-hook
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
303 (funcall finish-hook)))))
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
304
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
305 (defun edmacro-insert-key (key)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
306 "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
307 (interactive "kKey to insert: ")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
308 (if (bolp)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
309 (insert (edmacro-format-keys key t) "\n")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
310 (insert (edmacro-format-keys key) " ")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
311
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
312 (defun edmacro-mode ()
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
313 "\\<edmacro-mode-map>Keyboard Macro Editing mode. Press
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
314 \\[edmacro-finish-edit] to save and exit.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
315 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
316
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
317 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
318
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
319 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
320 \"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
321 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
322
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
323 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
324 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
325 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
326
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
327 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
328 or \"none\" for no key bindings.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
329
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
330 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
331 is stored.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
332
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 Format of keyboard macros during editing:
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
335
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
336 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
337 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
338 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
339 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
340 as in \"foo SPC bar RET\".
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
341
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
342 * 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
343 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
344
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
345 * 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
346 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
347 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
348 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
349 are not required there.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
350
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
351 * 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
352 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
353 with codes above \\377.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
354
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
355 * 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
356 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
357 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
358 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
359 any order: M-C-x = C-M-x.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
360
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
361 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
362 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
363 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
364
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
365 * 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
366
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
367 * Double angle brackets enclose command names: <<next-line>> is
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
368 shorthand for M-x next-line RET.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
369
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
370 * 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
371 comment.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
372
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
373 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
374 number and `*': 3*<right> = <right> <right> <right>, and
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
375 10*foo = foofoofoofoofoofoofoofoofoofoo.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
376
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
377 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
378 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
379 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
380 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
381 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
382 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
383 doubt, use whitespace."
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
384 (interactive)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
385 (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
386 (put 'edmacro-mode 'mode-class 'special)
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
387
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
388 ;;; Formatting a keyboard macro as human-readable text.
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
389
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
390 (defun edmacro-format-keys (macro &optional verbose)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
391 (setq macro (edmacro-fix-menu-commands macro))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
392 (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
393 (if (current-local-map)
712e13833ad8 (edmacro-format-keys): Cope if local keymap is nil.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
394 (list (current-local-map)))
712e13833ad8 (edmacro-format-keys): Cope if local keymap is nil.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
395 (list (current-global-map))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
396 (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
397 ?\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
398 ?\M-7 ?\M-8 ?\M-9))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
399 (mdigs (nthcdr 13 pkeys))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
400 (maxkey (if edmacro-eight-bits 255 127))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
401 (case-fold-search nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
402 (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
403 (rest-mac (vconcat macro [end-macro]))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
404 (res "")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
405 (len 0)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
406 (one-line (eq verbose 1)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
407 (if one-line (setq verbose nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
408 (when (stringp macro)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
409 (loop for i below (length macro) do
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
410 (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
411 (incf (aref rest-mac i) (- ?\M-\^@ 128)))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
412 (while (not (eq (aref rest-mac 0) 'end-macro))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
413 (let* ((prefix
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
414 (or (and (integerp (aref rest-mac 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
415 (memq (aref rest-mac 0) mdigs)
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
416 (memq (key-binding (edmacro-subseq rest-mac 0 1))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
417 '(digit-argument negative-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 (memq (aref rest-mac i) (cdr mdigs))
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))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
422 (prog1 (concat "M-" (edmacro-subseq rest-mac 0 i) " ")
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
423 (callf edmacro-subseq rest-mac i)))))
4754
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 (while (eq (aref rest-mac i) ?\C-u)
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 (and (not (memq (aref rest-mac i) pkeys))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
430 (prog1 (loop repeat i concat "C-u ")
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
431 (callf edmacro-subseq rest-mac i)))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
432 (and (eq (aref rest-mac 0) ?\C-u)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
433 (eq (key-binding [?\C-u]) 'universal-argument)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
434 (let ((i 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
435 (when (eq (aref rest-mac i) ?-)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
436 (incf i))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
437 (while (memq (aref rest-mac i)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
438 '(?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
439 (incf i))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
440 (and (not (memq (aref rest-mac i) pkeys))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
441 (prog1 (concat "C-u " (edmacro-subseq rest-mac 1 i) " ")
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
442 (callf edmacro-subseq rest-mac i)))))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
443 (bind-len (apply 'max 1
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
444 (loop for map in maps
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
445 for b = (lookup-key map rest-mac)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
446 when b collect b)))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
447 (key (edmacro-subseq rest-mac 0 bind-len))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
448 (fkey nil) tlen tkey
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
449 (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
450 thereis (and (not (integerp b)) b))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
451 (and (setq fkey (lookup-key function-key-map rest-mac))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
452 (setq tlen fkey tkey (edmacro-subseq rest-mac 0 tlen)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
453 fkey (lookup-key function-key-map tkey))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
454 (loop for map in maps
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
455 for b = (lookup-key map fkey)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
456 when (and (not (integerp b)) b)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
457 do (setq bind-len tlen key tkey)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
458 and return b
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
459 finally do (setq fkey nil)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
460 (first (aref key 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
461 (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
462 for ch = (aref rest-mac i)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
463 while (and (integerp ch)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
464 (> ch 32) (< ch maxkey) (/= ch 92)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
465 (eq (key-binding (char-to-string ch))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
466 'self-insert-command)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
467 (or (> i (- (length rest-mac) 2))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
468 (not (eq ch (aref rest-mac (+ i 1))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
469 (not (eq ch (aref rest-mac (+ i 2))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
470 finally return i))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
471 desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
472 (if (stringp bind) (setq bind nil))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
473 (cond ((and (eq bind 'self-insert-command) (not prefix)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
474 (> text 1) (integerp first)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
475 (> first 32) (<= first maxkey) (/= first 92)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
476 (progn
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
477 (if (> text 30) (setq text 30))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
478 (setq desc (concat (edmacro-subseq rest-mac 0 text)))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
479 (when (string-match "^[ACHMsS]-." desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
480 (setq text 2)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
481 (callf substring desc 0 2))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
482 (not (string-match
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
483 "^;;\\|^<.*>$\\|^\\\\[0-9]+$\\|^[0-9]+\\*."
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
484 desc))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
485 (when (or (string-match "^\\^.$" desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
486 (member desc res-words))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
487 (setq desc (mapconcat 'char-to-string desc " ")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
488 (when verbose
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
489 (setq bind (format "%s * %d" bind text)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
490 (setq bind-len text))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
491 ((and (eq bind 'execute-extended-command)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
492 (> text bind-len)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
493 (memq (aref rest-mac text) '(return 13))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
494 (progn
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
495 (setq desc (concat (edmacro-subseq rest-mac bind-len text)))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
496 (commandp (intern-soft desc))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
497 (if (commandp (intern-soft desc)) (setq bind desc))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
498 (setq desc (format "<<%s>>" desc))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
499 (setq bind-len (1+ text)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
500 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
501 (setq desc (mapconcat
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
502 (function
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
503 (lambda (ch)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
504 (cond
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
505 ((integerp ch)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
506 (concat
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
507 (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
508 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
509 ?\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
510 when (/= (logand ch bit) 0)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
511 concat (format "%c-" pf))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
512 (let ((ch2 (logand ch (1- (lsh 1 18)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
513 (cond ((<= ch2 32)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
514 (case ch2
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
515 (0 "NUL") (9 "TAB") (10 "LFD")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
516 (13 "RET") (27 "ESC") (32 "SPC")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
517 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
518 (format "C-%c"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
519 (+ (if (<= ch2 26) 96 64)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
520 ch2)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
521 ((= ch2 127) "DEL")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
522 ((<= ch2 maxkey) (char-to-string ch2))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
523 (t (format "\\%o" ch2))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
524 ((symbolp ch)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
525 (format "<%s>" ch))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
526 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
527 (error "Unrecognized item in macro: %s" ch)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
528 (or fkey key) " "))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
529 (if prefix (setq desc (concat prefix desc)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
530 (unless (string-match " " desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
531 (let ((times 1) (pos bind-len))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
532 (while (not (edmacro-mismatch rest-mac rest-mac
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
533 0 bind-len pos (+ bind-len pos)))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
534 (incf times)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
535 (incf pos bind-len))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
536 (when (> times 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
537 (setq desc (format "%d*%s" times desc))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
538 (setq bind-len (* bind-len times)))))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
539 (setq rest-mac (edmacro-subseq rest-mac bind-len))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
540 (if verbose
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
541 (progn
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
542 (unless (equal res "") (callf concat res "\n"))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
543 (callf concat res desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
544 (when (and bind (or (stringp bind) (symbolp bind)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
545 (callf concat res
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
546 (make-string (max (- 3 (/ (length desc) 8)) 1) 9)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
547 ";; " (if (stringp bind) bind (symbol-name bind))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
548 (setq len 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
549 (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
550 (progn
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
551 (callf concat res "\n ")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
552 (setq len 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
553 (unless (equal res "")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
554 (callf concat res " ")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
555 (incf len)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
556 (callf concat res desc)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
557 (incf len (length desc)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
558 res))
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
559
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
560 (defun edmacro-mismatch (cl-seq1 cl-seq2 cl-start1 cl-end1 cl-start2 cl-end2)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
561 "Compare SEQ1 with SEQ2, return index of first mismatching element.
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
562 Return nil if the sequences match. If one sequence is a prefix of the
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
563 other, the return value indicates the end of the shorted sequence."
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
564 (let (cl-test cl-test-not cl-key cl-from-end)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
565 (or cl-end1 (setq cl-end1 (length cl-seq1)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
566 (or cl-end2 (setq cl-end2 (length cl-seq2)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
567 (if cl-from-end
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
568 (progn
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
569 (while (and (< cl-start1 cl-end1) (< cl-start2 cl-end2)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
570 (cl-check-match (elt cl-seq1 (1- cl-end1))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
571 (elt cl-seq2 (1- cl-end2))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
572 (setq cl-end1 (1- cl-end1) cl-end2 (1- cl-end2)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
573 (and (or (< cl-start1 cl-end1) (< cl-start2 cl-end2))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
574 (1- cl-end1)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
575 (let ((cl-p1 (and (listp cl-seq1) (nthcdr cl-start1 cl-seq1)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
576 (cl-p2 (and (listp cl-seq2) (nthcdr cl-start2 cl-seq2))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
577 (while (and (< cl-start1 cl-end1) (< cl-start2 cl-end2)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
578 (cl-check-match (if cl-p1 (car cl-p1)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
579 (aref cl-seq1 cl-start1))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
580 (if cl-p2 (car cl-p2)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
581 (aref cl-seq2 cl-start2))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
582 (setq cl-p1 (cdr cl-p1) cl-p2 (cdr cl-p2)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
583 cl-start1 (1+ cl-start1) cl-start2 (1+ cl-start2)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
584 (and (or (< cl-start1 cl-end1) (< cl-start2 cl-end2))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
585 cl-start1)))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
586
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
587 (defun edmacro-subseq (seq start &optional end)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
588 "Return the subsequence of SEQ from START to END.
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
589 If END is omitted, it defaults to the length of the sequence.
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
590 If START or END is negative, it counts from the end."
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
591 (if (stringp seq) (substring seq start end)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
592 (let (len)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
593 (and end (< end 0) (setq end (+ end (setq len (length seq)))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
594 (if (< start 0) (setq start (+ start (or len (setq len (length seq))))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
595 (cond ((listp seq)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
596 (if (> start 0) (setq seq (nthcdr start seq)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
597 (if end
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
598 (let ((res nil))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
599 (while (>= (setq end (1- end)) start)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
600 (cl-push (cl-pop seq) res))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
601 (nreverse res))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
602 (copy-sequence seq)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
603 (t
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
604 (or end (setq end (or len (length seq))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
605 (let ((res (make-vector (max (- end start) 0) nil))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
606 (i 0))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
607 (while (< start end)
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
608 (aset res i (aref seq start))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
609 (setq i (1+ i) start (1+ start)))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
610 res))))))
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
611
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
612 (defun edmacro-fix-menu-commands (macro)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
613 (when (vectorp macro)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
614 (let ((i 0) ev)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
615 (while (< i (length macro))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
616 (when (consp (setq ev (aref macro i)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
617 (cond ((equal (cadadr ev) '(menu-bar))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
618 (setq macro (vconcat (edmacro-subseq macro 0 i)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
619 (vector 'menu-bar (car ev))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
620 (edmacro-subseq macro (1+ i))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
621 (incf i))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
622 ;; 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
623 ;; info is recorded in macros to make this possible.
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
624 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
625 (error "Macros with mouse clicks are not %s"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
626 "supported by this command"))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
627 (incf i))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
628 macro)
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
629
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
630 ;;; Parsing a human-readable keyboard macro.
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
631
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
632 (defun edmacro-parse-keys (string &optional need-vector)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
633 (let ((case-fold-search nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
634 (pos 0)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
635 (res []))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
636 (while (and (< pos (length string))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
637 (string-match "[^ \t\n\f]+" string pos))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
638 (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
639 (key nil)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
640 (times 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
641 (setq pos (match-end 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
642 (when (string-match "\\([0-9]+\\)\\*." word)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
643 (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
644 (setq word (substring word (1+ (match-end 1)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
645 (cond ((string-match "^<<.+>>$" word)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
646 (setq key (vconcat (if (eq (key-binding [?\M-x])
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
647 'execute-extended-command)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
648 [?\M-x]
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
649 (or (car (where-is-internal
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
650 'execute-extended-command))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
651 [?\M-x]))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
652 (substring word 2 -2) "\r")))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
653 ((and (string-match "^\\(\\([ACHMsS]-\\)*\\)<\\(.+\\)>$" word)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
654 (progn
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
655 (setq word (concat (substring word (match-beginning 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
656 (match-end 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
657 (substring word (match-beginning 3)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
658 (match-end 3))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
659 (not (string-match
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
660 "\\<\\(NUL\\|RET\\|LFD\\|ESC\\|SPC\\|DEL\\)$"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
661 word))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
662 (setq key (list (intern word))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
663 ((or (equal word "REM") (string-match "^;;" word))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
664 (setq pos (string-match "$" string pos)))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
665 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
666 (let ((orig-word word) (prefix 0) (bits 0))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
667 (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
668 (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
669 '((?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
670 (?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
671 (?s . ?\s-\^@) (?S . ?\S-\^@)))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
672 (incf prefix 2)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
673 (callf substring word 2))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
674 (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
675 (incf bits ?\C-\^@)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
676 (incf prefix)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
677 (callf substring word 1))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
678 (let ((found (assoc word '(("NUL" . "\0") ("RET" . "\r")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
679 ("LFD" . "\n") ("TAB" . "\t")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
680 ("ESC" . "\e") ("SPC" . " ")
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
681 ("DEL" . "\177")))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
682 (when found (setq word (cdr found))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
683 (when (string-match "^\\\\[0-7]+$" word)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
684 (loop for ch across word
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
685 for n = 0 then (+ (* n 8) ch -48)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
686 finally do (setq word (vector n))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
687 (cond ((= bits 0)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
688 (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
689 ((and (= bits ?\M-\^@) (stringp word)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
690 (string-match "^-?[0-9]+$" word))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
691 (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
692 ((/= (length word) 1)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
693 (error "%s must prefix a single character, not %s"
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
694 (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
695 ((and (/= (logand bits ?\C-\^@) 0) (stringp word)
16951
156fd377c7d0 (edmacro-parse-keys): Don't treat C-. or C-? as ASCII control char.
Richard M. Stallman <rms@gnu.org>
parents: 16283
diff changeset
696 ;; We used to accept . and ? here,
156fd377c7d0 (edmacro-parse-keys): Don't treat C-. or C-? as ASCII control char.
Richard M. Stallman <rms@gnu.org>
parents: 16283
diff changeset
697 ;; but . is simply wrong,
156fd377c7d0 (edmacro-parse-keys): Don't treat C-. or C-? as ASCII control char.
Richard M. Stallman <rms@gnu.org>
parents: 16283
diff changeset
698 ;; and C-? is not used (we use DEL instead).
156fd377c7d0 (edmacro-parse-keys): Don't treat C-. or C-? as ASCII control char.
Richard M. Stallman <rms@gnu.org>
parents: 16283
diff changeset
699 (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
700 (setq key (list (+ bits (- ?\C-\^@)
16977
e97bdda07a30 (edmacro-parse-keys): Remove redundant test for ?.
Erik Naggum <erik@naggum.no>
parents: 16951
diff changeset
701 (logand (aref word 0) 31)))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
702 (t
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
703 (setq key (list (+ bits (aref word 0)))))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
704 (when key
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
705 (loop repeat times do (callf vconcat res key)))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
706 (when (and (>= (length res) 4)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
707 (eq (aref res 0) ?\C-x)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
708 (eq (aref res 1) ?\()
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
709 (eq (aref res (- (length res) 2)) ?\C-x)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
710 (eq (aref res (- (length res) 1)) ?\)))
12955
2e80892d4b39 Load cl only during compilation.
Richard M. Stallman <rms@gnu.org>
parents: 11870
diff changeset
711 (setq res (edmacro-subseq res 2 -2)))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
712 (if (and (not need-vector)
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
713 (loop for ch across res
29060
26c9122ca008 (edmacro-parse-keys): Return vector if any elements are invalid
Dave Love <fx@gnu.org>
parents: 23945
diff changeset
714 always (and (char-valid-p ch)
10692
58ab3325da3b (edmacro-format-keys, edmacro-parse-keys): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 9199
diff changeset
715 (let ((ch2 (logand ch (lognot ?\M-\^@))))
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
716 (and (>= ch2 0) (<= ch2 127))))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
717 (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
718 collect (if (= (logand ch ?\M-\^@) 0)
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
719 ch (+ ch 128))))
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
720 res)))
109
d649664df7e0 Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
721
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
722 (provide 'edmacro)
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
723
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
724 ;;; edmacro.el ends here
4754
463663a999ee Total rewrite by Gillespie.
Richard M. Stallman <rms@gnu.org>
parents: 2247
diff changeset
725