Feature: Add more extra keys
Feature: Quit button in notification Feature: Support for choose program location when a program is found in both /system and NeoTerm
This commit is contained in:
@ -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:
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
@ -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() {
|
||||
|
@ -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 + ")");
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -14,6 +14,8 @@
|
||||
<string name="pref_general_shell_desc">登录时使用指定的 Shell</string>
|
||||
<string name="pref_general_vibrate">振动</string>
|
||||
<string name="pref_general_vibrate_desc">收到 \'\\a\' 时振动</string>
|
||||
<string name="pref_general_program_selection">程序选择模式</string>
|
||||
<string name="pref_general_program_selection_desc">当 NeoTerm 和 系统 中都含有同一个程序时,选择将要被执行的程序的模式</string>
|
||||
<string name="pref_package_source">软件源</string>
|
||||
<string name="pref_ui_close_tab_anim_next_tab">向下切换窗口</string>
|
||||
<string name="pref_ui_close_tab_anim_next_tab_desc">关闭当前窗口时切换到下一个窗口而不是上一个</string>
|
||||
@ -40,4 +42,10 @@
|
||||
<string name="use_system_shell">使用系统Shell</string>
|
||||
<string name="retry">重试</string>
|
||||
<string name="source_changed">APT 源已更改,你可能需要执行 apt update 来更新</string>
|
||||
|
||||
<string-array name="pref_general_program_selection_entries">
|
||||
<item>只使用 NeoTerm</item>
|
||||
<item>优先使用 NeoTerm</item>
|
||||
<item>优先使用 System</item>
|
||||
</string-array>
|
||||
</resources>
|
@ -4,6 +4,7 @@
|
||||
<string name="key_general_vibrate" translatable="false">neoterm_general_vibrate</string>
|
||||
<string name="key_generaL_backspace_map_to_esc" translatable="false">neoterm_general_backspace_map_to_esc</string>
|
||||
<string name="key_general_shell" translatable="false">neoterm_general_shell</string>
|
||||
<string name="key_general_program_selection" translatable="false">neoterm_general_program_selection</string>
|
||||
|
||||
<string name="key_ui_fullscreen" translatable="false">neoterm_ui_fullscreen</string>
|
||||
<string name="key_ui_hide_toolbar" translatable="false">neoterm_ui_hide_toolbar</string>
|
||||
|
@ -24,6 +24,8 @@
|
||||
<string name="pref_general_backspace_map_to_esc_desc">Send esc when backspace is pressed</string>
|
||||
<string name="pref_general_shell" translatable="false">Shell</string>
|
||||
<string name="pref_general_shell_desc">Which shell should we use when login</string>
|
||||
<string name="pref_general_program_selection">Program Selection</string>
|
||||
<string name="pref_general_program_selection_desc">When both Neo Term and your Android OS have a program, which one should we choose?</string>
|
||||
<string name="pref_ui_fullscreen">Full Screen</string>
|
||||
<string name="pref_ui_hide_toolbar">Hide Toolbar</string>
|
||||
<string name="pref_ui_hide_toolbar_desc">Hide toolbar when keyboard is showing</string>
|
||||
@ -56,4 +58,16 @@
|
||||
<item>fish</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_general_program_selection_values" translatable="false">
|
||||
<item>NeoTermOnly</item>
|
||||
<item>NeoTermFirst</item>
|
||||
<item>SystemFirst</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_general_program_selection_entries">
|
||||
<item>NeoTerm Only</item>
|
||||
<item>NeoTerm First</item>
|
||||
<item>System First</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
@ -18,6 +18,14 @@
|
||||
android:summary="@string/pref_general_backspace_map_to_esc_desc"
|
||||
android:title="@string/pref_general_backspace_map_to_esc" />
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="NeoTermOnly"
|
||||
android:key="@string/key_general_program_selection"
|
||||
android:title="@string/pref_general_program_selection"
|
||||
android:summary="@string/pref_general_program_selection_desc"
|
||||
android:entries="@array/pref_general_program_selection_entries"
|
||||
android:entryValues="@array/pref_general_program_selection_values"/>
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="sh"
|
||||
android:entries="@array/pref_general_shell_entries"
|
||||
|
Reference in New Issue
Block a user