Implemented cursor wrap control codes e[?7h and l
This commit is contained in:
@@ -160,16 +160,25 @@ apars_handle_CSI(char leadchar, int *params, char keychar)
|
||||
}
|
||||
break;
|
||||
|
||||
// DECTCEM cursor show hide
|
||||
case 'l':
|
||||
if (leadchar == '?' && n1 == 25) {
|
||||
screen_cursor_enable(0);
|
||||
// DECTCEM feature enable / disable
|
||||
|
||||
case 'h':
|
||||
if (leadchar == '?') {
|
||||
if (n1 == 25) {
|
||||
screen_cursor_enable(1);
|
||||
} else if (n1 == 7) {
|
||||
screen_wrap_enable(1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
if (leadchar == '?' && n1 == 25) {
|
||||
screen_cursor_enable(1);
|
||||
case 'l':
|
||||
if (leadchar == '?') {
|
||||
if (n1 == 25) {
|
||||
screen_cursor_enable(0);
|
||||
} else if (n1 == 7) {
|
||||
screen_wrap_enable(0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
+25
-8
@@ -31,6 +31,7 @@ static struct {
|
||||
int y; //!< Y coordinate
|
||||
bool visible; //!< Visible
|
||||
bool inverse; //!< Inverse colors
|
||||
bool autowrap; //!< Wrapping when EOL
|
||||
Color fg; //!< Foreground color for writing
|
||||
Color bg; //!< Background color for writing
|
||||
} cursor;
|
||||
@@ -102,6 +103,7 @@ cursor_reset(void)
|
||||
cursor.bg = SCREEN_DEF_BG;
|
||||
cursor.visible = 1;
|
||||
cursor.inverse = 0;
|
||||
cursor.autowrap = 1;
|
||||
}
|
||||
|
||||
//endregion
|
||||
@@ -397,6 +399,17 @@ screen_cursor_enable(bool enable)
|
||||
NOTIFY_DONE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable autowrap
|
||||
*/
|
||||
void ICACHE_FLASH_ATTR
|
||||
screen_wrap_enable(bool enable)
|
||||
{
|
||||
NOTIFY_LOCK();
|
||||
cursor.autowrap = enable;
|
||||
NOTIFY_DONE();
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region Colors
|
||||
@@ -492,7 +505,7 @@ screen_putchar(char ch)
|
||||
cursor.x--;
|
||||
} else {
|
||||
// wrap around start of line
|
||||
if (cursor.y>0) {
|
||||
if (cursor.autowrap && cursor.y>0) {
|
||||
cursor.x=W-1;
|
||||
cursor.y--;
|
||||
}
|
||||
@@ -532,13 +545,17 @@ screen_putchar(char ch)
|
||||
cursor.x++;
|
||||
// X wrap
|
||||
if (cursor.x >= W) {
|
||||
cursor.x = 0;
|
||||
cursor.y++;
|
||||
// Y wrap
|
||||
if (cursor.y > H-1) {
|
||||
// Scroll up, so we have space for writing
|
||||
screen_scroll_up(1);
|
||||
cursor.y = H-1;
|
||||
if (cursor.autowrap) {
|
||||
cursor.x = 0;
|
||||
cursor.y++;
|
||||
// Y wrap
|
||||
if (cursor.y > H - 1) {
|
||||
// Scroll up, so we have space for writing
|
||||
screen_scroll_up(1);
|
||||
cursor.y = H - 1;
|
||||
}
|
||||
} else {
|
||||
cursor.x = W - 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,9 @@ void screen_cursor_restore(bool withAttrs);
|
||||
/** Enable cursor display */
|
||||
void screen_cursor_enable(bool enable);
|
||||
|
||||
/** Enable auto wrap */
|
||||
void screen_wrap_enable(bool enable);
|
||||
|
||||
// --- Colors ---
|
||||
|
||||
/** Set cursor foreground color */
|
||||
|
||||
Reference in New Issue
Block a user