[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--##
- lynx-dev [lynx2.8.1rel.2] lineedit bug fix (and enhancement),
Kim DeVaughn <=