Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4be782c03 | ||
|
|
c29909726c | ||
|
|
45bac89298 | ||
|
|
c06770c353 | ||
|
|
52a627efc8 | ||
|
|
2e9383720c | ||
|
|
58f9f1be71 | ||
|
|
058441dda6 | ||
|
|
888802a519 |
@@ -14,8 +14,8 @@ android {
|
|||||||
applicationId "com.termux"
|
applicationId "com.termux"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
versionCode 50
|
versionCode 51
|
||||||
versionName "0.50"
|
versionName "0.51"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ ext {
|
|||||||
libraryDescription = 'The terminal emulator used in Termux'
|
libraryDescription = 'The terminal emulator used in Termux'
|
||||||
siteUrl = 'https://github.com/termux/termux'
|
siteUrl = 'https://github.com/termux/termux'
|
||||||
gitUrl = 'https://github.com/termux/termux.git'
|
gitUrl = 'https://github.com/termux/termux.git'
|
||||||
libraryVersion = '0.49'
|
libraryVersion = '0.50'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest package="com.termux.terminal">
|
||||||
package="com.termux.terminal">
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -632,6 +632,7 @@ public final class TerminalEmulator {
|
|||||||
int bottom = Math.min(getArg(2, mRows, true) + 1, effectiveBottomMargin - 1) + effectiveTopMargin;
|
int bottom = Math.min(getArg(2, mRows, true) + 1, effectiveBottomMargin - 1) + effectiveTopMargin;
|
||||||
int right = Math.min(getArg(3, mColumns, true) + 1, effectiveRightMargin - 1) + effectiveLeftMargin;
|
int right = Math.min(getArg(3, mColumns, true) + 1, effectiveRightMargin - 1) + effectiveLeftMargin;
|
||||||
if (mArgIndex >= 4) {
|
if (mArgIndex >= 4) {
|
||||||
|
if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1;
|
||||||
for (int i = 4; i <= mArgIndex; i++) {
|
for (int i = 4; i <= mArgIndex; i++) {
|
||||||
int bits = 0;
|
int bits = 0;
|
||||||
boolean setOrClear = true; // True if setting, false if clearing.
|
boolean setOrClear = true; // True if setting, false if clearing.
|
||||||
@@ -965,6 +966,7 @@ public final class TerminalEmulator {
|
|||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
case 'l':
|
case 'l':
|
||||||
|
if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1;
|
||||||
for (int i = 0; i <= mArgIndex; i++)
|
for (int i = 0; i <= mArgIndex; i++)
|
||||||
doDecSetOrReset(b == 'h', mArgs[i]);
|
doDecSetOrReset(b == 'h', mArgs[i]);
|
||||||
break;
|
break;
|
||||||
@@ -981,6 +983,7 @@ public final class TerminalEmulator {
|
|||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
case 's':
|
case 's':
|
||||||
|
if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1;
|
||||||
for (int i = 0; i <= mArgIndex; i++) {
|
for (int i = 0; i <= mArgIndex; i++) {
|
||||||
int externalBit = mArgs[i];
|
int externalBit = mArgs[i];
|
||||||
int internalBit = mapDecSetBitToInternalBit(externalBit);
|
int internalBit = mapDecSetBitToInternalBit(externalBit);
|
||||||
@@ -1307,6 +1310,8 @@ public final class TerminalEmulator {
|
|||||||
state.mSavedCursorRow = mCursorRow;
|
state.mSavedCursorRow = mCursorRow;
|
||||||
state.mSavedCursorCol = mCursorCol;
|
state.mSavedCursorCol = mCursorCol;
|
||||||
state.mSavedEffect = mEffect;
|
state.mSavedEffect = mEffect;
|
||||||
|
state.mSavedForeColor = mForeColor;
|
||||||
|
state.mSavedBackColor = mBackColor;
|
||||||
state.mSavedDecFlags = mCurrentDecSetFlags;
|
state.mSavedDecFlags = mCurrentDecSetFlags;
|
||||||
state.mUseLineDrawingG0 = mUseLineDrawingG0;
|
state.mUseLineDrawingG0 = mUseLineDrawingG0;
|
||||||
state.mUseLineDrawingG1 = mUseLineDrawingG1;
|
state.mUseLineDrawingG1 = mUseLineDrawingG1;
|
||||||
@@ -1318,6 +1323,8 @@ public final class TerminalEmulator {
|
|||||||
SavedScreenState state = (mScreen == mMainBuffer) ? mSavedStateMain : mSavedStateAlt;
|
SavedScreenState state = (mScreen == mMainBuffer) ? mSavedStateMain : mSavedStateAlt;
|
||||||
setCursorRowCol(state.mSavedCursorRow, state.mSavedCursorCol);
|
setCursorRowCol(state.mSavedCursorRow, state.mSavedCursorCol);
|
||||||
mEffect = state.mSavedEffect;
|
mEffect = state.mSavedEffect;
|
||||||
|
mForeColor = state.mSavedForeColor;
|
||||||
|
mBackColor = state.mSavedBackColor;
|
||||||
int mask = (DECSET_BIT_AUTOWRAP | DECSET_BIT_ORIGIN_MODE);
|
int mask = (DECSET_BIT_AUTOWRAP | DECSET_BIT_ORIGIN_MODE);
|
||||||
mCurrentDecSetFlags = (mCurrentDecSetFlags & ~mask) | (state.mSavedDecFlags & mask);
|
mCurrentDecSetFlags = (mCurrentDecSetFlags & ~mask) | (state.mSavedDecFlags & mask);
|
||||||
mUseLineDrawingG0 = state.mUseLineDrawingG0;
|
mUseLineDrawingG0 = state.mUseLineDrawingG0;
|
||||||
@@ -1639,6 +1646,7 @@ public final class TerminalEmulator {
|
|||||||
|
|
||||||
/** Select Graphic Rendition (SGR) - see http://en.wikipedia.org/wiki/ANSI_escape_code#graphics. */
|
/** Select Graphic Rendition (SGR) - see http://en.wikipedia.org/wiki/ANSI_escape_code#graphics. */
|
||||||
private void selectGraphicRendition() {
|
private void selectGraphicRendition() {
|
||||||
|
if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1;
|
||||||
for (int i = 0; i <= mArgIndex; i++) {
|
for (int i = 0; i <= mArgIndex; i++) {
|
||||||
int code = mArgs[i];
|
int code = mArgs[i];
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
@@ -2049,6 +2057,7 @@ public final class TerminalEmulator {
|
|||||||
buf.append(", escapeState=");
|
buf.append(", escapeState=");
|
||||||
buf.append(mEscapeState);
|
buf.append(mEscapeState);
|
||||||
boolean firstArg = true;
|
boolean firstArg = true;
|
||||||
|
if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1;
|
||||||
for (int i = 0; i <= mArgIndex; i++) {
|
for (int i = 0; i <= mArgIndex; i++) {
|
||||||
int value = mArgs[i];
|
int value = mArgs[i];
|
||||||
if (value >= 0) {
|
if (value >= 0) {
|
||||||
@@ -2263,8 +2272,8 @@ public final class TerminalEmulator {
|
|||||||
mBottomMargin = mRows;
|
mBottomMargin = mRows;
|
||||||
mRightMargin = mColumns;
|
mRightMargin = mColumns;
|
||||||
mAboutToAutoWrap = false;
|
mAboutToAutoWrap = false;
|
||||||
mForeColor = TextStyle.COLOR_INDEX_FOREGROUND;
|
mForeColor = mSavedStateMain.mSavedForeColor = mSavedStateAlt.mSavedForeColor = TextStyle.COLOR_INDEX_FOREGROUND;
|
||||||
mBackColor = TextStyle.COLOR_INDEX_BACKGROUND;
|
mBackColor = mSavedStateMain.mSavedBackColor = mSavedStateAlt.mSavedBackColor = TextStyle.COLOR_INDEX_BACKGROUND;
|
||||||
setDefaultTabStops();
|
setDefaultTabStops();
|
||||||
|
|
||||||
mUseLineDrawingG0 = mUseLineDrawingG1 = false;
|
mUseLineDrawingG0 = mUseLineDrawingG1 = false;
|
||||||
@@ -2318,7 +2327,7 @@ public final class TerminalEmulator {
|
|||||||
static final class SavedScreenState {
|
static final class SavedScreenState {
|
||||||
/** Saved state of the cursor position, Used to implement the save/restore cursor position escape sequences. */
|
/** Saved state of the cursor position, Used to implement the save/restore cursor position escape sequences. */
|
||||||
int mSavedCursorRow, mSavedCursorCol;
|
int mSavedCursorRow, mSavedCursorCol;
|
||||||
int mSavedEffect;
|
int mSavedEffect, mSavedForeColor, mSavedBackColor;
|
||||||
int mSavedDecFlags;
|
int mSavedDecFlags;
|
||||||
boolean mUseLineDrawingG0, mUseLineDrawingG1, mUseLineDrawingUsesG0 = true;
|
boolean mUseLineDrawingG0, mUseLineDrawingG1, mUseLineDrawingUsesG0 = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,4 +29,10 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase {
|
|||||||
withTerminalSized(13, 2).enterString("abcdefghijkl\b\b\b\b\b\033[20X").assertLinesAre("abcdefg ", " ");
|
withTerminalSized(13, 2).enterString("abcdefghijkl\b\b\b\b\b\033[20X").assertLinesAre("abcdefg ", " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** CSI Pm m Set SGR parameter(s) from semicolon-separated list Pm. */
|
||||||
|
public void testCsiSGRParameters() {
|
||||||
|
// Set more parameters (19) than supported (16). Additional parameters should be silently consumed.
|
||||||
|
withTerminalSized(3, 2).enterString("\033[0;38;2;255;255;255;48;2;0;0;0;1;2;3;4;5;7;8;9mabc").assertLinesAre("abc", " ");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,4 +227,44 @@ public class CursorAndScreenTest extends TerminalTestCase {
|
|||||||
withTerminalSized(3, 3).enterString("\b\b\b\bhi").assertLinesAre("hi ", " ", " ");
|
withTerminalSized(3, 3).enterString("\b\b\b\bhi").assertLinesAre("hi ", " ", " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testCursorSaveRestoreLocation() {
|
||||||
|
// DEC save/restore
|
||||||
|
withTerminalSized(4, 2).enterString("t\0337est\r\nme\0338ry ").assertLinesAre("try ", "me ");
|
||||||
|
// ANSI.SYS save/restore
|
||||||
|
withTerminalSized(4, 2).enterString("t\033[sest\r\nme\033[ury ").assertLinesAre("try ", "me ");
|
||||||
|
// Alternate screen enter/exit
|
||||||
|
withTerminalSized(4, 2).enterString("t\033[?1049h\033[Hest\r\nme").assertLinesAre("est ", "me ").enterString("\033[?1049lry").assertLinesAre("try ", " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCursorSaveRestoreTextStyle() {
|
||||||
|
long s;
|
||||||
|
|
||||||
|
// DEC save/restore
|
||||||
|
withTerminalSized(4, 2).enterString("\033[31;42;4m..\0337\033[36;47;24m\0338..");
|
||||||
|
s = getStyleAt(0, 3);
|
||||||
|
Assert.assertEquals(1, TextStyle.decodeForeColor(s));
|
||||||
|
Assert.assertEquals(2, TextStyle.decodeBackColor(s));
|
||||||
|
Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s));
|
||||||
|
|
||||||
|
// ANSI.SYS save/restore
|
||||||
|
withTerminalSized(4, 2).enterString("\033[31;42;4m..\033[s\033[36;47;24m\033[u..");
|
||||||
|
s = getStyleAt(0, 3);
|
||||||
|
Assert.assertEquals(1, TextStyle.decodeForeColor(s));
|
||||||
|
Assert.assertEquals(2, TextStyle.decodeBackColor(s));
|
||||||
|
Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s));
|
||||||
|
|
||||||
|
// Alternate screen enter/exit
|
||||||
|
withTerminalSized(4, 2);
|
||||||
|
enterString("\033[31;42;4m..\033[?1049h\033[H\033[36;47;24m.");
|
||||||
|
s = getStyleAt(0, 0);
|
||||||
|
Assert.assertEquals(6, TextStyle.decodeForeColor(s));
|
||||||
|
Assert.assertEquals(7, TextStyle.decodeBackColor(s));
|
||||||
|
Assert.assertEquals(0, TextStyle.decodeEffect(s));
|
||||||
|
enterString("\033[?1049l..");
|
||||||
|
s = getStyleAt(0, 3);
|
||||||
|
Assert.assertEquals(1, TextStyle.decodeForeColor(s));
|
||||||
|
Assert.assertEquals(2, TextStyle.decodeBackColor(s));
|
||||||
|
Assert.assertEquals(TextStyle.CHARACTER_ATTRIBUTE_UNDERLINE, TextStyle.decodeEffect(s));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest package="com.termux.view">
|
||||||
package="com.termux.view">
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
Reference in New Issue
Block a user