Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/fhandler_console.cc33
-rw-r--r--winsup/cygwin/wincap.cc10
-rw-r--r--winsup/cygwin/wincap.h2
3 files changed, 45 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index fbeccffad..f87d93269 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -62,6 +62,7 @@ static struct fhandler_base::rabuf_t con_ra;
#define WPBUF_LEN 256
static unsigned char wpbuf[WPBUF_LEN];
static int wpixput;
+static unsigned char last_char;
#define wpbuf_put(x) \
wpbuf[wpixput++] = x; \
if (wpixput > WPBUF_LEN) \
@@ -2009,6 +2010,37 @@ fhandler_console::char_command (char c)
DWORD wn;
switch (c)
{
+#if 0 /* These sequences, which are supported by real xterm, are
+ not supported by xterm compatible mode. Therefore they
+ were implemented once. However, these are not declared
+ in terminfo of xterm-256color, therefore, do not appear
+ to be necessary. */
+ case '`': /* HPA */
+ if (con.args[0] == 0)
+ con.args[0] = 1;
+ cursor_get (&x, &y);
+ cursor_set (false, con.args[0]-1, y);
+ break;
+ case 'a': /* HPR */
+ if (con.args[0] == 0)
+ con.args[0] = 1;
+ cursor_rel (con.args[0], 0);
+ break;
+ case 'e': /* VPR */
+ if (con.args[0] == 0)
+ con.args[0] = 1;
+ cursor_rel (0, con.args[0]);
+ break;
+#endif
+ case 'b': /* REP */
+ wpbuf_put (c);
+ if (wincap.has_con_esc_rep ())
+ /* Just send the sequence */
+ WriteConsoleA (get_output_handle (), wpbuf, wpixput, &wn, 0);
+ else if (last_char && last_char != '\n')
+ for (int i = 0; i < con.args[0]; i++)
+ WriteConsoleA (get_output_handle (), &last_char, 1, &wn, 0);
+ break;
case 'r': /* DECSTBM */
con.scroll_region.Top = con.args[0] ? con.args[0] - 1 : 0;
con.scroll_region.Bottom = con.args[1] ? con.args[1] - 1 : -1;
@@ -2746,6 +2778,7 @@ fhandler_console::write_normal (const unsigned char *src,
break;
default:
found += ret;
+ last_char = *(found - 1);
break;
}
}
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index 714a6d49f..922705e65 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -44,6 +44,7 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
has_con_24bit_colors:false,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -73,6 +74,7 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_con_24bit_colors:false,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -102,6 +104,7 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_con_24bit_colors:false,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -131,6 +134,7 @@ wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_con_24bit_colors:false,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -160,6 +164,7 @@ wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared))
has_con_24bit_colors:false,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -189,6 +194,7 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) =
has_con_24bit_colors:true,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -218,6 +224,7 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) =
has_con_24bit_colors:true,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -247,6 +254,7 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) =
has_con_24bit_colors:true,
has_con_broken_csi3j:false,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -276,6 +284,7 @@ wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) =
has_con_24bit_colors:true,
has_con_broken_csi3j:true,
has_con_broken_il_dl:false,
+ has_con_esc_rep:false,
},
};
@@ -305,6 +314,7 @@ wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) =
has_con_24bit_colors:true,
has_con_broken_csi3j:false,
has_con_broken_il_dl:true,
+ has_con_esc_rep:true,
},
};
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
index f85a88877..6d7a1eae6 100644
--- a/winsup/cygwin/wincap.h
+++ b/winsup/cygwin/wincap.h
@@ -38,6 +38,7 @@ struct wincaps
unsigned has_con_24bit_colors : 1;
unsigned has_con_broken_csi3j : 1;
unsigned has_con_broken_il_dl : 1;
+ unsigned has_con_esc_rep : 1;
};
};
@@ -99,6 +100,7 @@ public:
bool IMPLEMENT (has_con_24bit_colors)
bool IMPLEMENT (has_con_broken_csi3j)
bool IMPLEMENT (has_con_broken_il_dl)
+ bool IMPLEMENT (has_con_esc_rep)
void disable_case_sensitive_dirs ()
{