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)))