diff options
authorJuhani Krekelä2021-10-23 16:25:59 +0300
committerWolfgang Müller2021-11-27 14:05:19 +0100
commit6f0399481b215817960b5cf36ee03a658a2d9b89 (patch)
parent1b111d590d527d39f169ffcdb5c9f6a0488458f5 (diff)
Allow user to turn OSC 7 off
Currently weltschmerz prefers working directory information obtained from OSC 7 to that from procfs. If a user has not configured their shell to emit OSC 7 escapes, the OSC 7 path may be out of date. Additionally some users want only their shell to change the terminal's conception of working directory, which is a behaviour better matched by the procfs based working directory detection. This change allows OSC 7 based working directory detection to be turned off. The default remains to check OSC 7 first and then fall back to procfs if there is not valid local path set with OSC 7. The reason for turning OSC 7 off entirely instead of inverting the order procfs and OSC 7 are checked in is that procfs based detection should never fail under normal usage on systems that support it.
3 files changed, 27 insertions, 8 deletions
diff --git a/config.vala b/config.vala
index c0a084f..d972bac 100644
--- a/config.vala
+++ b/config.vala
@@ -12,6 +12,7 @@ class Config {
public int scrollback;
public bool scrollbar;
public bool allow_hyperlinks;
+ public bool prefer_osc7;
public Gdk.RGBA? foreground;
public Gdk.RGBA? background;
@@ -57,6 +58,7 @@ class Config {
scrollback = reader.read_integer("misc", "scrollback", 10000);
scrollbar = reader.read_boolean("misc", "scrollbar", true);
allow_hyperlinks = reader.read_boolean("misc", "allow-hyperlinks", false);
+ prefer_osc7 = reader.read_boolean("misc", "prefer-osc7", true);
foreground = reader.read_colour("colours", "foreground", null);
background = reader.read_colour("colours", "background", null);
diff --git a/terminal.vala b/terminal.vala
index bb66715..da013a5 100644
--- a/terminal.vala
+++ b/terminal.vala
@@ -396,9 +396,12 @@ class Terminal : Gtk.Overlay {
string? get_cwd() {
- string? osc7_path = get_osc7_path();
- if (osc7_path != null)
- return osc7_path;
+ if (conf.prefer_osc7) {
+ string? osc7_path = get_osc7_path();
+ if (osc7_path != null)
+ return osc7_path;
+ }
return Posix.realpath("/proc/%i/cwd".printf(child_pid));
diff --git a/weltschmerz.1 b/weltschmerz.1
index 2e0a2fb..aaad053 100644
--- a/weltschmerz.1
+++ b/weltschmerz.1
@@ -49,11 +49,9 @@ The default file manager can be opened in the current directory with
.Sy CTRL + Shift + O
and a new terminal window with
.Sy CTRL + Shift + T .
-By default OSC 7 path is used as the current directory, but if OSC 7 path is not
-set to a valid local path and the platform provides a Linux-style procfs at
-.Pa /proc ,
-will use the child process's working directory instead.
+These features require the terminal application to send OSC 7 escape sequences
+or for the platform to provide a Linux-style procfs at
+.Pa /proc .
The search overlay can be opened by pressing
.Sy CTRL + Shift + F .
@@ -161,6 +159,22 @@ Specifies how many lines of scrollback to keep.
A value of -1 means infinite scrollback.
The default is
.Sy 10000 .
+.It Sy prefer-osc7
+When set to
+.Sy true ,
+attempts to use OSC 7 to obtain the current directory.
+If this does not produce a valid local path,
+obtains the child process's working directory from
+.Pa /proc .
+When set to
+.Sy false ,
+.Pa /proc
+is used.
+The default is
+.Sy true .
.It Sy scrollbar
When set to
.Sy true ,