diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 0fe5b5df..c0517b67 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -603,7 +603,9 @@ public final class TermuxActivity extends Activity implements ServiceConnection new AlertDialog.Builder(this).setTitle(R.string.max_terminals_reached_title).setMessage(R.string.max_terminals_reached_message) .setPositiveButton(android.R.string.ok, null).show(); } else { - TerminalSession newSession = mTermService.createTermSession(null, null, null, failSafe); + TerminalSession currentSession = getCurrentTermSession(); + String workingDirectory = (currentSession == null) ? null : currentSession.getCwd(); + TerminalSession newSession = mTermService.createTermSession(null, null, workingDirectory, failSafe); if (sessionName != null) { newSession.mSessionName = sessionName; } diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java index 5b82b0f9..1743e844 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalSession.java @@ -8,6 +8,7 @@ import android.system.Os; import android.system.OsConstants; import android.util.Log; +import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -339,4 +340,25 @@ public final class TerminalSession extends TerminalOutput { return mShellPid; } + /** Returns the shell's working directory or null if it was unavailable. */ + public String getCwd() { + if (mShellPid < 1) { + return null; + } + try { + final String cwdSymlink = String.format("/proc/%s/cwd/", mShellPid); + String outputPath = new File(cwdSymlink).getCanonicalPath(); + if (!outputPath.endsWith("/")) { + outputPath += '/'; + } + if (!cwdSymlink.equals(outputPath)) { + return outputPath; + } + } catch (IOException | SecurityException e) { + Log.e(EmulatorDebug.LOG_TAG, "Error getting current directory", e); + } + return null; + } + + }