mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 09:36:41 -04:00
85 lines
3.8 KiB
Vala
85 lines
3.8 KiB
Vala
--- src/Widgets/TerminalWidget.vala.orig 2022-10-27 16:47:44 UTC
|
|
+++ src/Widgets/TerminalWidget.vala
|
|
@@ -68,13 +68,6 @@ namespace Terminal {
|
|
}
|
|
|
|
public int default_size;
|
|
- const string SEND_PROCESS_FINISHED_BASH = "dbus-send --type=method_call " +
|
|
- "--session --dest=io.elementary.terminal " +
|
|
- "/io/elementary/terminal " +
|
|
- "io.elementary.terminal.ProcessFinished " +
|
|
- "string:$PANTHEON_TERMINAL_ID " +
|
|
- "string:\"$(fc -nl -1 | cut -c 3-)\" " +
|
|
- "int32:\$__bp_last_ret_value >/dev/null 2>&1";
|
|
|
|
/* Following strings are used to build RegEx for matching URIs */
|
|
const string USERCHARS = "-[:alnum:]";
|
|
@@ -351,15 +344,7 @@ namespace Terminal {
|
|
shell = Vte.get_user_shell ();
|
|
|
|
envv = {
|
|
- // Export ID so we can identify the terminal for which the process completion is reported
|
|
- "PANTHEON_TERMINAL_ID=" + terminal_id,
|
|
-
|
|
- // Export callback command a BASH-specific variable, see "man bash" for details
|
|
- "PROMPT_COMMAND=" + SEND_PROCESS_FINISHED_BASH + Environment.get_variable ("PROMPT_COMMAND"),
|
|
-
|
|
- // ZSH callback command will be read from ZSH config file supplied by us, see data/
|
|
-
|
|
- // TODO: support FISH, see https://github.com/fish-shell/fish-shell/issues/1382
|
|
+ "PANTHEON_TERMINAL_ID=" + terminal_id
|
|
};
|
|
|
|
/* We need opening uri to be available asap when constructing window with working directory
|
|
@@ -436,12 +421,49 @@ namespace Terminal {
|
|
return this.match_check_event (event, null);
|
|
}
|
|
|
|
+ private string? extract_cwd (string data) {
|
|
+ string[] tokens;
|
|
+ string result = null;
|
|
+
|
|
+ tokens = data.split (" ");
|
|
+ if (tokens.length > 0) {
|
|
+ result = tokens[(tokens.length - 1)];
|
|
+ }
|
|
+ return result;
|
|
+ }
|
|
+
|
|
public string get_shell_location () {
|
|
+ string[] spawn_env = GLib.Environ.get ();
|
|
+ string[] procstat_cmd = { "/usr/bin/pwdx", "--libxo:T", };
|
|
+ string standard_output = null;
|
|
+ bool res;
|
|
+ string cwd = null;
|
|
+
|
|
int pid = (!) (this.child_pid);
|
|
|
|
+ // Update procstat(1) argument
|
|
+ procstat_cmd += pid.to_string ();
|
|
+
|
|
try {
|
|
- return GLib.FileUtils.read_link ("/proc/%d/cwd".printf (pid));
|
|
- } catch (GLib.FileError error) {
|
|
+ res = GLib.Process.spawn_sync (null, procstat_cmd,
|
|
+ spawn_env,
|
|
+ GLib.SpawnFlags.STDERR_TO_DEV_NULL,
|
|
+ null,
|
|
+ out standard_output,
|
|
+ null, null);
|
|
+ if (res) {
|
|
+ cwd = extract_cwd (standard_output.strip ());
|
|
+ if (cwd != null) {
|
|
+ return cwd;
|
|
+ }
|
|
+ else {
|
|
+ return GLib.Environment.get_current_dir ();
|
|
+ }
|
|
+ }
|
|
+ else {
|
|
+ return GLib.Environment.get_current_dir ();
|
|
+ }
|
|
+ } catch (GLib.SpawnError error) {
|
|
/* Tab name disambiguation may call this before shell location available. */
|
|
/* No terminal warning needed */
|
|
return "";
|