X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/efcf38c7c2c336fdc89a55ac0ce29086d767700d..8677dea3af74e8253bb85a00beb9dd4975946d63:/lisp/macros.el
diff --git a/lisp/macros.el b/lisp/macros.el
index 6263a6957c..f8d0b5af92 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -1,16 +1,17 @@
-;;; macros.el --- non-primitive commands for keyboard macros.
+;;; macros.el --- non-primitive commands for keyboard macros
-;; Copyright (C) 1985, 86, 87, 92, 94, 95 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1995, 2001, 2002, 2003,
+;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: abbrev
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,9 +19,7 @@
;; 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, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs. If not, see .
;;; Commentary:
@@ -43,7 +42,7 @@ Such a \"function\" cannot be called from Lisp, but it is a valid editor command
(and (fboundp symbol)
(not (stringp (symbol-function symbol)))
(not (vectorp (symbol-function symbol)))
- (error "Function %s is already defined and not a keyboard macro."
+ (error "Function %s is already defined and not a keyboard macro"
symbol))
(if (string-equal symbol "")
(error "No command name given"))
@@ -63,7 +62,15 @@ bindings.
To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
use this command, and then save the file."
- (interactive "CInsert kbd macro (name): \nP")
+ (interactive (list (intern (completing-read "Insert kbd macro (name): "
+ obarray
+ (lambda (elt)
+ (and (fboundp elt)
+ (or (stringp (symbol-function elt))
+ (vectorp (symbol-function elt))
+ (get elt 'kmacro))))
+ t))
+ current-prefix-arg))
(let (definition)
(if (string= (symbol-name macroname) "")
(progn
@@ -121,40 +128,12 @@ use this command, and then save the file."
(if (vectorp definition)
(let ((len (length definition)) (i 0) char mods)
(while (< i len)
- (insert (if (zerop i) ?\[ ?\ ))
+ (insert (if (zerop i) ?\[ ?\s))
(setq char (aref definition i)
i (1+ i))
- (cond ((not (numberp char))
- (prin1 char (current-buffer)))
- (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)))))))
+ (if (not (numberp char))
+ (prin1 char (current-buffer))
+ (princ (prin1-char char) (current-buffer))))
(insert ?\]))
(prin1 definition (current-buffer))))
(insert ")\n")
@@ -236,8 +215,9 @@ Possibilities: \\
;;;###autoload
(defun apply-macro-to-region-lines (top bottom &optional macro)
- "For each complete line between point and mark, move to the beginning
-of the line, and run the last keyboard macro.
+ "Apply last keyboard macro to all lines in the region.
+For each line that begins in the region, move to the beginning of
+the line, and run the last keyboard macro.
When called from lisp, this function takes two arguments TOP and
BOTTOM, describing the current region. TOP must be before BOTTOM.
@@ -256,7 +236,7 @@ and mark at opposite ends of the quoted section, and use
Suppose you wanted to build a keyword table in C where each entry
looked like this:
- { \"foo\", foo_data, foo_function },
+ { \"foo\", foo_data, foo_function },
{ \"bar\", bar_data, bar_function },
{ \"baz\", baz_data, baz_function },
@@ -273,19 +253,15 @@ and write a macro to massage a word into a table entry:
\\C-x )
and then select the region of un-tablified names and use
-`\\[apply-macro-to-region-lines]' to build the table from the names.
-"
+`\\[apply-macro-to-region-lines]' to build the table from the names."
(interactive "r")
(or macro
(progn
(if (null last-kbd-macro)
- (error "No keyboard macro has been defined."))
+ (error "No keyboard macro has been defined"))
(setq macro last-kbd-macro)))
(save-excursion
- (let ((end-marker (progn
- (goto-char bottom)
- (beginning-of-line)
- (point-marker)))
+ (let ((end-marker (copy-marker bottom))
next-line-marker)
(goto-char top)
(if (not (bolp))
@@ -297,10 +273,14 @@ and then select the region of un-tablified names and use
(forward-line 1)
(set-marker next-line-marker (point)))
(save-excursion
- (execute-kbd-macro (or macro last-kbd-macro))))
+ (let ((mark-active nil))
+ (execute-kbd-macro (or macro last-kbd-macro)))))
(set-marker end-marker nil)
(set-marker next-line-marker nil))))
;;;###autoload (define-key ctl-x-map "q" 'kbd-macro-query)
+(provide 'macros)
+
+;; arch-tag: 346ed1a5-1220-4bc8-b533-961ee704361f
;;; macros.el ends here