From:	CRDGW2::CRDGW2::MRGATE::"SMTP::PREP.AI.MIT.EDU::HELP-GNU-EMACS-REQUEST"  2-MAR-1992 16:23:04.28
To:	ARISIA::EVERHART
CC:	
Subj:	Emacs 18.58 enhancement: 8-bit character display

From:	help-gnu-emacs-request@prep.ai.mit.edu@SMTP@CRDGW2
To:	Everhart@Arisia@MRGATE

Received:  by crdgw1.ge.com (5.57/GE 1.123)
	 id AA04257; Mon, 2 Mar 92 15:48:47 EST
Received: by life.ai.mit.edu (4.1/AI-4.10) id AA10722; Mon, 2 Mar 92 09:35:09 EST
Return-Path: <help-gnu-emacs-request@prep.ai.mit.edu>
Received: from news.cis.ohio-state.edu by life.ai.mit.edu (4.1/AI-4.10) id AA10608; Mon, 2 Mar 92 09:31:11 EST
Received: by news.cis.ohio-state.edu (5.61-kk/5.911008)
	id AA10165; Mon, 2 Mar 92 09:01:40 -0500
Received: from USENET by news.cis.ohio-state.edu with netnews
	for help-gnu-emacs@prep.ai.mit.edu (help-gnu-emacs@prep.ai.mit.edu);
	contact usenet@news.cis.ohio-state.edu if you have questions.
To: help-gnu-emacs@prep.ai.mit.edu
Date: 2 Mar 92 12:36:18 GMT
Message-Id: <1992Mar2.123618.13005@pronto.mh.nl>
Organization: Multihouse Automation, the Netherlands
From: jv@mh.nl (Johan Vromans)
Sender: help-gnu-emacs-request@prep.ai.mit.edu
Subject: Emacs 18.58 enhancement: 8-bit character display


# FP-EightBit -- Add 8-bit (ISO) character support to GNU Emacs 18.58
# Author          : Johan Vromans
# Created On      : ***
# Last Modified By: Johan Vromans
# Last Modified On: Mon Mar  2 10:41:10 1992
# Update Count    : 2
# Status          : Use at your own risk.
# Patch Version   : 18.58.1

===== These are local mods to GNU Emacs 18.58 =====

  1. 8-bit display (based on mods by Johan Widen)
     [buffer.c indent.c xdisp.c]

     Normally, Emacs displays characters "as is", except for control
     characters (octal codes 000-037 and 0177) and meta characters (octal
     0200-0377). The Emacs variable "ctl-arrow" is used to control the
     visual appearance: 'nil' means "\xxx" format, and 't' means "^X"
     format. 

     After aplying this patch, Emacs will display characters in the
     range 0240-0377 "as is" if ctl-arrow is set to any other value
     than 't' or 'nil'.

     This range of characters corresponds to the ISO Latin Alphabet Nr. 1.

  2. With this patch two files are added:

     - iso.el: to enable ISO handling, display (if possible).
       ISO characters can be entered using M-Space prefix.

       Display capability is controlled by global variable
       ISO-capable, which must be set if your terminal/display can
       handle ISO character display.

     - el-accents.el: automatic handling of accented characters.
       You may (or may not) like this.

     Usage (in your .emacs):

       (autoload 'ISO-text-mode "iso" "ISO Text Mode" t)
       (autoload 'electric-accents "el-accents" "Typewriter dead keys" t)
       (setq ISO-capable t)     ; if you can

*** buffer.c~	Tue Oct 22 04:05:12 1991
--- buffer.c	Sun Feb 23 22:34:37 1992
***************
*** 1266,1273 ****
  Automatically becomes local when set in any fashion.");
  
    DEFVAR_PER_BUFFER ("ctl-arrow", &current_buffer->ctl_arrow,
!     "*Non-nil means display control chars with uparrow.\n\
  Nil means use backslash and octal digits.\n\
  Automatically becomes local when set in any fashion.");
  
    DEFVAR_PER_BUFFER ("truncate-lines", &current_buffer->truncate_lines,
--- 1266,1274 ----
  Automatically becomes local when set in any fashion.");
  
    DEFVAR_PER_BUFFER ("ctl-arrow", &current_buffer->ctl_arrow,
!     "*t means display control chars with uparrow.\n\
  Nil means use backslash and octal digits.\n\
+ Otherwise assume that control and meta chars are printable.\n\
  Automatically becomes local when set in any fashion.");
  
    DEFVAR_PER_BUFFER ("truncate-lines", &current_buffer->truncate_lines,
*** indent.c~	Thu Jan 16 08:08:39 1992
--- indent.c	Sun Feb 23 22:45:52 1992
***************
*** 78,84 ****
    register int tab_seen;
    register int post_tab;
    register int tab_width = XINT (current_buffer->tab_width);
!   int ctl_arrow = !NULL (current_buffer->ctl_arrow);
  
    if (point == last_known_column_point
        && MODIFF == last_known_column_modified)
--- 78,85 ----
    register int tab_seen;
    register int post_tab;
    register int tab_width = XINT (current_buffer->tab_width);
!   int ctl_arrow = !NULL (current_buffer->ctl_arrow)
!                   + (EQ (current_buffer->ctl_arrow, Qt));
  
    if (point == last_known_column_point
        && MODIFF == last_known_column_modified)
***************
*** 133,139 ****
  	  tab_seen = 1;
  	}
        else
! 	col += (ctl_arrow && c < 0200) ? 2 : 4;
      }
  
    if (tab_seen)
--- 134,141 ----
  	  tab_seen = 1;
  	}
        else
! 	col += (ctl_arrow == 1 && c >= 0177) ? 1 :
! 	         (ctl_arrow && c < 0200) ? 2 : 4;
      }
  
    if (tab_seen)
***************
*** 297,303 ****
    register int goal;
    register int end = ZV;
    register int tab_width = XINT (current_buffer->tab_width);
!   register int ctl_arrow = !NULL (current_buffer->ctl_arrow);
  
    Lisp_Object val;
  
--- 299,306 ----
    register int goal;
    register int end = ZV;
    register int tab_width = XINT (current_buffer->tab_width);
!   register int ctl_arrow = !NULL (current_buffer->ctl_arrow)
! 			   + (EQ (current_buffer->ctl_arrow, Qt));
  
    Lisp_Object val;
  
***************
*** 324,329 ****
--- 327,334 ----
  	  col += tab_width - 1;
  	  col = col / tab_width * tab_width;
  	}
