(defvar icicle-universal-argument-map (let ((map (make-sparse-keymap))) (when (fboundp 'universal-argument-other-key) ; up to 24.3 (define-key map [t] 'icicle-universal-argument-other-key) (define-key map (vector meta-prefix-char t) 'icicle-universal-argument-other-key)) (define-key map [switch-frame] nil) (define-key map [?\C-u] 'icicle-universal-argument-more) (define-key map [?-] 'icicle-universal-argument-minus) (define-key map [?0] 'icicle-digit-argument) (define-key map [?1] 'icicle-digit-argument) (define-key map [?2] 'icicle-digit-argument) (define-key map [?3] 'icicle-digit-argument) (define-key map [?4] 'icicle-digit-argument) (define-key map [?5] 'icicle-digit-argument) (define-key map [?6] 'icicle-digit-argument) (define-key map [?7] 'icicle-digit-argument) (define-key map [?8] 'icicle-digit-argument) (define-key map [?9] 'icicle-digit-argument) (define-key map [kp-0] 'icicle-digit-argument) (define-key map [kp-1] 'icicle-digit-argument) (define-key map [kp-2] 'icicle-digit-argument) (define-key map [kp-3] 'icicle-digit-argument) (define-key map [kp-4] 'icicle-digit-argument) (define-key map [kp-5] 'icicle-digit-argument) (define-key map [kp-6] 'icicle-digit-argument) (define-key map [kp-7] 'icicle-digit-argument) (define-key map [kp-8] 'icicle-digit-argument) (define-key map [kp-9] 'icicle-digit-argument) (define-key map [kp-subtract] 'icicle-universal-argument-minus) map) "...") (defun icicle-universal-argument () (interactive) (setq prefix-arg (list 4) universal-argument-num-events (length (this-command-keys))) (icicle-ensure-overriding-map-is-bound) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) (defun icicle-digit-argument (arg) (interactive "P") (digit-argument) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) (defun icicle-negative-argument (arg) (interactive "P") (negative-argument arg) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) (defun icicle-universal-argument-more (arg) (interactive "P") (universal-argument-more arg) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) (defun icicle-universal-argument-other-key (arg) (interactive "P") (universal-argument-other-key arg) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) (defun icicle-universal-argument-minus (arg) (interactive "P") (universal-argument-minus arg) (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)) ;; (defun icicle-ensure-overriding-map-is-bound () ;; (unless overriding-map-is-bound ;; (setq saved-overriding-map overriding-terminal-local-map ;; overriding-terminal-local-map icicle-universal-argument-map ;; overriding-map-is-bound t))) (defun icicle-ensure-overriding-map-is-bound () "Set `overriding-terminal-local-map' to `icicle-universal-argument-map'." (cond ((boundp 'universal-argument-map) ; Emacs 24+ (set-transient-map icicle-universal-argument-map nil (lambda () (icicle-msg-maybe-in-minibuffer "prefix %S" prefix-arg)))) ((not (boundp 'overriding-map-is-bound)) ; Emacs 20, 21. (setq overriding-terminal-local-map icicle-universal-argument-map)) ((not overriding-terminal-local-map) ; Emacs 22+. (setq saved-overriding-map overriding-terminal-local-map overriding-terminal-local-map icicle-universal-argument-map overriding-map-is-bound t)))) (defun icicle-msg-maybe-in-minibuffer (format-string &rest args) (apply #'message format-string args) (sit-for 1)) (define-key minibuffer-local-completion-map [remap universal-argument] 'icicle-universal-argument) (define-key minibuffer-local-completion-map [remap negative-argument] 'icicle-negative-argument) (define-key minibuffer-local-completion-map [remap digit-argument] 'icicle-digit-argument) (defun test2 () (interactive) (describe-function '+)) (define-key minibuffer-local-completion-map "\C-f" 'test2)