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" />
+
+