+       else if (ctl_arrow == 1 && (c > 0240))
+ 	continue;
        else if (ctl_arrow && (c < 040 || c == 0177))
          col++;
        else if (c < 040 || c >= 0177)
***************
*** 354,360 ****
    register int pos;
    register int c;
    register int tab_width = XFASTINT (current_buffer->tab_width);
!   register int ctl_arrow = !NULL (current_buffer->ctl_arrow);
    int selective
      = XTYPE (current_buffer->selective_display) == Lisp_Int
        ? XINT (current_buffer->selective_display)
--- 359,366 ----
    register int pos;
    register int c;
    register int tab_width = XFASTINT (current_buffer->tab_width);
!   register int ctl_arrow = !NULL (current_buffer->ctl_arrow)
! 			   + (EQ (current_buffer->ctl_arrow, Qt));
    int selective
      = XTYPE (current_buffer->selective_display) == Lisp_Int
        ? XINT (current_buffer->selective_display)
***************
*** 429,435 ****
  	    }
  	}
        else
! 	hpos += (ctl_arrow && c < 0200) ? 2 : 4;
  
        /* Handle right margin.  */
        if (hpos >= width
--- 435,441 ----
  	    }
  	}
        else
! 	hpos += (ctl_arrow == 1 && (c > 0240)) ? 1 : (ctl_arrow && c < 0200) ? 2 : 4;
  
        /* Handle right margin.  */
        if (hpos >= width
*** xdisp.c~	Fri Oct 25 21:45:32 1991
--- xdisp.c	Sun Feb 23 22:43:43 1992
***************
*** 1264,1270 ****
    register unsigned char *startp;
    register unsigned char *p1prev;
    int tab_width = XINT (current_buffer->tab_width);
!   int ctl_arrow = !NULL (current_buffer->ctl_arrow);
    int width = XFASTINT (w->width) - 1
      - (XFASTINT (w->width) + XFASTINT (w->left) != screen_width);
    struct position val;
--- 1264,1271 ----
    register unsigned char *startp;
    register unsigned char *p1prev;
    int tab_width = XINT (current_buffer->tab_width);
!   int ctl_arrow = !NULL (current_buffer->ctl_arrow)
!                   + (EQ (current_buffer->ctl_arrow, Qt));
    int width = XFASTINT (w->width) - 1
      - (XFASTINT (w->width) + XFASTINT (w->left) != screen_width);
    struct position val;
***************
*** 1382,1387 ****
--- 1383,1394 ----
  	    }
  	  break;
  	}
+       else if (ctl_arrow == 1 && (c > 0240))
+ 	{
+ 	  if (p1 >= startp)
+ 	    *p1 = c;
+ 	  p1++;
+ 	}
        else if (c < 0200 && ctl_arrow)
  	{
  	  if (p1 >= startp)
***************
*** 1975,1980 ****
--- 1982,1993 ----
  	      p1++;
  	    }
  	  while ((p1 - start + hscroll - (hscroll > 0)) % tab_width);
