lynx-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

lynx-dev [lynx2.8.1rel.2] lineedit bug fix (and enhancement)


From: Kim DeVaughn
Subject: lynx-dev [lynx2.8.1rel.2] lineedit bug fix (and enhancement)
Date: Thu, 29 Oct 1998 14:45:13 -0800

Hello -

Having just subscribed to this list, let me first thank all the dev-folk
for all the hard work on lynx (especially for adding persistent cookies
to the latest release).  Well done ...!

The 2.8.1 release finally prompted me to change the (annoying to me)
behavior of the ^B and ^F line editor bindings to provide emacs/tcsh like
behavior (cursor left/right), instead of "word" deletes.

In the process, I found what seems to be a bug in the ^R (LYE_DELN) function,
which is described as "delete next character", but was in fact performing
identically to ^D (LYE_DELC) "delete current character".

The attached patch fixes LYE_DELN to conform to its description.

I also took the opportunity to add a function called LYE_DELEOL, which does
the expected thing, and deletes from the current cursor position, to the EOL.

The patches to LYStrings.c and LYStrings.h implement the above two items.

My "better" key bindings are included in the patch to LYEditmap.c, with the
changed bindings now being:

 ^B = LYE_BACK   cursor backwards
 ^F = LYE_FORW   cursor forwards
 ^K = LYE_DELEOL delete to end-of-line
 ^T = LYE_DELNW  delete next word
 ^X = LYE_DELPW  delete previous word
 ^^ = LYE_UPPER  upper case line
 ^_ = LYE_LOWER  lower case line

I'd have prefered to use ^W instead of ^X for LYE_DELPW, but it seems like
that char gets snarfed early, since in other contexts it is also used to
refresh the screen (like ^L).  C'est la vie' ...

[Curiousity question: is there some rationale for all the trailing whitespace
 in LYEditmap.c:LYLineeditNames[] for the "Default Binding     " string?]

/kim


diff -uNr lynx-2.8.1-rel.2.orig/src/LYStrings.c 
lynx-2.8.1-rel.2+kd/src/LYStrings.c
--- lynx-2.8.1-rel.2.orig/src/LYStrings.c       Thu Oct 29 03:47:15 1998
+++ lynx-2.8.1-rel.2+kd/src/LYStrings.c Thu Oct 29 03:39:08 1998
@@ -1510,18 +1510,33 @@
            LYEdit1 (edit, 0, LYE_BACKW, FALSE);
            pos0 -= Pos;
            while (pos0--)
-               LYEdit1(edit, 0, LYE_DELN, FALSE);
+               LYEdit1(edit, 0, LYE_DELC, FALSE);
        }
        break;
 
+    case LYE_DELEOL:
+        /*
+        *  Delete from current char thru EOL
+        */
+        {
+            int pos0 = Pos;
+           LYEdit1(edit, 0, LYE_EOL, FALSE);
+            pos0 = Pos - pos0;
+           while (pos0--)
+                LYEdit1(edit, 0, LYE_DELP, FALSE);
+       }
+        break;
+
     case LYE_DELN:
        /*
         *  Delete next character
         */
-       if (Pos >= length)
+       if (Pos >= length - 1)
            break;
-       Pos++;
-       /* fall through */
+       LYEdit1(edit, 0, LYE_FORW, FALSE);
+       LYEdit1(edit, 0, LYE_DELC, FALSE);
+       LYEdit1(edit, 0, LYE_BACK, FALSE);
+       break;
 
     case LYE_DELP:
        /*
diff -uNr lynx-2.8.1-rel.2.orig/src/LYStrings.h 
lynx-2.8.1-rel.2+kd/src/LYStrings.h
--- lynx-2.8.1-rel.2.orig/src/LYStrings.h       Thu Oct 29 03:47:16 1998
+++ lynx-2.8.1-rel.2+kd/src/LYStrings.h Thu Oct 29 02:20:41 1998
@@ -144,6 +144,8 @@
 
 #define LYE_AIX   (LYE_LKCMD +1)  /* Hex 97               */
 
