# HG changeset patch # User Karl Heuer # Date 803169041 0 # Node ID 7275b8e0d27249b1a9afb9488fb3796673837c0f # Parent 697c01e75adcbd710755d9aeb5aaf79fac91fc5c (universal-argument, describe-arg): Restore Lisp code, undoing Feb 28 change. (prefix-arg-internal, digit-argument, negative-argument): Likewise. diff -r 697c01e75adc -r 7275b8e0d272 lisp/simple.el --- a/lisp/simple.el Wed Jun 14 22:30:16 1995 +0000 +++ b/lisp/simple.el Wed Jun 14 22:30:41 1995 +0000 @@ -935,6 +935,77 @@ (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")