Improve: Session exit message

This commit is contained in:
zt515
2017-08-15 13:14:51 +08:00
parent 58e63ecf13
commit 3c41450497
5 changed files with 50 additions and 10 deletions

View File

@ -124,16 +124,7 @@ public class TerminalSession extends TerminalOutput {
cleanupResources(exitCode); cleanupResources(exitCode);
mChangeCallback.onSessionFinished(TerminalSession.this); mChangeCallback.onSessionFinished(TerminalSession.this);
String exitDescription = "\r\n[Process completed"; String exitDescription = getExitDescription(exitCode);
if (exitCode > 0) {
// Non-zero process exit.
exitDescription += " (code " + exitCode + ")";
} else if (exitCode < 0) {
// Negated signal.
exitDescription += " (signal " + (-exitCode) + ")";
}
exitDescription += " - press Enter]";
byte[] bytesToWrite = exitDescription.getBytes(StandardCharsets.UTF_8); byte[] bytesToWrite = exitDescription.getBytes(StandardCharsets.UTF_8);
mEmulator.append(bytesToWrite, bytesToWrite.length); mEmulator.append(bytesToWrite, bytesToWrite.length);
notifyScreenUpdate(); notifyScreenUpdate();
@ -296,6 +287,19 @@ public class TerminalSession extends TerminalOutput {
} }
} }
protected String getExitDescription(int exitCode) {
String exitDescription = "\r\n[Process completed";
if (exitCode > 0) {
// Non-zero process exit.
exitDescription += " (code " + exitCode + ")";
} else if (exitCode < 0) {
// Negated signal.
exitDescription += " (signal " + (-exitCode) + ")";
}
exitDescription += " - press Enter]";
return exitDescription;
}
/** Cleanup resources when the process exits. */ /** Cleanup resources when the process exits. */
void cleanupResources(int exitStatus) { void cleanupResources(int exitStatus) {
synchronized (this) { synchronized (this) {

View File

@ -3,10 +3,12 @@ package io.neoterm.frontend.floating
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import io.neoterm.R
import io.neoterm.backend.TerminalSession import io.neoterm.backend.TerminalSession
import io.neoterm.frontend.client.BasicSessionCallback import io.neoterm.frontend.client.BasicSessionCallback
import io.neoterm.frontend.client.BasicViewClient import io.neoterm.frontend.client.BasicViewClient
import io.neoterm.frontend.shell.ShellParameter import io.neoterm.frontend.shell.ShellParameter
import io.neoterm.frontend.shell.ShellTermSession
import io.neoterm.utils.TerminalUtils import io.neoterm.utils.TerminalUtils
/** /**
@ -55,6 +57,9 @@ class TerminalDialog(val context: Context) {
.callback(terminalSessionCallback) .callback(terminalSessionCallback)
.systemShell(false) .systemShell(false)
terminalSession = TerminalUtils.createShellSession(context, parameter) terminalSession = TerminalUtils.createShellSession(context, parameter)
if (terminalSession is ShellTermSession) {
(terminalSession as ShellTermSession).exitPrompt = context.getString(R.string.process_exit_prompt_press_back)
}
termWindowView.attachSession(terminalSession) termWindowView.attachSession(terminalSession)
return this return this
} }

View File

@ -1,6 +1,7 @@
package io.neoterm.frontend.shell package io.neoterm.frontend.shell
import android.content.Context import android.content.Context
import io.neoterm.App
import io.neoterm.R import io.neoterm.R
import io.neoterm.backend.TerminalSession import io.neoterm.backend.TerminalSession
import io.neoterm.frontend.client.TermSessionCallback import io.neoterm.frontend.client.TermSessionCallback
@ -13,12 +14,32 @@ import java.io.File
*/ */
open class ShellTermSession private constructor(shellPath: String, cwd: String, args: Array<String>, env: Array<String>, changeCallback: SessionChangedCallback) : TerminalSession(shellPath, cwd, args, env, changeCallback) { open class ShellTermSession private constructor(shellPath: String, cwd: String, args: Array<String>, env: Array<String>, changeCallback: SessionChangedCallback) : TerminalSession(shellPath, cwd, args, env, changeCallback) {
var initialCommand: String? = null var initialCommand: String? = null
var exitPrompt = App.get().getString(R.string.process_exit_prompt)
override fun initializeEmulator(columns: Int, rows: Int) { override fun initializeEmulator(columns: Int, rows: Int) {
super.initializeEmulator(columns, rows) super.initializeEmulator(columns, rows)
sendInitialCommand() sendInitialCommand()
} }
override fun getExitDescription(exitCode: Int): String {
val builder = StringBuilder("\r\n[")
val context = App.get()
builder.append(context.getString(R.string.process_exit_info))
if (exitCode > 0) {
// Non-zero process exit.
builder.append(" (")
builder.append(context.getString(R.string.process_exit_code, exitCode))
builder.append(")")
} else if (exitCode < 0) {
// Negated signal.
builder.append(" (")
builder.append(context.getString(R.string.process_exit_signal, -exitCode))
builder.append(")")
}
builder.append(" - $exitPrompt]")
return builder.toString()
}
private fun sendInitialCommand() { private fun sendInitialCommand() {
val initCommand = initialCommand val initCommand = initialCommand
if (initCommand != null && initCommand.isNotEmpty()) { if (initCommand != null && initCommand.isNotEmpty()) {

View File

@ -120,4 +120,9 @@
<string name="new_color_scheme">新建配色方案</string> <string name="new_color_scheme">新建配色方案</string>
<string name="faq">常见问题</string> <string name="faq">常见问题</string>
<string name="new_source">新建</string> <string name="new_source">新建</string>
<string name="process_exit_info">进程已结束</string>
<string name="process_exit_code">状态 %d</string>
<string name="process_exit_signal">信号 %d</string>
<string name="process_exit_prompt">按回车关闭</string>
<string name="process_exit_prompt_press_back">按返回关闭</string>
</resources> </resources>

View File

@ -120,6 +120,11 @@
<string name="new_color_scheme">New Color Scheme</string> <string name="new_color_scheme">New Color Scheme</string>
<string name="faq">FAQ</string> <string name="faq">FAQ</string>
<string name="new_source">New</string> <string name="new_source">New</string>
<string name="process_exit_info">Process completed</string>
<string name="process_exit_code">code %d</string>
<string name="process_exit_signal">signal %d</string>
<string name="process_exit_prompt">press Enter</string>
<string name="process_exit_prompt_press_back">Press Back</string>
<string-array name="pref_general_shell_entries" translatable="false"> <string-array name="pref_general_shell_entries" translatable="false">
<item>sh</item> <item>sh</item>