Skip to content

Commit 08ebf82

Browse files
committed
UI: Fix ESCm implementation issue
1 parent 8cc65ce commit 08ebf82

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

ChangeLog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
2017-11-28 (0.12.11)
22
Fix img.save(dat) to build correct indexes
3+
Fix ESCm implementation bug
4+
Implements ESC<n ESC>n back screen handlers
35

46
2017-11-28 (0.12.10)
57
Released 82f865d61a6eba1c017b8a58e1c892f1b7d6a0c0

src/ui/ansiwidget.cpp

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ void AnsiWidget::print(const char *str) {
203203
case '\003': // end of text
204204
flush(true);
205205
break;
206-
case '\xC':
206+
case '\xC': // form feed
207207
clearScreen();
208208
break;
209209
case '\033': // ESC ctrl chars
@@ -218,9 +218,6 @@ void AnsiWidget::print(const char *str) {
218218
case '\r': // return
219219
_back->_curX = INITXY; // erasing the line will clear any previous text
220220
break;
221-
case 'm': // scroll to the top (M = scroll up one line)
222-
_back->_scrollY = 0;
223-
break;
224221
default:
225222
p += _back->print(p, lineHeight) - 1; // allow for p++
226223
break;
@@ -658,11 +655,46 @@ bool AnsiWidget::drawHoverLink(MAEvent &event) {
658655

659656
// print() helper
660657
void AnsiWidget::handleEscape(const char *&p, int lineHeight) {
661-
if (*(p + 1) == '[') {
658+
switch (*(p + 1)) {
659+
case '[':
662660
p += 2;
663661
while (doEscape(p, lineHeight)) {
664662
// continue
665663
}
664+
break;
665+
case 'm':
666+
// scroll to the top (M = scroll up one line)
667+
p += 2;
668+
_back->_scrollY = 0;
669+
break;
670+
case '<':
671+
// select back screen
672+
switch (*(p + 2)) {
673+
case '1':
674+
p += 3;
675+
selectBackScreen(USER_SCREEN1);
676+
break;
677+
case '2':
678+
p += 3;
679+
selectBackScreen(USER_SCREEN2);
680+
break;
681+
}
682+
break;
683+
case '>':
684+
// select front screen
685+
switch (*(p + 2)) {
686+
case '1':
687+
p += 3;
688+
selectFrontScreen(USER_SCREEN1);
689+
break;
690+
case '2':
691+
p += 3;
692+
selectFrontScreen(USER_SCREEN2);
693+
break;
694+
}
695+
break;
696+
default:
697+
break;
666698
}
667699
}
668700

0 commit comments

Comments
 (0)