]> git.eshelyaron.com Git - emacs.git/commitdiff
(universal-argument, describe-arg): Restore Lisp code,
authorKarl Heuer <kwzh@gnu.org>
Wed, 14 Jun 1995 22:30:41 +0000 (22:30 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 14 Jun 1995 22:30:41 +0000 (22:30 +0000)
undoing Feb 28 change.
(prefix-arg-internal, digit-argument, negative-argument): Likewise.

lisp/simple.el

index 2c1c7cb53c59ed4d4d8322fd131b5787dd4934cc..e29c1d4e29b01ed8a588b1b37949ec4ae5644f95 100644 (file)
@@ -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))))))))
 \f
+(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))
+\f
 (defun forward-to-indentation (arg)
   "Move forward ARG lines and position at first nonblank character."
   (interactive "p")