* fhandler.h (class dev_console): Flag for expanded control sequence.

* fhandler_console.cc (char_command): Supporting cursor style modes.
This commit is contained in:
Corinna Vinschen 2013-01-11 11:04:50 +00:00
parent ab664763f0
commit 09707415eb
3 changed files with 52 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2013-01-11 Thomas Wolff <towo@towo.net>
* fhandler.h (class dev_console): Flag for expanded control sequence.
* fhandler_console.cc (char_command): Supporting cursor style modes.
2013-01-10 Corinna Vinschen <corinna@vinschen.de>
* path.h (path_conv::fs_type): New method.

View File

@ -1,7 +1,7 @@
/* fhandler.h
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
This file is part of Cygwin.
@ -1246,6 +1246,7 @@ class dev_console
unsigned rarg;
bool saw_question_mark;
bool saw_greater_than_sign;
bool saw_space;
bool vt100_graphics_mode_G0;
bool vt100_graphics_mode_G1;
bool iso_2022_G1;

View File

@ -1,7 +1,7 @@
/* fhandler_console.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
2006, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
This file is part of Cygwin.
@ -1510,6 +1510,31 @@ fhandler_console::char_command (char c)
}
dev_state.set_color (get_output_handle ());
break;
case 'q': /* Set cursor style (DECSCUSR) */
if (dev_state.saw_space)
{
CONSOLE_CURSOR_INFO console_cursor_info;
GetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
switch (dev_state.args_[0])
{
case 0: /* blinking block */
case 1: /* blinking block (default) */
case 2: /* steady block */
console_cursor_info.dwSize = 100;
SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
break;
case 3: /* blinking underline */
case 4: /* steady underline */
console_cursor_info.dwSize = 10; /* or Windows default 25? */
SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
break;
default: /* use value as percentage */
console_cursor_info.dwSize = dev_state.args_[0];
SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
break;
}
}
break;
case 'h':
case 'l':
if (!dev_state.saw_question_mark)
@ -1525,6 +1550,17 @@ fhandler_console::char_command (char c)
}
switch (dev_state.args_[0])
{
case 25: /* Show/Hide Cursor (DECTCEM) */
{
CONSOLE_CURSOR_INFO console_cursor_info;
GetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
if (c == 'h')
console_cursor_info.bVisible = TRUE;
else
console_cursor_info.bVisible = FALSE;
SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
break;
}
case 47: /* Save/Restore screen */
if (c == 'h') /* save */
{
@ -1752,7 +1788,7 @@ fhandler_console::char_command (char c)
__small_sprintf (buf, "\033[%d;%dR", y + 1, x + 1);
puts_readahead (buf);
break;
default:
default:
goto bad_escape;
}
break;
@ -2026,6 +2062,7 @@ fhandler_console::write (const void *vsrc, size_t len)
dev_state.state_ = gotsquare;
dev_state.saw_question_mark = false;
dev_state.saw_greater_than_sign = false;
dev_state.saw_space = false;
for (dev_state.nargs_ = 0; dev_state.nargs_ < MAXARGS; dev_state.nargs_++)
dev_state.args_[dev_state.nargs_] = 0;
dev_state.nargs_ = 0;
@ -2092,6 +2129,12 @@ fhandler_console::write (const void *vsrc, size_t len)
if (dev_state.nargs_ >= MAXARGS)
dev_state.nargs_--;
}
else if (*src == ' ')
{
src++;
dev_state.saw_space = true;
dev_state.state_ = gotcommand;
}
else
{
dev_state.state_ = gotcommand;