diff --git a/src/apps/terminal/TermParse.cpp b/src/apps/terminal/TermParse.cpp index de7474d61b..801b9a509a 100644 --- a/src/apps/terminal/TermParse.cpp +++ b/src/apps/terminal/TermParse.cpp @@ -883,6 +883,26 @@ TermParse::EscParse() parsestate = groundtable; break; + case CASE_VPA: // ESC [...d move cursor absolute vertical + /* VPA (CV) */ + if ((row = param[0]) < 1) + row = 1; + + // note beterm wants it 1-based unlike usual terminals + fView->SetCurY(row - 1); + parsestate = groundtable; + break; + + case CASE_HPA: // ESC [...G move cursor absolute horizontal + /* HPA (CH) */ + if ((col = param[0]) < 1) + col = 1; + + // note beterm wants it 1-based unlike usual terminals + fView->SetCurX(col - 1); + parsestate = groundtable; + break; + default: break; } diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index 31fa6f3531..21de80e8d5 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -838,7 +838,7 @@ TermView::SetCurPos(int x, int y) void TermView::SetCurX(int x) { - if (x >= 0 && x < fTermRows) { + if (x >= 0 && x < fTermColumns) { UpdateLine(); fCurPos.x = x; } @@ -849,7 +849,7 @@ TermView::SetCurX(int x) void TermView::SetCurY(int y) { - if (y >= 0 && y < fTermColumns) { + if (y >= 0 && y < fTermRows) { UpdateLine(); fCurPos.y = y; } diff --git a/src/apps/terminal/VTPrsTbl.c b/src/apps/terminal/VTPrsTbl.c index b0665b9e5e..7f5f1fe2b4 100644 --- a/src/apps/terminal/VTPrsTbl.c +++ b/src/apps/terminal/VTPrsTbl.c @@ -1096,7 +1096,7 @@ CASE_CUF, CASE_CUB, CASE_GROUND_STATE, CASE_GROUND_STATE, -CASE_GROUND_STATE, +CASE_HPA, /* H I J K */ CASE_CUP, CASE_GROUND_STATE, @@ -1133,7 +1133,7 @@ CASE_GROUND_STATE, CASE_GROUND_STATE, CASE_GROUND_STATE, /* d e f g */ -CASE_GROUND_STATE, +CASE_VPA, CASE_GROUND_STATE, CASE_CUP, CASE_GROUND_STATE, diff --git a/src/apps/terminal/VTparse.h b/src/apps/terminal/VTparse.h index 1870147d2e..bb546949af 100644 --- a/src/apps/terminal/VTparse.h +++ b/src/apps/terminal/VTparse.h @@ -116,3 +116,6 @@ #define CASE_SJIS_KANA 84 #define CASE_PRINT_GR 85 #define CASE_PRINT_CS96 86 +// additions, maybe reorder/reuse older ones ? +#define CASE_VPA 87 +#define CASE_HPA 88