From e8d1a377251b2c9407c78d8cc1cfd80bf17d80db Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Wed, 14 Jun 1995 22:30:41 +0000 Subject: [PATCH] (universal-argument, describe-arg): Restore Lisp code, undoing Feb 28 change. (prefix-arg-internal, digit-argument, negative-argument): Likewise. --- lisp/simple.el | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/lisp/simple.el b/lisp/simple.el index 2c1c7cb53c5..e29c1d4e29b 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -935,6 +935,77 @@ In either case, the output is inserted after point (leaving mark after it)." (t (set-window-start (display-buffer buffer) 1)))))))) +(defun universal-argument () + "Begin a numeric argument for the following command. +Digits or minus sign following \\[universal-argument] make up the numeric argument. +\\[universal-argument] following the digits or minus sign ends the argument. +\\[universal-argument] without digits or minus sign provides 4 as argument. +Repeating \\[universal-argument] without digits or minus sign + multiplies the argument by 4 each time." + (interactive nil) + (let ((factor 4) + key) +;; (describe-arg (list factor) 1) + (setq key (read-key-sequence nil t)) + (while (equal (key-binding key) 'universal-argument) + (setq factor (* 4 factor)) +;; (describe-arg (list factor) 1) + (setq key (read-key-sequence nil t))) + (prefix-arg-internal key factor nil))) + +(defun prefix-arg-internal (key factor value) + (let ((sign 1)) + (if (and (numberp value) (< value 0)) + (setq sign -1 value (- value))) + (if (eq value '-) + (setq sign -1 value nil)) +;; (describe-arg value sign) + (while (equal key "-") + (setq sign (- sign) factor nil) +;; (describe-arg value sign) + (setq key (read-key-sequence nil t))) + (while (and (stringp key) + (= (length key) 1) + (not (string< key "0")) + (not (string< "9" key))) + (setq value (+ (* (if (numberp value) value 0) 10) + (- (aref key 0) ?0)) + factor nil) +;; (describe-arg value sign) + (setq key (read-key-sequence nil t))) + (setq prefix-arg + (cond (factor (list factor)) + ((numberp value) (* value sign)) + ((= sign -1) '-))) + ;; Calling universal-argument after digits + ;; terminates the argument but is ignored. + (if (eq (key-binding key) 'universal-argument) + (progn + (describe-arg value sign) + (setq key (read-key-sequence nil t)))) + (setq unread-command-events (listify-key-sequence key)))) + +(defun describe-arg (value sign) + (cond ((numberp value) + (message "Arg: %d" (* value sign))) + ((consp value) + (message "Arg: [%d]" (car value))) + ((< sign 0) + (message "Arg: -")))) + +(defun digit-argument (arg) + "Part of the numeric argument for the next command. +\\[universal-argument] following digits or minus sign ends the argument." + (interactive "P") + (prefix-arg-internal (char-to-string (logand last-command-char ?\177)) + nil arg)) + +(defun negative-argument (arg) + "Begin a negative numeric argument for the next command. +\\[universal-argument] following digits or minus sign ends the argument." + (interactive "P") + (prefix-arg-internal "-" nil arg)) + (defun forward-to-indentation (arg) "Move forward ARG lines and position at first nonblank character." (interactive "p") -- 2.39.2