Function: calc-user-define-kbd-macro
calc-user-define-kbd-macro is an autoloaded, interactive and
byte-compiled function defined in calc-prog.el.gz.
Signature
(calc-user-define-kbd-macro ARG)
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-prog.el.gz
(defun calc-user-define-kbd-macro (arg)
(interactive "P")
(or last-kbd-macro
(error "No keyboard macro defined"))
(message "Define last kbd macro on user key: z-")
(let ((key (read-char)))
(if (= (calc-user-function-classify key) 0)
(error "Can't redefine \"?\" key"))
(let ((cmd (intern (completing-read "Full name for new command: "
obarray
'commandp
nil
(concat "calc-User-"
(if (or (and (>= key ?a)
(<= key ?z))
(and (>= key ?A)
(<= key ?Z))
(and (>= key ?0)
(<= key ?9)))
(char-to-string key)
(format "%03d" key)))))))
(and (fboundp cmd)
(not (let ((f (symbol-function cmd)))
(or (stringp f)
(and (consp f)
(eq (car-safe (nth 3 f))
'calc-execute-kbd-macro)))))
(error "Function %s is already defined and not a keyboard macro"
cmd))
(put cmd 'calc-user-defn t)
(fset cmd (if (< (prefix-numeric-value arg) 0)
last-kbd-macro
(list 'lambda
'(arg)
'(interactive "P")
(list 'calc-execute-kbd-macro
(vector (key-description last-kbd-macro)
last-kbd-macro)
'arg
(format "z%c" key)))))
(let* ((kmap (calc-user-key-map))
(old (assq key kmap)))
;; FIXME: Why not (define-key kmap (vector key) func)?
(if old
(setcdr old cmd)
(setcdr kmap (cons (cons key cmd) (cdr kmap))))))))