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