diff options
author | Karl Heuer <kwzh@gnu.org> | 1995-06-14 22:30:41 +0000 |
---|---|---|
committer | Karl Heuer <kwzh@gnu.org> | 1995-06-14 22:30:41 +0000 |
commit | cabd50766f33f13ec2c9934c22a38deb00f15dc1 (patch) | |
tree | 8f7e64f66595c983180fc34e04237df638007099 /lisp/simple.el | |
parent | faab78c5fe9e9cc9fcdcb6cd6e6bc9ecb7de7c9d (diff) | |
download | emacs-cabd50766f33f13ec2c9934c22a38deb00f15dc1.tar.gz |
(universal-argument, describe-arg): Restore Lisp code,
undoing Feb 28 change.
(prefix-arg-internal, digit-argument, negative-argument): Likewise.
Diffstat (limited to 'lisp/simple.el')
-rw-r--r-- | lisp/simple.el | 71 |
1 files changed, 71 insertions, 0 deletions
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") |