about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--CHANGES10
-rwxr-xr-xPACKAGE/debian/rules2
-rw-r--r--lynx_help/about_lynx.html27
-rw-r--r--lynx_help/lynx_help_main.html76
-rwxr-xr-xscripts/indent.sh5
-rw-r--r--src/LYCurses.c10
-rw-r--r--src/LYEditmap.c44
-rw-r--r--src/LYKeymap.c1371
-rw-r--r--src/LYKeymap.h10
-rw-r--r--src/LYMain.c10
-rw-r--r--src/LYMainLoop.c22
-rw-r--r--src/LYStrings.c3
-rw-r--r--src/LYStrings.h6
13 files changed, 673 insertions, 923 deletions
diff --git a/CHANGES b/CHANGES
index ce1cfeb1..8e09aa0f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,9 +1,11 @@
--- $LynxId: CHANGES,v 1.689 2013/10/19 12:11:03 tom Exp $
+-- $LynxId: CHANGES,v 1.692 2013/10/20 21:59:40 tom Exp $
 ===============================================================================
 Changes since Lynx 2.8 release
 ===============================================================================
 
-2013-10-19 (2.8.8dev.17)
+2013-10-20 (2.8.8dev.17)
+* updates for lynx_help_main.html -TD
+* update URLs in about_lynx.html -TD
 * add internal URL "LYNXEDITMAP:", which is (like "LYNXKEYMAP:") generated,
   making that the primary page for field-editing help -TD
 * improve DOSPATH-related logic in HomeEnv(), making this work properly with
@@ -22,8 +24,8 @@ Changes since Lynx 2.8 release
   function keys 2-12, to improve keymap-configurability -TD
 * change extra-key #define's in LYStrings.h to enum -TD
 * cleanup pre-2.7 debris from LYStrings.c and LYStrings.h -TD
-* modify tables for edit-bindings to allow them to be reloaded to their initial
-  values -TD
+* modify tables for key-bindings and edit-bindings to allow them to be reloaded
+  to their initial values -TD
 * add check in get_connection() for ftp-connections to ensure that a password
   from a URL is non-empty -TD
 * add samples/oldlynx.bat to demonstrate how to use non-color-style -TD
diff --git a/PACKAGE/debian/rules b/PACKAGE/debian/rules
index ceb4e199..3b214a37 100755
--- a/PACKAGE/debian/rules
+++ b/PACKAGE/debian/rules
@@ -171,7 +171,7 @@ binary-arch: build install
 	dh_install
 	dh_link
 	dh_strip
-	dh_compress
+	dh_compress -XCOPY
 	dh_fixperms
 	dh_installdeb
 	dh_shlibdeps
diff --git a/lynx_help/about_lynx.html b/lynx_help/about_lynx.html
index e740aca2..8063f90b 100644
--- a/lynx_help/about_lynx.html
+++ b/lynx_help/about_lynx.html
@@ -1,4 +1,4 @@
-<!-- $LynxId: about_lynx.html,v 1.18 2013/05/22 00:57:45 tom Exp $ -->
+<!-- $LynxId: about_lynx.html,v 1.19 2013/10/20 19:07:10 tom Exp $ -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 
 <html>
@@ -36,21 +36,22 @@
 
   <p>Lynx was a product of the Distributed Computing Group within
   Academic Computing Services of <a href=
-  "http://www.cc.ukans.edu/">The University of Kansas</a>.</p>
+  "http://web.archive.org/web/19971210163627/http://www.cc.ukans.edu/">
+  The University of Kansas</a>.</p>
 
   <p>Lynx was originally developed by <a href=
-  "http://www.cc.ukans.edu/cwis/people/Lou.Montulli.html">Lou
-  Montulli</a>, <a href="http://www.cc.ku.edu/~grobe/">Michael
-  Grobe</a>, and <a href=
-  "http://www.cc.ukans.edu/cwis/people/Charles.Rezac.html">Charles
-  Rezac</a>. <a href=
-  "http://www.cc.ukans.edu/cwis/people/Garrett/Garrett_Arch_Blythe.html">
+  "http://web.archive.org/web/20040309105337/http://www.cc.ukans.edu/cwis/people/Lou.Montulli.html">
+  Lou Montulli</a>, <a href=
+  "http://condor.cc.ku.edu/~grobe/">Michael Grobe</a>, and <a href=
+  "http://web.archive.org/web/20040412210202/http://www.cc.ukans.edu/cwis/people/Charles.Rezac.html">
+  Charles Rezac</a>. <a href=
+  "http://web.archive.org/web/20040412210651/http://www.cc.ukans.edu/cwis/people/Garrett/Garrett_Arch_Blythe.html">
   Garrett Blythe</a> created <a href=
-  "http://www.cc.ukans.edu/about_doslynx/doslynx.html">DosLynx</a>
-  and later joined the Lynx effort as well. Following the
-  departures of Lou and Garrett for positions at Netscape in the
-  summer of 1994, <em>Craig Lavender</em> provided support services
-  for Lynx, and <em>Ravikumar Kolli</em> for DosLynx.</p>
+  "http://web.archive.org/web/20040812204015/http://www.cc.ukans.edu/about_doslynx/doslynx.html">
+  DosLynx</a> and later joined the Lynx effort as well. Following
+  the departures of Lou and Garrett for positions at Netscape in
+  the summer of 1994, <em>Craig Lavender</em> provided support
+  services for Lynx, and <em>Ravikumar Kolli</em> for DosLynx.</p>
 
   <p>Lynx is maintained and supported by members of the Internet
   community coordinated via the <a href=
diff --git a/lynx_help/lynx_help_main.html b/lynx_help/lynx_help_main.html
index b8494de8..1a1f5df7 100644
--- a/lynx_help/lynx_help_main.html
+++ b/lynx_help/lynx_help_main.html
@@ -1,4 +1,4 @@
-<!-- $LynxId: lynx_help_main.html,v 1.40 2013/05/22 00:56:39 tom Exp $ -->
+<!-- $LynxId: lynx_help_main.html,v 1.46 2013/10/20 18:42:32 tom Exp $ -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 
 <html>
@@ -58,17 +58,20 @@
   <h2>World Wide Web Consortium documents:</h2>
 
   <ul>
-    <li>HTML &mdash; <a href=
-    "http://www.w3.org/TR/REC-html40/">4.0</a> &mdash; <a href=
-    "http://www.w3.org/MarkUp/">3.2</a> &mdash; <a href=
-    "http://www.w3.org/MarkUp/html3/Contents.html">3.0</a> &mdash;
-    <a href=
+    <li>HTML &mdash; <a href="http://www.w3.org/TR/html51/">5.1</a>
+    &mdash; <a href="http://www.w3.org/TR/REC-html40/">4.0</a>
+    &mdash; <a href="http://www.w3.org/MarkUp/">3.2</a> &mdash;
+    <a href="http://www.w3.org/MarkUp/html3/Contents.html">3.0</a>
+    &mdash; <a href=
     "http://www.w3.org/MarkUp/html-spec/html-spec_toc.html">2.0</a></li>
 
     <li>HTTP &mdash; <a href="http://www.w3.org/Protocols/">1.1</a>
     &mdash; <a href=
     "http://www.isi.edu/in-notes/rfc1945.txt">1.0</a></li>
 
+    <li>XHTML &mdash; <a href=
+    "http://www.w3.org/TR/xhtml1/">1.0</a></li>
+
     <li><a href="http://www.w3.org/Addressing/">Web Naming &amp;
     Addressing Overview: URIs, URLs etc</a></li>
 
@@ -86,12 +89,17 @@
     4.0 Reference</a></li>
 
     <li><a href=
-    "http://archive.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html">
-    NCSA Beginner's Guide To HTML</a></li>
+    "http://www.w3schools.com/html/default.asp">W3Schools</a></li>
+
+    <li><a href="http://www.htmlgoodies.com/primers/html/">HTML
+    Goodies</a></li>
+
+    <li><a href="http://www.htmlcodetutorial.com/">HTML Code
+    Tutorial</a></li>
 
     <li><a href=
-    "http://www.ku.edu/acs/documentation/docs/html_quick.shtml">HTML
-    Quick Reference Guide</a></li>
+    "http://www.simplehtmlguide.com/cheatsheet.php">HTML Cheat
+    Sheet &ndash; A Simple Guide to HTML</a></li>
   </ul>
 
   <h2>HTML validation services:</h2>
@@ -107,11 +115,11 @@
   <h2>Other browsing software:</h2>
 
   <ul>
-    <li><a href="http://wget.sunsite.dk/">GNU wget</a> &mdash;
-    powerful &amp; flexible non-interactive downloader</li>
+    <li><a href="http://wget.addictivecode.org/">GNU wget</a>
+    &mdash; powerful &amp; flexible non-interactive downloader</li>
 
-    <li><a href="http://www.idata.sk/~ondrej/pavuk/">Pavuk</a>
-    &mdash; powerful &amp; an even more-featured downloader</li>
+    <li><a href="http://www.pavuk.org/">Pavuk</a> &mdash; powerful
+    &amp; an even more-featured downloader</li>
 
     <li><a href="http://curl.haxx.se/">cURL</a> &mdash;
     non-interactive downloader which supports HTTPS</li>
@@ -120,32 +128,40 @@
     small simple 1-file non-interactive downloader</li>
   </ul>
 
-  <h2>Meta-indexes: lists of links</h2>
+  <h2>Historical interest</h2>
 
   <ul>
     <li><a href=
-    "http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html">
+    "http://web.archive.org/web/2005050785333/http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html">
     NCSA Mosaic</a></li>
   </ul>
 
   <h2>Search engines:</h2>
 
   <ul>
-    <li><a href="http://www.alltheweb.com/">AlltheWeb.com</a></li>
-
-    <li><a href="http://www.altavista.com/">AltaVista</a></li>
+    <!-- all usable with Lynx as of 2013/10/20 -->
 
     <li><a href="http://www.ask.com/">Ask.com</a></li>
 
-    <li><a href="http://www.excite.com/">Excite</a></li>
+    <li><a href="http://www.baidu.com/">Baidu</a> (Chinese)</li>
 
-    <li><a href="http://www.go.com/">GO.com</a></li>
+    <li><a href="http://www.bing.com/">Bing</a></li>
+
+    <li><a href="http://www.dogpile.com/">Dogpile</a></li>
+
+    <li><a href="http://labs.goo.ne.jp/">goo</a> (Japanese)</li>
 
     <li><a href="http://www.google.com/">Google</a></li>
 
-    <li><a href="http://search.lycos.com/">Lycos</a></li>
+    <li><a href="http://hakia.com/">Hakia</a></li>
+
+    <li><a href="http://www.icerocket.com/">IceRocket</a></li>
+
+    <li><a href="http://indeed.com/">Indeed</a></li>
 
