diff --git a/app/src/main/java/io/neoterm/preference/NeoPreference.kt b/app/src/main/java/io/neoterm/preference/NeoPreference.kt index c1ce1b0..d763556 100644 --- a/app/src/main/java/io/neoterm/preference/NeoPreference.kt +++ b/app/src/main/java/io/neoterm/preference/NeoPreference.kt @@ -19,6 +19,10 @@ object NeoPreference { const val KEY_FONT_SIZE = "neoterm_general_font_size" const val KEY_CURRENT_SESSION = "neoterm_service_current_session" + const val VALUE_NEOTERM_ONLY = "NeoTermOnly" + const val VALUE_NEOTERM_FIRST = "NeoTermFirst" + const val VALUE_SYSTEM_FIRST = "SystemFirst" + var preference: SharedPreferences? = null var context: Context? = null @@ -114,11 +118,10 @@ object NeoPreference { return arrayOf(termEnv, homeEnv, androidRootEnv, androidDataEnv, externalStorageEnv, pathEnv) } else { - val ps1Env = "PS1=$ " - val ldEnv = "LD_LIBRARY_PATH=${NeoTermPath.USR_PATH}/lib" val langEnv = "LANG=en_US.UTF-8" - val pathEnv = "PATH=${NeoTermPath.USR_PATH}/bin:${NeoTermPath.USR_PATH}/bin/applets" + val pathEnv = "PATH=" + buildPathEnv() + val ldEnv = "LD_LIBRARY_PATH=" + buildLdLibraryEnv() val pwdEnv = "PWD=" + cwd val tmpdirEnv = "TMPDIR=${NeoTermPath.USR_PATH}/tmp" @@ -126,6 +129,39 @@ object NeoPreference { } } + private fun buildLdLibraryEnv(): String { + val builder = StringBuilder("${NeoTermPath.USR_PATH}/lib") + + val programSelection = NeoPreference.loadString(R.string.key_general_program_selection, VALUE_NEOTERM_ONLY) + val systemPath = System.getenv("LD_LIBRARY_PATH") + + if (programSelection != VALUE_NEOTERM_ONLY) { + builder.append(":$systemPath") + } + + return builder.toString() + } + + private fun buildPathEnv(): String { + val builder = StringBuilder() + val programSelection = NeoPreference.loadString(R.string.key_general_program_selection, VALUE_NEOTERM_ONLY) + val basePath = "${NeoTermPath.USR_PATH}/bin:${NeoTermPath.USR_PATH}/bin/applets" + val systemPath = System.getenv("PATH") + + when (programSelection) { + VALUE_NEOTERM_ONLY -> { + builder.append(basePath) + } + VALUE_NEOTERM_FIRST -> { + builder.append("$basePath:$systemPath") + } + VALUE_SYSTEM_FIRST -> { + builder.append("$systemPath:$basePath") + } + } + return builder.toString() + } + /** * TODO * To print the job name about to be executed in bash: diff --git a/app/src/main/java/io/neoterm/services/NeoTermService.kt b/app/src/main/java/io/neoterm/services/NeoTermService.kt index 0822d5a..cee1b2a 100644 --- a/app/src/main/java/io/neoterm/services/NeoTermService.kt +++ b/app/src/main/java/io/neoterm/services/NeoTermService.kt @@ -132,6 +132,10 @@ class NeoTermService : Service() { builder.setOngoing(true) builder.setShowWhen(false) builder.setColor(0xFF000000.toInt()) + + val exitIntent = Intent(this, NeoTermService::class.java).setAction(ACTION_SERVICE_STOP) + builder.addAction(android.R.drawable.ic_delete, "Exit", PendingIntent.getService(this, 0, exitIntent, 0)) + return builder.build() } diff --git a/app/src/main/java/io/neoterm/view/ExtraKeysView.java b/app/src/main/java/io/neoterm/view/ExtraKeysView.java index d0cb8cc..2cc685e 100755 --- a/app/src/main/java/io/neoterm/view/ExtraKeysView.java +++ b/app/src/main/java/io/neoterm/view/ExtraKeysView.java @@ -24,8 +24,16 @@ import io.neoterm.view.eks.ControlButton; import io.neoterm.view.eks.ExtraButton; import io.neoterm.view.eks.StatedControlButton; +import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_DOWN; +import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_LEFT; +import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_RIGHT; +import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_UP; import static io.neoterm.view.eks.ExtraButton.KEY_CTRL; +import static io.neoterm.view.eks.ExtraButton.KEY_END; import static io.neoterm.view.eks.ExtraButton.KEY_ESC; +import static io.neoterm.view.eks.ExtraButton.KEY_HOME; +import static io.neoterm.view.eks.ExtraButton.KEY_PAGE_DOWN; +import static io.neoterm.view.eks.ExtraButton.KEY_PAGE_UP; import static io.neoterm.view.eks.ExtraButton.KEY_TAB; /** @@ -34,14 +42,17 @@ import static io.neoterm.view.eks.ExtraButton.KEY_TAB; */ public final class ExtraKeysView extends LinearLayout { + public static final StatedControlButton CTRL = new StatedControlButton(KEY_CTRL); public static final ControlButton ESC = new ControlButton(KEY_ESC); public static final ControlButton TAB = new ControlButton(KEY_TAB); - public static final StatedControlButton CTRL = new StatedControlButton(KEY_CTRL); - - public static final ControlButton ARROW_UP = new ControlButton("▲"); - public static final ControlButton ARROW_DOWN = new ControlButton("▼"); - public static final ControlButton ARROW_LEFT = new ControlButton("◀"); - public static final ControlButton ARROW_RIGHT = new ControlButton("▶"); + public static final ControlButton PAGE_UP = new ControlButton(KEY_PAGE_UP); + public static final ControlButton PAGE_DOWN = new ControlButton(KEY_PAGE_DOWN); + public static final ControlButton HOME = new ControlButton(KEY_HOME); + public static final ControlButton END = new ControlButton(KEY_END); + public static final ControlButton ARROW_UP = new ControlButton(KEY_ARROW_UP); + public static final ControlButton ARROW_DOWN = new ControlButton(KEY_ARROW_DOWN); + public static final ControlButton ARROW_LEFT = new ControlButton(KEY_ARROW_LEFT); + public static final ControlButton ARROW_RIGHT = new ControlButton(KEY_ARROW_RIGHT); public static final String DEFAULT_FILE_CONTENT = "version " + ShortcutConfigParser.PARSER_VERSION + "\n" + "program default\n" + @@ -143,6 +154,10 @@ public final class ExtraKeysView extends LinearLayout { builtinExtraKeys.add(ARROW_DOWN); builtinExtraKeys.add(ARROW_LEFT); builtinExtraKeys.add(ARROW_RIGHT); + builtinExtraKeys.add(HOME); + builtinExtraKeys.add(END); + builtinExtraKeys.add(PAGE_UP); + builtinExtraKeys.add(PAGE_DOWN); } public void updateButtons() { diff --git a/app/src/main/java/io/neoterm/view/TerminalView.java b/app/src/main/java/io/neoterm/view/TerminalView.java index 9bb5c77..aa9f8f3 100755 --- a/app/src/main/java/io/neoterm/view/TerminalView.java +++ b/app/src/main/java/io/neoterm/view/TerminalView.java @@ -259,6 +259,7 @@ public final class TerminalView extends View { @Override public boolean commitText(CharSequence text, int newCursorPosition) { + // TODO: AutoComplete if (LOG_KEY_EVENTS) { Log.i(EmulatorDebug.LOG_TAG, "IME: commitText(\"" + text + "\", " + newCursorPosition + ")"); } diff --git a/app/src/main/java/io/neoterm/view/eks/ExtraButton.java b/app/src/main/java/io/neoterm/view/eks/ExtraButton.java index b0ca11e..274ddef 100644 --- a/app/src/main/java/io/neoterm/view/eks/ExtraButton.java +++ b/app/src/main/java/io/neoterm/view/eks/ExtraButton.java @@ -15,6 +15,14 @@ public abstract class ExtraButton implements View.OnClickListener { public static final String KEY_ESC = "Esc"; public static final String KEY_TAB = "Tab"; public static final String KEY_CTRL = "Ctrl"; + public static final String KEY_PAGE_UP = "PgUp"; + public static final String KEY_PAGE_DOWN = "PgDn"; + public static final String KEY_HOME = "Home"; + public static final String KEY_END = "End"; + public static final String KEY_ARROW_UP = "▲"; + public static final String KEY_ARROW_DOWN = "▼"; + public static final String KEY_ARROW_LEFT = "◀"; + public static final String KEY_ARROW_RIGHT = "▶"; public String buttonText; @@ -31,18 +39,30 @@ public abstract class ExtraButton implements View.OnClickListener { case KEY_TAB: keyCode = KeyEvent.KEYCODE_TAB; break; - case "▲": + case KEY_ARROW_UP: keyCode = KeyEvent.KEYCODE_DPAD_UP; break; - case "◀": + case KEY_ARROW_LEFT: keyCode = KeyEvent.KEYCODE_DPAD_LEFT; break; - case "▶": + case KEY_ARROW_RIGHT: keyCode = KeyEvent.KEYCODE_DPAD_RIGHT; break; - case "▼": + case KEY_ARROW_DOWN: keyCode = KeyEvent.KEYCODE_DPAD_DOWN; break; + case KEY_PAGE_UP: + keyCode = KeyEvent.KEYCODE_PAGE_UP; + break; + case KEY_PAGE_DOWN: + keyCode = KeyEvent.KEYCODE_PAGE_DOWN; + break; + case KEY_HOME: + keyCode = KeyEvent.KEYCODE_MOVE_HOME; + break; + case KEY_END: + keyCode = KeyEvent.KEYCODE_MOVE_END; + break; case "―": chars = "-"; break; diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f0627ff..6745743 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -14,6 +14,8 @@ 登录时使用指定的 Shell 振动 收到 \'\\a\' 时振动 + 程序选择模式 + 当 NeoTerm 和 系统 中都含有同一个程序时,选择将要被执行的程序的模式 软件源 向下切换窗口 关闭当前窗口时切换到下一个窗口而不是上一个 @@ -40,4 +42,10 @@ 使用系统Shell 重试 APT 源已更改,你可能需要执行 apt update 来更新 + + + 只使用 NeoTerm + 优先使用 NeoTerm + 优先使用 System + \ No newline at end of file diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 2461be9..31cb4d7 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -4,6 +4,7 @@ neoterm_general_vibrate neoterm_general_backspace_map_to_esc neoterm_general_shell + neoterm_general_program_selection neoterm_ui_fullscreen neoterm_ui_hide_toolbar diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc6c92d..d10e830 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,6 +24,8 @@ Send esc when backspace is pressed Shell Which shell should we use when login + Program Selection + When both Neo Term and your Android OS have a program, which one should we choose? Full Screen Hide Toolbar Hide toolbar when keyboard is showing @@ -56,4 +58,16 @@ fish + + NeoTermOnly + NeoTermFirst + SystemFirst + + + + NeoTerm Only + NeoTerm First + System First + + diff --git a/app/src/main/res/xml/setting_general.xml b/app/src/main/res/xml/setting_general.xml index e0fce99..700fecd 100644 --- a/app/src/main/res/xml/setting_general.xml +++ b/app/src/main/res/xml/setting_general.xml @@ -18,6 +18,14 @@ android:summary="@string/pref_general_backspace_map_to_esc_desc" android:title="@string/pref_general_backspace_map_to_esc" /> + +