fix bug with hanging flag left set after GoTo col 80
This commit is contained in:
+13
-21
@@ -123,7 +123,8 @@ static volatile int notifyLock = 0;
|
|||||||
/**
|
/**
|
||||||
* Restore hard defaults
|
* Restore hard defaults
|
||||||
*/
|
*/
|
||||||
void terminal_restore_defaults(void)
|
void ICACHE_FLASH_ATTR
|
||||||
|
terminal_restore_defaults(void)
|
||||||
{
|
{
|
||||||
termconf->default_bg = 0;
|
termconf->default_bg = 0;
|
||||||
termconf->default_fg = 7;
|
termconf->default_fg = 7;
|
||||||
@@ -141,14 +142,16 @@ void terminal_restore_defaults(void)
|
|||||||
/**
|
/**
|
||||||
* Apply settings after eg. restore from defaults
|
* Apply settings after eg. restore from defaults
|
||||||
*/
|
*/
|
||||||
void terminal_apply_settings(void)
|
void ICACHE_FLASH_ATTR
|
||||||
|
terminal_apply_settings(void)
|
||||||
{
|
{
|
||||||
terminal_apply_settings_noclear();
|
terminal_apply_settings_noclear();
|
||||||
screen_init();
|
screen_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** this is used when changing terminal settings that do not affect the screen size */
|
/** this is used when changing terminal settings that do not affect the screen size */
|
||||||
void terminal_apply_settings_noclear(void)
|
void ICACHE_FLASH_ATTR
|
||||||
|
terminal_apply_settings_noclear(void)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
@@ -709,21 +712,8 @@ void ICACHE_FLASH_ATTR
|
|||||||
screen_cursor_set(int y, int x)
|
screen_cursor_set(int y, int x)
|
||||||
{
|
{
|
||||||
NOTIFY_LOCK();
|
NOTIFY_LOCK();
|
||||||
if (cursor.origin_mode) {
|
screen_cursor_set_x(x);
|
||||||
y += R0;
|
screen_cursor_set_y(y);
|
||||||
if (y > R1) y = R1;
|
|
||||||
if (y < R0) y = R0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (y > H-1) y = H-1;
|
|
||||||
if (y < 0) y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x >= W) x = W - 1;
|
|
||||||
if (x < 0) x = 0;
|
|
||||||
cursor.x = x;
|
|
||||||
cursor.y = y;
|
|
||||||
clear_invalid_hanging();
|
|
||||||
NOTIFY_DONE();
|
NOTIFY_DONE();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -745,8 +735,12 @@ screen_cursor_set_x(int x)
|
|||||||
{
|
{
|
||||||
NOTIFY_LOCK();
|
NOTIFY_LOCK();
|
||||||
if (x >= W) x = W - 1;
|
if (x >= W) x = W - 1;
|
||||||
|
if (x < 0) x = 0;
|
||||||
cursor.x = x;
|
cursor.x = x;
|
||||||
clear_invalid_hanging();
|
// Always clear hanging on cursor set
|
||||||
|
// hanging happens when the cursor is virtually at col=81, which
|
||||||
|
// cannot be set using the cursor-set commands.
|
||||||
|
cursor.hanging = false;
|
||||||
NOTIFY_DONE();
|
NOTIFY_DONE();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1039,9 +1033,7 @@ screen_putchar(const char *ch)
|
|||||||
case BS:
|
case BS:
|
||||||
if (cursor.x > 0) {
|
if (cursor.x > 0) {
|
||||||
// backspace should go to col 79 if "hanging" after 80 (as if it never actually left the 80th col)
|
// backspace should go to col 79 if "hanging" after 80 (as if it never actually left the 80th col)
|
||||||
if (cursor.hanging) {
|
|
||||||
cursor.hanging = false;
|
cursor.hanging = false;
|
||||||
}
|
|
||||||
cursor.x--;
|
cursor.x--;
|
||||||
}
|
}
|
||||||
// we should not wrap around, and backspace should not even clear the cell (verified in xterm)
|
// we should not wrap around, and backspace should not even clear the cell (verified in xterm)
|
||||||
|
|||||||
Reference in New Issue
Block a user