-    <li><a href="http://www.metacrawler.com/">MetaCrawler</a></li>
+    <li><a href="http://www.lexxe.com/">Lexxe</a></li>
+
+    <li><a href="http://www.rambler.ru/">Rambler</a> (Russian)</li>
 
     <li><a href="http://www.search.com/">Search.com</a></li>
 
@@ -156,19 +172,5 @@
     <li><a href="http://www.yahoo.com/">Yahoo!</a></li>
   </ul>
 
-  <h2>Free WWW E-mail services:</h2>
-
-  <ul>
-    <li><a href="http://www.eudoramail.com/">Eudora
-    Web-Mail</a></li>
-
-    <li><a href="http://www.excite.com/">Excite Inbox</a></li>
-
-    <li><a href="http://www.hotmail.com/">Hotmail</a></li>
-
-    <li><a href="http://www.netaddress.com/">Net@ddress</a></li>
-
-    <li><a href="http://mail.yahoo.com/">Yahoo! Mail</a></li>
-  </ul>
 </body>
 </html>
diff --git a/scripts/indent.sh b/scripts/indent.sh
index 899870de..ca06d26f 100755
--- a/scripts/indent.sh
+++ b/scripts/indent.sh
@@ -1,6 +1,7 @@
 #!/bin/sh
-# $LynxId: indent.sh,v 1.3 2007/05/13 16:26:51 tom Exp $
-# Indent LYNX files.
+# $LynxId: indent.sh,v 1.4 2013/10/20 19:34:35 tom Exp $
+# Indent LYNX files (for reference).  See "lnx-indent" from
+#	http://invisible-island.net/cindent/
 NOOP=no
 OPTS='
 --blank-lines-after-declarations
diff --git a/src/LYCurses.c b/src/LYCurses.c
index 28a0ff19..1f9c7a00 100644
--- a/src/LYCurses.c
+++ b/src/LYCurses.c
@@ -1,4 +1,4 @@
-/* $LynxId: LYCurses.c,v 1.175 2013/10/02 14:35:56 tom Exp $ */
+/* $LynxId: LYCurses.c,v 1.177 2013/10/20 16:24:43 tom Exp $ */
 #include <HTUtils.h>
 #include <HTAlert.h>
 
@@ -58,6 +58,10 @@ int lynx_has_color = FALSE;
 char *XCursesProgramName = "Lynx";
 #endif
 
+#ifdef PDCURSES
+#undef HAVE_NEWTERM		/* not needed, since /dev/tty is unused */
+#endif
+
 #if defined(USE_COLOR_STYLE) && !defined(USE_COLOR_TABLE)
 #define COLOR_BKGD ((s_normal != NOSTYLE) ? hashStyles[s_normal].color : A_NORMAL)
 #else
@@ -922,7 +926,7 @@ static SCREEN *LYscreen = NULL;
 
 #define LYDELSCR()		/* ncurses does not need this */
 
-#elif defined(HAVE_NEWTERM) && defined(HAVE_DELSCREEN) && !defined(PDCURSES)
+#elif defined(HAVE_NEWTERM) && defined(HAVE_DELSCREEN)
 
 static SCREEN *LYscreen = NULL;
 
@@ -1407,7 +1411,7 @@ void start_curses(void)
 	    endwin();
 	    exit_immediately(EXIT_FAILURE);
 	}
-#endif
+#endif /* ncurses-keymaps */
 
 	/*
 	 * This is a workaround for a bug in SVr4 curses, observed on Solaris
diff --git a/src/LYEditmap.c b/src/LYEditmap.c
index 8f94fce3..7786f508 100644
--- a/src/LYEditmap.c
+++ b/src/LYEditmap.c
@@ -1,5 +1,5 @@
 /*
- * $LynxId: LYEditmap.c,v 1.68 2013/10/19 20:04:16 tom Exp $
+ * $LynxId: LYEditmap.c,v 1.71 2013/10/20 20:03:24 tom Exp $
  *
  * LYEditMap.c
  * Keybindings for line and form editing.
@@ -106,11 +106,11 @@ static struct emap ekmap[] = {
 #undef SEPARATOR
 /* *INDENT-ON* */
 
-static LYEditCode DefaultEditBinding[KEYMAP_SIZE - 1];
+static LYEditCode DefaultEditBinding[KEYMAP_SIZE];
 
 #ifdef USE_ALT_BINDINGS
-static LYEditCode BetterEditBinding[KEYMAP_SIZE - 1];
-static LYEditCode BashlikeEditBinding[KEYMAP_SIZE - 1];
+static LYEditCode BetterEditBinding[KEYMAP_SIZE];
+static LYEditCode BashlikeEditBinding[KEYMAP_SIZE];
 
 /*
  * If a modifier bit is set in a lynxkeycode, it is first looked up here.
@@ -121,7 +121,7 @@ static LYEditCode BashlikeEditBinding[KEYMAP_SIZE - 1];
  * effect only for those Bindings that map a lynxkeycode to LYE_SETMn.  ( This
  * doesn't apply if the modifier is already being set in LYgetch().  ) - kw
  */
-static LYEditCode Mod1Binding[KEYMAP_SIZE - 1];
+static LYEditCode Mod1Binding[KEYMAP_SIZE];
 
 /*  Two more tables here, but currently they are all the same.
     In other words, we are cheating to save space, until there
@@ -1248,7 +1248,7 @@ static struct emap *name2emap(const char *name)
 
     if (non_empty(name)) {
 	for (mp = ekmap; mp->name != NULL; mp++) {
-	    if (strcmp(mp->name, name) == 0) {
+	    if (strcasecomp(mp->name, name) == 0) {
 		result = mp;
 		break;
 	    }
@@ -1359,7 +1359,7 @@ BOOL LYRemapEditBinding(int xlkc,
     int c = xlkc & LKC_MASK;
     BOOLEAN success = FALSE;
 
-    if (xlkc >= 0 && !(xlkc & LKC_ISLAC) && (c < KEYMAP_SIZE + 1)) {
+    if (xlkc >= 0 && !(xlkc & LKC_ISLAC) && (c < KEYMAP_SIZE)) {
 	LYEditCode code = (LYEditCode) lec;
 
 #ifdef USE_ALT_BINDINGS
@@ -1422,7 +1422,7 @@ int LYKeyForEditAction(int lec)
 {
     int editaction, i;
 
-    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 2)) {
+    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 1)) {
 	editaction = CurrentLineEditor()[i];
 	if (editaction == lec) {
 #ifdef NOT_ASCII
@@ -1457,7 +1457,7 @@ int LYEditKeyForAction(int lac,
 
     if (pmodkey)
 	*pmodkey = -1;
-    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 2)) {
+    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 1)) {
 	editaction = CurrentLineEditor()[i];
 #ifdef NOT_ASCII
 	if (i < 256) {
@@ -1613,18 +1613,6 @@ int LYEditKeyForAction(int lac,
     return (-1);
 }
 
-/*
- * Dummy initializer to ensure this module is linked
- * if the external model is common block, and the
- * module is ever placed in a library. - FM
- */
-int LYEditmapDeclared(void)
-{
-    int status = 1;
-
-    return status;
-}
-
 #if 0
 /*
  * This function was useful in converting the hand-crafted key-bindings to
@@ -1650,7 +1638,7 @@ static void checkEditMap(LYEditConfig * table)
 		   table->used[code]);
 	}
     }
-    for (j = 0; j < KEYMAP_SIZE - 1; ++j) {
+    for (j = 0; j < KEYMAP_SIZE; ++j) {
 	int code = (int) j;
 	BOOL found = FALSE;
 
@@ -1716,7 +1704,7 @@ static void checkEditMap(LYEditConfig * table)
 		}
 		if (name == 0) {
 		    name = "XXX";
-		} else if (!strcmp(name, "PASS")) {
+		} else if (!strcasecomp(name, "PASS")) {
 		    name = "FORM_PASS";
 		}
 		if (first) {
@@ -1742,7 +1730,7 @@ static void initLineEditor(LYEditConfig * table)
     LYEditCode *used = table->used;
     const LYEditInit *init = table->init;
 
-    memset(used, 0, sizeof(LYEditCode) * (KEYMAP_SIZE - 1));
+    memset(used, 0, sizeof(LYEditCode) * KEYMAP_SIZE);
     for (k = 0; init[k].code >= 0; ++k) {
 	int code = init[k].code;
 
@@ -1774,7 +1762,7 @@ static char *showRanges(int *state)
     int i;
 
     range[0] = range[1] = -1;
-    for (i = 0; i < KEYMAP_SIZE - 1; ++i) {
+    for (i = 0; i < KEYMAP_SIZE; ++i) {
 	if (!state[i]) {
 	    int code = CurrentLineEditor()[i];
 
@@ -1802,7 +1790,7 @@ static int LYLoadEditmap(const char *arg GCC_UNUSED,
 #define FORMAT "  %-*s  %-*s  -  %s\n"
     HTFormat format_in = WWW_HTML;
     HTStream *target;
-    int state[KEYMAP_SIZE - 1];
+    int state[KEYMAP_SIZE];
     int width[2];
     char *buf = 0;
     char *ranges = 0;
@@ -1826,7 +1814,7 @@ static int LYLoadEditmap(const char *arg GCC_UNUSED,
 	/* determine the column-widths we will use for showing bindings */
 	width[0] = 0;
 	width[1] = 0;