+ 	}
+       else if (buffer_defaults.ctl_arrow == 1 && (c > 0240))
+ 	{
+ 	  if (p1 >= start)
+ 	    *p1 = c;
+ 	  p1++;
  	}
        else if (c < 0200 && buffer_defaults.ctl_arrow)
  	{

*** /dev/null	Mon Mar  2 08:38:04 1992
--- iso.el	Mon Mar  2 10:16:57 1992
***************
*** 0 ****
--- 1,724 ----
+ ;; iso.el -- implement ISO extension chracters
+ ;; SCCS Status     : @(#)@ iso.el	1.7
+ ;; Author          : Johan Vromans
+ ;; Created On      : Mon Nov 26 15:52:42 1990
+ ;; Last Modified By: Johan Vromans
+ ;; Last Modified On: Mon Mar  2 10:14:31 1992
+ ;; Update Count    : 32
+ ;; Status          : OK
+ 
+ ;; This module defines the following functions
+ ;;
+ ;;   (ISO-text-mode off)	to switch ISO text mode
+ ;;   (ISO--build-ext-map)	creates and fills ISO-key-map
+ ;;   (ISO--augment-syntax-table) Augments syntax table for IO characters.
+ ;;
+ ;; Calling ISO-text-mode usially suffices, since this creates the keymap (once)
+ ;; and sets the mode accordingly.
+ ;;
+ ;; >>> The keymap is now created upon loading. This is faster <<<
+ 
+ (load "el-accents" t t nil)
+ 
+ (defvar ISO-text-mode nil)
+ (defvar ISO-capable nil 
+   "*T means this terminal can display ISO characters.
+ NOTE: You can use ISO mode even if the display cannot show it.")
+ 
+ (defun ISO-text-mode (&optional off)
+   "Enables (with ARG: disables) ISO text mode for the current buffer."
+   (interactive "P")
+   (make-local-variable 'ISO-text-mode)
+   (if off
+       (progn
+ 	(setq ISO-text-mode nil)
+ 	(setq ctl-arrow nil)
+ 	;;Note: we do not cancel the effect of ISO--augment-syntax-table
+ 	(local-set-key "\e " nil))
+     (if ISO-capable
+ 	(setq ctl-arrow 1))
+     (ISO--augment-syntax-table)
+     (setq ISO-text-mode t)
+     (or (boundp 'ISO-ext-map)
+ 	(ISO--build-ext-map))
+     (local-set-key "\e " ISO-ext-map)))
+ 
+ ;(defun ISO--build-ext-map ()
+ ;  "Builds the ISO extension keymap."
+ ;  (message "Building ISO-extension keymap... ")
+ ;  (require 'backquote)
+ ;  (setq ISO-ext-map (make-keymap))
+ ;  (mapcar
+ ;   '(lambda (x) 
+ ;      (define-key ISO-ext-map (car x) 
+ ;	(`(lambda (n) (interactive "p") (insert-char (,(cdr x)) n)))))
+ ;   '(
+ ;     ;; The following info is dereived from the DEC VT320 User Guide
+ ;     ("  " . ? )
+ ;     ("!!" . ?\241)
+ ;     ("!P" . ?\266)
+ ;     ("''" . ?\264)
+ ;     ("'A" . ?\301)
+ ;     ("'E" . ?\311)
+ ;     ("'I" . ?\315)
+ ;     ("'O" . ?\323)
+ ;     ("'U" . ?\332)
+ ;     ("'a" . ?\341)
+ ;     ("'e" . ?\351)
+ ;     ("'i" . ?\355)
+ ;     ("'o" . ?\363)
+ ;     ("'u" . ?\372)
+ ;     ("'y" . ?\375)
+ ;     ("((" . ?[)
+ ;     ("(-" . ?{)
+ ;     ("))" . ?])
+ ;     ("*A" . ?\305)
+ ;     ("*a" . ?\345)
+ ;     ("++" . ?#)
+ ;     ("+-" . ?\261)
+ ;     (",C" . ?\307)
+ ;     (",c" . ?\347)
+ ;     ("-(" . ?{)
+ ;     ("-+" . ?\261)
+ ;     ("-," . ?\254)
+ ;     ("--" . ?\255)
+ ;     ("-:" . ?\367)
+ ;     ("-L" . ?\243)
+ ;     ("-Y" . ?\245)
+ ;     (".^" . ?\267)
+ ;     ("//" . ?\\)
+ ;     ("/<" . ?\\)
+ ;     ("/C" . ?\242)
+ ;     ("/O" . ?\330)
+ ;     ("/U" . ?\265)
+ ;     ("/^" . ?|)
+ ;     ("/o" . ?\370)
+ ;     ("0A" . ?\305)
+ ;     ("0X" . ?\244)
+ ;     ("0X" . ?\244)
+ ;     ("0^" . ?\260)
+ ;     ("0a" . ?\345)
+ ;     ("12" . ?\275)
+ ;     ("14" . ?\274)
+ ;     ("1^" . ?\271)
+ ;     ("2^" . ?\262)
+ ;     ("34" . ?\276)
+ ;     ("3^" . ?\263)
+ ;     (":-" . ?\367)
+ ;     ("<<" . ?\253)
+ ;     ("=L" . ?\243)
+ ;     ("=Y" . ?\245)
+ ;     (">>" . ?\273)
+ ;     ("??" . ?\277)
+ ;     ("A'" . ?\301)
+ ;     ("A*" . ?\305)
+ ;     ("A0" . ?\305)
+ ;     ("AA" . ?@)
+ ;     ("AE" . ?\306)
+ ;     ("A\"" . ?\304)
+ ;     ("A^" . ?\302)
+ ;     ("A_" . ?\252)
+ ;     ("A`" . ?\300)
+ ;     ("A~" . ?\303)
+ ;     ("C," . ?\307)
+ ;     ("C/" . ?\242)
+ ;     ("CO" . ?\251)
+ ;     ("C|" . ?\242)
+ ;     ("E'" . ?\311)
+ ;     ("E\"" . ?\313)
+ ;     ("E^" . ?\312)
+ ;     ("E`" . ?\310)
+ ;     ("I'" . ?\315)
+ ;     ("I\"" . ?\317)
+ ;     ("I^" . ?\316)
+ ;     ("I`" . ?\314)
+ ;     ("L-" . ?\243)
+ ;     ("L=" . ?\243)
+ ;     ("N~" . ?\321)
+ ;     ("O'" . ?\323)
+ ;     ("O/" . ?\330)
+ ;     ("OC" . ?\251)
+ ;     ("OR" . ?\256)
+ ;     ("O\"" . ?\326)
+ ;     ("O^" . ?\324)
+ ;     ("O_" . ?\272)
+ ;     ("O`" . ?\322)
+ ;     ("O~" . ?\325)
+ ;     ("P!" . ?\266)
+ ;     ("RO" . ?\256)
+ ;     ("S!" . ?\247)
+ ;     ("S0" . ?\247)
+ ;     ("SO" . ?\247)
+ ;     ("U'" . ?\332)
+ ;     ("U/" . ?\265)
+ ;     ("U\"" . ?\334)
+ ;     ("U^" . ?\333)
+ ;     ("U`" . ?\331)
+ ;     ("X0" . ?\244)
+ ;     ("XO" . ?\244)
+ ;     ("Y-" . ?\245)
+ ;     ("Y=" . ?\245)
+ ;     ("\"A" . ?\304)
+ ;     ("\"E" . ?\313)
+ ;     ("\"I" . ?\317)
+ ;     ("\"O" . ?\326)
+ ;     ("\"U" . ?\334)
+ ;     ("\"\"" . ?\250)
+ ;     ("\"a" . ?\344)
+ ;     ("\"e" . ?\353)
+ ;     ("\"i" . ?\357)
+ ;     ("\"o" . ?\366)
+ ;     ("\"u" . ?\374)
+ ;     ("\"y" . ?\377)
+ ;     ("^." . ?\267)
+ ;     ("^/" . ?|)
+ ;     ("^0" . ?\260)
+ ;     ("^1" . ?\271)
+ ;     ("^2" . ?\262)
+ ;     ("^3" . ?\263)
+ ;     ("^A" . ?\302)
+ ;     ("^E" . ?\312)
+ ;     ("^I" . ?\316)
+ ;     ("^O" . ?\324)
+ ;     ("^U" . ?\333)
+ ;     ("^_" . ?\257)
+ ;     ("^a" . ?\342)
+ ;     ("^e" . ?\352)
+ ;     ("^i" . ?\356)
+ ;     ("^o" . ?\364)
+ ;     ("^u" . ?\373)
+ ;     ("_A" . ?\252)
+ ;     ("_O" . ?\272)
+ ;     ("_^" . ?\257)
+ ;     ("`A" . ?\300)
+ ;     ("`E" . ?\310)
+ ;     ("`I" . ?\314)
+ ;     ("`O" . ?\322)
+ ;     ("`U" . ?\331)
+ ;     ("`a" . ?\340)
+ ;     ("`e" . ?\350)
+ ;     ("`i" . ?\354)
+ ;     ("`o" . ?\362)
+ ;     ("`u" . ?\371)
+ ;     ("`y" . ?\335)
+ ;     ("a'" . ?\341)
+ ;     ("a*" . ?\345)
+ ;     ("a0" . ?\345)
+ ;     ("a\"" . ?\344)
+ ;     ("a^" . ?\342)
+ ;     ("a`" . ?\340)
+ ;     ("ae" . ?\346)
+ ;     ("a~" . ?\343)
+ ;     ("c," . ?\347)
+ ;     ("e'" . ?\351)
+ ;     ("e\"" . ?\353)
+ ;     ("e^" . ?\352)
+ ;     ("e`" . ?\350)
+ ;     ("i'" . ?\355)
+ ;     ("i\"" . ?\357)
+ ;     ("i^" . ?\356)
+ ;     ("i`" . ?\354)
+ ;     ("n~" . ?\361)
+ ;     ("o'" . ?\363)
+ ;     ("o/" . ?\330)
+ ;     ("o/" . ?\370)
+ ;     ("o\"" . ?\366)
+ ;     ("o^" . ?\364)
+ ;     ("o`" . ?\362)
+ ;     ("ox" . ?\244)
+ ;     ("o~" . ?\365)
+ ;     ("ss" . ?\337)
+ ;     ("u'" . ?\372)
+ ;     ("u\"" . ?\374)
+ ;     ("u^" . ?\373)
+ ;     ("u`" . ?\371)
+ ;     ("xo" . ?\244)
+ ;     ("y'" . ?\375)
+ ;     ("y\"" . ?\377)
+ ;     ("y`" . ?\335)
+ ;     ("|C" . ?\242)
+ ;     ("|c" . ?\242)
+ ;     ("||" . ?\246)
+ ;     ("~A" . ?\303)
+ ;     ("~N" . ?\321)
+ ;     ("~O" . ?\325)
+ ;     ("~a" . ?\343)
+ ;     ("~n" . ?\361)
+ ;     ("~o" . ?\365)
+ ;;     ("^ " . ?\...)
+ ;;     ("` " . ?\...)
+ ;    ))
+ ;  (setq minor-mode-alist (append minor-mode-alist '((ISO-text-mode " ISO" ))))
+ ;  (message "Building ISO-extension keymap... done.")
+ ;)
+ ;(defun ISO--augment-syntax-table ()
+ ;  "Augments the syntax table for the current buffer to treat ISO characters
+ ;as word constituents."
+ ;  (interactive)
+ ;  (let ((char))
+ ;    (for char 0300 0326			; Agrave..Odiaeresis
+ ;	 (modify-syntax-entry char "w"))
+ ;    (for char 0330 0366			; Oslash..odiaeresis
+ ;	 (modify-syntax-entry char "w"))
+ ;    (for char 0370 0377			; oslash..ydiaereses
+ ;	 (modify-syntax-entry char "w"))
+ ;    ))
+ 
+ ;; The following is the result from executing the above mapcar...
+ (setq ISO-ext-map (make-keymap))
+ (setq minor-mode-alist (append minor-mode-alist '((ISO-text-mode " ISO" ))))
+ (define-key ISO-ext-map "  " '(lambda (n) (interactive "p")
+   (insert-char  32 n))) 
+ (define-key ISO-ext-map "!!" '(lambda (n) (interactive "p")
+   (insert-char 161 n))) 
+ (define-key ISO-ext-map "!P" '(lambda (n) (interactive "p")
+   (insert-char 182 n))) 
+ (define-key ISO-ext-map "''" '(lambda (n) (interactive "p")
+   (insert-char 180 n))) 
+ (define-key ISO-ext-map "'A" '(lambda (n) (interactive "p")
+   (insert-char 193 n))) 
+ (define-key ISO-ext-map "'E" '(lambda (n) (interactive "p")
+   (insert-char 201 n))) 
+ (define-key ISO-ext-map "'I" '(lambda (n) (interactive "p")
+   (insert-char 205 n))) 
+ (define-key ISO-ext-map "'O" '(lambda (n) (interactive "p")
+   (insert-char 211 n))) 
+ (define-key ISO-ext-map "'U" '(lambda (n) (interactive "p")
+   (insert-char 218 n))) 
+ (define-key ISO-ext-map "'a" '(lambda (n) (interactive "p")
+   (insert-char 225 n))) 
+ (define-key ISO-ext-map "'e" '(lambda (n) (interactive "p")
+   (insert-char 233 n))) 
+ (define-key ISO-ext-map "'i" '(lambda (n) (interactive "p")
+   (insert-char 237 n))) 
+ (define-key ISO-ext-map "'o" '(lambda (n) (interactive "p")
+   (insert-char 243 n))) 
+ (define-key ISO-ext-map "'u" '(lambda (n) (interactive "p")
+   (insert-char 250 n))) 
+ (define-key ISO-ext-map "'y" '(lambda (n) (interactive "p")
+   (insert-char 253 n))) 
+ (define-key ISO-ext-map "((" '(lambda (n) (interactive "p")
+   (insert-char  91 n))) 
+ (define-key ISO-ext-map "(-" '(lambda (n) (interactive "p")
+   (insert-char 123 n))) 
+ (define-key ISO-ext-map "))" '(lambda (n) (interactive "p")
+   (insert-char  93 n))) 
+ (define-key ISO-ext-map "*A" '(lambda (n) (interactive "p")
+   (insert-char 197 n))) 
+ (define-key ISO-ext-map "*a" '(lambda (n) (interactive "p")
+   (insert-char 229 n))) 
+ (define-key ISO-ext-map "++" '(lambda (n) (interactive "p")
+   (insert-char  35 n))) 
+ (define-key ISO-ext-map "+-" '(lambda (n) (interactive "p")
+   (insert-char 177 n))) 
+ (define-key ISO-ext-map ",C" '(lambda (n) (interactive "p")
+   (insert-char 199 n))) 
+ (define-key ISO-ext-map ",c" '(lambda (n) (interactive "p")
+   (insert-char 231 n))) 
+ (define-key ISO-ext-map "-(" '(lambda (n) (interactive "p")
+   (insert-char 123 n))) 
+ (define-key ISO-ext-map "-+" '(lambda (n) (interactive "p")
+   (insert-char 177 n))) 
+ (define-key ISO-ext-map "-," '(lambda (n) (interactive "p")
+   (insert-char 172 n))) 
+ (define-key ISO-ext-map "--" '(lambda (n) (interactive "p")
+   (insert-char 173 n))) 
+ (define-key ISO-ext-map "-:" '(lambda (n) (interactive "p")
+   (insert-char 247 n))) 
+ (define-key ISO-ext-map "-L" '(lambda (n) (interactive "p")
+   (insert-char 163 n))) 
+ (define-key ISO-ext-map "-Y" '(lambda (n) (interactive "p")
+   (insert-char 165 n))) 
+ (define-key ISO-ext-map ".^" '(lambda (n) (interactive "p")
+   (insert-char 183 n))) 
+ (define-key ISO-ext-map "//" '(lambda (n) (interactive "p")
+   (insert-char  92 n))) 
+ (define-key ISO-ext-map "/<" '(lambda (n) (interactive "p")
+   (insert-char  92 n))) 
+ (define-key ISO-ext-map "/C" '(lambda (n) (interactive "p")
+   (insert-char 162 n))) 
+ (define-key ISO-ext-map "/O" '(lambda (n) (interactive "p")
+   (insert-char 216 n))) 
+ (define-key ISO-ext-map "/U" '(lambda (n) (interactive "p")
+   (insert-char 181 n))) 
+ (define-key ISO-ext-map "/^" '(lambda (n) (interactive "p")
+   (insert-char 124 n))) 
+ (define-key ISO-ext-map "/o" '(lambda (n) (interactive "p")
+   (insert-char 248 n))) 
+ (define-key ISO-ext-map "0A" '(lambda (n) (interactive "p")
+   (insert-char 197 n))) 
+ (define-key ISO-ext-map "0X" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "0X" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "0^" '(lambda (n) (interactive "p")
+   (insert-char 176 n))) 
+ (define-key ISO-ext-map "0a" '(lambda (n) (interactive "p")
+   (insert-char 229 n))) 
+ (define-key ISO-ext-map "12" '(lambda (n) (interactive "p")
+   (insert-char 189 n))) 
+ (define-key ISO-ext-map "14" '(lambda (n) (interactive "p")
+   (insert-char 188 n))) 
+ (define-key ISO-ext-map "1^" '(lambda (n) (interactive "p")
+   (insert-char 185 n))) 
+ (define-key ISO-ext-map "2^" '(lambda (n) (interactive "p")
+   (insert-char 178 n))) 
+ (define-key ISO-ext-map "34" '(lambda (n) (interactive "p")
+   (insert-char 190 n))) 
+ (define-key ISO-ext-map "3^" '(lambda (n) (interactive "p")
+   (insert-char 179 n))) 
+ (define-key ISO-ext-map ":-" '(lambda (n) (interactive "p")
+   (insert-char 247 n))) 
+ (define-key ISO-ext-map "<<" '(lambda (n) (interactive "p")
+   (insert-char 171 n))) 
+ (define-key ISO-ext-map "=L" '(lambda (n) (interactive "p")
+   (insert-char 163 n))) 
+ (define-key ISO-ext-map "=Y" '(lambda (n) (interactive "p")
+   (insert-char 165 n))) 
+ (define-key ISO-ext-map ">>" '(lambda (n) (interactive "p")
+   (insert-char 187 n))) 
+ (define-key ISO-ext-map "??" '(lambda (n) (interactive "p")
+   (insert-char 191 n))) 
+ (define-key ISO-ext-map "A'" '(lambda (n) (interactive "p")
+   (insert-char 193 n))) 
+ (define-key ISO-ext-map "A*" '(lambda (n) (interactive "p")
+   (insert-char 197 n))) 
+ (define-key ISO-ext-map "A0" '(lambda (n) (interactive "p")
+   (insert-char 197 n))) 
+ (define-key ISO-ext-map "AA" '(lambda (n) (interactive "p")
+   (insert-char  64 n))) 
+ (define-key ISO-ext-map "AE" '(lambda (n) (interactive "p")
+   (insert-char 198 n))) 
+ (define-key ISO-ext-map "A\"" '(lambda (n) (interactive "p")
+   (insert-char 196 n))) 
+ (define-key ISO-ext-map "A^" '(lambda (n) (interactive "p")
+   (insert-char 194 n))) 
+ (define-key ISO-ext-map "A_" '(lambda (n) (interactive "p")
+   (insert-char 170 n))) 
+ (define-key ISO-ext-map "A`" '(lambda (n) (interactive "p")
+   (insert-char 192 n))) 
+ (define-key ISO-ext-map "A~" '(lambda (n) (interactive "p")
+   (insert-char 195 n))) 
+ (define-key ISO-ext-map "C," '(lambda (n) (interactive "p")
+   (insert-char 199 n))) 
+ (define-key ISO-ext-map "C/" '(lambda (n) (interactive "p")
+   (insert-char 162 n))) 
+ (define-key ISO-ext-map "CO" '(lambda (n) (interactive "p")
+   (insert-char 169 n))) 
+ (define-key ISO-ext-map "C|" '(lambda (n) (interactive "p")
+   (insert-char 162 n))) 
+ (define-key ISO-ext-map "E'" '(lambda (n) (interactive "p")
+   (insert-char 201 n))) 
+ (define-key ISO-ext-map "E\"" '(lambda (n) (interactive "p")
+   (insert-char 203 n))) 
+ (define-key ISO-ext-map "E^" '(lambda (n) (interactive "p")
+   (insert-char 202 n))) 
+ (define-key ISO-ext-map "E`" '(lambda (n) (interactive "p")
+   (insert-char 200 n))) 
+ (define-key ISO-ext-map "I'" '(lambda (n) (interactive "p")
+   (insert-char 205 n))) 
+ (define-key ISO-ext-map "I\"" '(lambda (n) (interactive "p")
+   (insert-char 207 n))) 
+ (define-key ISO-ext-map "I^" '(lambda (n) (interactive "p")
+   (insert-char 206 n))) 
+ (define-key ISO-ext-map "I`" '(lambda (n) (interactive "p")
+   (insert-char 204 n))) 
+ (define-key ISO-ext-map "L-" '(lambda (n) (interactive "p")
+   (insert-char 163 n))) 
+ (define-key ISO-ext-map "L=" '(lambda (n) (interactive "p")
+   (insert-char 163 n))) 
+ (define-key ISO-ext-map "N~" '(lambda (n) (interactive "p")
+   (insert-char 209 n))) 
+ (define-key ISO-ext-map "O'" '(lambda (n) (interactive "p")
+   (insert-char 211 n))) 
+ (define-key ISO-ext-map "O/" '(lambda (n) (interactive "p")
+   (insert-char 216 n))) 
+ (define-key ISO-ext-map "OC" '(lambda (n) (interactive "p")
+   (insert-char 169 n))) 
+ (define-key ISO-ext-map "OR" '(lambda (n) (interactive "p")
+   (insert-char 174 n))) 
+ (define-key ISO-ext-map "O\"" '(lambda (n) (interactive "p")
+   (insert-char 214 n))) 
+ (define-key ISO-ext-map "O^" '(lambda (n) (interactive "p")
+   (insert-char 212 n))) 
+ (define-key ISO-ext-map "O_" '(lambda (n) (interactive "p")
+   (insert-char 186 n))) 
+ (define-key ISO-ext-map "O`" '(lambda (n) (interactive "p")
+   (insert-char 210 n))) 
+ (define-key ISO-ext-map "O~" '(lambda (n) (interactive "p")
+   (insert-char 213 n))) 
+ (define-key ISO-ext-map "P!" '(lambda (n) (interactive "p")
+   (insert-char 182 n))) 
+ (define-key ISO-ext-map "RO" '(lambda (n) (interactive "p")
+   (insert-char 174 n))) 
+ (define-key ISO-ext-map "S!" '(lambda (n) (interactive "p")
+   (insert-char 167 n))) 
+ (define-key ISO-ext-map "S0" '(lambda (n) (interactive "p")
+   (insert-char 167 n))) 
+ (define-key ISO-ext-map "SO" '(lambda (n) (interactive "p")
+   (insert-char 167 n))) 
+ (define-key ISO-ext-map "U'" '(lambda (n) (interactive "p")
+   (insert-char 218 n))) 
+ (define-key ISO-ext-map "U/" '(lambda (n) (interactive "p")
+   (insert-char 181 n))) 
+ (define-key ISO-ext-map "U\"" '(lambda (n) (interactive "p")
+   (insert-char 220 n))) 
+ (define-key ISO-ext-map "U^" '(lambda (n) (interactive "p")
+   (insert-char 219 n))) 
+ (define-key ISO-ext-map "U`" '(lambda (n) (interactive "p")
+   (insert-char 217 n))) 
+ (define-key ISO-ext-map "X0" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "XO" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "Y-" '(lambda (n) (interactive "p")
+   (insert-char 165 n))) 
+ (define-key ISO-ext-map "Y=" '(lambda (n) (interactive "p")
+   (insert-char 165 n))) 
+ (define-key ISO-ext-map "\"A" '(lambda (n) (interactive "p")
+   (insert-char 196 n))) 
+ (define-key ISO-ext-map "\"E" '(lambda (n) (interactive "p")
+   (insert-char 203 n))) 
+ (define-key ISO-ext-map "\"I" '(lambda (n) (interactive "p")
+   (insert-char 207 n))) 
+ (define-key ISO-ext-map "\"O" '(lambda (n) (interactive "p")
+   (insert-char 214 n))) 
+ (define-key ISO-ext-map "\"U" '(lambda (n) (interactive "p")
+   (insert-char 220 n))) 
+ (define-key ISO-ext-map "\"\"" '(lambda (n) (interactive "p")
+   (insert-char 168 n))) 
+ (define-key ISO-ext-map "\"a" '(lambda (n) (interactive "p")
+   (insert-char 228 n))) 
+ (define-key ISO-ext-map "\"e" '(lambda (n) (interactive "p")
+   (insert-char 235 n))) 
+ (define-key ISO-ext-map "\"i" '(lambda (n) (interactive "p")
+   (insert-char 239 n))) 
+ (define-key ISO-ext-map "\"o" '(lambda (n) (interactive "p")
+   (insert-char 246 n))) 
+ (define-key ISO-ext-map "\"u" '(lambda (n) (interactive "p")
+   (insert-char 252 n))) 
+ (define-key ISO-ext-map "\"y" '(lambda (n) (interactive "p")
+   (insert-char 255 n))) 
+ (define-key ISO-ext-map "^." '(lambda (n) (interactive "p")
+   (insert-char 183 n))) 
+ (define-key ISO-ext-map "^/" '(lambda (n) (interactive "p")
+   (insert-char 124 n))) 
+ (define-key ISO-ext-map "^0" '(lambda (n) (interactive "p")
+   (insert-char 176 n))) 
+ (define-key ISO-ext-map "^1" '(lambda (n) (interactive "p")
+   (insert-char 185 n))) 
+ (define-key ISO-ext-map "^2" '(lambda (n) (interactive "p")
+   (insert-char 178 n))) 
+ (define-key ISO-ext-map "^3" '(lambda (n) (interactive "p")
+   (insert-char 179 n))) 
+ (define-key ISO-ext-map "^A" '(lambda (n) (interactive "p")
+   (insert-char 194 n))) 
+ (define-key ISO-ext-map "^E" '(lambda (n) (interactive "p")
+   (insert-char 202 n))) 
+ (define-key ISO-ext-map "^I" '(lambda (n) (interactive "p")
+   (insert-char 206 n))) 
+ (define-key ISO-ext-map "^O" '(lambda (n) (interactive "p")
+   (insert-char 212 n))) 
+ (define-key ISO-ext-map "^U" '(lambda (n) (interactive "p")
+   (insert-char 219 n))) 
+ (define-key ISO-ext-map "^_" '(lambda (n) (interactive "p")
+   (insert-char 175 n))) 
+ (define-key ISO-ext-map "^a" '(lambda (n) (interactive "p")
+   (insert-char 226 n))) 
+ (define-key ISO-ext-map "^e" '(lambda (n) (interactive "p")
+   (insert-char 234 n))) 
+ (define-key ISO-ext-map "^i" '(lambda (n) (interactive "p")
+   (insert-char 238 n))) 
+ (define-key ISO-ext-map "^o" '(lambda (n) (interactive "p")
+   (insert-char 244 n))) 
+ (define-key ISO-ext-map "^u" '(lambda (n) (interactive "p")
+   (insert-char 251 n))) 
+ (define-key ISO-ext-map "_A" '(lambda (n) (interactive "p")
+   (insert-char 170 n))) 
+ (define-key ISO-ext-map "_O" '(lambda (n) (interactive "p")
+   (insert-char 186 n))) 
+ (define-key ISO-ext-map "_^" '(lambda (n) (interactive "p")
+   (insert-char 175 n))) 
+ (define-key ISO-ext-map "`A" '(lambda (n) (interactive "p")
+   (insert-char 192 n))) 
+ (define-key ISO-ext-map "`E" '(lambda (n) (interactive "p")
+   (insert-char 200 n))) 
+ (define-key ISO-ext-map "`I" '(lambda (n) (interactive "p")
+   (insert-char 204 n))) 
+ (define-key ISO-ext-map "`O" '(lambda (n) (interactive "p")
+   (insert-char 210 n))) 
+ (define-key ISO-ext-map "`U" '(lambda (n) (interactive "p")
+   (insert-char 217 n))) 
+ (define-key ISO-ext-map "`a" '(lambda (n) (interactive "p")
+   (insert-char 224 n))) 
+ (define-key ISO-ext-map "`e" '(lambda (n) (interactive "p")
+   (insert-char 232 n))) 
+ (define-key ISO-ext-map "`i" '(lambda (n) (interactive "p")
+   (insert-char 236 n))) 
+ (define-key ISO-ext-map "`o" '(lambda (n) (interactive "p")
+   (insert-char 242 n))) 
+ (define-key ISO-ext-map "`u" '(lambda (n) (interactive "p")
+   (insert-char 249 n))) 
+ (define-key ISO-ext-map "`y" '(lambda (n) (interactive "p")
+   (insert-char 221 n))) 
+ (define-key ISO-ext-map "a'" '(lambda (n) (interactive "p")
+   (insert-char 225 n))) 
+ (define-key ISO-ext-map "a*" '(lambda (n) (interactive "p")
+   (insert-char 229 n))) 
+ (define-key ISO-ext-map "a0" '(lambda (n) (interactive "p")
+   (insert-char 229 n))) 
+ (define-key ISO-ext-map "a\"" '(lambda (n) (interactive "p")
+   (insert-char 228 n))) 
+ (define-key ISO-ext-map "a^" '(lambda (n) (interactive "p")
+   (insert-char 226 n))) 
+ (define-key ISO-ext-map "a`" '(lambda (n) (interactive "p")
+   (insert-char 224 n))) 
+ (define-key ISO-ext-map "ae" '(lambda (n) (interactive "p")
+   (insert-char 230 n))) 
+ (define-key ISO-ext-map "a~" '(lambda (n) (interactive "p")
+   (insert-char 227 n))) 
+ (define-key ISO-ext-map "c," '(lambda (n) (interactive "p")
+   (insert-char 231 n))) 
+ (define-key ISO-ext-map "e'" '(lambda (n) (interactive "p")
+   (insert-char 233 n))) 
+ (define-key ISO-ext-map "e\"" '(lambda (n) (interactive "p")
+   (insert-char 235 n))) 
+ (define-key ISO-ext-map "e^" '(lambda (n) (interactive "p")
+   (insert-char 234 n))) 
+ (define-key ISO-ext-map "e`" '(lambda (n) (interactive "p")
+   (insert-char 232 n))) 
+ (define-key ISO-ext-map "i'" '(lambda (n) (interactive "p")
+   (insert-char 237 n))) 
+ (define-key ISO-ext-map "i\"" '(lambda (n) (interactive "p")
+   (insert-char 239 n))) 
+ (define-key ISO-ext-map "i^" '(lambda (n) (interactive "p")
+   (insert-char 238 n))) 
+ (define-key ISO-ext-map "i`" '(lambda (n) (interactive "p")
+   (insert-char 236 n))) 
+ (define-key ISO-ext-map "n~" '(lambda (n) (interactive "p")
+   (insert-char 241 n))) 
+ (define-key ISO-ext-map "o'" '(lambda (n) (interactive "p")
+   (insert-char 243 n))) 
+ (define-key ISO-ext-map "o/" '(lambda (n) (interactive "p")
+   (insert-char 216 n))) 
+ (define-key ISO-ext-map "o/" '(lambda (n) (interactive "p")
+   (insert-char 248 n))) 
+ (define-key ISO-ext-map "o\"" '(lambda (n) (interactive "p")
+   (insert-char 246 n))) 
+ (define-key ISO-ext-map "o^" '(lambda (n) (interactive "p")
+   (insert-char 244 n))) 
+ (define-key ISO-ext-map "o`" '(lambda (n) (interactive "p")
+   (insert-char 242 n))) 
+ (define-key ISO-ext-map "ox" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "o~" '(lambda (n) (interactive "p")
+   (insert-char 245 n))) 
+ (define-key ISO-ext-map "ss" '(lambda (n) (interactive "p")
+   (insert-char 223 n))) 
+ (define-key ISO-ext-map "u'" '(lambda (n) (interactive "p")
+   (insert-char 250 n))) 
+ (define-key ISO-ext-map "u\"" '(lambda (n) (interactive "p")
+   (insert-char 252 n))) 
+ (define-key ISO-ext-map "u^" '(lambda (n) (interactive "p")
+   (insert-char 251 n))) 
+ (define-key ISO-ext-map "u`" '(lambda (n) (interactive "p")
+   (insert-char 249 n))) 
+ (define-key ISO-ext-map "xo" '(lambda (n) (interactive "p")
+   (insert-char 164 n))) 
+ (define-key ISO-ext-map "y'" '(lambda (n) (interactive "p")
+   (insert-char 253 n))) 
+ (define-key ISO-ext-map "y\"" '(lambda (n) (interactive "p")
+   (insert-char 255 n))) 
+ (define-key ISO-ext-map "y`" '(lambda (n) (interactive "p")
+   (insert-char 221 n))) 
+ (define-key ISO-ext-map "|C" '(lambda (n) (interactive "p")
+   (insert-char 162 n))) 
+ (define-key ISO-ext-map "|c" '(lambda (n) (interactive "p")
+   (insert-char 162 n))) 
+ (define-key ISO-ext-map "||" '(lambda (n) (interactive "p")
+   (insert-char 166 n))) 
+ (define-key ISO-ext-map "~A" '(lambda (n) (interactive "p")
+   (insert-char 195 n))) 
+ (define-key ISO-ext-map "~N" '(lambda (n) (interactive "p")
+   (insert-char 209 n))) 
+ (define-key ISO-ext-map "~O" '(lambda (n) (interactive "p")
+   (insert-char 213 n))) 
+ (define-key ISO-ext-map "~a" '(lambda (n) (interactive "p")
+   (insert-char 227 n))) 
+ (define-key ISO-ext-map "~n" '(lambda (n) (interactive "p")
+   (insert-char 241 n))) 
+ (define-key ISO-ext-map "~o" '(lambda (n) (interactive "p")
+   (insert-char 245 n)))
+ (define-key ISO-ext-map "\e " '(lambda (n) (interactive "p")
+   (insert-char 160 n)))
+ 
+ ;; This is also expanded
+ (defun ISO--augment-syntax-table ()
+   "Augments the syntax table for the current buffer to treat ISO characters
+ as word constituents."
+   (interactive)
+   (modify-syntax-entry ?\300 "w")	; Agrave
+   (modify-syntax-entry ?\301 "w")	; Aacute
+   (modify-syntax-entry ?\302 "w")	; Acircumflex
+   (modify-syntax-entry ?\303 "w")	; Atilde
+   (modify-syntax-entry ?\304 "w")	; Adiaeresis
+   (modify-syntax-entry ?\305 "w")	; Aring
+   (modify-syntax-entry ?\306 "w")	; AE
+   (modify-syntax-entry ?\307 "w")	; Ccedilla
+   (modify-syntax-entry ?\310 "w")	; Egrave
+   (modify-syntax-entry ?\311 "w")	; Eacute
+   (modify-syntax-entry ?\312 "w")	; Ecircumflex
+   (modify-syntax-entry ?\313 "w")	; Ediaeresis
+   (modify-syntax-entry ?\314 "w")	; Igrave
+   (modify-syntax-entry ?\315 "w")	; Iacute
+   (modify-syntax-entry ?\316 "w")	; Icircumflex
+   (modify-syntax-entry ?\317 "w")	; Idiaeresis
+   (modify-syntax-entry ?\320 "w")	; Eth
+   (modify-syntax-entry ?\321 "w")	; Ntilde
+   (modify-syntax-entry ?\322 "w")	; Ograve
+   (modify-syntax-entry ?\323 "w")	; Oacute
+   (modify-syntax-entry ?\324 "w")	; Ocircumflex
+   (modify-syntax-entry ?\325 "w")	; Otilde
+   (modify-syntax-entry ?\326 "w")	; Odiaeresis
+   (modify-syntax-entry ?\327 "_")	; Multiply
+   (modify-syntax-entry ?\330 "w")	; Oslash
+   (modify-syntax-entry ?\331 "w")	; Ugrave
+   (modify-syntax-entry ?\332 "w")	; Uacute
+   (modify-syntax-entry ?\333 "w")	; Ucircumflex
+   (modify-syntax-entry ?\334 "w")	; Udiaeresis
+   (modify-syntax-entry ?\335 "w")	; Yacute
+   (modify-syntax-entry ?\336 "w")	; Thorn
+   (modify-syntax-entry ?\337 "w")	; ssharp
+   (modify-syntax-entry ?\340 "w")	; agrave
+   (modify-syntax-entry ?\341 "w")	; aacute
+   (modify-syntax-entry ?\342 "w")	; acircumflex
+   (modify-syntax-entry ?\343 "w")	; atilde
+   (modify-syntax-entry ?\344 "w")	; adiaeresis
+   (modify-syntax-entry ?\345 "w")	; aring
+   (modify-syntax-entry ?\346 "w")	; ae
+   (modify-syntax-entry ?\347 "w")	; ccedilla
+   (modify-syntax-entry ?\350 "w")	; egrave
+   (modify-syntax-entry ?\351 "w")	; eacute
+   (modify-syntax-entry ?\352 "w")	; ecircumflex
+   (modify-syntax-entry ?\353 "w")	; ediaeresis
+   (modify-syntax-entry ?\354 "w")	; igrave
+   (modify-syntax-entry ?\355 "w")	; iacute
+   (modify-syntax-entry ?\356 "w")	; icircumflex
+   (modify-syntax-entry ?\357 "w")	; idiaeresis
+   (modify-syntax-entry ?\360 "w")	; eth
+   (modify-syntax-entry ?\361 "w")	; ntilde
+   (modify-syntax-entry ?\362 "w")	; ograve
+   (modify-syntax-entry ?\363 "w")	; oacute
+   (modify-syntax-entry ?\364 "w")	; ocircumflex
+   (modify-syntax-entry ?\365 "w")	; otilde
+   (modify-syntax-entry ?\366 "w")	; odiaeresis
+   (modify-syntax-entry ?\367 "_")	; Division
+   (modify-syntax-entry ?\370 "w")	; oslash
+   (modify-syntax-entry ?\371 "w")	; ugrave
+   (modify-syntax-entry ?\372 "w")	; uacute
+   (modify-syntax-entry ?\373 "w")	; ucircumflex
+   (modify-syntax-entry ?\374 "w")	; udiaeresis
+   (modify-syntax-entry ?\375 "w")	; yacute
+   (modify-syntax-entry ?\376 "w")	; thorn
+   (modify-syntax-entry ?\377 "w")	; ydiaeresis
+ )
*** /dev/null	Mon Mar  2 08:38:04 1992
--- el-accents.el	Mon Mar  2 10:16:57 1992
***************
*** 0 ****
--- 1,118 ----
+ ;; el-accents.el -- electric accent keys
+ ;;
+ ;; SCCS Status     : @(#)@ el-accents.el	1.3
+ ;; Author          : Johan Vromans
+ ;; Created On      : Tue Feb  5 09:58:05 1991
+ ;; Last Modified By: Johan Vromans
+ ;; Last Modified On: Tue Oct 15 18:39:07 1991
+ ;; Update Count    : 4
+ ;; Status          : OK
+ ;;
+ ;; Use pseudo-accents to allow "dead keys" like a typewriter.
+ ;;
+ ;; Pseudo-accents are:
+ ;;
+ ;;   '  (minute)    -> grave accent
+ ;;   `  (backtick)  -> acute accent
+ ;;   "  (second)    -> diaeresis
+ ;;   ^  (caret)     -> circonflexe
+ ;;
+ ;; 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
+ ;;
+ ;; Function "electric-accents" can be used to enable the dead keys, or
+ ;; disable them if called with a non-null argument.
+ ;;
+ ;; The inserted codes are conformant to the ISO Latin-1 alphabeth.
+ ;;
+ ;; Thanks to: Dale <drw@math.mit.edu>
+ ;;
+ (defvar electric-accent-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)
+  ))
+ 
+ (defun 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-char))
+ 	   (entry (assoc (list first-char second-char) electric-accent-list)))
+       (if entry
+ 	  ;; If it's OK, delete the first character and insert the combination
+ 	  (progn
+ 	    (delete-char 1)
+ 	    (insert (car (cdr entry))))
+ 	;; Otherwise, advance and execute the second key
+ 	(forward-char 1)
+ 	(setq unread-command-char second-char)))))
+ 
+ (defun electric-accents (&optional arg)
+   "Have the pseudo-accent keys behave like dead typewriter
+ keys. With ARG, make them normal again."
+   (interactive "P")
+   (if arg
+       (progn
+ 	(local-unset-key "'")
+ 	(local-unset-key "`")
+ 	(local-unset-key "\"")
+ 	(local-unset-key "^"))
+     (local-set-key "'"  'dead-key)
+     (local-set-key "`"  'dead-key)
+     (local-set-key "^"  'dead-key)
+     (local-set-key "\"" 'dead-key)))
-- 
Johan Vromans				       jv@mh.nl via internet backbones
Multihouse Automatisering bv		       uucp:..!{uunet,sun4nl}!mh.nl!jv
Doesburgweg 7, 2803 PL Gouda, The Netherlands  phone/fax: +31 1820 62911/62500
------------------------ "Arms are made for hugging" -------------------------
