mct@briar.UUCP (Mark C. Tucker) (08/20/86)
;;; ;;; New prefix chars ;;; ;; This code shows how to make ^w a command prefix. ;; ;; First we create a keymap to hold the keybindings to use ;; once you get to ^w from the keyboard. ;; ;; Then we create a "function" whose body is a keymap, instead ;; of a lambda expression. This is a piece of magic that I don't understand. ;; ;; Finally we set ^W to this "function" in the primary key map. This lets ;; the leading ^W trap to the keymap, instead of to "kill-region". ;; ;; Then, for grins, we put "kill-region" on ^w^w. ;;; C-W commands (defvar ctl-w-map (make-keymap) "Keymap for subcommands of C-W") (fset 'ctl-w-prefix ctl-w-map) (define-key global-map "\^W" 'ctl-w-prefix) (define-key ctl-w-map "\^w" 'kill-region) ;; This code redefines ^q to be the help prefix ;; and makes escape q be the usual quote character. ;; Then it lets ^h do the nice backward delete that expands tabs ;;; Help and C-H and vanilla (setq help-char 17) (define-key global-map "\^q" help-map) (define-key esc-map "q" 'quoted-insert) (define-key global-map "\^h" 'backward-delete-char-untabify)
moore@ucbcad.BERKELEY.EDU (Peter X Moore) (08/22/86)
I found the process of making new keymaps unfriendly enough, I automated
it. Here is a set of macros that bind commands to an arbitrary key sequence,
creating new keymaps as necessary.
Peter Moore
moore@ic.Berkeley.EDU
(defun make-global-binding (key function)
"Bind globally to the arbitrary string KEY, FUNCTION"
(interactive "skey:\nafunction:")
(make-binding global-map key function))
(defun make-local-binding (key function)
"Bind locally to the arbitrary string KEY, FUNCTION"
(interactive "skey:\nafunction:")
(make-binding (current-local-map) key function))
(defun make-binding (top-map key function)
(let ((num (lookup-key top-map key)))
(if (numberp num)
(let ((prefix (substring key 0 (1- num)))
(path (substring key (1- num)))
cur-char symb)
(while (> (length path) 1)
(setq prefix (concat prefix (substring path 0 1)))
(setq path (substring path 1))
(setq symb (intern (concat prefix "-prefix")))
(fset symb (make-sparse-keymap))
(define-key top-map prefix symb))))
(define-key top-map key function)))