-	for (i = 0; i < KEYMAP_SIZE - 1; ++i) {
+	for (i = 0; i < KEYMAP_SIZE; ++i) {
 	    int code = CurrentLineEditor()[i];
 
 	    if (code == LYE_NOP) {
@@ -1876,7 +1864,7 @@ static int LYLoadEditmap(const char *arg GCC_UNUSED,
 		PUTS(buf);
 		had_output = TRUE;
 	    } else {
-		for (i = 0; i < KEYMAP_SIZE - 1; ++i) {
+		for (i = 0; i < KEYMAP_SIZE; ++i) {
 		    int code = CurrentLineEditor()[i];
 
 		    if ((code == mp->code) && !state[i]) {
diff --git a/src/LYKeymap.c b/src/LYKeymap.c
index 362182c5..5c144c2a 100644
--- a/src/LYKeymap.c
+++ b/src/LYKeymap.c
@@ -1,4 +1,4 @@
-/* $LynxId: LYKeymap.c,v 1.100 2013/10/19 13:51:38 tom Exp $ */
+/* $LynxId: LYKeymap.c,v 1.108 2013/10/20 22:26:42 tom Exp $ */
 #include <HTUtils.h>
 #include <LYUtils.h>
 #include <LYGlobalDefs.h>
@@ -48,307 +48,172 @@ const char *LYKbLayoutNames[] =
  * lynx.cfg.
  *
  * Lynxactioncodes (confusingly, constants are named LYK_foo and typed as
- * LYKeymapCode) specify key `functions', see LYKeymap.h.
+ * specify key `functions', see LYKeymap.h.
  */
 
 /* the character gets 1 added to it before lookup,
  * so that EOF maps to 0
  */
-/* *INDENT-OFF* */
-LYKeymap_t keymap[KEYMAP_SIZE] = {
-
-0,
-/* EOF */
-
-LYK_DO_NOTHING,     LYK_HOME,       LYK_PREV_PAGE,     0,
-/* nul */           /* ^A */        /* ^B */       /* ^C */
-
-LYK_ABORT,          LYK_END,        LYK_NEXT_PAGE,     0,
-/* ^D */            /* ^E */        /* ^F */       /* ^G */
-
-LYK_HISTORY,    LYK_FASTFORW_LINK,  LYK_ACTIVATE,  LYK_COOKIE_JAR,
-/* bs */            /* ht */        /* nl */       /* ^K */
-
-LYK_REFRESH,      LYK_ACTIVATE,     LYK_DOWN_TWO,      0,
-/* ^L */            /* cr */        /* ^N */       /* ^O */
-
-LYK_UP_TWO,       LYK_CHG_CENTER,   LYK_RELOAD,    LYK_TO_CLIPBOARD,
-/* ^P */            /* XON */       /* ^R */       /* ^S */
-
-LYK_TRACE_TOGGLE,  LYK_NEXT_DOC,  LYK_SWITCH_DTD,  LYK_REFRESH,
-/* ^T */            /* ^U */        /* ^V */       /* ^W */
-
-LYK_CACHE_JAR,          0,   LYK_MAXSCREEN_TOGGLE,     0,
-/* ^X */            /* ^Y */        /* ^Z */       /* ESC */
-
-0,                      0,              0,             0,
-/* ^\ */            /* ^] */        /* ^^ */       /* ^_ */
-
-LYK_NEXT_PAGE,       LYK_SHELL,  LYK_SOFT_DQUOTES,  LYK_TOOLBAR,
-/* sp */             /* ! */         /* " */        /* # */
-
-LYK_LAST_LINK,          0,              0,          LYK_HISTORICAL,
-/* $ */              /* % */         /* & */        /* ' */
-
-LYK_UP_HALF,      LYK_DOWN_HALF, LYK_IMAGE_TOGGLE,  LYK_NEXT_PAGE,
-/* ( */              /* ) */         /* * */        /* + */
-
-LYK_EXTERN_PAGE,  LYK_PREV_PAGE, LYK_EXTERN_LINK,   LYK_WHEREIS,
-/* , */              /* - */         /* . */        /* / */
+LYKeymap_t keymap[KEYMAP_SIZE];
 
-LYK_F_LINK_NUM,      LYK_1,          LYK_2,         LYK_3,
-/* 0 */              /* 1 */         /* 2 */        /* 3 */
-
-LYK_4,               LYK_5,          LYK_6,         LYK_7,
-/* 4 */              /* 5 */         /* 6 */        /* 7 */
-
-LYK_8,               LYK_9,         LYK_COMMAND,    LYK_TRACE_LOG,
-/* 8 */              /* 9 */         /* : */        /* ; */
-
-LYK_UP_LINK,         LYK_INFO,     LYK_DOWN_LINK,   LYK_HELP,
-/* < */              /* = */         /* > */        /* ? */
-
-#ifndef SUPPORT_CHDIR
-LYK_RAW_TOGGLE,      LYK_ADDRLIST, LYK_PREV_PAGE,   LYK_COMMENT,
-/* @ */              /* A */         /* B */        /* C */
+static const LYEditInit initKeymapData[] =
+{
+    {1, LYK_DO_NOTHING},	/* nul */
+    {2, LYK_HOME},		/* ^B */
+    {3, LYK_PREV_PAGE},		/* ^C */
+    {5, LYK_ABORT},		/* ^E */
+    {6, LYK_END},		/* ^F */
+    {7, LYK_NEXT_PAGE},		/* ^G */
+    {9, LYK_HISTORY},		/* ^I */
+    {10, LYK_FASTFORW_LINK},	/* ^J */
+    {11, LYK_ACTIVATE},		/* ^K */
+    {12, LYK_COOKIE_JAR},	/* ^L */
+    {13, LYK_REFRESH},		/* ^M */
+    {14, LYK_ACTIVATE},		/* ^N */
+    {15, LYK_DOWN_TWO},		/* ^O */
+    {17, LYK_UP_TWO},		/* ^Q */
+    {18, LYK_CHANGE_CENTER},	/* XON */
+    {19, LYK_RELOAD},		/* ^S */
+    {20, LYK_TO_CLIPBOARD},	/* XOFF */
+    {21, LYK_TRACE_TOGGLE},	/* ^U */
+    {22, LYK_NEXT_DOC},		/* ^V */
+    {23, LYK_SWITCH_DTD},	/* ^W */
+    {24, LYK_REFRESH},		/* ^X */
+    {25, LYK_CACHE_JAR},	/* ^Y */
+    {33, LYK_NEXT_PAGE},	/*   */
+    {34, LYK_SHELL},		/* ! */
+    {35, LYK_SOFT_DQUOTES},	/* " */
+    {36, LYK_TOOLBAR},		/* # */
+    {37, LYK_LAST_LINK},	/* $ */
+    {40, LYK_HISTORICAL},	/* ' */
+    {41, LYK_UP_HALF},		/* ( */
+    {42, LYK_DOWN_HALF},	/* ) */
+    {43, LYK_IMAGE_TOGGLE},	/* * */
+    {44, LYK_NEXT_PAGE},	/* + */
+    {45, LYK_EXTERN_PAGE},	/* , */
+    {46, LYK_PREV_PAGE},	/* - */
+    {47, LYK_EXTERN_LINK},	/* . */
+    {48, LYK_WHEREIS},		/* / */
+    {49, LYK_F_LINK_NUM},	/* 0 */
+    {50, LYK_1},		/* 1 */
+    {51, LYK_2},		/* 2 */
+    {52, LYK_3},		/* 3 */
+    {53, LYK_4},		/* 4 */
+    {54, LYK_5},		/* 5 */
+    {55, LYK_6},		/* 6 */
+    {56, LYK_7},		/* 7 */
+    {57, LYK_8},		/* 8 */
+    {58, LYK_9},		/* 9 */
+    {59, LYK_COMMAND},		/* : */
+    {60, LYK_TRACE_LOG},	/* ; */
+    {61, LYK_UP_LINK},		/* < */
+    {62, LYK_INFO},		/* = */
+    {63, LYK_DOWN_LINK},	/* > */
+    {64, LYK_HELP},		/* ? */
+    {65, LYK_RAW_TOGGLE},	/* @ */
+    {66, LYK_ADDRLIST},		/* A */
+    {67, LYK_PREV_PAGE},	/* B */
+#ifdef SUPPORT_CHDIR
+    {68, LYK_CHDIR},		/* C */
 #else
-LYK_RAW_TOGGLE,      LYK_ADDRLIST, LYK_PREV_PAGE,   LYK_CHDIR,
-/* @ */              /* A */         /* B */        /* C */
+    {68, LYK_COMMENT},		/* C */
 #endif
-
-LYK_DOWNLOAD,        LYK_ELGOTO,  LYK_DIRED_MENU,   LYK_ECGOTO,
-/* D */              /* E */         /* F */        /* G */
-
+    {69, LYK_DOWNLOAD},		/* D */
+    {70, LYK_ELGOTO},		/* E */
+    {71, LYK_DIRED_MENU},	/* F */
+    {72, LYK_ECGOTO},		/* G */
+    {73, LYK_HELP},		/* H */
+    {74, LYK_INDEX},		/* I */
 #ifdef KANJI_CODE_OVERRIDE
-LYK_HELP,            LYK_INDEX,      LYK_CHG_KCODE, LYK_KEYMAP,
-/* H */              /* I */         /* J */        /* K */
-
+    {75, LYK_CHANGE_KCODE},	/* J */
 #else
-LYK_HELP,            LYK_INDEX,      LYK_JUMP,      LYK_KEYMAP,
-/* H */              /* I */         /* J */        /* K */
+    {75, LYK_JUMP},		/* J */
 #endif
-
-LYK_LIST,          LYK_MAIN_MENU,    LYK_PREV,      LYK_OPTIONS,
-/* L */              /* M */         /* N */        /* O */
-
-LYK_PRINT,          LYK_ABORT,    LYK_DEL_BOOKMARK, LYK_INDEX_SEARCH,
-/* P */              /* Q */         /* R */        /* S */
-
-LYK_TAG_LINK,      LYK_PREV_DOC,    LYK_VLINKS,         0,
-/* T */              /* U */         /* V */        /* W */
-
-LYK_NOCACHE,            0,        LYK_INTERRUPT,    LYK_INLINE_TOGGLE,
-/* X */              /* Y */         /* Z */        /* [ */
-
-LYK_SOURCE,          LYK_HEAD,    LYK_FIRST_LINK,   LYK_CLEAR_AUTH,
-/* \ */              /* ] */         /* ^ */        /* _ */
-
-LYK_MINIMAL,   LYK_ADD_BOOKMARK,  LYK_PREV_PAGE,    LYK_COMMENT,
-/* ` */              /* a */         /* b */        /* c */
-
-LYK_DOWNLOAD,        LYK_EDIT,    LYK_DIRED_MENU,   LYK_GOTO,
-/* d */              /* e */         /* f */        /* g */
-
-LYK_HELP,            LYK_INDEX,      LYK_JUMP,      LYK_KEYMAP,
-/* h */              /* i */         /* j */        /* k */
-
-LYK_LIST,         LYK_MAIN_MENU,     LYK_NEXT,      LYK_OPTIONS,
-/* l */              /* m */         /* n */        /* o */
-
-LYK_PRINT,           LYK_QUIT,    LYK_DEL_BOOKMARK, LYK_INDEX_SEARCH,
-/* p */              /* q */         /* r */        /* s */
-
-LYK_TAG_LINK,     LYK_PREV_DOC,   LYK_VIEW_BOOKMARK,   0,
-/* t */              /* u */         /* v */        /* w */
-
-LYK_NOCACHE,            0,          LYK_INTERRUPT, LYK_SHIFT_LEFT,
-/* x */              /* y */          /* z */       /* { */
-
-LYK_LINEWRAP_TOGGLE, LYK_SHIFT_RIGHT, LYK_NESTED_TABLES, LYK_HISTORY,
-/* | */               /* } */         /* ~ */       /* del */
-
-
-/* 80..9F (illegal ISO-8859-1) 8-bit characters. */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-
-/* A0..FF (permissible ISO-8859-1) 8-bit characters. */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-
-/* 100..10F function key definitions in LYStrings.h */
-LYK_PREV_LINK,    LYK_NEXT_LINK,    LYK_ACTIVATE,   LYK_PREV_DOC,
-/* UPARROW */     /* DNARROW */     /* RTARROW */   /* LTARROW */
-
-LYK_NEXT_PAGE,    LYK_PREV_PAGE,    LYK_HOME,       LYK_END,
-/* PGDOWN */      /* PGUP */        /* HOME */      /* END */
-
-#if (defined(_WINDOWS) || defined(__DJGPP__))
-
-LYK_DWIMHELP,          0,              0,             0,
-/* F1*/
-#else
-
-LYK_DWIMHELP,     LYK_ACTIVATE,     LYK_HOME,       LYK_END,
-/* F1*/ 	  /* Do key */      /* Find key */  /* Select key */
-
-#endif /* _WINDOWS || __DJGPP__ */
-
-LYK_UP_TWO,       LYK_DOWN_TWO,     LYK_DO_NOTHING, LYK_FASTBACKW_LINK,
-/* Insert key */  /* Remove key */  /* DO_NOTHING*/ /* Back tab */
-
-/* 110..18F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,             LYK_DO_NOTHING,      0,             0,
-               /* 0x11d: MOUSE_KEY */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
+    {76, LYK_KEYMAP},		/* K */
+    {77, LYK_LIST},		/* L */
+    {78, LYK_MAIN_MENU},	/* M */
+    {79, LYK_PREV},		/* N */
+    {80, LYK_OPTIONS},		/* O */
+    {81, LYK_PRINT},		/* P */
+    {82, LYK_ABORT},		/* Q */
+    {83, LYK_DEL_BOOKMARK},	/* R */
+    {84, LYK_INDEX_SEARCH},	/* S */
+    {85, LYK_TAG_LINK},		/* T */
+    {86, LYK_PREV_DOC},		/* U */
+    {87, LYK_VLINKS},		/* V */
+    {89, LYK_NOCACHE},		/* X */
+    {91, LYK_INTERRUPT},	/* Z */
+    {92, LYK_INLINE_TOGGLE},	/* [ */
+    {93, LYK_SOURCE},		/* \ */
+    {94, LYK_HEAD},		/* ] */
+    {95, LYK_FIRST_LINK},	/* ^ */
+    {96, LYK_CLEAR_AUTH},	/* _ */
+    {97, LYK_MINIMAL},		/* ` */
+    {98, LYK_ADD_BOOKMARK},	/* a */
+    {99, LYK_PREV_PAGE},	/* b */
+    {100, LYK_COMMENT},		/* c */
+    {101, LYK_DOWNLOAD},	/* d */
+    {102, LYK_EDIT},		/* e */
+    {103, LYK_DIRED_MENU},	/* f */
+    {104, LYK_GOTO},		/* g */
+    {105, LYK_HELP},		/* h */
+    {106, LYK_INDEX},		/* i */
+    {107, LYK_JUMP},		/* j */
+    {108, LYK_KEYMAP},		/* k */
+    {109, LYK_LIST},		/* l */
+    {110, LYK_MAIN_MENU},	/* m */
+    {111, LYK_NEXT},		/* n */
+    {112, LYK_OPTIONS},		/* o */
+    {113, LYK_PRINT},		/* p */
+    {114, LYK_QUIT},		/* q */
+    {115, LYK_DEL_BOOKMARK},	/* r */
+    {116, LYK_INDEX_SEARCH},	/* s */
+    {117, LYK_TAG_LINK},	/* t */
+    {118, LYK_PREV_DOC},	/* u */
+    {119, LYK_VIEW_BOOKMARK},	/* v */
+    {121, LYK_NOCACHE},		/* x */
+    {123, LYK_INTERRUPT},	/* z */
+    {124, LYK_SHIFT_LEFT},	/* { */
+    {125, LYK_LINEWRAP_TOGGLE},	/* | */
+    {126, LYK_SHIFT_RIGHT},	/* } */
+    {127, LYK_NESTED_TABLES},	/* ~ */
+    {128, LYK_HISTORY},		/* DEL */
+    {257, LYK_PREV_LINK},	/* UPARROW_KEY */
+    {258, LYK_NEXT_LINK},	/* DNARROW_KEY */
+    {259, LYK_ACTIVATE},	/* RTARROW_KEY */
+    {260, LYK_PREV_DOC},	/* LTARROW_KEY */
+    {261, LYK_NEXT_PAGE},	/* PGDOWN_KEY */
+    {262, LYK_PREV_PAGE},	/* PGUP_KEY */
+    {263, LYK_HOME},		/* HOME_KEY */
+    {264, LYK_END},		/* END_KEY */
+    {265, LYK_DWIMHELP},	/* F1_KEY */
+#if !(defined(_WINDOWS) || defined(__DJGPP__))
+    {266, LYK_ACTIVATE},	/* DO_KEY */
+    {267, LYK_HOME},		/* FIND_KEY */
+    {268, LYK_END},		/* SELECT_KEY */
+#endif
+    {269, LYK_UP_TWO},		/* INSERT_KEY */
+    {270, LYK_DOWN_TWO},	/* REMOVE_KEY */
+    {271, LYK_DO_NOTHING},	/* DO_NOTHING */
+    {272, LYK_FASTBACKW_LINK},	/* BACKTAB_KEY */
+    {282, LYK_DO_NOTHING},	/* F11_KEY */
 #ifdef DJGPP_KEYHANDLER
-   0,                  LYK_ABORT,      0,             0,
-                       /* ALT_X */
-#else
-   0,                  0,              0,             0,
-#endif /* DJGPP_KEYHANDLER */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-/* 190..20F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-#if (defined(_WINDOWS) || defined(__DJGPP__) || defined(__CYGWIN__)) && !defined(USE_SLANG) /* PDCurses */
-   LYK_ABORT,          0,              0,             0,
-   /* ALT_X */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              LYK_WHEREIS,   0,
-                                       /* KP_SLASH */
-   0,                  0,              0,           LYK_IMAGE_TOGGLE,
-                                                    /* KP_* */
-   LYK_PREV_PAGE,      LYK_NEXT_PAGE,  0,             0,
-   /* KP_- */          /* KP_+ */
-#else
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-#endif /* (_WINDOWS || __DJGPP__ || __CYGWIN__) && !USE_SLANG */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-/* 210..28F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   /* 290...293 */
-   LYK_CHANGE_LINK,    0,              0,             0,
+    {302, LYK_ABORT},
+#endif				/* DJGPP_KEYHANDLER */
+#if (defined(_WINDOWS) || defined(__DJGPP__) || defined(__CYGWIN__)) && !defined(USE_SLANG)	/* PDCurses */
+    {441, LYK_ABORT},		/* ALT_X */
+    {459, LYK_WHEREIS},		/* KP_SLASH */
+    {464, LYK_IMAGE_TOGGLE},	/* KP_* */
+    {465, LYK_PREV_PAGE},	/* KP_- */
+    {466, LYK_NEXT_PAGE},	/* KP_+ */
+#endif
+    {657, LYK_CHANGE_LINK},
+    {-1, LYE_UNKNOWN}
+};
+
+static LYEditConfig myKeymapData =
+{
+    "Key Map", initKeymapData, keymap
 };
 
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
@@ -358,644 +223,417 @@ LYK_UP_TWO,       LYK_DOWN_TWO,     LYK_DO_NOTHING, LYK_FASTBACKW_LINK,
  * allowed at compile time.
  */
 
-LYKeymap_t key_override[KEYMAP_SIZE] = {
-
-    0,
-/* EOF */
-
-    0,                  0,              0,            0,
-/* nul */           /* ^A */        /* ^B */      /* ^C */
-
-    0,                  0,              0,            0,
-/* ^D */            /* ^E */        /* ^F */      /* ^G */
-
-    0,                  0,              0,            0,
-/* bs */            /* ht */        /* nl */      /* ^K */
+LYKeymap_t key_override[KEYMAP_SIZE];
 
-    0,                  0,              0,            0,
-/* ^L */            /* cr */        /* ^N */      /* ^O */
-
-    0,                  0,              0,            0,
-/* ^P */            /* XON */       /* ^R */      /* XOFF */
-
-    0,            LYK_NEXT_DOC,         0,            0,
-/* ^T */            /* ^U */        /* ^V */      /* ^W */
-
-    0,                  0,              0,            0,
-/* ^X */            /* ^Y */        /* ^Z */      /* ESC */
-
-    0,                  0,              0,            0,
-/* ^\ */            /* ^] */        /* ^^ */      /* ^_ */
-
-    0,                 0,              0,            0,
-/* sp */            /* ! */         /* " */       /* # */
-
-   0,                  0,              0,            0,
-/* $ */             /* % */         /* & */       /* ' */
-
-    0,                 0,              0,            0,
-/* ( */             /* ) */         /* * */       /* + */
-
-    0,                 0,         LYK_TAG_LINK,      0,
-/* , */             /* - */         /* . */       /* / */
-
-   0,                  0,              0,            0,
-/* 0 */             /* 1 */         /* 2 */       /* 3 */
-
-   0,                  0,              0,            0,
-/* 4 */             /* 5 */         /* 6 */       /* 7 */
-
-   0,                  0,              0,             0,
-/* 8 */             /* 9 */         /* : */        /* ; */
-
-   0,                  0,              0,             0,
-/* < */             /* = */         /* > */        /* ? */
+static const LYEditInit initOverrideData[] =
+{
+    {22, LYK_NEXT_DOC},		/* ^V */
+    {47, LYK_TAG_LINK},		/* . */
 #ifndef SUPPORT_CHDIR
-   0,                  0,              0,         LYK_CREATE,
-/* @ */             /* A */         /* B */        /* C */
+    {68, LYK_CREATE},		/* C */
 #else
-   0,                  0,              0,         LYK_CHDIR,
-/* @ */             /* A */         /* B */        /* C */
+    {68, LYK_CHDIR},		/* C */
 #endif
+    {71, LYK_DIRED_MENU},	/* F */
+    {78, LYK_MODIFY},		/* M */
+    {83, LYK_REMOVE},		/* R */
+    {85, LYK_TAG_LINK},		/* T */
+    {86, LYK_UPLOAD},		/* U */
+    {100, LYK_CREATE},		/* c */
+    {103, LYK_DIRED_MENU},	/* f */
+    {110, LYK_MODIFY},		/* m */
+    {115, LYK_REMOVE},		/* r */
+    {117, LYK_TAG_LINK},	/* t */
+    {118, LYK_UPLOAD},		/* u */
+    {271, LYK_DO_NOTHING},	/* DO_NOTHING */
+    {-1, LYE_UNKNOWN}
+};
 
-   0,                  0,        LYK_DIRED_MENU,       0,
-/* D */             /* E */         /* F */        /* G */
-
-   0,                  0,              0,             0,
-/* H */             /* I */         /* J */        /* K */
-
-   0,             LYK_MODIFY,          0,             0,
-/* L */             /* M */         /* N */        /* O */
-
-   0,                  0,         LYK_REMOVE,         0,
-/* P */             /* Q */         /* R */        /* S */
-
-LYK_TAG_LINK,     LYK_UPLOAD,          0,             0,
-/* T */             /* U */         /* V */        /* W */
-
-   0,                  0,              0,             0,
-/* X */             /* Y */         /* Z */        /* [ */
-
-   0,                  0,              0,             0,
-/* \ */             /* ] */         /* ^ */        /* _ */
-
-0,                     0,              0,         LYK_CREATE,
-/* ` */             /* a */         /* b */        /* c */
-
-   0,                  0,       LYK_DIRED_MENU,       0,
-/* d */             /* e */         /* f */        /* g */
-
-   0,                  0,              0,             0,
-/* h */             /* i */         /* j */        /* k */
-
-0,                LYK_MODIFY,          0,             0,
-/* l */             /* m */         /* n */        /* o */
-
-   0,                  0,          LYK_REMOVE,        0,
-/* p */             /* q */         /* r */        /* s */
-
-LYK_TAG_LINK,      LYK_UPLOAD,         0,             0,
-/* t */             /* u */         /* v */         /* w */
-
-   0,                  0,               0,            0,
-/* x */             /* y */          /* z */       /* { */
-
-   0,                   0,             0,              0,
-/* | */              /* } */         /* ~ */       /* del */
-
-/* 80..9F (illegal ISO-8859-1) 8-bit characters. */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-
-/* A0..FF (permissible ISO-8859-1) 8-bit characters. */
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-
-/* 100..10F function key definitions in LYStrings.h */
-   0,                   0,             0,              0,
-/* UPARROW */     /* DNARROW */     /* RTARROW */   /* LTARROW */
-
-   0,                  0,              0,              0,
-/* PGDOWN */      /* PGUP */        /* HOME */      /* END */
-
-   0,                  0,              0,              0,
-/* F1*/ 	  /* Do key */      /* Find key */  /* Select key */
-
-   0,                  0,           LYK_DO_NOTHING,    0,
-/* Insert key */  /* Remove key */  /* DO_NOTHING */ /* Back tab */
-
-/* 110..18F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-/* 190..20F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-/* 210..28F */
-
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   0,                  0,              0,             0,
-   /* 290...293 */
-   0,                  0,              0,             0,
+static LYEditConfig myOverrideData =
+{
+    "Key Override", initOverrideData, key_override
 };
 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
 
 #define DATA(code, name, doc) { code, name, doc }
 /* The order of this array must match the LYKeymapCode enum in LYKeymap.h */
-static Kcmd revmap[] = {
+static Kcmd revmap[] =
+{
     DATA(
-	LYK_UNKNOWN, "UNMAPPED",
-	NULL ),
+	    LYK_UNKNOWN, "UNMAPPED",
+	    NULL),
     DATA(
-	LYK_COMMAND, "COMMAND",
-	"prompt for, execute a command" ),
+	    LYK_COMMAND, "COMMAND",
+	    "prompt for, execute a command"),
     DATA(
-	LYK_1, "1",
-	NULL ),
+	    LYK_1, "1",
+	    NULL),
     DATA(
-	LYK_2, "2",
-	NULL ),
+	    LYK_2, "2",
+	    NULL),
     DATA(
-	LYK_3, "3",
-	NULL ),
+	    LYK_3, "3",
+	    NULL),
     DATA(
-	LYK_4, "4",
-	NULL ),
+	    LYK_4, "4",
+	    NULL),
     DATA(
-	LYK_5, "5",
-	NULL ),
+	    LYK_5, "5",
+	    NULL),
     DATA(
-	LYK_6, "6",
-	NULL ),
+	    LYK_6, "6",
+	    NULL),
     DATA(
-	LYK_7, "7",
-	NULL ),
+	    LYK_7, "7",
+	    NULL),
     DATA(
-	LYK_8, "8",
-	NULL ),
+	    LYK_8, "8",
+	    NULL),
     DATA(
-	LYK_9, "9",
-	NULL ),
+	    LYK_9, "9",
+	    NULL),
     DATA(
-	LYK_SOURCE, "SOURCE",
-	"toggle source/presentation for current document" ),
+	    LYK_SOURCE, "SOURCE",
+	    "toggle source/presentation for current document"),
     DATA(
-	LYK_RELOAD, "RELOAD",
-	"reload the current document" ),
+	    LYK_RELOAD, "RELOAD",
+	    "reload the current document"),
     DATA(
-	LYK_QUIT, "QUIT",
-	"quit the browser" ),
+	    LYK_QUIT, "QUIT",
+	    "quit the browser"),
     DATA(
-	LYK_ABORT, "ABORT",
-	"quit the browser unconditionally" ),
+	    LYK_ABORT, "ABORT",
+	    "quit the browser unconditionally"),
     DATA(
-	LYK_NEXT_PAGE, "NEXT_PAGE",
-	"view the next page of the document" ),
+	    LYK_NEXT_PAGE, "NEXT_PAGE",
+	    "view the next page of the document"),
     DATA(
-	LYK_PREV_PAGE, "PREV_PAGE",
-	"view the previous page of the document" ),
+	    LYK_PREV_PAGE, "PREV_PAGE",
+	    "view the previous page of the document"),
     DATA(
-	LYK_UP_TWO, "UP_TWO",
-	"go back two lines in the document" ),
+	    LYK_UP_TWO, "UP_TWO",
+	    "go back two lines in the document"),
     DATA(
-	LYK_DOWN_TWO, "DOWN_TWO",
-	"go forward two lines in the document" ),
+	    LYK_DOWN_TWO, "DOWN_TWO",
+	    "go forward two lines in the document"),
     DATA(
-	LYK_UP_HALF, "UP_HALF",
-	"go back half a page in the document" ),
+	    LYK_UP_HALF, "UP_HALF",
+	    "go back half a page in the document"),
     DATA(
-	LYK_DOWN_HALF, "DOWN_HALF",
-	"go forward half a page in the document" ),
+	    LYK_DOWN_HALF, "DOWN_HALF",
+	    "go forward half a page in the document"),
     DATA(
-	LYK_REFRESH, "REFRESH",
-	"refresh the screen to clear garbled text" ),
+	    LYK_REFRESH, "REFRESH",
+	    "refresh the screen to clear garbled text"),
     DATA(
-	LYK_HOME, "HOME",
-	"go to the beginning of the current document" ),
+	    LYK_HOME, "HOME",
+	    "go to the beginning of the current document"),
     DATA(
-	LYK_END, "END",
-	"go to the end of the current document" ),
+	    LYK_END, "END",
+	    "go to the end of the current document"),
     DATA(
-	LYK_FIRST_LINK, "FIRST_LINK",
-	"make the first link on the line current" ),
+	    LYK_FIRST_LINK, "FIRST_LINK",
+	    "make the first link on the line current"),
     DATA(
-	LYK_LAST_LINK, "LAST_LINK",
-	"make the last link on the line current" ),
+	    LYK_LAST_LINK, "LAST_LINK",
+	    "make the last link on the line current"),
     DATA(
-	LYK_PREV_LINK, "PREV_LINK",
-	"make the previous link current" ),
+	    LYK_PREV_LINK, "PREV_LINK",
+	    "make the previous link current"),
     DATA(
-	LYK_NEXT_LINK, "NEXT_LINK",
-	"make the next link current" ),
+	    LYK_NEXT_LINK, "NEXT_LINK",
+	    "make the next link current"),
     DATA(
-	LYK_LPOS_PREV_LINK, "LPOS_PREV_LINK",
-	"make previous link current, same column for input" ),
+	    LYK_LPOS_PREV_LINK, "LPOS_PREV_LINK",
+	    "make previous link current, same column for input"),
     DATA(
-	LYK_LPOS_NEXT_LINK, "LPOS_NEXT_LINK",
-	"make next link current, same column for input" ),
+	    LYK_LPOS_NEXT_LINK, "LPOS_NEXT_LINK",
+	    "make next link current, same column for input"),
     DATA(
-	LYK_FASTBACKW_LINK, "FASTBACKW_LINK",
-	"previous link or text area, only stops on links" ),
+	    LYK_FASTBACKW_LINK, "FASTBACKW_LINK",
+	    "previous link or text area, only stops on links"),
     DATA(
-	LYK_FASTFORW_LINK, "FASTFORW_LINK",
-	"next link or text area, only stops on links" ),
+	    LYK_FASTFORW_LINK, "FASTFORW_LINK",
+	    "next link or text area, only stops on links"),
     DATA(
-	LYK_UP_LINK, "UP_LINK",
-	"move up the page to a previous link" ),
+	    LYK_UP_LINK, "UP_LINK",
+	    "move up the page to a previous link"),
     DATA(
-	LYK_DOWN_LINK, "DOWN_LINK",
-	"move down the page to another link" ),
+	    LYK_DOWN_LINK, "DOWN_LINK",
+	    "move down the page to another link"),
     DATA(
-	LYK_RIGHT_LINK, "RIGHT_LINK",
-	"move right to another link" ),
+	    LYK_RIGHT_LINK, "RIGHT_LINK",
+	    "move right to another link"),
     DATA(
-	LYK_LEFT_LINK, "LEFT_LINK",
-	"move left to a previous link" ),
+	    LYK_LEFT_LINK, "LEFT_LINK",
+	    "move left to a previous link"),
     DATA(
-	LYK_HISTORY, "HISTORY",
-	"display stack of currently-suspended documents" ),
+	    LYK_HISTORY, "HISTORY",
+	    "display stack of currently-suspended documents"),
     DATA(
-	LYK_PREV_DOC, "PREV_DOC",
-	"go back to the previous document" ),
+	    LYK_PREV_DOC, "PREV_DOC",
+	    "go back to the previous document"),
     DATA(
-	LYK_NEXT_DOC, "NEXT_DOC",
-	"undo going back to the previous document" ),
+	    LYK_NEXT_DOC, "NEXT_DOC",
+	    "undo going back to the previous document"),
     DATA(
-	LYK_ACTIVATE, "ACTIVATE",
-	"go to the document given by the current link" ),
+	    LYK_ACTIVATE, "ACTIVATE",
+	    "go to the document given by the current link"),
     DATA(
-	LYK_MOUSE_SUBMIT, "MOUSE_SUBMIT",
-	"DO NOT MAP:  follow current link, submit" ),
+	    LYK_MOUSE_SUBMIT, "MOUSE_SUBMIT",
+	    "DO NOT MAP:  follow current link, submit"),
     DATA(
-	LYK_SUBMIT, "SUBMIT",
-	"prompt and submit form" ),
+	    LYK_SUBMIT, "SUBMIT",
+	    "prompt and submit form"),
     DATA(
-	LYK_RESET, "RESET",
-	"reset fields on current form" ),
+	    LYK_RESET, "RESET",
+	    "reset fields on current form"),
     DATA(
-	LYK_GOTO, "GOTO",
-	"go to a document given as a URL" ),
+	    LYK_GOTO, "GOTO",
+	    "go to a document given as a URL"),
     DATA(
-	LYK_ECGOTO, "ECGOTO",
-	"edit the current document's URL and go to it" ),
+	    LYK_ECGOTO, "ECGOTO",
+	    "edit the current document's URL and go to it"),
     DATA(
-	LYK_HELP, "HELP",
-	"display help on using the browser" ),
+	    LYK_HELP, "HELP",
+	    "display help on using the browser"),
     DATA(
-	LYK_DWIMHELP, "DWIMHELP",
-	"display help page that may depend on context" ),
+	    LYK_DWIMHELP, "DWIMHELP",
+	    "display help page that may depend on context"),
     DATA(
-	LYK_INDEX, "INDEX",
-	"display an index of potentially useful documents" ),
+	    LYK_INDEX, "INDEX",
+	    "display an index of potentially useful documents"),
     DATA(
-	LYK_NOCACHE, "NOCACHE",
-	"force submission of form or link with no-cache" ),
+	    LYK_NOCACHE, "NOCACHE",
+	    "force submission of form or link with no-cache"),
     DATA(
-	LYK_INTERRUPT, "INTERRUPT",
-	"interrupt network connection or transmission" ),
+	    LYK_INTERRUPT, "INTERRUPT",
+	    "interrupt network connection or transmission"),
     DATA(
-	LYK_MAIN_MENU, "MAIN_MENU",
-	"return to the first screen (home page)" ),
+	    LYK_MAIN_MENU, "MAIN_MENU",
+	    "return to the first screen (home page)"),
     DATA(
-	LYK_OPTIONS, "OPTIONS",
-	"display and change option settings" ),
+	    LYK_OPTIONS, "OPTIONS",
+	    "display and change option settings"),
     DATA(
-	LYK_INDEX_SEARCH, "INDEX_SEARCH",
-	"allow searching of an index" ),
+	    LYK_INDEX_SEARCH, "INDEX_SEARCH",
+	    "allow searching of an index"),
     DATA(
-	LYK_WHEREIS, "WHEREIS",
-	"search within the current document" ),
+	    LYK_WHEREIS, "WHEREIS",
+	    "search within the current document"),
     DATA(
-	LYK_PREV, "PREV",
-	"search for the previous occurence" ),
+	    LYK_PREV, "PREV",
+	    "search for the previous occurence"),
     DATA(
-	LYK_NEXT, "NEXT",
-	"search for the next occurence" ),
+	    LYK_NEXT, "NEXT",
+	    "search for the next occurence"),
     DATA(
-	LYK_COMMENT, "COMMENT",
-	"send a comment to the author of the current document" ),
+	    LYK_COMMENT, "COMMENT",
+	    "send a comment to the author of the current document"),
     DATA(
-	LYK_EDIT, "EDIT",
-	"edit the current document or a form's textarea" ),
+	    LYK_EDIT, "EDIT",
+	    "edit the current document or a form's textarea"),
     DATA(
-	LYK_INFO, "INFO",
-	"display information on the current document and link" ),
+	    LYK_INFO, "INFO",
+	    "display information on the current document and link"),
     DATA(
-	LYK_PRINT, "PRINT",
-	"display choices for printing the current document" ),
+	    LYK_PRINT, "PRINT",
+	    "display choices for printing the current document"),
     DATA(
-	LYK_ADD_BOOKMARK, "ADD_BOOKMARK",
-	"add to your personal bookmark list" ),
+	    LYK_ADD_BOOKMARK, "ADD_BOOKMARK",
+	    "add to your personal bookmark list"),
     DATA(
-	LYK_DEL_BOOKMARK, "DEL_BOOKMARK",
-	"delete from your personal bookmark list" ),
+	    LYK_DEL_BOOKMARK, "DEL_BOOKMARK",
+	    "delete from your personal bookmark list"),
     DATA(
-	LYK_VIEW_BOOKMARK, "VIEW_BOOKMARK",
-	"view your personal bookmark list" ),
+	    LYK_VIEW_BOOKMARK, "VIEW_BOOKMARK",
+	    "view your personal bookmark list"),
     DATA(
-	LYK_VLINKS, "VLINKS",
-	"list links visited during the current Lynx session" ),
+	    LYK_VLINKS, "VLINKS",
+	    "list links visited during the current Lynx session"),
     DATA(
-	LYK_SHELL, "SHELL",
-	"escape from the browser to the system" ),
+	    LYK_SHELL, "SHELL",
+	    "escape from the browser to the system"),
     DATA(
-	LYK_DOWNLOAD, "DOWNLOAD",
-	"download the current link to your computer" ),
+	    LYK_DOWNLOAD, "DOWNLOAD",
+	    "download the current link to your computer"),
     DATA(
-	LYK_TRACE_TOGGLE, "TRACE_TOGGLE",
-	"toggle tracing of browser operations" ),
+	    LYK_TRACE_TOGGLE, "TRACE_TOGGLE",
+	    "toggle tracing of browser operations"),
     DATA(
-	LYK_TRACE_LOG, "TRACE_LOG",
-	"view trace log if started in the current session" ),
+	    LYK_TRACE_LOG, "TRACE_LOG",
+	    "view trace log if started in the current session"),
     DATA(
-	LYK_IMAGE_TOGGLE, "IMAGE_TOGGLE",
-	"toggle handling of all images as links" ),
+	    LYK_IMAGE_TOGGLE, "IMAGE_TOGGLE",
+	    "toggle handling of all images as links"),
     DATA(
-	LYK_INLINE_TOGGLE, "INLINE_TOGGLE",
-	"toggle pseudo-ALTs for inlines with no ALT string" ),
+	    LYK_INLINE_TOGGLE, "INLINE_TOGGLE",
+	    "toggle pseudo-ALTs for inlines with no ALT string"),
     DATA(
-	LYK_HEAD, "HEAD",
-	"send a HEAD request for the current document or link" ),
+	    LYK_HEAD, "HEAD",
+	    "send a HEAD request for the current document or link"),
     DATA(
-	LYK_DO_NOTHING, "DO_NOTHING",
-	NULL ),
+	    LYK_DO_NOTHING, "DO_NOTHING",
+	    NULL),
     DATA(
-	LYK_TOGGLE_HELP, "TOGGLE_HELP",
-	"show other commands in the novice help menu" ),
+	    LYK_TOGGLE_HELP, "TOGGLE_HELP",
+	    "show other commands in the novice help menu"),
     DATA(
-	LYK_JUMP, "JUMP",
-	"go directly to a target document or action" ),
+	    LYK_JUMP, "JUMP",
+	    "go directly to a target document or action"),
     DATA(
-	LYK_EDITMAP, "EDITMAP",
-	"display the current edit-key map" ),
+	    LYK_EDITMAP, "EDITMAP",
+	    "display the current edit-key map"),
     DATA(
-	LYK_KEYMAP, "KEYMAP",
-	"display the current key map" ),
+	    LYK_KEYMAP, "KEYMAP",
+	    "display the current key map"),
     DATA(
-	LYK_LIST, "LIST",
-	"list the references (links) in the current document" ),
+	    LYK_LIST, "LIST",
+	    "list the references (links) in the current document"),
     DATA(
-	LYK_TOOLBAR, "TOOLBAR",
-	"go to Toolbar or Banner in the current document" ),
+	    LYK_TOOLBAR, "TOOLBAR",
+	    "go to Toolbar or Banner in the current document"),
     DATA(
-	LYK_HISTORICAL, "HISTORICAL",
-	"toggle historical vs.  valid/minimal comment parsing" ),
+	    LYK_HISTORICAL, "HISTORICAL",
+	    "toggle historical vs.  valid/minimal comment parsing"),
     DATA(
-	LYK_MINIMAL, "MINIMAL",
-	"toggle minimal vs.  valid comment parsing" ),
+	    LYK_MINIMAL, "MINIMAL",
+	    "toggle minimal vs.  valid comment parsing"),
     DATA(
-	LYK_SOFT_DQUOTES, "SOFT_DQUOTES",
-	"toggle valid vs.  soft double-quote parsing" ),
+	    LYK_SOFT_DQUOTES, "SOFT_DQUOTES",
+	    "toggle valid vs.  soft double-quote parsing"),
     DATA(
-	LYK_RAW_TOGGLE, "RAW_TOGGLE",
-	"toggle raw 8-bit translations or CJK mode ON or OFF" ),
+	    LYK_RAW_TOGGLE, "RAW_TOGGLE",
+	    "toggle raw 8-bit translations or CJK mode ON or OFF"),
     DATA(
-	LYK_COOKIE_JAR, "COOKIE_JAR",
-	"examine the Cookie Jar" ),
+	    LYK_COOKIE_JAR, "COOKIE_JAR",
+	    "examine the Cookie Jar"),
     DATA(
-	LYK_F_LINK_NUM, "F_LINK_NUM",
-	"invoke the 'Follow link (or page) number:' prompt" ),
+	    LYK_F_LINK_NUM, "F_LINK_NUM",
+	    "invoke the 'Follow link (or page) number:' prompt"),
     DATA(
-	LYK_CLEAR_AUTH, "CLEAR_AUTH",
-	"clear all authorization info for this session" ),
+	    LYK_CLEAR_AUTH, "CLEAR_AUTH",
+	    "clear all authorization info for this session"),
     DATA(
-	LYK_SWITCH_DTD, "SWITCH_DTD",
-	"switch between two ways of parsing HTML" ),
+	    LYK_SWITCH_DTD, "SWITCH_DTD",
+	    "switch between two ways of parsing HTML"),
     DATA(
-	LYK_ELGOTO, "ELGOTO",
-	"edit the current link's URL or ACTION and go to it" ),
+	    LYK_ELGOTO, "ELGOTO",
+	    "edit the current link's URL or ACTION and go to it"),
     DATA(
-	LYK_CHANGE_LINK, "CHANGE_LINK",
-	"force reset of the current link on the page" ),
+	    LYK_CHANGE_LINK, "CHANGE_LINK",
+	    "force reset of the current link on the page"),
     DATA(
-	LYK_DWIMEDIT, "DWIMEDIT",
-	"use external editor for context-dependent purpose" ),
+	    LYK_DWIMEDIT, "DWIMEDIT",
+	    "use external editor for context-dependent purpose"),
     DATA(
-	LYK_EDITTEXTAREA, "EDITTEXTAREA",
-	"use an external editor to edit a form's textarea" ),
+	    LYK_EDITTEXTAREA, "EDITTEXTAREA",
+	    "use an external editor to edit a form's textarea"),
     DATA(
-	LYK_GROWTEXTAREA, "GROWTEXTAREA",
-	"add 5 new blank lines to the bottom of a textarea" ),
+	    LYK_GROWTEXTAREA, "GROWTEXTAREA",
+	    "add 5 new blank lines to the bottom of a textarea"),
     DATA(
-	LYK_INSERTFILE, "INSERTFILE",
-	"insert file into a textarea (just above cursorline)" ),
+	    LYK_INSERTFILE, "INSERTFILE",
+	    "insert file into a textarea (just above cursorline)"),
 #ifdef USE_ADDRLIST_PAGE
     DATA(
-	LYK_ADDRLIST, "ADDRLIST",
-	"like LIST command, but always shows the links' URLs" ),
+	    LYK_ADDRLIST, "ADDRLIST",
+	    "like LIST command, but always shows the links' URLs"),
 #endif
 #ifdef USE_EXTERNALS
     DATA(
-	LYK_EXTERN_LINK, "EXTERN_LINK",
-	"run external program with current link" ),
+	    LYK_EXTERN_LINK, "EXTERN_LINK",
+	    "run external program with current link"),
     DATA(
-	LYK_EXTERN_PAGE, "EXTERN_PAGE",
-	"run external program with current page" ),
+	    LYK_EXTERN_PAGE, "EXTERN_PAGE",
+	    "run external program with current page"),
 #endif
 #ifdef VMS
     DATA(
-	LYK_DIRED_MENU, "DIRED_MENU",
-	"invoke File/Directory Manager, if available" ),
+	    LYK_DIRED_MENU, "DIRED_MENU",
+	    "invoke File/Directory Manager, if available"),
 #else
 #ifdef DIRED_SUPPORT
     DATA(
-	LYK_DIRED_MENU, "DIRED_MENU",
-	"display a full menu of file operations" ),
+	    LYK_DIRED_MENU, "DIRED_MENU",
+	    "display a full menu of file operations"),
     DATA(
-	LYK_CREATE, "CREATE",
-	"create a new file or directory" ),
+	    LYK_CREATE, "CREATE",
+	    "create a new file or directory"),
     DATA(
-	LYK_REMOVE, "REMOVE",
-	"remove a file or directory" ),
+	    LYK_REMOVE, "REMOVE",
+	    "remove a file or directory"),
     DATA(
-	LYK_MODIFY, "MODIFY",
-	"modify the name or location of a file or directory" ),
+	    LYK_MODIFY, "MODIFY",
+	    "modify the name or location of a file or directory"),
     DATA(
-	LYK_TAG_LINK, "TAG_LINK",
-	"tag a file or directory for later action" ),
+	    LYK_TAG_LINK, "TAG_LINK",
+	    "tag a file or directory for later action"),
     DATA(
-	LYK_UPLOAD, "UPLOAD",
-	"upload from your computer to the current directory" ),
+	    LYK_UPLOAD, "UPLOAD",
+	    "upload from your computer to the current directory"),
     DATA(
-	LYK_INSTALL, "INSTALL",
-	"install file or tagged files into a system area" ),
-#endif /* DIRED_SUPPORT */
+	    LYK_INSTALL, "INSTALL",
+	    "install file or tagged files into a system area"),
+#endif				/* DIRED_SUPPORT */
     DATA(
-	LYK_CHG_CENTER, "CHANGE_CENTER",
-	"toggle center alignment in HTML TABLE" ),
+	    LYK_CHANGE_CENTER, "CHANGE_CENTER",
+	    "toggle center alignment in HTML TABLE"),
 #ifdef KANJI_CODE_OVERRIDE
     DATA(
-	LYK_CHG_KCODE, "CHANGE_KCODE",
-	"Change Kanji code" ),
+	    LYK_CHANGE_KCODE, "CHANGE_KCODE",
+	    "Change Kanji code"),
 #endif
