Function: ex-unmap-read-args

ex-unmap-read-args is a byte-compiled function defined in viper-macs.el.gz.

Signature

(ex-unmap-read-args VARIANT)

Source Code

;; Defined in /usr/src/emacs/lisp/emulation/viper-macs.el.gz
;; read arguments for ex-unmap
(defun ex-unmap-read-args (variant)
  (let ((cursor-in-echo-area t)
	(macro-alist (if (string= variant "!")
			 viper-insert-kbd-macro-alist
		       viper-vi-kbd-macro-alist))
	;; these are disabled just in case, to avoid surprises when doing
	;; completing-read
	viper-vi-kbd-minor-mode viper-insert-kbd-minor-mode
	viper-emacs-kbd-minor-mode
	viper-vi-intercept-minor-mode viper-insert-intercept-minor-mode
	viper-emacs-intercept-minor-mode
	event message
	key key-seq macro-name)
    (setq macro-name (ex-get-inline-cmd-args ".*unma?p?[!]*[ \t]*"))

    (if (> (length macro-name) 0)
	()
      (message ":unmap%s <Name>" variant) (sit-for 2)
      (while
	  (not
	   (member key '(?\C-m ?\n (control m) (control j) return linefeed)))
	(setq key-seq (vconcat key-seq (if key (vector key) [])))
	;; the only keys available for editing are these-- no help while there
	(cond ((member
		key
		'(?\b ?\d '^? '^H (control h) (control \?) backspace delete))
               (setq key-seq (cl-subseq key-seq 0 (- (length key-seq) 2))))
	      ((member key '(tab (control i) ?\t))
               (setq key-seq (cl-subseq key-seq 0 (1- (length key-seq))))
	       (setq message
		     (format
		      ":unmap%s %s"
		      variant (if (> (length key-seq) 0)
				  (prin1-to-string
				   (viper-display-macro key-seq))
				"")))
	       (setq key-seq
		     (viper-do-sequence-completion key-seq macro-alist message))
	       ))
	(setq message
	      (format
	       ":unmap%s %s"
	       variant (if (> (length key-seq) 0)
			   (prin1-to-string
			    (viper-display-macro key-seq))
			 "")))
	(message "%s" message)
	(setq event (read-key))
	;;(setq event (viper-read-event))
	(setq key
	      (if (viper-mouse-event-p event)
		  (progn
		    (message "%s (No mouse---only keyboard keys, please)"
			     message)
		    (sit-for 2)
		    nil)
		(viper-event-key event)))
	)
      (setq macro-name key-seq))

    (if (= (length macro-name) 0)
	(error "Can't unmap an empty macro name"))

    ;; convert macro names into vector, if starts with a `['
    (if (memq (elt macro-name 0) '(?\[ ?\"))
	(car (read-from-string macro-name))
      (vconcat macro-name))
    ))