From 1be51392537e776644af72dda5fc200fa0ee721f Mon Sep 17 00:00:00 2001 From: Will Lin Date: Tue, 18 Apr 2017 20:13:47 +0800 Subject: [PATCH 01/28] [Android-things] Launch TermuxActivity automatically on boot --- app/src/main/AndroidManifest.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d875d5ab..d8ae463b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -76,6 +76,18 @@ + + + + + + + + + + Date: Mon, 15 May 2017 23:40:55 +0200 Subject: [PATCH 02/28] Export TMPDIR to $PREFIX/tmp Fixes https://github.com/termux/termux-packages/issues/1010. Fixes https://github.com/termux/termux-app/issues/306. --- app/src/main/java/com/termux/app/BackgroundJob.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/BackgroundJob.java b/app/src/main/java/com/termux/app/BackgroundJob.java index bd76edc2..1ff2450e 100644 --- a/app/src/main/java/com/termux/app/BackgroundJob.java +++ b/app/src/main/java/com/termux/app/BackgroundJob.java @@ -116,8 +116,9 @@ public final class BackgroundJob { final String langEnv = "LANG=en_US.UTF-8"; final String pathEnv = "PATH=" + TermuxService.PREFIX_PATH + "/bin:" + TermuxService.PREFIX_PATH + "/bin/applets"; final String pwdEnv = "PWD=" + cwd; + final String tmpdirEnv = "TMPDIR=" + TermuxService.PREFIX_PATH + "/tmp"; - return new String[]{termEnv, homeEnv, prefixEnv, ps1Env, ldEnv, langEnv, pathEnv, pwdEnv, androidRootEnv, androidDataEnv, externalStorageEnv}; + return new String[]{termEnv, homeEnv, prefixEnv, ps1Env, ldEnv, langEnv, pathEnv, pwdEnv, androidRootEnv, androidDataEnv, externalStorageEnv, tmpdirEnv}; } } From 0714e435cbb422b75dd8b0eb20f3e7e745ce613a Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:13 +0200 Subject: [PATCH 03/28] Do not show a Toast on clipboard text Fixes https://github.com/termux/termux-app/issues/149. --- app/src/main/java/com/termux/app/TermuxActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 8e6c7255..c869ffeb 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -397,7 +397,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection @Override public void onClipboardText(TerminalSession session, String text) { if (!mIsVisible) return; - showToast("Clipboard:\n\"" + text + "\"", false); ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setPrimaryClip(new ClipData(null, new String[]{"text/plain"}, new ClipData.Item(text))); } From cf06e704296f16b00bacdeb2f13e15882f8dad21 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:30 +0200 Subject: [PATCH 04/28] Update gradle configuration --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 88e2be60..348ed3a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" dependencies { compile 'com.android.support:support-annotations:25.3.1' diff --git a/build.gradle b/build.gradle index 3ee2d98e..9c95303e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:2.3.2' } } From 3f0837688194ade55512b98329a343efeddb82de Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 15 May 2017 23:42:55 +0200 Subject: [PATCH 05/28] Bump version to 0.49 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 348ed3a7..48289e3a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 48 - versionName "0.48" + versionCode 49 + versionName "0.49" } buildTypes { From 61f766b59fb830ff4b3b3532c4a90de40f9ea939 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 16 May 2017 00:21:15 +0200 Subject: [PATCH 06/28] Bump build tools in .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8c09f531..2e846d2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ android: components: - platform-tools - tools - - build-tools-25.0.2 + - build-tools-25.0.3 - android-25 - extra-android-m2repository From 9d3f7734a18cefaba6a2199204cbad767d502828 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 16 May 2017 11:11:57 +0200 Subject: [PATCH 07/28] Update android build tools --- terminal-emulator/build.gradle | 2 +- terminal-view/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index d10a39e1..04fb58db 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/terminal-view/build.gradle b/terminal-view/build.gradle index 7e4c7cfa..be547fe1 100644 --- a/terminal-view/build.gradle +++ b/terminal-view/build.gradle @@ -18,7 +18,7 @@ ext { android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" dependencies { compile 'com.android.support:support-annotations:25.3.1' From 1a09b6d2a64a813aaf56a209e86100231f36c1e9 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Thu, 18 May 2017 13:25:41 +0200 Subject: [PATCH 08/28] Change android:extractNativeLibs to false We're trying this to see if that fixes an F-Droid build issue. See #319. --- app/build.gradle | 4 ++-- app/src/main/AndroidManifest.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48289e3a..a057421c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 49 - versionName "0.49" + versionCode 50 + versionName "0.50" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d875d5ab..455b7b1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ Date: Sat, 3 Jun 2017 00:14:20 -0500 Subject: [PATCH 09/28] Add test for CSI followed by many parameters --- .../com/termux/terminal/ControlSequenceIntroducerTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index 127b9539..626075f8 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -29,4 +29,10 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { 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", " "); + } + } From 058441dda6f703c15bad9d5ed327a9ec24e78229 Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Fri, 2 Jun 2017 13:18:03 -0500 Subject: [PATCH 10/28] Fix FC from too many control code parameters When the number of parameters in a CSI control code exceeds the size of the mArgs array, the code may attempt to read past the end of the array, resulting in a force close of the app. Stop the index from moving past the last element of the mArgs array. --- .../src/main/java/com/termux/terminal/TerminalEmulator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index e172d38e..6aa150a7 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -632,6 +632,7 @@ public final class TerminalEmulator { int bottom = Math.min(getArg(2, mRows, true) + 1, effectiveBottomMargin - 1) + effectiveTopMargin; int right = Math.min(getArg(3, mColumns, true) + 1, effectiveRightMargin - 1) + effectiveLeftMargin; if (mArgIndex >= 4) { + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 4; i <= mArgIndex; i++) { int bits = 0; boolean setOrClear = true; // True if setting, false if clearing. @@ -965,6 +966,7 @@ public final class TerminalEmulator { break; case 'h': case 'l': + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) doDecSetOrReset(b == 'h', mArgs[i]); break; @@ -981,6 +983,7 @@ public final class TerminalEmulator { break; case 'r': case 's': + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int externalBit = mArgs[i]; int internalBit = mapDecSetBitToInternalBit(externalBit); @@ -1639,6 +1642,7 @@ public final class TerminalEmulator { /** Select Graphic Rendition (SGR) - see http://en.wikipedia.org/wiki/ANSI_escape_code#graphics. */ private void selectGraphicRendition() { + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int code = mArgs[i]; if (code < 0) { @@ -2049,6 +2053,7 @@ public final class TerminalEmulator { buf.append(", escapeState="); buf.append(mEscapeState); boolean firstArg = true; + if (mArgIndex >= mArgs.length) mArgIndex = mArgs.length - 1; for (int i = 0; i <= mArgIndex; i++) { int value = mArgs[i]; if (value >= 0) { From 58f9f1be71a8da42afcefdc7e687014a35c97698 Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Sat, 3 Jun 2017 17:20:43 -0500 Subject: [PATCH 11/28] Add tests for cursor save/restore --- .../termux/terminal/CursorAndScreenTest.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java b/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java index 567e627b..92c41f0f 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/CursorAndScreenTest.java @@ -227,4 +227,44 @@ public class CursorAndScreenTest extends TerminalTestCase { 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)); + } + } From 2e9383720c44a0c216875f813005095a8743546b Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Fri, 2 Jun 2017 00:14:12 -0500 Subject: [PATCH 12/28] Make cursor save/restore affect color attributes SGR attributes are stored in three variables: mEffect, mForeColor, and mBackColor. Saving/restoring the cursor only preserves mEffect. Change the cursor save/restore methods to additionally preserve mForeColor and mBackColor. This affects both 'explit' saving/restoring the cursor and switching to/from the alternate screen buffer. --- .../java/com/termux/terminal/TerminalEmulator.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index e172d38e..1d6eaf74 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -1307,6 +1307,8 @@ public final class TerminalEmulator { state.mSavedCursorRow = mCursorRow; state.mSavedCursorCol = mCursorCol; state.mSavedEffect = mEffect; + state.mSavedForeColor = mForeColor; + state.mSavedBackColor = mBackColor; state.mSavedDecFlags = mCurrentDecSetFlags; state.mUseLineDrawingG0 = mUseLineDrawingG0; state.mUseLineDrawingG1 = mUseLineDrawingG1; @@ -1318,6 +1320,8 @@ public final class TerminalEmulator { SavedScreenState state = (mScreen == mMainBuffer) ? mSavedStateMain : mSavedStateAlt; setCursorRowCol(state.mSavedCursorRow, state.mSavedCursorCol); mEffect = state.mSavedEffect; + mForeColor = state.mSavedForeColor; + mBackColor = state.mSavedBackColor; int mask = (DECSET_BIT_AUTOWRAP | DECSET_BIT_ORIGIN_MODE); mCurrentDecSetFlags = (mCurrentDecSetFlags & ~mask) | (state.mSavedDecFlags & mask); mUseLineDrawingG0 = state.mUseLineDrawingG0; @@ -2263,8 +2267,8 @@ public final class TerminalEmulator { mBottomMargin = mRows; mRightMargin = mColumns; mAboutToAutoWrap = false; - mForeColor = TextStyle.COLOR_INDEX_FOREGROUND; - mBackColor = TextStyle.COLOR_INDEX_BACKGROUND; + mForeColor = mSavedStateMain.mSavedForeColor = mSavedStateAlt.mSavedForeColor = TextStyle.COLOR_INDEX_FOREGROUND; + mBackColor = mSavedStateMain.mSavedBackColor = mSavedStateAlt.mSavedBackColor = TextStyle.COLOR_INDEX_BACKGROUND; setDefaultTabStops(); mUseLineDrawingG0 = mUseLineDrawingG1 = false; @@ -2318,7 +2322,7 @@ public final class TerminalEmulator { static final class SavedScreenState { /** Saved state of the cursor position, Used to implement the save/restore cursor position escape sequences. */ int mSavedCursorRow, mSavedCursorCol; - int mSavedEffect; + int mSavedEffect, mSavedForeColor, mSavedBackColor; int mSavedDecFlags; boolean mUseLineDrawingG0, mUseLineDrawingG1, mUseLineDrawingUsesG0 = true; } From 45bac89298543a9c9ca2e0740777da33dd810699 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:45:15 +0200 Subject: [PATCH 13/28] Remove unused xmlns:android declaration --- terminal-emulator/src/main/AndroidManifest.xml | 3 +-- terminal-view/src/main/AndroidManifest.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/terminal-emulator/src/main/AndroidManifest.xml b/terminal-emulator/src/main/AndroidManifest.xml index b931189d..a293cb64 100644 --- a/terminal-emulator/src/main/AndroidManifest.xml +++ b/terminal-emulator/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + diff --git a/terminal-view/src/main/AndroidManifest.xml b/terminal-view/src/main/AndroidManifest.xml index a312303c..f2b0725d 100644 --- a/terminal-view/src/main/AndroidManifest.xml +++ b/terminal-view/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + From c29909726cb2c21914b9f1c13a1097d00c910122 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:45:44 +0200 Subject: [PATCH 14/28] Bump terminal-emulator libraryVersion to 0.50 --- terminal-emulator/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminal-emulator/build.gradle b/terminal-emulator/build.gradle index 04fb58db..759c5b8a 100644 --- a/terminal-emulator/build.gradle +++ b/terminal-emulator/build.gradle @@ -13,7 +13,7 @@ ext { libraryDescription = 'The terminal emulator used in Termux' siteUrl = 'https://github.com/termux/termux' gitUrl = 'https://github.com/termux/termux.git' - libraryVersion = '0.49' + libraryVersion = '0.50' } android { From d4be782c03eea8b116bdc97c71c61c4d88b21edf Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 5 Jun 2017 22:49:11 +0200 Subject: [PATCH 15/28] Bump version to 0.51 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a057421c..e9fa9a2d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 50 - versionName "0.50" + versionCode 51 + versionName "0.51" } buildTypes { From c972377bd120c685abe508fc38f02795ecbcb01f Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 11 Jun 2017 22:47:59 +0200 Subject: [PATCH 16/28] Update gradle config --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 54212 -> 54783 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 9c95303e..ee9a47ab 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index eac8c4a1e1cd4a804d6bb953bd7248e926025859..f72beb3751268d6264f1768edc393ed5a8a27c26 100644 GIT binary patch delta 6729 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 Date: Mon, 12 Jun 2017 01:47:27 -0600 Subject: [PATCH 17/28] Add Multi Window support for Samsung devices A single meta-data entry is enough to make Termux "Multi Window" aware on supported Samsung devices. Tested and confirmed working on Samsung Note Pro 12.2 running Android 5.1.1. This addition should not interfer with Android 6+'s split screen feature. Tested and confirmed split screen functions as normal on a Nexus 6 running Android 7.0. This addition should go unnoticed on non-Smasung Android 5 devices. Tested and confirmed no functionality visible on Nexus 5 running Android 5.1. --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 455b7b1e..c36010e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -99,6 +99,7 @@ android:grantUriPermissions="true" android:name="com.termux.app.TermuxOpenReceiver$ContentProvider" /> + From 7913e765d5239bac6bb8e2fe49d6811aa1a54eb2 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 13 Jun 2017 16:44:33 +0200 Subject: [PATCH 18/28] Bump version to 0.52 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e9fa9a2d..da92973c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 51 - versionName "0.51" + versionCode 52 + versionName "0.52" } buildTypes { From 5b3909cb73b23542734b3315c9c02da7c6a15512 Mon Sep 17 00:00:00 2001 From: Will Lin Date: Sat, 17 Jun 2017 15:39:23 +0800 Subject: [PATCH 19/28] Update AndroidManifest.xml with expanded comment --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8ae463b..414ea3d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,7 +80,7 @@ android:name=".HomeActivity" android:targetActivity="com.termux.app.TermuxActivity"> - + From f9a565d1e03595a6bc9e5dc9fb74f941bb741687 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:28:18 +0200 Subject: [PATCH 20/28] Ignore C1 control codes C1 control codes are not used nowadays and just risks messing up the terminal when they are used by accident. --- .../main/java/com/termux/terminal/TerminalEmulator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index a9c88004..a993d834 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -419,10 +419,11 @@ public final class TerminalEmulator { mUtf8Index = mUtf8ToFollow = 0; if (codePoint >= 0x80 && codePoint <= 0x9F) { - // Sequence decoded to a C1 control character which is the same as escape followed by - // ((code & 0x7F) + 0x40). - processCodePoint(/* escape (hexadecimal=0x1B, octal=033): */27); - processCodePoint((codePoint & 0x7F) + 0x40); + // Sequence decoded to a C1 control character which we ignore. They are + // not used nowadays and increases the risk of messing up the terminal state + // on binary input. XTerm does not allow them in utf-8: + // "It is not possible to use a C1 control obtained from decoding the + // UTF-8 text" - http://invisible-island.net/xterm/ctlseqs/ctlseqs.html } else { switch (Character.getType(codePoint)) { case Character.UNASSIGNED: From ad293562bc065f414a1c6b73a74ab8481e405980 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:29:05 +0200 Subject: [PATCH 21/28] Fix possible crash in the copy/paste/more dialog --- terminal-view/src/main/java/com/termux/view/TerminalView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index fb018747..91d0762d 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -834,6 +834,10 @@ public final class TerminalView extends View { @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (!mIsSelectingText) { + // Fix issue where the dialog is pressed while being dismissed. + return true; + } switch (item.getItemId()) { case 1: String selectedText = mEmulator.getSelectedText(mSelX1, mSelY1, mSelX2, mSelY2).trim(); From 05ea2ea2389adbe7766e9da21ffe1ae98446a293 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Mon, 26 Jun 2017 01:30:08 +0200 Subject: [PATCH 22/28] Bump version to 0.53 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index da92973c..2d2f3475 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 25 - versionCode 52 - versionName "0.52" + versionCode 53 + versionName "0.53" } buildTypes { From adae111d5c421da0ebef6354abb821c18b807544 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 9 Jul 2017 21:07:18 +0200 Subject: [PATCH 23/28] Update gradle config --- .travis.yml | 2 +- app/build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 54783 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 6 +++--- terminal-emulator/build.gradle | 2 +- terminal-view/build.gradle | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2e846d2e..47275393 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ android: components: - platform-tools - tools - - build-tools-25.0.3 + - build-tools-26.0.0 - android-25 - extra-android-m2repository diff --git a/app/build.gradle b/app/build.gradle index 2d2f3475..901fa1c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.3" + buildToolsVersion "26.0.0" dependencies { compile 'com.android.support:support-annotations:25.3.1' diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f72beb3751268d6264f1768edc393ed5a8a27c26..57f11ccfb1aa979ebac9b64050e8123cfaa31150 100644 GIT binary patch delta 17163 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 P;_&42SGCxjkAOr0O)1=S delta 17117 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 Date: Sat, 29 Jul 2017 03:05:48 +0200 Subject: [PATCH 24/28] Update gradle --- gradle/wrapper/gradle-wrapper.jar | Bin 54712 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 57f11ccfb1aa979ebac9b64050e8123cfaa31150..84abcfb69d0ca4655ca5999b3c17cb95c6fd989f 100644 GIT binary patch delta 75 zcmdn7nt8`+<_YF39P!#l6Ro4!J{El}Vq};gwQ-xxVdkw8e Date: Sun, 13 Aug 2017 16:14:31 +0200 Subject: [PATCH 25/28] Start supporting the REP escape sequence --- .../main/java/com/termux/terminal/TerminalEmulator.java | 8 ++++++++ .../termux/terminal/ControlSequenceIntroducerTest.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index a993d834..10c7321d 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -223,6 +223,7 @@ public final class TerminalEmulator { private byte mUtf8ToFollow, mUtf8Index; private final byte[] mUtf8InputBuffer = new byte[4]; + private int mLastEmittedCodePoint = -1; public final TerminalColors mColors = new TerminalColors(); @@ -1509,6 +1510,11 @@ public final class TerminalEmulator { case '`': // Horizontal position absolute (HPA - http://www.vt100.net/docs/vt510-rm/HPA). setCursorColRespectingOriginMode(getArg0(1) - 1); break; + case 'b': // Repeat the preceding graphic character Ps times (REP). + if (mLastEmittedCodePoint == -1) break; + final int numRepeat = getArg0(1); + for (int i = 0; i < numRepeat; i++) emitCodePoint(mLastEmittedCodePoint); + break; case 'c': // Primary Device Attributes (http://www.vt100.net/docs/vt510-rm/DA1) if argument is missing or zero. // The important part that may still be used by some (tmux stores this value but does not currently use it) // is the first response parameter identifying the terminal service class, where we send 64 for "vt420". @@ -1574,6 +1580,7 @@ public final class TerminalEmulator { // Also require that top + 2 <= bottom. mTopMargin = Math.max(0, Math.min(getArg0(1) - 1, mRows - 2)); mBottomMargin = Math.max(mTopMargin + 2, Math.min(getArg1(mRows), mRows)); + // DECSTBM moves the cursor to column 1, line 1 of the page respecting origin mode. setCursorPosition(0, 0); } @@ -2091,6 +2098,7 @@ public final class TerminalEmulator { * @param codePoint The code point of the character to display */ private void emitCodePoint(int codePoint) { + mLastEmittedCodePoint = codePoint; if (mUseLineDrawingUsesG0 ? mUseLineDrawingG0 : mUseLineDrawingG1) { // http://www.vt100.net/docs/vt102-ug/table5-15.html. switch (codePoint) { diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index 626075f8..b48243e5 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -35,4 +35,12 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { 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", " "); } + /** CSI Ps b Repeat the preceding graphic character Ps times (REP). */ + public void testRepeat() { + withTerminalSized(3, 2).enterString("a\033[b").assertLinesAre("aa ", " "); + withTerminalSized(3, 2).enterString("a\033[2b").assertLinesAre("aaa", " "); + // When no char has been output we ignore REP: + withTerminalSized(3, 2).enterString("\033[b").assertLinesAre(" ", " "); + } + } From 68912139f6a8c8e2527b85d676b83bea5617ccac Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Wed, 23 Aug 2017 23:29:59 +0200 Subject: [PATCH 26/28] Additional REP test --- .../com/termux/terminal/ControlSequenceIntroducerTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java index b48243e5..88b8e026 100644 --- a/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java +++ b/terminal-emulator/src/test/java/com/termux/terminal/ControlSequenceIntroducerTest.java @@ -41,6 +41,9 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase { withTerminalSized(3, 2).enterString("a\033[2b").assertLinesAre("aaa", " "); // When no char has been output we ignore REP: withTerminalSized(3, 2).enterString("\033[b").assertLinesAre(" ", " "); + // This shows that REP outputs the last emitted code point and not the one relative to the + // current cursor position: + withTerminalSized(5, 2).enterString("abcde\033[2G\033[2b\n").assertLinesAre("aeede", " "); } } From 42e3163e927c99089fcd770fd9db33dcfcda8eb2 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Thu, 24 Aug 2017 20:49:43 +0200 Subject: [PATCH 27/28] Update gradle to 4.1 --- gradle/wrapper/gradle-wrapper.jar | Bin 54712 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 84abcfb69d0ca4655ca5999b3c17cb95c6fd989f..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 673 zcmdn7nt97=<_YGU789R&*)uROgiLe@Vf$3{v51jjg4D)sHiual7#tZUe>-f+&%zMk z&CcPq`a`ZT0|SHLWQQYO2yK%m9|>lhHTn4wL&klRC68J#y=0jD@tEl3jH6miGK^rR zKcm!S%`*a%)7S)f7~mj`ZSu!svXgm^88KP0gPF0%oEc|NUU))An~Ke^+C78AQ3nCoZC zKKa54BPMB6D3^D#+DR?O+R1?@eV7Ei!GgZNypsdGB_`iIsl_Da3l$Qctb0m}$t?uT z%{%4Jq!tNgo;l^h$TV5-bSM*l>SWzi)yci5wHWgz?>KG4G&gnf?o{K+{8t4gTb_|( z(#V*+J5_RWe1-~GXwexdrn5Pd8}no)-#X*Sl$2Ut!hxrVQ%#9s^M2GmMVjy@+a z+3dU&WANm_^TkXbo52z<&$}@SPd2!a$t2o8*>Jk%D}&5G=d(q7%Q7{5(6yp+XsVGh`|1DC9s)aQel3YR^YQWs4wY*d=u zbJ>7VVDjF}!Hh2^3tow2d^b7!N;=b_gOeW|w4Tg=Rf}=zWUH%s@}M*YPe=?53=)V4 SWnf@T1;|`lNnEmPWEM#n!Nw07E=Tph&$<+6_X7+gvB{I>X;MLTuum&WAg4} z228KTVLYzm4otTtK)lIZk_wYGPYFz(CNIFl00&+2V95j}w#obDMJC@luEk`i1QimW zJmajuWNlq!_42x4Nk3iw$?c~ECX4DJOLFRgB`x$IlA5N-lCq{?Ngq>Qu+DA|WXXCD zu;e-qp2_(qwU~swCo`T>n(XH-0d|6huK+jP#SAi&P6ac0gn%_SJIF}d%u7L(A{$$VFoCi`t=0~`2l z4|0gUn#_A8lIg?#$y^6)Cik5Yn7rkR6yuS}=dYwOO+P$&<6*_g5m$NSK?xh4mKhir VBoI-;z`*cga`RPfHs>QCK>$aZ63qYr diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1315ce35..f16d2666 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sat Jul 29 03:05:42 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip From 9c42fdb3d6cad2443a42c185013709d4a6e0f450 Mon Sep 17 00:00:00 2001 From: Auxilus Date: Tue, 5 Sep 2017 10:43:30 +0530 Subject: [PATCH 28/28] Added wiki link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 28691c10..45666bfc 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Termux app * [Termux on Google Play Store](https://play.google.com/store/apps/details?id=com.termux) * [Termux on F-Droid](https://f-droid.org/repository/browse/?fdid=com.termux) +* [Termux Wiki](https://wiki.termux.com/wiki/) * [Termux Help](http://termux.com/help/) * [Termux Google+ community](http://termux.com/community/)