Improve CWD detection when there are multiple foreground processes in the TTY process group

This commit is contained in:
Kovid Goyal 2022-02-08 20:30:00 +05:30
parent dc6138d286
commit 7448789951
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 2 deletions

View file

@ -86,6 +86,8 @@ Detailed list of changes
- Fix a regression in the previous release that broke :opt:`active_tab_foreground` (:iss:`4620`)
- Improve CWD detection when there are multiple foreground processes in the TTY process group
- ssh kitten: Fix location of generated terminfo files on NetBSD (:iss:`4622`)
- A new action to clear the screen up to the line containing the cursor, see

View file

@ -344,8 +344,18 @@ def pid_for_cwd(self) -> Optional[int]:
assert self.child_fd is not None
pgrp = os.tcgetpgrp(self.child_fd)
foreground_processes = processes_in_group(pgrp) if pgrp >= 0 else []
if len(foreground_processes) == 1:
return foreground_processes[0]
if foreground_processes:
# there is no easy way that I know of to know which process is the
# foreground process in this group from the users perspective,
# so we assume the one with the highest PID is as that is most
# likely to be the newest process. This situation can happen
# for example with a shell script such as:
# #!/bin/bash
# cd /tmp
# vim
# With this script , the foreground process group will contain
# both the bash instance running the script and vim.
return max(foreground_processes)
return self.pid
@property