Mercurial > emacs
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) |