diff --git a/kitty/utils.py b/kitty/utils.py index b5985593a..723dacc3e 100644 --- a/kitty/utils.py +++ b/kitty/utils.py @@ -120,15 +120,15 @@ def command_for_open(program='default'): return cmd -def open_cmd(cmd, arg=None): +def open_cmd(cmd, arg=None, cwd=None): if arg is not None: cmd = list(cmd) cmd.append(arg) - return subprocess.Popen(cmd, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + return subprocess.Popen(cmd, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, cwd=cwd or None) -def open_url(url, program='default'): - return open_cmd(command_for_open(program), url) +def open_url(url, program='default', cwd=None): + return open_cmd(command_for_open(program), url, cwd=cwd) def detach(fork=True, setsid=True, redirect=True): diff --git a/kitty/window.py b/kitty/window.py index 3a5d009d3..d3d6532df 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -8,6 +8,7 @@ import weakref from collections import deque from enum import Enum +from .child import cwd_of_process from .config import build_ansi_color_table, parse_send_text_bytes from .constants import ( ScreenGeometry, WindowGeometry, appname, get_boss, wakeup @@ -348,12 +349,14 @@ class Window: set_clipboard_string(text) def pass_selection_to_program(self, *args): + pid = self.child.pid + cwd = cwd_of_process(pid) text = self.text_for_selection() if text: if args: - open_cmd(args, text) + open_cmd(args, text, cwd=cwd) else: - open_url(text) + open_url(text, cwd=cwd) def scroll_line_up(self): if self.screen.is_main_linebuf():