New version.
[bpt/emacs.git] / lisp / double.el
index e27f805..0a422be 100644 (file)
@@ -1,31 +1,26 @@
-;;; double.el - Support for keyboard remapping with double clicking.
+;;; double.el --- Support for keyboard remapping with double clicking
 
-;; Copyright (C) 1994 Per Abrahamsen.
+;; Copyright (C) 1994 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
-;; Version: $Id: double.el,v 5.2 1994/02/03 17:18:49 amanda Exp $
 ;; Keywords: i18n
-;; Bogus-Bureaucratic-Cruft: How 'bout ESR and the LCD people agreed
-;;     on a common format?
 
-;; LCD Archive Entry:
-;; double|Per Abrahamsen|abraham@iesd.auc.dk|
-;; Support keyboard remapping with double clicking|
-;; $Date: 1994/02/03 17:18:49 $|$Revision: 5.2 $|~/modes/double.el.Z|
-;;
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 2, or (at your option)
 ;; any later version.
-;; 
-;; This program is distributed in the hope that it will be useful,
+
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
-;; 
+
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -39,7 +34,7 @@
 ;; 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
-;; convetion 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
 ;; The default mapping is for getting Danish/Norwegian keyboard layout
 ;; using ISO Latin 1 on a US keyboard.
 ;;
-;; Requires FSF Emacs 19.20 or later.
-;;
-;; Imprtant node: While I would like to hear comments, bug reports,
+;; Important node: While I would like to hear comments, bug reports,
 ;; suggestions, please do @strong{not} expect me to put other mappings
-;; that the default into this file.  There are billions and billions
+;; than the default into this file.  There are billions and billions
 ;; of such mappings, and just supporting the most common would
 ;; increase the size of this nice small file manyfold.
 
 ;;; ChangeLog: 
 
+;; * 1994-06-21         Per Abrahamsen
+;;      Added `double-prefix-only'.
+;; * 1994-02-28         Per Abrahamsen
+;;      Use 127 instead of 'delete to delete a character.
 ;; * 1994-02-03                Per Abrahamsen
 ;;     Created.
 
@@ -77,6 +74,11 @@ Each entry is a list with three elements:
 2. The string to be inserted when the key is pressed once.
 3. The string to be inserted when the key is pressed twice.")
 
+(defvar 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
+but not `C-u X' or `ESC X' since the X is not the prefix key.")
+
 ;;; Read Event
 
 (defvar double-last-event nil)
@@ -91,12 +93,12 @@ Each entry is a list with three elements:
        (message ""))
     (read-event)))
 
-(global-set-key [ ignore ] '(lambda () (interactive)))
+(global-set-key [ignore] '(lambda () (interactive)))
 
 (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)
@@ -105,6 +107,10 @@ Each entry is a list with three elements:
     (cond (unread-command-events
           ;; Artificial event, ignore it.
           (vector key))
+         ((and double-prefix-only
+               (> (length (this-command-keys)) 1))
+          ;; This is not a prefix key, ignore it.
+          (vector key))
          ((eq key 'magic-start)
           ;; End of generated event.  See if he will repeat it...
           (let ((new (double-read-event prompt))
@@ -113,15 +119,15 @@ Each entry is a list with three elements:
                 (progn 
                   (setq unread-command-events
                         (append (make-list (1- (length (nth 1 entry)))
-                                           'delete)
+                                           127)
                                 (nth 2 entry)
                                 '(magic-end)))
                   (vector 127))
               (setq unread-command-events (list new))
-              [ ignore ])))
+              [ignore])))
          ((eq key 'magic-end)
           ;; End of double event.  Ignore.
-          [ ignore ])
+          [ignore])
          (t
           ;; New key.
           (let ((exp (nth 1 (assoc key double-map))))
@@ -134,8 +140,8 @@ Each entry is a list with three elements:
 
 (defvar default-key-translation-map
   (or key-translation-map (make-sparse-keymap))
-  "Key translation you want to have effect, regardless of double mode.
-This will default to the value of `key-translation-map' when double was
+  "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)
@@ -156,19 +162,21 @@ first loaded.")
 
 (or (assq 'double-mode minor-mode-alist)
     (setq minor-mode-alist
-         (cons '(double-mode (" " double-mode-name)) minor-mode-alist)))
+         (cons '(double-mode " Double") minor-mode-alist)))
 
-(defvar double-mode-name "Double")
-;; Name of current double mode.
-  (make-variable-buffer-local 'double-mode-name)
+;; This feature seemed useless and it confused describe-mode,
+;;  so I deleted it.
+;;;(defvar double-mode-name "Double")
+;;;;; Name of current double mode.
+;;; (make-variable-buffer-local 'double-mode-name)
 
 ;;;###autoload
 (defun double-mode (arg)
-  "Toggle double mode.
-With prefix arg, turn double mode on iff arg is positive.
+  "Toggle Double mode.
+With prefix arg, turn Double mode on iff arg is positive.
 
-When double mode is on, some keys will insert will insert different
-strings when pressed twice.  See variable `double-map' for details."
+When Double mode is on, some keys will insert different strings
+when pressed twice.  See variable `double-map' for details."
   (interactive "P")
   (if (or (and (null arg) double-mode)
          (<= (prefix-numeric-value arg) 0))
@@ -178,13 +186,13 @@ strings when pressed twice.  See variable `double-map' for details."
            (let ((double-map))
              (double-setup))
            (setq double-mode nil)
-           (set-buffer-modified-p (buffer-modified-p))))
+           (force-mode-line-update)))
     ;;Turn it on
     (if double-mode
        ()
       (double-setup)
       (setq double-mode t)
-      (set-buffer-modified-p (buffer-modified-p)))))
+      (force-mode-line-update))))
 
 (provide 'double)