Function: keypad-setup
keypad-setup is an autoloaded and byte-compiled function defined in
keypad.el.gz.
Signature
(keypad-setup SETUP &optional NUMLOCK SHIFT DECIMAL)
Documentation
Set keypad bindings in function-key-map according to SETUP.
If optional second argument NUMLOCK is non-nil, the NumLock On bindings are changed. Otherwise, the NumLock Off bindings are changed. If optional third argument SHIFT is non-nil, the shifted keypad keys are bound.
Setup Binding
-------------------------------------------------------------
prefix Command prefix argument, i.e. M-0 .. M-9 and M--
S-cursor Bind shifted keypad keys to the shifted cursor movement keys.
cursor Bind keypad keys to the cursor movement keys.
numeric Plain numeric keypad, i.e. 0 .. 9 and . (or DECIMAL arg)
none Removes all bindings for keypad keys in function-key-map;
this enables any user-defined bindings for the keypad keys
in the global and local keymaps.
If SETUP is numeric and the optional fourth argument DECIMAL is non-nil,
the decimal key on the keypad is mapped to DECIMAL instead of .
Probably introduced at or before Emacs version 22.1.
Source Code
;; Defined in /usr/src/emacs/lisp/emulation/keypad.el.gz
;;;###autoload
(defun keypad-setup (setup &optional numlock shift decimal)
"Set keypad bindings in `function-key-map' according to SETUP.
If optional second argument NUMLOCK is non-nil, the NumLock On bindings
are changed. Otherwise, the NumLock Off bindings are changed.
If optional third argument SHIFT is non-nil, the shifted keypad
keys are bound.
Setup Binding
-------------------------------------------------------------
`prefix' Command prefix argument, i.e. M-0 .. M-9 and M--
`S-cursor' Bind shifted keypad keys to the shifted cursor movement keys.
`cursor' Bind keypad keys to the cursor movement keys.
`numeric' Plain numeric keypad, i.e. 0 .. 9 and . (or DECIMAL arg)
`none' Removes all bindings for keypad keys in `function-key-map';
this enables any user-defined bindings for the keypad keys
in the global and local keymaps.
If SETUP is `numeric' and the optional fourth argument DECIMAL is non-nil,
the decimal key on the keypad is mapped to DECIMAL instead of `.'"
(let* ((i 0)
(var (cond
((and (not numlock) (not shift)) 'keypad-setup)
((and (not numlock) shift) 'keypad-shifted-setup)
((and numlock (not shift)) 'keypad-numlock-setup)
((and numlock shift) 'keypad-numlock-shifted-setup)))
(kp (cond
((eq var 'keypad-setup)
[kp-delete kp-insert kp-end kp-down kp-next kp-left
kp-space kp-right kp-home kp-up kp-prior])
((eq var 'keypad-shifted-setup)
[S-kp-decimal S-kp-0 S-kp-1 S-kp-2 S-kp-3 S-kp-4
S-kp-5 S-kp-6 S-kp-7 S-kp-8 S-kp-9])
((eq var 'keypad-numlock-setup)
[kp-decimal kp-0 kp-1 kp-2 kp-3 kp-4
kp-5 kp-6 kp-7 kp-8 kp-9])
((eq var 'keypad-numlock-shifted-setup)
[S-kp-delete S-kp-insert S-kp-end S-kp-down S-kp-next S-kp-left
S-kp-space S-kp-right S-kp-home S-kp-up S-kp-prior])))
(bind
(cond
((or (eq setup 'numeric)
(characterp setup))
(if (eq decimal 'numeric)
(setq decimal nil))
(vector (or decimal ?.) ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))
((eq setup 'prefix)
[?\M-- ?\M-0 ?\M-1 ?\M-2 ?\M-3 ?\M-4
?\M-5 ?\M-6 ?\M-7 ?\M-8 ?\M-9])
((eq setup 'cursor)
[delete insert end down next left
space right home up prior])
((eq setup 'S-cursor)
[S-delete S-insert S-end S-down S-next S-left
S-space S-right S-home S-up S-prior])
((eq setup 'none)
nil)
(t
(signal 'error (list "Unknown keypad setup: " setup))))))
(set var setup)
;; Bind the keys in KP list to BIND list in function-key-map.
;; If BIND is nil, all bindings for the keys are removed.
(if (not (boundp 'function-key-map))
(setq function-key-map (make-sparse-keymap)))
(while (< i 11)
(define-key function-key-map (vector (aref kp i))
(if bind (vector (aref bind i))))
(if (= i 6)
(cond ((eq (aref kp i) 'kp-space)
(define-key function-key-map [kp-begin]
(if bind (vector (aref bind i)))))
((eq (aref kp i) 'S-kp-space)
(define-key function-key-map [S-kp-begin]
(if bind (vector (aref bind i)))))))
(setq i (1+ i)))))