Skip to content

Commit

Permalink
Fix tabs to not overwrite cells
Browse files Browse the repository at this point in the history
  • Loading branch information
fornwall committed Feb 25, 2016
1 parent ce7ad53 commit 6ca055b
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 17 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ android {
applicationId "com.termux"
minSdkVersion 21
targetSdkVersion 23
versionCode 29
versionName "0.29"
versionCode 30
versionName "0.30"
}

buildTypes {
Expand Down
31 changes: 17 additions & 14 deletions app/src/main/java/com/termux/terminal/TerminalEmulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,9 @@ private void processByte(byte byteToProcess) {
processCodePoint((codePoint & 0x7F) + 0x40);
} else {
switch (Character.getType(codePoint)) {
case Character.UNASSIGNED:
case Character.SURROGATE:
codePoint = UNICODE_REPLACEMENT_CHAR;
case Character.UNASSIGNED:
case Character.SURROGATE:
codePoint = UNICODE_REPLACEMENT_CHAR;
}
processCodePoint(codePoint);
}
Expand Down Expand Up @@ -474,16 +474,19 @@ public void processCodePoint(int b) {
else
mSession.onBell();
break;
case 8: // BS
setCursorCol(Math.max(mLeftMargin, mCursorCol - 1));
break;
case 9: // Horizontal tab - move to next tab stop, but not past edge of screen
int nextTabStop = nextTabStop(1);
while (mCursorCol < nextTabStop) {
// Emit newlines to get background color right.
processCodePoint(' ');
}
break;
case 8: // Backspace (BS, ^H).
setCursorCol(Math.max(mLeftMargin, mCursorCol - 1));
break;
case 9: // Horizontal tab (HT, \t) - move to next tab stop, but not past edge of screen
// XXX: Should perhaps use color if writing to new cells. Try with
// printf "\033[41m\tXX\033[0m\n"
// The OSX Terminal.app colors the spaces from the tab red, but xterm does not.
// Note that Terminal.app only colors on new cells, in e.g.
// printf "\033[41m\t\r\033[42m\tXX\033[0m\n"
// the first cells are created with a red background, but when tabbing over
// them again with a green background they are not overwritten.
mCursorCol = nextTabStop(1);
break;
case 10: // Line feed (LF, \n).
case 11: // Vertical tab (VT, \v).
case 12: // Form feed (FF, \f).
Expand Down Expand Up @@ -1331,7 +1334,7 @@ private void doCsi(int b) {
continueSequence(ESC_CSI_ARGS_ASTERIX);
break;
case '@': {
// "CSI{n}@" - Insert ${n} space characters (ICH) - http://www.vt100.net/docs/vt510-rm/ICH.
// "CSI{n}@" - Insert ${n} space characters (ICH) - http://www.vt100.net/docs/vt510-rm/ICH.
mAboutToAutoWrap = false;
int columnsAfterCursor = mColumns - mCursorCol;
int spacesToInsert = Math.min(getArg0(1), columnsAfterCursor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,12 @@ public void testReportCursorPosition() {
}
}

public void testHorizontalTabColorsBackground() {
/**
* See comments on horizontal tab handling in TerminalEmulator.java.
*
* We do not want to color already written cells when tabbing over them.
*/
public void DISABLED_testHorizontalTabColorsBackground() {
withTerminalSized(10, 3).enterString("\033[48;5;15m").enterString("\t");
assertCursorAt(0, 8);
for (int i = 0; i < 10; i++) {
Expand Down
5 changes: 5 additions & 0 deletions app/src/test/java/com/termux/terminal/TerminalTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -258,4 +258,9 @@ public void testAutomargins() throws UnsupportedEncodingException {
withTerminalSized(3, 3).enterString("abc\r ").assertLinesAre(" bc", " ", " ").assertCursorAt(0, 1);
}

public void testTab() {
withTerminalSized(11, 2).enterString("01234567890\r\tXX").assertLinesAre("01234567XX0", " ");
withTerminalSized(11, 2).enterString("01234567890\033[44m\r\tXX").assertLinesAre("01234567XX0", " ");
}

}

0 comments on commit 6ca055b

Please sign in to comment.