comparison lisp/simple.el @ 12266:bdc0826013e0

(universal-argument-map): New var. (universal-argument, negative-argument, digit-argument): Use overriding-terminal-local-map. (prefix-arg-internal, describe-arg): Functions deleted. (universal-argument-more, universal-argument-minus): New functions. (universal-argument-other-key): New function.
author Karl Heuer <kwzh@gnu.org>
date Fri, 16 Jun 1995 06:14:44 +0000
parents 7275b8e0d272
children eca218b0a8ca
comparison
equal deleted inserted replaced
12265:1d2296cfa1e3 12266:bdc0826013e0
933 (buffer-substring (point) 933 (buffer-substring (point)
934 (progn (end-of-line) (point)))))) 934 (progn (end-of-line) (point))))))
935 (t 935 (t
936 (set-window-start (display-buffer buffer) 1)))))))) 936 (set-window-start (display-buffer buffer) 1))))))))
937 937
938 (defconst universal-argument-map
939 (let ((map (make-sparse-keymap)))
940 (define-key map [t] 'universal-argument-other-key)
941 (define-key map [switch-frame] nil)
942 (define-key map [?\C-u] 'universal-argument-more)
943 (define-key map [?-] 'universal-argument-minus)
944 (define-key map [?0] 'digit-argument)
945 (define-key map [?1] 'digit-argument)
946 (define-key map [?2] 'digit-argument)
947 (define-key map [?3] 'digit-argument)
948 (define-key map [?4] 'digit-argument)
949 (define-key map [?5] 'digit-argument)
950 (define-key map [?6] 'digit-argument)
951 (define-key map [?7] 'digit-argument)
952 (define-key map [?8] 'digit-argument)
953 (define-key map [?9] 'digit-argument)
954 map)
955 "Keymap used while processing \\[universal-argument].")
956
938 (defun universal-argument () 957 (defun universal-argument ()
939 "Begin a numeric argument for the following command. 958 "Begin a numeric argument for the following command.
940 Digits or minus sign following \\[universal-argument] make up the numeric argument. 959 Digits or minus sign following \\[universal-argument] make up the numeric argument.
941 \\[universal-argument] following the digits or minus sign ends the argument. 960 \\[universal-argument] following the digits or minus sign ends the argument.
942 \\[universal-argument] without digits or minus sign provides 4 as argument. 961 \\[universal-argument] without digits or minus sign provides 4 as argument.
943 Repeating \\[universal-argument] without digits or minus sign 962 Repeating \\[universal-argument] without digits or minus sign
944 multiplies the argument by 4 each time." 963 multiplies the argument by 4 each time."
945 (interactive nil) 964 (interactive)
946 (let ((factor 4) 965 (setq prefix-arg (list 4))
947 key) 966 (setq overriding-terminal-local-map universal-argument-map))
948 ;; (describe-arg (list factor) 1) 967
949 (setq key (read-key-sequence nil t)) 968 ;; A subsequent C-u means to multiply the factor by 4 if we've typed
950 (while (equal (key-binding key) 'universal-argument) 969 ;; nothing but C-u's; otherwise it means to terminate the prefix arg.
951 (setq factor (* 4 factor)) 970 (defun universal-argument-more (arg)
952 ;; (describe-arg (list factor) 1) 971 (interactive "P")
953 (setq key (read-key-sequence nil t))) 972 (if (consp arg)
954 (prefix-arg-internal key factor nil))) 973 (setq prefix-arg (list (* 4 (car arg))))
955 974 (setq prefix-arg arg)
956 (defun prefix-arg-internal (key factor value) 975 (setq overriding-terminal-local-map nil)))
957 (let ((sign 1)) 976
958 (if (and (numberp value) (< value 0)) 977 (defun negative-argument (arg)
959 (setq sign -1 value (- value))) 978 "Begin a negative numeric argument for the next command.
960 (if (eq value '-) 979 \\[universal-argument] following digits or minus sign ends the argument."
961 (setq sign -1 value nil)) 980 (interactive "P")
962 ;; (describe-arg value sign) 981 (cond ((integerp arg)
963 (while (equal key "-") 982 (setq prefix-arg (- arg)))
964 (setq sign (- sign) factor nil) 983 ((eq arg '-)
965 ;; (describe-arg value sign) 984 (setq prefix-arg nil))
966 (setq key (read-key-sequence nil t))) 985 (t
967 (while (and (stringp key) 986 (setq prefix-arg '-))))
968 (= (length key) 1)
969 (not (string< key "0"))
970 (not (string< "9" key)))
971 (setq value (+ (* (if (numberp value) value 0) 10)
972 (- (aref key 0) ?0))
973 factor nil)
974 ;; (describe-arg value sign)
975 (setq key (read-key-sequence nil t)))
976 (setq prefix-arg
977 (cond (factor (list factor))
978 ((numberp value) (* value sign))
979 ((= sign -1) '-)))
980 ;; Calling universal-argument after digits
981 ;; terminates the argument but is ignored.
982 (if (eq (key-binding key) 'universal-argument)
983 (progn
984 (describe-arg value sign)
985 (setq key (read-key-sequence nil t))))
986 (setq unread-command-events (listify-key-sequence key))))
987
988 (defun describe-arg (value sign)
989 (cond ((numberp value)
990 (message "Arg: %d" (* value sign)))
991 ((consp value)
992 (message "Arg: [%d]" (car value)))
993 ((< sign 0)
994 (message "Arg: -"))))
995 987
996 (defun digit-argument (arg) 988 (defun digit-argument (arg)
997 "Part of the numeric argument for the next command. 989 "Part of the numeric argument for the next command.
998 \\[universal-argument] following digits or minus sign ends the argument." 990 \\[universal-argument] following digits or minus sign ends the argument."
999 (interactive "P") 991 (interactive "P")
1000 (prefix-arg-internal (char-to-string (logand last-command-char ?\177)) 992 (let ((digit (- (logand last-command-char ?\177) ?0)))
1001 nil arg)) 993 (cond ((integerp arg)
1002 994 (setq prefix-arg (+ (* arg 10)
1003 (defun negative-argument (arg) 995 (if (< arg 0) (- digit) digit))))
1004 "Begin a negative numeric argument for the next command. 996 ((eq arg '-)
1005 \\[universal-argument] following digits or minus sign ends the argument." 997 ;; Treat -0 as just -, so that -01 will work.
998 (setq prefix-arg (if (zerop digit) '- (- digit))))
999 (t
1000 (setq prefix-arg digit)))))
1001
1002 ;; For backward compatibility, minus with no modifiers is an ordinary
1003 ;; command if digits have already been entered.
1004 (defun universal-argument-minus (arg)
1006 (interactive "P") 1005 (interactive "P")
1007 (prefix-arg-internal "-" nil arg)) 1006 (if (integerp arg)
1007 (universal-argument-other-key arg)
1008 (negative-argument arg)))
1009
1010 ;; Anything else terminates the argument and is left in the queue to be
1011 ;; executed as a command.
1012 (defun universal-argument-other-key (arg)
1013 (interactive "P")
1014 (setq prefix-arg arg)
1015 (setq unread-command-events (list last-input-event))
1016 (setq overriding-terminal-local-map nil))
1008 1017
1009 (defun forward-to-indentation (arg) 1018 (defun forward-to-indentation (arg)
1010 "Move forward ARG lines and position at first nonblank character." 1019 "Move forward ARG lines and position at first nonblank character."
1011 (interactive "p") 1020 (interactive "p")
1012 (forward-line arg) 1021 (forward-line arg)