def discover_pane_by_pid(target_pid: int) -> Do: panes = yield all_panes() indicators = yield TmuxIO.from_io( panes.traverse(lambda a: contains_child_pid(target_pid, a), IO)) candidate = panes.zip(indicators).find_map(lambda a: a[1].m(a[0])) yield TmuxIO.from_maybe(candidate, f'could not find pane with pid `{target_pid}`')
def pane_dir(pane: P) -> Do: ui_pane = yield TmuxIO.from_either(UiPane.e_for(pane)) yield (ui_pane.cwd(pane) / TmuxIO.pure).get_or(lambda: TmuxIO.from_io(IO.delay(Path.cwd)))