-;;; double.el --- Support for keyboard remapping with double clicking
+;;; double.el --- support for keyboard remapping with double clicking
-;; Copyright (C) 1994,1997 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: i18n
;; This mode is intended for use with languages that adds a small
;; number of extra letters not available on the keyboard.
-;;
+;;
;; Examples includes Scandinavian and German with an US keyboard.
;;
;; The idea is that certain keys are overloaded. When you press it
;; string will be replaced by another. This can be used for mapping
;; keys on a US keyboard to generate characters according to the local
;; keyboard convention when pressed once, and according to US keyboard
-;; convention when pressed twice.
+;; convention when pressed twice.
;;
;; To use this mode, you must define the variable `double-map' and
;; then enable double mode with `M-x double-mode'. Read the
(defcustom double-prefix-only t
"*Non-nil means that Double mode mapping only works for prefix keys.
-That is, for any key `X' in `double-map', `X' alone will be mapped
+That is, for any key `X' in `double-map', `X' alone will be mapped
but not `C-u X' or `ESC X' since the X is not the prefix key."
:group 'double
:type 'boolean)
(or (boundp 'isearch-mode-map)
(load-library "isearch"))
-(define-key isearch-mode-map [ignore]
+(define-key isearch-mode-map [ignore]
(function (lambda () (interactive) (isearch-update))))
(defun double-translate-key (prompt)
(let ((new (double-read-event prompt))
(entry (assoc double-last-event double-map)))
(if (eq new double-last-event)
- (progn
+ (progn
(setq unread-command-events
(append (make-list (1- (length (nth 1 entry)))
127)
;;; Key Translation Map
-(defvar default-key-translation-map
- (or key-translation-map (make-sparse-keymap))
- "Key translation you want to have effect, regardless of Double mode.
-This defaults to the value of `key-translation-map' when double was
-first loaded.")
-
-(make-variable-buffer-local 'key-translation-map)
-
-(defun double-setup ()
- ;; Setup key-translation-map as indicated by `double-map'.
- (setq key-translation-map (copy-keymap default-key-translation-map))
- (mapcar (function (lambda (entry)
- (define-key key-translation-map (vector (nth 0 entry))
- 'double-translate-key)))
- (append double-map '((magic-start) (magic-end)))))
+(defun double-setup (enable-flag)
+ (if enable-flag
+ (progn
+ ;; Set up key-translation-map as indicated by `double-map'.
+ (kill-local-variable 'key-translation-map)
+ (make-local-variable 'key-translation-map)
+ (setq key-translation-map (if (keymapp key-translation-map)
+ (copy-keymap key-translation-map)
+ (make-sparse-keymap)))
+ (mapcar (function (lambda (entry)
+ (define-key key-translation-map
+ (vector (nth 0 entry))
+ 'double-translate-key)))
+ (append double-map '((magic-start) (magic-end)))))
+ (kill-local-variable 'key-translation-map)))
;;; Mode
-(defvar double-mode nil)
-;; Indicator for the double mode.
- (make-variable-buffer-local 'double-mode)
+;;;###autoload
+(defcustom double-mode nil
+ "Toggle Double mode.
+Setting this variable directly does not take effect;
+use either \\[customize] or the function `double-mode'."
+ :set (lambda (symbol value)
+ (double-mode (if value 1 0)))
+ :initialize 'custom-initialize-default
+ :link '(emacs-commentary-link "double")
+ :type 'boolean
+ :require 'double
+ :group 'double)
+(make-variable-buffer-local 'double-mode)
(or (assq 'double-mode minor-mode-alist)
(setq minor-mode-alist
(if double-mode
(progn
(let ((double-map))
- (double-setup))
+ (double-setup nil))
(setq double-mode nil)
(force-mode-line-update)))
;;Turn it on
(if double-mode
()
- (double-setup)
+ (double-setup t)
(setq double-mode t)
(force-mode-line-update))))
(provide 'double)
+;;; arch-tag: 2e170036-44cb-4493-bc32-ada0a4395221
;;; double.el ends here
-