X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/fc429cfe810c1b2cf6b087ee472d39c1b2178bda..231f989be9425a463c2f500a47c29e1954d83bcf:/lisp/double.el diff --git a/lisp/double.el b/lisp/double.el index e27f805405..0a422bedbf 100644 --- a/lisp/double.el +++ b/lisp/double.el @@ -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 -;; 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 @@ -48,16 +43,18 @@ ;; 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)