Mercurial > emacs
changeset 4720:797fe2b66800
Initial revision
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 14 Sep 1993 16:51:54 +0000 |
parents | f250e1299a74 |
children | d34c02ddea9f |
files | lisp/international/iso-acc.el |
diffstat | 1 files changed, 192 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/international/iso-acc.el Tue Sep 14 16:51:54 1993 +0000 @@ -0,0 +1,192 @@ +;;; iso-acc.el -- minor mode providing electric accent keys +;;; Copyright (C) 1993 Free Software Foundation, Inc. + +;; Author: Johan Vromans <jv@mh.nl> +;; Version: 1.4 + +;; 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: + +;; Function `iso-accents' activates a minor mode (`iso-accents-minor-mode') +;; in which typewriter "dead keys" are emulated. The purpose of this +;; emulation is to provide a simple means for inserting accented +;; characters according to the ISO-8859-1 character set. +;; +;; In `iso-accents-minor-mode', pseudo accent characters are used to +;; introduce accented keys. The pseudo-accent characterss are: +;; +;; ' (minute) -> grave accent +;; ` (backtick) -> acute accent +;; " (second) -> diaeresis +;; ^ (caret) -> circonflexe +;; +;; The action taken depends on the key that follows the pseudo accent. +;; In general: +;; +;; pseudo-accent + appropriate letter -> accented letter +;; pseudo-accent + space -> pseudo-accent +;; pseudo-accent + pseudo-accent -> accent (if available) +;; pseudo-accent + other -> pseudo-accent + other +;; +;; If the pseudo-accent is followed by anything else than a +;; self-insert-command, the dead-key code is terminated, the +;; pseudo-accent inserted 'as is' and the bell is rung to signal this. +;; +;; Function `iso-accents' can be used to enable the iso accents +;; minor mode, or disable it when called with a non-null argument. + +;;; Code: + +(provide 'iso-acc) + +(defvar iso-accents-list + '(((?' ?A) ?\301) + ((?' ?E) ?\311) + ((?' ?I) ?\315) + ((?' ?O) ?\323) + ((?' ?U) ?\332) + ((?' ?a) ?\341) + ((?' ?e) ?\351) + ((?' ?i) ?\355) + ((?' ?o) ?\363) + ((?' ?u) ?\372) + ((?' ?') ?\264) + ((?' ? ) ?') + ((?` ?A) ?\300) + ((?` ?E) ?\310) + ((?` ?I) ?\314) + ((?` ?O) ?\322) + ((?` ?U) ?\331) + ((?` ?a) ?\340) + ((?` ?e) ?\350) + ((?` ?i) ?\354) + ((?` ?o) ?\362) + ((?` ?u) ?\371) + ((?` ? ) ?`) + ((?` ?`) ?`) ; no special code? + ((?` ?A) ?\302) + ((?^ ?E) ?\312) + ((?^ ?I) ?\316) + ((?^ ?O) ?\324) + ((?^ ?U) ?\333) + ((?^ ?a) ?\342) + ((?^ ?e) ?\352) + ((?^ ?i) ?\356) + ((?^ ?o) ?\364) + ((?^ ?u) ?\373) + ((?^ ? ) ?^) + ((?^ ?^) ?^) ; no special code? + ((?\" ?A) ?\304) + ((?\" ?E) ?\313) + ((?\" ?I) ?\317) + ((?\" ?O) ?\326) + ((?\" ?U) ?\334) + ((?\" ?a) ?\344) + ((?\" ?e) ?\353) + ((?\" ?i) ?\357) + ((?\" ?o) ?\366) + ((?\" ?u) ?\374) + ((?\" ? ) ?\") + ((?\" ?\") ?\250) + ) + "Association list for iso accent combinations.") + +(defun iso-accents-dead-key () + "Emulate typewriter dead keys." + (interactive) + + ;; Pick up the dead-key. + (let ((first-char last-command-char)) + + ;; Display it and backup. + (insert first-char) + (backward-char 1) + + ;; Wait for the second key and look up the combination in the list. + (let* ((second-char (read-event)) + (entry (assoc (list first-char second-char) iso-accents-list))) + (if entry + ;; Found it: delete the first character and insert the combination. + (progn + (delete-char 1) + (insert (car (cdr entry)))) + + ;; Otherwise, advance and schedule the second key for execution. + (forward-char 1) + (setq unread-command-events (list second-char)) + + ;; If it is not a self-insert-command, ring the terminal bell. + (or (eq (key-binding (make-vector 1 second-char)) 'self-insert-command) + (beep 1)))))) + +(defvar iso-accents-minor-mode nil + "Buffer local variable that denotes 'dead key' minor mode.") + +(defvar iso-accents-prefix-map nil + "Keymap for 'dead key' minor mode.") + +;; It is a matter of taste if you want the minor mode indicated +;; in the mode line... +;; If so, uncomment the next three lines. +;; (or (assq 'iso-accents-minor-mode minor-mode-map-alist) +;; (setq minor-mode-alist +;; (append minor-mode-alist +;; '((iso-accents-minor-mode " ISO-Acc"))))) + +;;;###autoload +(defun iso-accents (&optional arg) + "Allow easy insertion of accented characters according to ISO-8859-1. +When called without an argument, or with a null argument, pseudo-accent +keys (', \", ^ and ~) will behave like dead typewriter keys: when +followed by an appropriate character the combination will be replaced +by the corresponding ISO character code for the accented character. +Calling `iso-accents' with an argument will make all keys normal again." +;; When called, a buffer local variable iso-accents-minor-mode is created +;; to record iso-accents-minor-mode status. +;; A minor mode map `iso-accents-prefix-map' is used to activate the dead +;; key handling dependend on the value of iso-accents-minor-mode. + + (interactive "P") + + ;; Create buffer local variable iso-accents-minor-mode. + (make-local-variable 'iso-accents-minor-mode) + + (if arg + ;; Switch it off. + (setq iso-accents-minor-mode nil) + + ;; Enable electric accents. + (setq iso-accents-minor-mode t) + + ;; Create the minor-mode keymap, if needed. + (or iso-accents-prefix-map + (progn + (setq iso-accents-prefix-map (make-sparse-keymap)) + (define-key iso-accents-prefix-map "'" 'iso-accents-dead-key) + (define-key iso-accents-prefix-map "`" 'iso-accents-dead-key) + (define-key iso-accents-prefix-map "^" 'iso-accents-dead-key) + (define-key iso-accents-prefix-map "\"" 'iso-accents-dead-key) + + ;; Add the dead key minor mode map to the minor mode maps. + (or (assq 'iso-accents-minor-mode minor-mode-map-alist) + (setq minor-mode-map-alist + (cons (cons 'iso-accents-minor-mode iso-accents-prefix-map) + minor-mode-map-alist))))))) + +;;; iso-acc.el ends here +