Function: viper-event-key
viper-event-key is a byte-compiled function defined in
viper-util.el.gz.
Signature
(viper-event-key EVENT)
Source Code
;; Defined in /usr/src/emacs/lisp/emulation/viper-util.el.gz
;; Emacs has a bug in eventp, which causes (eventp nil) to return (nil)
;; instead of nil, if '(nil) was previously inadvertently assigned to
;; unread-command-events
(defun viper-event-key (event)
(or (and event (eventp event))
(error "viper-event-key: Wrong type argument, eventp, %S" event))
(let ((mod (event-modifiers event))
basis)
(setq basis
;; Emacs doesn't handle capital letters correctly, since
;; \S-a isn't considered the same as A (it behaves as
;; plain `a' instead). So we take care of this here
(cond ((and (characterp event) (<= ?A event) (<= event ?Z))
(setq mod nil
event event))
;; Emacs has the oddity whereby characters 128+char
;; represent M-char *if* this appears inside a string.
;; So, we convert them manually to (meta char).
((and (characterp event)
(< ?\C-? event) (<= event 255))
(setq mod '(meta)
event (- event ?\C-? 1)))
((and (null mod) (eq event 'return))
(setq event ?\C-m))
((and (null mod) (eq event 'space))
(setq event ?\ ))
((and (null mod) (eq event 'delete))
(setq event ?\C-?))
((and (null mod) (eq event 'backspace))
(setq event ?\C-h))
(t (event-basic-type event))))
(if (characterp basis)
(setq basis
(if (viper= basis ?\C-?)
(list 'control '\?) ; taking care of an emacs bug
(intern (char-to-string basis)))))
(if mod
(append mod (list basis))
basis)))