aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/terminal.vala
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--terminal.vala21
1 files changed, 15 insertions, 6 deletions
diff --git a/terminal.vala b/terminal.vala
index 47c33bc..1005996 100644
--- a/terminal.vala
+++ b/terminal.vala
@@ -40,6 +40,8 @@ class Terminal : Gtk.Overlay {
Gtk.MenuItem[] open_with_items = {};
+ Pid child_pid;
+
bool has_search;
bool overlay_scrolling_env_override;
string url_match;
@@ -83,7 +85,7 @@ class Terminal : Gtk.Overlay {
argv = { Utils.get_shell() };
}
- vte.spawn_sync(DEFAULT, null, argv, null, SEARCH_PATH, null, null, null);
+ vte.spawn_sync(DEFAULT, null, argv, null, SEARCH_PATH, null, out child_pid, null);
} catch (Error e) {
error(e.message);
}
@@ -368,7 +370,7 @@ class Terminal : Gtk.Overlay {
adjust_font_scale(vte.get_font_scale() / FONT_SCALE_FACTOR);
}
- string? get_local_directory_path() {
+ string? get_osc7_path() {
var uri = vte.get_current_directory_uri();
if (uri == null)
return null;
@@ -392,6 +394,13 @@ class Terminal : Gtk.Overlay {
return path;
}
+ string? get_cwd() {
+ string? osc7_path = get_osc7_path();
+ if (osc7_path != null)
+ return osc7_path;
+ return Posix.realpath("/proc/%i/cwd".printf(child_pid));
+ }
+
void spawn_process(string? cwd, string[] argv) {
Pid child;
@@ -407,7 +416,7 @@ class Terminal : Gtk.Overlay {
[GtkCallback]
void open_terminal() {
- var cwd = get_local_directory_path();
+ var cwd = get_cwd();
if (cwd == null)
return;
spawn_process(cwd, {PROGRAM_NAME});
@@ -415,7 +424,7 @@ class Terminal : Gtk.Overlay {
[GtkCallback]
void open_directory() {
- var cwd = get_local_directory_path();
+ var cwd = get_cwd();
if (cwd == null)
return;
@@ -449,8 +458,8 @@ class Terminal : Gtk.Overlay {
} else {
copy_item_text.set_sensitive(vte.get_has_selection());
copy_item_html.set_sensitive(vte.get_has_selection());
- open_terminal_item.set_sensitive(get_local_directory_path() != null);
- open_directory_item.set_sensitive(get_local_directory_path() != null);
+ open_terminal_item.set_sensitive(get_cwd() != null);
+ open_directory_item.set_sensitive(get_cwd() != null);
standard_context_menu.popup_at_pointer(event);
}
return true;