diff options
Diffstat (limited to 'lisp/double.el')
-rw-r--r-- | lisp/double.el | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/lisp/double.el b/lisp/double.el deleted file mode 100644 index e0e3071463d..00000000000 --- a/lisp/double.el +++ /dev/null @@ -1,186 +0,0 @@ -;;; double.el - Support for keyboard remapping with double clicking. - -;; Copyright (C) 1994 Free Software Foundation, Inc. - -;; Author: Per Abrahamsen <abraham@iesd.auc.dk> -;; Keywords: i18n - -;; 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. - -;; 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 GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - -;;; Commentary: - -;; 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 -;; once it will insert one string, and when you press it twice the -;; 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. -;; -;; To use this mode, you must define the variable `double-map' and -;; then enable double mode with `M-x double-mode'. Read the -;; documentation for both of them. -;; -;; 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, -;; suggestions, please do @strong{not} expect me to put other mappings -;; that 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-02-03 Per Abrahamsen -;; Created. - -;;; Code: - -(defvar double-map - '((?\; "\346" ";") - (?\' "\370" "'") - (?\[ "\345" "[") - (?\: "\306" ":") - (?\" "\330" "\"") - (?\{ "\305" "{")) - "Alist of key translations activated by double mode. - -Each entry is a list with three elements: -1. The key activating the translation. -2. The string to be inserted when the key is pressed once. -3. The string to be inserted when the key is pressed twice.") - -;;; Read Event - -(defvar double-last-event nil) -;; The last key that generated a double key event. - -(defun double-read-event (prompt) - ;; Read an event - (if isearch-mode (isearch-update)) - (if prompt - (prog2 (message "%s%c" prompt double-last-event) - (read-event) - (message "")) - (read-event))) - -(global-set-key [ ignore ] '(lambda () (interactive))) - -(or (boundp 'isearch-mode-map) - (load-library "isearch")) - -(define-key isearch-mode-map [ ignore ] - (function (lambda () (interactive) (isearch-update)))) - -(defun double-translate-key (prompt) - ;; Translate input events using double map. - (let ((key last-input-char)) - (cond (unread-command-events - ;; Artificial event, ignore it. - (vector key)) - ((eq key 'magic-start) - ;; End of generated event. See if he will repeat it... - (let ((new (double-read-event prompt)) - (entry (assoc double-last-event double-map))) - (if (eq new double-last-event) - (progn - (setq unread-command-events - (append (make-list (1- (length (nth 1 entry))) - 'delete) - (nth 2 entry) - '(magic-end))) - (vector 127)) - (setq unread-command-events (list new)) - [ ignore ]))) - ((eq key 'magic-end) - ;; End of double event. Ignore. - [ ignore ]) - (t - ;; New key. - (let ((exp (nth 1 (assoc key double-map)))) - (setq double-last-event key) - (setq unread-command-events - (append (substring exp 1) '(magic-start))) - (vector (aref exp 0))))))) - -;;; 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 will default 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))))) - -;;; Mode - -(defvar double-mode nil) -;; Indicator for the double mode. - (make-variable-buffer-local 'double-mode) - -(or (assq 'double-mode minor-mode-alist) - (setq minor-mode-alist - (cons '(double-mode (" " double-mode-name)) minor-mode-alist))) - -(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. - -When double mode is on, some keys will insert 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)) - ;; Turn it off - (if double-mode - (progn - (let ((double-map)) - (double-setup)) - (setq double-mode nil) - (set-buffer-modified-p (buffer-modified-p)))) - ;;Turn it on - (if double-mode - () - (double-setup) - (setq double-mode t) - (set-buffer-modified-p (buffer-modified-p))))) - -(provide 'double) - -;;; double.el ends here - |