-#endif /* VMS */
+#endif				/* VMS */
 #ifdef SUPPORT_CHDIR
     DATA(
-	LYK_CHDIR, "CHDIR",
-	"change current directory" ),
+	    LYK_CHDIR, "CHDIR",
+	    "change current directory"),
     DATA(
-	LYK_PWD, "PWD",
-	"print current directory" ),
+	    LYK_PWD, "PWD",
+	    "print current directory"),
 #endif
 #ifdef USE_CURSES_PADS
     DATA(
-	LYK_SHIFT_LEFT, "SHIFT_LEFT",
-	"shift the screen left" ),
+	    LYK_SHIFT_LEFT, "SHIFT_LEFT",
+	    "shift the screen left"),
     DATA(
-	LYK_SHIFT_RIGHT, "SHIFT_RIGHT",
-	"shift the screen right" ),
+	    LYK_SHIFT_RIGHT, "SHIFT_RIGHT",
+	    "shift the screen right"),
     DATA(
-	LYK_LINEWRAP_TOGGLE, "LINEWRAP_TOGGLE",
-	"toggle linewrap on/off" ),
+	    LYK_LINEWRAP_TOGGLE, "LINEWRAP_TOGGLE",
+	    "toggle linewrap on/off"),
 #endif
 #ifdef CAN_CUT_AND_PASTE
     DATA(
-	LYK_PASTE_URL, "PASTE_URL",
-	"Goto the URL in the clipboard" ),
+	    LYK_PASTE_URL, "PASTE_URL",
+	    "Goto the URL in the clipboard"),
     DATA(
-	LYK_TO_CLIPBOARD, "TO_CLIPBOARD",
-	"link's URL to Clip Board" ),
+	    LYK_TO_CLIPBOARD, "TO_CLIPBOARD",
+	    "link's URL to Clip Board"),
 #endif
 #ifdef EXP_NESTED_TABLES
     DATA(
-	LYK_NESTED_TABLES, "NESTED_TABLES",
-	"toggle nested-table parsing on/off" ),
+	    LYK_NESTED_TABLES, "NESTED_TABLES",
+	    "toggle nested-table parsing on/off"),
 #endif
 #ifdef USE_CACHEJAR
     DATA(
-	LYK_CACHE_JAR, "CACHE_JAR",
-	"examine list of cached documents" ),
+	    LYK_CACHE_JAR, "CACHE_JAR",
+	    "examine list of cached documents"),
 #endif
 #ifdef USE_MAXSCREEN_TOGGLE
     DATA(
-	LYK_MAXSCREEN_TOGGLE, "MAXSCREEN_TOGGLE",
-	"toggle max screen and normal" ),
+	    LYK_MAXSCREEN_TOGGLE, "MAXSCREEN_TOGGLE",
+	    "toggle max screen and normal"),
 #endif
     DATA(
-	LYK_UNKNOWN, NULL,
-	"" )
+	    LYK_UNKNOWN, NULL,
+	    "")
 };
