mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-28 12:05:47 +08:00
* fhandler.h (class fhandler_console): Add members `insert_mode'.
* fhandler_console.cc (fhandler_console::dup): Duplicate `insert_mode'. (fhandler_console::fhandler_console): Initialize `insert_mode'. fhandler_console::char_command): Add terminal capabilities "enter insert mode" = \E[4h and "exit insert mode" = \E[4l. Care for insert mode on terminal capability "repeat char" = \E[x;yb. (fhandler_console::write_normal): Care for insert mode before writing to the console. (array keytable): Add keymapping for modified cursor and control block keys (xterm like).
This commit is contained in:
parent
12453b4590
commit
70afbaae17
@ -1,8 +1,22 @@
|
|||||||
|
Sat Mar 31 11:09:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler.h (class fhandler_console): Add members `insert_mode'.
|
||||||
|
* fhandler_console.cc (fhandler_console::dup): Duplicate `insert_mode'.
|
||||||
|
(fhandler_console::fhandler_console): Initialize `insert_mode'.
|
||||||
|
fhandler_console::char_command): Add terminal capabilities
|
||||||
|
"enter insert mode" = \E[4h and "exit insert mode" = \E[4l.
|
||||||
|
Care for insert mode on terminal capability "repeat char" = \E[x;yb.
|
||||||
|
(fhandler_console::write_normal): Care for insert mode before writing
|
||||||
|
to the console.
|
||||||
|
(array keytable): Add keymapping for modified cursor and control
|
||||||
|
block keys (xterm like).
|
||||||
|
|
||||||
Fri Mar 30 13:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
Fri Mar 30 13:02:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler.h (class fhandler_console): Add members `savebufsiz' and
|
* fhandler.h (class fhandler_console): Add members `savebufsiz' and
|
||||||
`savebuf' to allow save/restore of screen.
|
`savebuf' to allow save/restore of screen.
|
||||||
* fhandler_console.cc (fhandler_console::dup): Duplicate savebuf.
|
* fhandler_console.cc (fhandler_console::dup): Duplicate `savebufsiz'
|
||||||
|
and `savebuf'.
|
||||||
(fhandler_console::fhandler_console): Initialize `savebufsiz' and
|
(fhandler_console::fhandler_console): Initialize `savebufsiz' and
|
||||||
`savebuf'.
|
`savebuf'.
|
||||||
(fhandler_console::char_command): Add terminal capabilities
|
(fhandler_console::char_command): Add terminal capabilities
|
||||||
|
@ -652,6 +652,7 @@ private:
|
|||||||
DWORD dwLastButtonState;
|
DWORD dwLastButtonState;
|
||||||
int nModifiers;
|
int nModifiers;
|
||||||
|
|
||||||
|
BOOL insert_mode;
|
||||||
BOOL use_mouse;
|
BOOL use_mouse;
|
||||||
BOOL raw_win32_keyboard_mode;
|
BOOL raw_win32_keyboard_mode;
|
||||||
|
|
||||||
|
@ -579,6 +579,7 @@ fhandler_console::dup (fhandler_base *child)
|
|||||||
fhc->dwLastButtonState = dwLastButtonState;
|
fhc->dwLastButtonState = dwLastButtonState;
|
||||||
fhc->nModifiers = nModifiers;
|
fhc->nModifiers = nModifiers;
|
||||||
|
|
||||||
|
fhc->insert_mode = insert_mode;
|
||||||
fhc->use_mouse = use_mouse;
|
fhc->use_mouse = use_mouse;
|
||||||
fhc->raw_win32_keyboard_mode = raw_win32_keyboard_mode;
|
fhc->raw_win32_keyboard_mode = raw_win32_keyboard_mode;
|
||||||
|
|
||||||
@ -801,7 +802,7 @@ fhandler_console::fhandler_console (const char *name) :
|
|||||||
dwLastCursorPosition.Y = -1;
|
dwLastCursorPosition.Y = -1;
|
||||||
dwLastButtonState = 0;
|
dwLastButtonState = 0;
|
||||||
nModifiers = 0;
|
nModifiers = 0;
|
||||||
use_mouse = raw_win32_keyboard_mode = FALSE;
|
insert_mode = use_mouse = raw_win32_keyboard_mode = FALSE;
|
||||||
/* Set the mask that determines if an input keystroke is modified by
|
/* Set the mask that determines if an input keystroke is modified by
|
||||||
META. We set this based on the keyboard layout language loaded
|
META. We set this based on the keyboard layout language loaded
|
||||||
for the current thread. The left <ALT> key always generates
|
for the current thread. The left <ALT> key always generates
|
||||||
@ -1096,7 +1097,16 @@ fhandler_console::char_command (char c)
|
|||||||
case 'h':
|
case 'h':
|
||||||
case 'l':
|
case 'l':
|
||||||
if (!saw_question_mark)
|
if (!saw_question_mark)
|
||||||
break;
|
{
|
||||||
|
switch (args_[0])
|
||||||
|
{
|
||||||
|
case 4: /* Insert mode */
|
||||||
|
insert_mode = (c == 'h') ? TRUE : FALSE;
|
||||||
|
syscall_printf("insert mode %sabled", insert_mode ? "en" : "dis");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
switch (args_[0])
|
switch (args_[0])
|
||||||
{
|
{
|
||||||
case 47: /* Save/Restore screen */
|
case 47: /* Save/Restore screen */
|
||||||
@ -1267,6 +1277,11 @@ fhandler_console::char_command (char c)
|
|||||||
cursor_set (FALSE, ((8 * (x / 8 + 1)) - 8), y);
|
cursor_set (FALSE, ((8 * (x / 8 + 1)) - 8), y);
|
||||||
break;
|
break;
|
||||||
case 'b': /* Repeat char #1 #2 times */
|
case 'b': /* Repeat char #1 #2 times */
|
||||||
|
if (insert_mode)
|
||||||
|
{
|
||||||
|
cursor_get (&x, &y);
|
||||||
|
scroll_screen (x, y, -1, y, x + args_[1], y);
|
||||||
|
}
|
||||||
while (args_[1]--)
|
while (args_[1]--)
|
||||||
WriteFile (get_output_handle (), &args_[0], 1, (DWORD *) &x, 0);
|
WriteFile (get_output_handle (), &args_[0], 1, (DWORD *) &x, 0);
|
||||||
break;
|
break;
|
||||||
@ -1326,6 +1341,12 @@ fhandler_console::write_normal (const unsigned char *src,
|
|||||||
CharToOemBuff ((LPCSTR)src, buf, l2);
|
CharToOemBuff ((LPCSTR)src, buf, l2);
|
||||||
else
|
else
|
||||||
strncpy (buf, (LPCSTR)src, l2);
|
strncpy (buf, (LPCSTR)src, l2);
|
||||||
|
if (insert_mode)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
cursor_get (&x, &y);
|
||||||
|
scroll_screen (x, y, -1, y, x + l2, y);
|
||||||
|
}
|
||||||
if (!WriteFile (get_output_handle (), buf, l2, &done, 0))
|
if (!WriteFile (get_output_handle (), buf, l2, &done, 0))
|
||||||
{
|
{
|
||||||
debug_printf ("write failed, handle %p", get_output_handle ());
|
debug_printf ("write failed, handle %p", get_output_handle ());
|
||||||
@ -1539,16 +1560,16 @@ static struct {
|
|||||||
const char *val[4];
|
const char *val[4];
|
||||||
} keytable[] = {
|
} keytable[] = {
|
||||||
/* NORMAL */ /* SHIFT */ /* CTRL */ /* ALT */
|
/* NORMAL */ /* SHIFT */ /* CTRL */ /* ALT */
|
||||||
{VK_LEFT, {"\033[D", NULL, NULL, NULL}},
|
{VK_LEFT, {"\033[D", "\033[D", "\033[D", "\033\033[D"}},
|
||||||
{VK_RIGHT, {"\033[C", NULL, NULL, NULL}},
|
{VK_RIGHT, {"\033[C", "\033[C", "\033[C", "\033\033[C"}},
|
||||||
{VK_UP, {"\033[A", NULL, NULL, NULL}},
|
{VK_UP, {"\033[A", "\033[A", "\033[A", "\033\033[A"}},
|
||||||
{VK_DOWN, {"\033[B", NULL, NULL, NULL}},
|
{VK_DOWN, {"\033[B", "\033[B", "\033[B", "\033\033[B"}},
|
||||||
{VK_PRIOR, {"\033[5~", NULL, NULL, NULL}},
|
{VK_PRIOR, {"\033[5~", "\033[5~", "\033[5~", "\033\033[5~"}},
|
||||||
{VK_NEXT, {"\033[6~", NULL, NULL, NULL}},
|
{VK_NEXT, {"\033[6~", "\033[6~", "\033[6~", "\033\033[6~"}},
|
||||||
{VK_HOME, {"\033[1~", NULL, NULL, NULL}},
|
{VK_HOME, {"\033[1~", "\033[1~", "\033[1~", "\033\033[1~"}},
|
||||||
{VK_END, {"\033[4~", NULL, NULL, NULL}},
|
{VK_END, {"\033[4~", "\033[4~", "\033[4~", "\033\033[4~"}},
|
||||||
{VK_INSERT, {"\033[2~", NULL, NULL, NULL}},
|
{VK_INSERT, {"\033[2~", "\033[2~", "\033[2~", "\033\033[2~"}},
|
||||||
{VK_DELETE, {"\033[3~", NULL, NULL, NULL}},
|
{VK_DELETE, {"\033[3~", "\033[3~", "\033[3~", "\033\033[3~"}},
|
||||||
{VK_F1, {"\033[[A", "\033[23~", NULL, NULL}},
|
{VK_F1, {"\033[[A", "\033[23~", NULL, NULL}},
|
||||||
{VK_F2, {"\033[[B", "\033[24~", NULL, NULL}},
|
{VK_F2, {"\033[[B", "\033[24~", NULL, NULL}},
|
||||||
{VK_F3, {"\033[[C", "\033[25~", NULL, NULL}},
|
{VK_F3, {"\033[[C", "\033[25~", NULL, NULL}},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user