X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6eabc4c2f76441f11cc344891d3849ad3631ab15..fa7886a46ff8d611cd75eaf651944f0fbc260324:/lisp/macros.el diff --git a/lisp/macros.el b/lisp/macros.el index 66cc4bba28..f7a4732d60 100644 --- a/lisp/macros.el +++ b/lisp/macros.el @@ -1,17 +1,18 @@ ;;; macros.el --- non-primitive commands for keyboard macros -;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1995, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2016 Free Software +;; Foundation, Inc. -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: abbrev +;; Package: emacs ;; 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 @@ -19,9 +20,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., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -40,19 +39,20 @@ The symbol's function definition becomes the keyboard macro string. Such a \"function\" cannot be called from Lisp, but it is a valid editor command." (interactive "SName for last kbd macro: ") (or last-kbd-macro - (error "No keyboard macro defined")) + (user-error "No keyboard macro defined")) (and (fboundp symbol) (not (stringp (symbol-function symbol))) (not (vectorp (symbol-function symbol))) - (error "Function %s is already defined and not a keyboard macro" + (user-error "Function %s is already defined and not a keyboard macro" symbol)) (if (string-equal symbol "") - (error "No command name given")) + (user-error "No command name given")) (fset symbol last-kbd-macro)) ;;;###autoload (defun insert-kbd-macro (macroname &optional keys) - "Insert in buffer the definition of kbd macro NAME, as Lisp code. + "Insert in buffer the definition of kbd macro MACRONAME, as Lisp code. +MACRONAME should be a symbol. Optional second arg KEYS means also record the keys it is on \(this is the prefix argument, when calling interactively). @@ -128,51 +128,20 @@ use this command, and then save the file." (delete-region (point) (1+ (point))) (insert "\\M-\\C-?")))))) (if (vectorp definition) - (let ((len (length definition)) (i 0) char mods) + (let ((len (length definition)) (i 0) char) (while (< i len) (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 ?\") - (insert "\\\"")) - ((= 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") (if keys - (let ((keys (where-is-internal macroname '(keymap)))) + (let ((keys (where-is-internal (symbol-function macroname) + '(keymap)))) (while keys (insert "(global-set-key ") (prin1 (car keys) (current-buffer)) @@ -197,7 +166,7 @@ Your options are: \\ (interactive "P") (or executing-kbd-macro defining-kbd-macro - (error "Not defining or executing kbd macro")) + (user-error "Not defining or executing kbd macro")) (if flag (let (executing-kbd-macro defining-kbd-macro) (recursive-edit)) @@ -243,8 +212,7 @@ Possibilities: \\ \\[exit] Stop the macro entirely right now. \\[recenter] Redisplay the screen, then ask again. \\[edit] Enter recursive edit; ask again when you exit from that.")) - (save-excursion - (set-buffer standard-output) + (with-current-buffer standard-output (help-mode))))))))))) ;;;###autoload @@ -292,7 +260,7 @@ and then select the region of un-tablified names and use (or macro (progn (if (null last-kbd-macro) - (error "No keyboard macro has been defined")) + (user-error "No keyboard macro has been defined")) (setq macro last-kbd-macro))) (save-excursion (let ((end-marker (copy-marker bottom)) @@ -308,7 +276,7 @@ and then select the region of un-tablified names and use (set-marker next-line-marker (point))) (save-excursion (let ((mark-active nil)) - (execute-kbd-macro (or macro last-kbd-macro))))) + (execute-kbd-macro macro)))) (set-marker end-marker nil) (set-marker next-line-marker nil)))) @@ -316,5 +284,4 @@ and then select the region of un-tablified names and use (provide 'macros) -;;; arch-tag: 346ed1a5-1220-4bc8-b533-961ee704361f ;;; macros.el ends here