readline() (and hence NSH) now accept the DEL character as well as the Backspace character for the backspace functionality
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4428 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
04a561a8b4
commit
68b07a2da4
@ -192,3 +192,7 @@
|
||||
* apps/examples/qencoder: Add a quadrature driver test.
|
||||
* apps/examples/ostest/fpu.c: Add a test to verify that FPU registers
|
||||
are properly saved and restored on context switches.
|
||||
* apps/system/readline/readline.c: readline() will now treat either a
|
||||
backspace or a DEL character as a backspace (i.e., deleting the character
|
||||
to the left of the cursor). This makes NSH less dependent on particular
|
||||
keyboard mappings of the Backspace key. Submitted by Mike Smith.
|
||||
|
@ -68,6 +68,13 @@
|
||||
#undef CONFIG_EOL_IS_BOTH_CRLF
|
||||
#define CONFIG_EOL_IS_EITHER_CRLF 1
|
||||
|
||||
/* Some special characters */
|
||||
|
||||
#define BS 0x08 /* Backspace */
|
||||
#define ESC 0x1b /* Escape */
|
||||
#define LBRACKET 0x5b /* Left bracket */
|
||||
#define DEL 0x7f /* DEL */
|
||||
|
||||
/****************************************************************************
|
||||
* Private Type Declarations
|
||||
****************************************************************************/
|
||||
@ -219,7 +226,7 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
|
||||
{
|
||||
/* Yes, is it an <esc>[, 3 byte sequence */
|
||||
|
||||
if (ch != 0x5b || escape == 2)
|
||||
if (ch != LBRACKET || escape == 2)
|
||||
{
|
||||
/* We are finished with the escape sequence */
|
||||
|
||||
@ -238,9 +245,16 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for backspace */
|
||||
/* Check for backspace
|
||||
*
|
||||
* There are several notions of backspace, for an elaborate summary see
|
||||
* http://www.ibb.net/~anne/keyboard.html. There is no clean solution.
|
||||
* Here both DEL and backspace are treated like backspace here. The
|
||||
* Unix/Linux screen terminal by default outputs DEL (0x7f) when the
|
||||
* backspace key is pressed.
|
||||
*/
|
||||
|
||||
else if (ch == 0x08)
|
||||
else if (ch == BS || ch == DEL)
|
||||
{
|
||||
/* Eliminate that last character in the buffer. */
|
||||
|
||||
@ -249,9 +263,12 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
|
||||
nch--;
|
||||
|
||||
#ifdef CONFIG_READLINE_ECHO
|
||||
/* Echo the backspace character on the console */
|
||||
/* Echo the backspace character on the console. Always output
|
||||
* the backspace character because the VT100 terminal doesn't
|
||||
* understand DEL properly.
|
||||
*/
|
||||
|
||||
readline_consoleputc(ch, outfd);
|
||||
readline_consoleputc(BS, outfd);
|
||||
readline_consoleputs(g_erasetoeol, outfd);
|
||||
#endif
|
||||
}
|
||||
@ -259,7 +276,7 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
|
||||
|
||||
/* Check for the beginning of a VT100 escape sequence */
|
||||
|
||||
else if (ch == 0x1b)
|
||||
else if (ch == ESC)
|
||||
{
|
||||
/* The next character is escaped */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user