;;; macros.el --- non-primitive commands for keyboard macros.
-;; Copyright (C) 1985, 1986, 1987, 1992, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 87, 92, 94, 95 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: abbrev
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(not (vectorp (symbol-function symbol)))
(error "Function %s is already defined and not a keyboard macro."
symbol))
+ (if (string-equal symbol "")
+ (error "No command name given"))
(fset symbol last-kbd-macro))
;;;###autoload
(delete-region (point) (1+ (point)))
(insert "\\M-\\C-?"))))))
(if (vectorp definition)
- (let ((len (length definition)) (i 0) char)
+ (let ((len (length definition)) (i 0) char mods)
(while (< i len)
(insert (if (zerop i) ?\[ ?\ ))
(setq char (aref definition i)
i (1+ i))
- (cond ((not (and (wholenump char) (< char 256)))
+ (cond ((not (numberp char))
(prin1 char (current-buffer)))
- ((= char 0)
- (insert "?\\C-@"))
- ((< char 27)
- (insert "?\\C-" (+ 96 char)))
- ((= char ?\C-\\)
- (insert "?\\C-\\\\"))
- ((< char 32)
- (insert "?\\C-" (+ 64 char)))
- ((< char 127)
- (insert ?? char))
- ((= char 127)
- (insert "?\\C-?"))
- ((= char 128)
- (insert "?\\M-\\C-@"))
- ((= char (aref "\M-\C-\\" 0))
- (insert "?\\M-\\C-\\\\"))
- ((< char 155)
- (insert "?\\M-\\C-" (- char 32)))
- ((< char 160)
- (insert "?\\M-\\C-" (- char 64)))
- ((= char (aref "\M-\\" 0))
- (insert "?\\M-\\\\"))
- ((< char 255)
- (insert "?\\M-" (- char 128)))
- ((= char 255)
- (insert "?\\M-\\C-?"))))
+ (t
+ (insert "?")
+ (setq mods (event-modifiers char)
+ char (event-basic-type char))
+ (while mods
+ (cond ((eq (car mods) 'control)
+ (insert "\\C-"))
+ ((eq (car mods) 'meta)
+ (insert "\\M-"))
+ ((eq (car mods) 'hyper)
+ (insert "\\H-"))
+ ((eq (car mods) 'super)
+ (insert "\\s-"))
+ ((eq (car mods) 'alt)
+ (insert "\\A-"))
+ ((and (eq (car mods) 'shift)
+ (>= char ?a)
+ (<= char ?z))
+ (setq char (upcase char)))
+ ((eq (car mods) 'shift)
+ (insert "\\S-")))
+ (setq mods (cdr mods)))
+ (cond ((= char ?\\)
+ (insert "\\\\"))
+ ((= char 127)
+ (insert "\\C-?"))
+ ((< char 127)
+ (insert char))
+ (t (insert "\\" (format "%o" char)))))))
(insert ?\]))
(prin1 definition (current-buffer))))
(insert ")\n")
\\[recenter] Redisplay the screen, then ask again.
\\[edit] Enter recursive edit; ask again when you exit from that."
(interactive "P")
- (or executing-macro
+ (or executing-kbd-macro
defining-kbd-macro
(error "Not defining or executing kbd macro"))
(if flag
- (let (executing-macro defining-kbd-macro)
+ (let (executing-kbd-macro defining-kbd-macro)
(recursive-edit))
- (if (not executing-macro)
+ (if (not executing-kbd-macro)
nil
(let ((loop t)
(msg (substitute-command-keys
"Proceed with macro?\\<query-replace-map>\
(\\[act], \\[skip], \\[exit], \\[recenter], \\[edit]) ")))
(while loop
- (let ((key (let ((executing-macro nil)
+ (let ((key (let ((executing-kbd-macro nil)
(defining-kbd-macro nil))
- (message msg)
+ (message "%s" msg)
(read-event)))
def)
(setq key (vector key))
(setq loop nil))
((eq def 'skip)
(setq loop nil)
- (setq executing-macro ""))
+ (setq executing-kbd-macro ""))
((eq def 'exit)
(setq loop nil)
- (setq executing-macro t))
+ (setq executing-kbd-macro t))
((eq def 'recenter)
(recenter nil))
((eq def 'edit)
- (let (executing-macro defining-kbd-macro)
+ (let (executing-kbd-macro defining-kbd-macro)
(recursive-edit)))
((eq def 'quit)
(setq quit-flag t))
;;;###autoload (define-key ctl-x-map "q" 'kbd-macro-query)
+(provide 'macros)
+
;;; macros.el ends here