Mercurial > emacs
comparison lisp/double.el @ 91073:4bc33ffdda1a
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 902-908)
- Update from CVS
- Merge from emacs--rel--22
* emacs--rel--22 (patch 131-137)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 261-262)
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-278
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sat, 27 Oct 2007 09:12:07 +0000 |
parents | 14c4a6aac623 da629dcb5063 |
children | 606f2d163a64 |
comparison
equal
deleted
inserted
replaced
91072:74ab3ea909f9 | 91073:4bc33ffdda1a |
---|---|
73 :type '(repeat (list (character :tag "Key") | 73 :type '(repeat (list (character :tag "Key") |
74 (string :tag "Once") | 74 (string :tag "Once") |
75 (string :tag "Twice")))) | 75 (string :tag "Twice")))) |
76 | 76 |
77 (defcustom double-prefix-only t | 77 (defcustom double-prefix-only t |
78 "*Non-nil means that Double mode mapping only works for prefix keys. | 78 "Non-nil means that Double mode mapping only works for prefix keys. |
79 That is, for any key `X' in `double-map', `X' alone will be mapped | 79 That is, for any key `X' in `double-map', `X' alone will be mapped |
80 but not `C-u X' or `ESC X' since the X is not the prefix key." | 80 but not `C-u X' or `ESC X' since the X is not the prefix key." |
81 :group 'double | 81 :group 'double |
82 :type 'boolean) | 82 :type 'boolean) |
83 | 83 |
93 (prog2 (message "%s%c" prompt double-last-event) | 93 (prog2 (message "%s%c" prompt double-last-event) |
94 (read-event) | 94 (read-event) |
95 (message "")) | 95 (message "")) |
96 (read-event))) | 96 (read-event))) |
97 | 97 |
98 (global-set-key [ignore] '(lambda () (interactive))) | 98 (global-set-key [ignore] 'ignore) |
99 | 99 |
100 (or (boundp 'isearch-mode-map) | 100 (or (boundp 'isearch-mode-map) |
101 (load-library "isearch")) | 101 (load-library "isearch")) |
102 | 102 |
103 (define-key isearch-mode-map [ignore] | 103 (define-key isearch-mode-map [ignore] |
137 (setq double-last-event key) | 137 (setq double-last-event key) |
138 (setq unread-command-events | 138 (setq unread-command-events |
139 (append (substring exp 1) '(magic-start))) | 139 (append (substring exp 1) '(magic-start))) |
140 (vector (aref exp 0))))))) | 140 (vector (aref exp 0))))))) |
141 | 141 |
142 ;;; Key Translation Map | |
143 | |
144 (defun double-setup (enable-flag) | |
145 (if enable-flag | |
146 (progn | |
147 ;; Set up key-translation-map as indicated by `double-map'. | |
148 ;; XXX I don't think key-translation-map should be made local here. -- Lorentey | |
149 (kill-local-variable 'key-translation-map) | |
150 (make-local-variable 'key-translation-map) | |
151 (setq key-translation-map (if (keymapp key-translation-map) | |
152 (copy-keymap key-translation-map) | |
153 (make-sparse-keymap))) | |
154 (mapcar (function (lambda (entry) | |
155 (define-key key-translation-map | |
156 (vector (nth 0 entry)) | |
157 'double-translate-key))) | |
158 (append double-map '((magic-start) (magic-end))))) | |
159 (kill-local-variable 'key-translation-map))) | |
160 | |
161 ;;; Mode | 142 ;;; Mode |
162 | 143 |
163 ;;;###autoload | |
164 (defcustom double-mode nil | |
165 "Toggle Double mode. | |
166 Setting this variable directly does not take effect; | |
167 use either \\[customize] or the function `double-mode'." | |
168 :set (lambda (symbol value) | |
169 (double-mode (if value 1 0))) | |
170 :initialize 'custom-initialize-default | |
171 :link '(emacs-commentary-link "double") | |
172 :type 'boolean | |
173 :require 'double | |
174 :group 'double) | |
175 (make-variable-buffer-local 'double-mode) | |
176 | |
177 (or (assq 'double-mode minor-mode-alist) | |
178 (setq minor-mode-alist | |
179 (cons '(double-mode " Double") minor-mode-alist))) | |
180 | |
181 ;; This feature seemed useless and it confused describe-mode, | 144 ;; This feature seemed useless and it confused describe-mode, |
182 ;; so I deleted it. | 145 ;; so I deleted it. |
183 ;;;(defvar double-mode-name "Double") | 146 ;; (defvar double-mode-name "Double") |
184 ;;;;; Name of current double mode. | 147 ;; ;; Name of current double mode. |
185 ;;; (make-variable-buffer-local 'double-mode-name) | 148 ;; (make-variable-buffer-local 'double-mode-name) |
186 | 149 |
187 ;;;###autoload | 150 ;;;###autoload |
188 (defun double-mode (arg) | 151 (define-minor-mode double-mode |
189 "Toggle Double mode. | 152 "Toggle Double mode. |
190 With prefix argument ARG, turn Double mode on if ARG is positive, otherwise | 153 With prefix argument ARG, turn Double mode on if ARG is positive, otherwise |
191 turn it off. | 154 turn it off. |
192 | 155 |
193 When Double mode is on, some keys will insert different strings | 156 When Double mode is on, some keys will insert different strings |
194 when pressed twice. See variable `double-map' for details." | 157 when pressed twice. See variable `double-map' for details." |
195 (interactive "P") | 158 :lighter " Double" |
196 (if (or (and (null arg) double-mode) | 159 :link '(emacs-commentary-link "double") |
197 (<= (prefix-numeric-value arg) 0)) | 160 (kill-local-variable 'key-translation-map) |
198 ;; Turn it off | 161 (when double-mode |
199 (if double-mode | 162 ;; Set up key-translation-map as indicated by `double-map'. |
200 (progn | 163 ;; XXX I don't think key-translation-map should be made local here. -- Lorentey |
201 (let ((double-map)) | 164 (make-local-variable 'key-translation-map) |
202 (double-setup nil)) | 165 (let ((map (make-sparse-keymap))) |
203 (setq double-mode nil) | 166 (set-keymap-parent map key-translation-map) |
204 (force-mode-line-update))) | 167 (setq key-translation-map map) |
205 ;;Turn it on | 168 (dolist (entry (append double-map '((magic-start) (magic-end)))) |
206 (if double-mode | 169 (define-key map |
207 () | 170 (vector (nth 0 entry)) 'double-translate-key))))) |
208 (double-setup t) | |
209 (setq double-mode t) | |
210 (force-mode-line-update)))) | |
211 | 171 |
212 (provide 'double) | 172 (provide 'double) |
213 | 173 |
214 ;;; arch-tag: 2e170036-44cb-4493-bc32-ada0a4395221 | 174 ;; arch-tag: 2e170036-44cb-4493-bc32-ada0a4395221 |
215 ;;; double.el ends here | 175 ;;; double.el ends here |