ports/x11/elementary-terminal/files/patch-src_Widgets_TerminalWidget.vala
Oliver Duchateau 15d8808cc1 x11/elementary-terminal: Update to 6.1.1
PR:	267402
MFH:	2022Q4
2022-11-06 09:33:49 -08:00

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 "";