+#define LYE_DELEOL (LYE_AIX  +1)  /* Delete thru EOL       */
+
 #if defined(USE_KEYMAPS)
 extern int lynx_initialize_keymaps NOPARAMS;
 #endif
diff -uNr lynx-2.8.1-rel.2.orig/src/LYEditmap.c 
lynx-2.8.1-rel.2+kd/src/LYEditmap.c
--- lynx-2.8.1-rel.2.orig/src/LYEditmap.c       Thu Oct 29 03:47:15 1998
+++ lynx-2.8.1-rel.2+kd/src/LYEditmap.c Thu Oct 29 03:37:16 1998
@@ -114,9 +114,115 @@
 };
 
 /*
- * Add your favorite key binding HERE
+ * Add your favorite key bindings HERE
  */
 
+/* 01 */ /* Default except that  ^F=cursor-forward  and  ^B=cursor-backward */
+/*    */
+
+PRIVATE char BetterEditBinding[]={
+
+LYE_NOP,        LYE_BOL,        LYE_BACK,       LYE_ABORT,
+/* nul          ^A              ^B              ^C      */
+
+LYE_DELC,       LYE_EOL,        LYE_FORW,       LYE_ABORT,
+/* ^D           ^E              ^F              ^G      */
+
+LYE_DELP,       LYE_ENTER,      LYE_ENTER,      LYE_DELEOL,
+/* bs           tab             nl              ^K      */
+
+LYE_NOP,        LYE_ENTER,      LYE_FORWW,      LYE_ABORT,
+/* ^L           cr              ^N              ^O      */
+
+LYE_BACKW,      LYE_NOP,        LYE_DELN,       LYE_NOP,
+/* ^P           XON             ^R              XOFF    */
+
+LYE_DELNW,      LYE_ERASE,      LYE_LKCMD,      LYE_NOP,
+/* ^T           ^U              ^V              ^W      */
+
+LYE_DELPW,      LYE_NOP,        LYE_NOP,        LYE_NOP,
+/* ^X           ^Y              ^Z              ESC     */
+
+LYE_NOP,        LYE_NOP,        LYE_UPPER,      LYE_LOWER,
+/* ^\           ^]              ^^              ^_      */
+
+/* sp .. RUBOUT                                         */
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_DELP,
+
+/* 80..9F ISO-8859-1 8-bit escape characters. */
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_AIX,
+/*                                               97 AIX    */
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+
+/* A0..FF (permissible ISO-8859-1) 8-bit characters. */
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+LYE_CHAR,       LYE_CHAR,       LYE_CHAR,       LYE_CHAR,
+
+/* 100..10E function key definitions in LYStrings.h */
+LYE_NOP,        LYE_NOP,        LYE_FORW,       LYE_BACK,
+/* UPARROW      DNARROW         RTARROW         LTARROW     */
+
+LYE_NOP,        LYE_NOP,        LYE_BOL,        LYE_EOL,
+/* PGDOWN       PGUP            HOME            END         */
+
+LYE_NOP,        LYE_TAB,        LYE_BOL,        LYE_EOL,
+/* F1           Do key          Find key        Select key  */
+
+LYE_NOP,        LYE_DELP,       LYE_NOP,        LYE_NOP,
+/* Insert key   Remove key      DO_NOTHING      ...         */
+};
+
 
 /*
  * Add the array name to LYLineEditors
@@ -124,6 +230,7 @@
 
 PUBLIC char * LYLineEditors[]={
         DefaultEditBinding,     /* You can't please everyone, so you ... DW */
+       BetterEditBinding,      /* No, you certainly can't ... /ked 10/27/98*/
 };
 
 /*
@@ -132,6 +239,7 @@
  */
 PUBLIC char * LYLineeditNames[]={
         "Default Binding     ",
+       "Better Bindings",
         (char *) 0
 };
 
##--eof--##

reply via email to

[Prev in Thread] Current Thread [Next in Thread]