-#undef DATA
 
+#undef DATA
+/* *INDENT-OFF* */
 static const struct {
     int key;
     const char *name;
@@ -1235,10 +873,10 @@ static char *pretty_html(int c)
 
 static char *format_binding(LYKeymap_t *table, int i)
 {
-    LYKeymapCode the_key = (LYKeymapCode) table[i];
+    LYKeymap_t the_key = table[i];
     char *buf = 0;
     char *formatted;
-    Kcmd *rmap = LYKeycodeToKcmd(the_key);
+    Kcmd *rmap = LYKeycodeToKcmd((LYKeymapCode) the_key);
 
     if (rmap != 0
 	&& rmap->name != 0
@@ -1258,11 +896,11 @@ static char *format_binding(LYKeymap_t *table, int i)
 static void print_binding(HTStream *target, int i, int both)
 {
     char *buf;
-    LYKeymapCode lac1 = LYK_UNKNOWN;	/* 0 */
+    LYKeymap_t lac1 = LYK_UNKNOWN;	/* 0 */
 
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
     if (prev_lynx_edit_mode && !no_dired_support &&
-	(lac1 = (LYKeymapCode) key_override[i]) != LYK_UNKNOWN) {
+	(lac1 = key_override[i]) != LYK_UNKNOWN) {
 	if ((buf = format_binding(key_override, i)) != 0) {
 	    PUTS(buf);
 	    FREE(buf);
@@ -1270,7 +908,7 @@ static void print_binding(HTStream *target, int i, int both)
     } else
 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
     if ((buf = format_binding(keymap, i)) != 0) {
-	lac1 = (LYKeymapCode) keymap[i];
+	lac1 = keymap[i];
 	PUTS(buf);
 	FREE(buf);
     }
@@ -1658,7 +1296,7 @@ static int best_reverse_keymap(int lac)
 {
     int i, c;
 
-    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 2)) {
+    for (i = FIRST_I; i >= 0; i = NEXT_I(i, KEYMAP_SIZE - 1)) {
 #ifdef NOT_ASCII
 	if (i < 256) {
 	    c = FROMASCII(i);
@@ -1719,15 +1357,18 @@ char *key_for_func_ext(int lac,
 BOOLEAN LYisNonAlnumKeyname(int ch,
 			    int KeyName)
 {
-    if (ch < 0 || (ch + 1) >= KEYMAP_SIZE)
-	return (FALSE);
-    if (ch > 0
-	&& strchr("0123456789\
-ABCDEFGHIJKLMNOPQRSTUVWXYZ\
-abcdefghijklmnopqrstuvwxyz", ch) != NULL)
-	return (FALSE);
-
-    return (BOOL) (keymap[ch + 1] == KeyName);
+    BOOLEAN result = FALSE;
+
+    if (ch >= 0 && (ch + 1) < KEYMAP_SIZE) {
+	if ((ch <= 0
+	     || strchr("0123456789"
+		       "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+		       "abcdefghijklmnopqrstuvwxyz", ch) == NULL)
+	    && (keymap[ch + 1] == KeyName)) {
+	    result = TRUE;
+	}
+    }
+    return result;
 }
 
 /*
@@ -1737,28 +1378,158 @@ abcdefghijklmnopqrstuvwxyz", ch) != NULL)
 int LYReverseKeymap(int KeyName)
 {
     int i;
+    int result = -1;
 
     for (i = 1; i < KEYMAP_SIZE; i++) {
 	if (keymap[i] == KeyName) {
-	    return (i - 1);
+	    result = (i - 1);
+	    break;
 	}
     }
 
-    return (-1);
+    return result;
 }
 
 #ifdef EXP_KEYBOARD_LAYOUT
-int LYSetKbLayout(char *layout_id)
+BOOLEAN LYSetKbLayout(char *layout_id)
 {
     int i;
+    BOOLEAN result = FALSE;
 
     for (i = 0; i < (int) TABLESIZE(LYKbLayoutNames) - 1; i++) {
-	if (!strcmp(LYKbLayoutNames[i], layout_id)) {
+	if (!strcasecomp(LYKbLayoutNames[i], layout_id)) {
 	    current_layout = i;
-	    return (-1);
+	    result = TRUE;
+	    break;
 	}
     }
 
-    return 0;
+    return result;
 }
 #endif
+
+#if 0
+/*
+ * This function was useful in converting the hand-crafted key-bindings to
+ * their reusable form in 2.8.8 -TD
+ */
+static void checkKeyMap(LYEditConfig * table)
+{
+    unsigned j, k;
+    char comment[80];
+    int first = TRUE;
+
+    for (j = 0; table->init[j].code >= 0; ++j) {
+	int code = table->init[j].code;
+
+	if (table->init[j].edit != table->used[code]) {
+	    if (first) {
+		printf("TABLE %s\n", table->name);
+		first = FALSE;
+	    }
+	    printf("%u: init %d vs used %d\n",
+		   j,
+		   table->init[j].edit,
+		   table->used[code]);
+	}
+    }
+    for (j = 0; j < KEYMAP_SIZE; ++j) {
+	int code = (int) j;
+	BOOL found = FALSE;
+
+	for (k = 0; table->init[k].code >= 0; ++k) {
+	    if (code == table->init[k].code) {
+		found = TRUE;
+		break;
+	    }
+	}
+	if (!found) {
+	    if (table->used[j] != 0) {
+		unsigned used = (j - 1);
+		int edit = table->used[j];
+		const char *prefix = "LYK_";
+		const char *name = 0;
+		Kcmd *cmd = LYKeycodeToKcmd(edit + 0);
+
+		if (cmd != 0) {
+		    name = cmd->name;
+		}
+
+		if (used < 32) {
+		    char temp[80];
+		    const char *what = 0;
+
+		    switch (used) {
+		    case 0:
+			what = "nul";
+			break;
+		    case 17:
+			what = "XON";
+			break;
+		    case 19:
+			what = "XOFF";
+			break;
+		    default:
+			sprintf(temp, "^%c", used + 'A');
+			what = temp;
+			break;
+		    }
+		    sprintf(comment, "\t/* %s */", what);
+		} else if (used < 127) {
+		    sprintf(comment, "\t/* %c */", used);
+		} else if (used == 127) {
+		    strcpy(comment, "\t/* DEL */");
+		} else {
+		    const char *what = LYextraKeysToName(used);
+
+		    if (non_empty(what)) {
+			sprintf(comment, "\t/* %s%s */", what,
+				((strchr(what, '_') != 0)
+				 ? ""
+				 : "_KEY"));
+		    } else {
+			strcpy(comment, "");
+		    }
+		}
+		if (name == 0) {
+		    name = "XXX";
+		}
+		if (first) {
+		    printf("TABLE %s\n", table->name);
+		    first = FALSE;
+		}
+		printf("\t{ %d, %s%s },%s\n", code, prefix, name, comment);
+	    }
+	}
+    }
+}
+
+#else
+#define checkKeyMap(table)	/* nothing */
+#endif
+
+static void initKeyMap(LYEditConfig * table)
+{
+    unsigned k;
+    LYEditCode *used = table->used;
+    const LYEditInit *init = table->init;
+
+    memset(used, 0, sizeof(LYEditCode) * KEYMAP_SIZE);
+    for (k = 0; init[k].code >= 0; ++k) {
+	int code = init[k].code;
+
+	used[code] = init[k].edit;
+    }
+    checkKeyMap(table);
+}
+
+/*
+ * Reset the key bindings to their default values.
+ */
+void LYinitKeymap(void)
+{
+    initKeyMap(&myKeymapData);
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+    initKeyMap(&myOverrideData);
+#endif
+}
diff --git a/src/LYKeymap.h b/src/LYKeymap.h
index 98dd67f7..d5a4b218 100644
--- a/src/LYKeymap.h
+++ b/src/LYKeymap.h
@@ -1,4 +1,4 @@
-/* $LynxId: LYKeymap.h,v 1.50 2013/10/19 12:59:21 tom Exp $ */
+/* $LynxId: LYKeymap.h,v 1.53 2013/10/20 22:11:03 tom Exp $ */
 #ifndef LYKEYMAP_H
 #define LYKEYMAP_H
 
@@ -35,7 +35,7 @@ extern "C" {
  * (which is supposed to be 'int'), that would be okay, but not as clean
  * for type-checking.
  */
-    typedef unsigned short LYKeymap_t;
+    typedef short LYKeymap_t;
 
 #define KEYMAP_SIZE 661
     extern LYKeymap_t keymap[KEYMAP_SIZE];	/* main keymap matrix */
@@ -45,7 +45,7 @@ extern "C" {
     extern int current_layout;
     extern LYKbLayout_t *LYKbLayouts[];
     extern const char *LYKbLayoutNames[];
-    extern int LYSetKbLayout(char *layout_id);
+    extern BOOLEAN LYSetKbLayout(char *layout_id);
 #endif
 
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
@@ -235,10 +235,10 @@ extern "C" {
 #define LYK_TAG_LINK      LYK_UNKNOWN
 #endif				/* DIRED_SUPPORT */
 
-	,LYK_CHG_CENTER
+	,LYK_CHANGE_CENTER
 
 #ifdef KANJI_CODE_OVERRIDE
-	,LYK_CHG_KCODE
+	,LYK_CHANGE_KCODE
 #endif
 
 #ifdef SUPPORT_CHDIR
diff --git a/src/LYMain.c b/src/LYMain.c
index dcca4d71..ee7c77e2 100644
--- a/src/LYMain.c
+++ b/src/LYMain.c
@@ -1,5 +1,5 @@
 /*
- * $LynxId: LYMain.c,v 1.247 2013/10/19 01:22:25 tom Exp $
+ * $LynxId: LYMain.c,v 1.249 2013/10/20 20:35:23 tom Exp $
  */
 #include <HTUtils.h>
 #include <HTTP.h>
@@ -1043,6 +1043,7 @@ int main(int argc,
 #endif
 
     LYinitEditmap();
+    LYinitKeymap();
 #ifdef USE_CHARSET_CHOICE
     memset((char *) charset_subsets, 0, sizeof(charset_subset_t) * MAXCHARSETS);
 #endif
@@ -1529,13 +1530,6 @@ int main(int argc,
     StrAllocCopy(UCAssume_MIMEcharset,
 		 LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
 
-    /*
-     * Make sure we have the edit map declared.  - FM
-     */
-    if (!LYEditmapDeclared()) {
-	fprintf(stderr, gettext("\nLynx edit map not declared.\n\n"));
-	exit_immediately(EXIT_FAILURE);
-    }
 #ifdef USE_COLOR_TABLE
     /*
      * Set up default foreground and background colors.
diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c
index 500f91ae..7c56991a 100644
--- a/src/LYMainLoop.c
+++ b/src/LYMainLoop.c
@@ -1,5 +1,5 @@
 /*
- * $LynxId: LYMainLoop.c,v 1.226 2013/10/19 13:06:29 tom Exp $
+ * $LynxId: LYMainLoop.c,v 1.229 2013/10/20 21:14:17 tom Exp $
  */
 #include <HTUtils.h>
 #include <HTAccess.h>
@@ -2611,13 +2611,11 @@ static void handle_LYK_DWIMHELP(const char **cshelpfile)
     if (curdoc.link >= 0 && curdoc.link < nlinks &&
 	!FormIsReadonly(links[curdoc.link].l_form) &&
 	LinkIsTextLike(curdoc.link)) {
-	*cshelpfile = LYLineeditHelpURL();
+	*cshelpfile = STR_LYNXEDITMAP;
     }
 }
 
-static void handle_LYK_EDITMAP(BOOLEAN *vi_keys_flag,
-			       BOOLEAN *emacs_keys_flag,
-			       int *old_c,
+static void handle_LYK_EDITMAP(int *old_c,
 			       int real_c)
 {
     if (*old_c != real_c) {
@@ -2629,16 +2627,6 @@ static void handle_LYK_EDITMAP(BOOLEAN *vi_keys_flag,
 	newdoc.isHEAD = FALSE;
 	newdoc.safe = FALSE;
 	newdoc.internal_link = FALSE;
-	/*
-	 * If vi_keys changed, the keymap did too, so force no cache, and reset
-	 * the flag.  - FM
-	 */
-	if (*vi_keys_flag != vi_keys ||
-	    *emacs_keys_flag != emacs_keys) {
-	    LYforce_no_cache = TRUE;
-	    *vi_keys_flag = vi_keys;
-	    *emacs_keys_flag = emacs_keys;
-	}
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
 	/*
 	 * Remember whether we are in dired menu so we can display the right
@@ -7154,7 +7142,7 @@ int mainloop(void)
 	    handle_LYK_SOURCE(&ownerS_address);
 	    break;
 
-	case LYK_CHG_CENTER:	/* ^Q */
+	case LYK_CHANGE_CENTER:	/* ^Q */
 
 	    if (no_table_center) {
 		no_table_center = FALSE;
@@ -7698,7 +7686,7 @@ int mainloop(void)
 	    break;
 
 	case LYK_EDITMAP:
-	    handle_LYK_EDITMAP(&vi_keys_flag, &emacs_keys_flag, &old_c, real_c);
+	    handle_LYK_EDITMAP(&old_c, real_c);
 	    break;
 
 	case LYK_KEYMAP:
diff --git a/src/LYStrings.c b/src/LYStrings.c
index 351d7c41..ce537668 100644
--- a/src/LYStrings.c
+++ b/src/LYStrings.c
@@ -1,4 +1,4 @@
-/* $LynxId: LYStrings.c,v 1.255 2013/10/15 09:08:42 tom Exp $ */
+/* $LynxId: LYStrings.c,v 1.256 2013/10/20 21:31:45 tom Exp $ */
 #include <HTUtils.h>
 #include <HTCJK.h>
 #include <UCAux.h>
@@ -980,6 +980,7 @@ static Keysym_String_List Keysym_Strings [] =
     INTERN_KEY( "INSERT_KEY",	INSERT_KEY,	KEY_IC ),
     INTERN_KEY( "REMOVE_KEY",	REMOVE_KEY,	KEY_DC ),
     INTERN_KEY( "DO_NOTHING",	DO_NOTHING,	DO_NOTHING|LKC_ISLKC ),
+    INTERN_KEY( "BACKTAB_KEY",	BACKTAB_KEY,	BACKTAB_KEY ),
     INTERN_KEY( NULL,		UNKNOWN_KEY,	ERR )
 };
 /* *INDENT-ON* */
diff --git a/src/LYStrings.h b/src/LYStrings.h
index 972f65a3..0e6519ea 100644
--- a/src/LYStrings.h
+++ b/src/LYStrings.h
@@ -1,5 +1,5 @@
 /*
- * $LynxId: LYStrings.h,v 1.111 2013/10/15 09:07:48 tom Exp $
+ * $LynxId: LYStrings.h,v 1.113 2013/10/20 20:33:23 tom Exp $
  */
 #ifndef LYSTRINGS_H
 #define LYSTRINGS_H
@@ -384,15 +384,13 @@ extern "C" {
 #define CurrentLineEditor() LYLineEditors[current_lineedit].used
 
     extern void LYinitEditmap(void);
+    extern void LYinitKeymap(void);
     extern const char *LYLineeditHelpURL(void);
 
     extern int escape_bound;
 
 #define LYLineEdit(e,c,m) LYDoEdit(e, c, EditBinding(c) & ~LYE_DF, m)
 
-/* Dummy initializer for LYEditmap.c */
-    extern int LYEditmapDeclared(void);
-
     extern int LYEditInsert(FieldEditor * edit, unsigned const char *s,
 			    int len, int map_active,
 			    int maxMessage);