def execute_cmds(self, cmds: List[TmuxCmd]) -> List[TmuxCmdResult]: socket_args = self.socket / (lambda a: ['-L', a]) | [] proc = Popen(args=['tmux'] + socket_args + ['-C', 'attach'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) cmdlines = (cmds / _.cmdline).cat('').join_lines stdout, stderr = proc.communicate(cmdlines) results = create_cmd_results(cmds, Lists.lines(stdout)) return (List(TmuxCmdFatal(cmds, PError(Lists.lines(stderr)))) if proc.returncode == 0 and results.empty else results)
def update_for(path: Path, files: Files) -> Files: return files if path in files else files + (path, Lists.lines(path.read_text()))
def file_line(file: str, lineno: int) -> Do: path = yield Try(Path, file) text = yield Try(path.read_text) yield Lists.lines(text).lift(lineno).to_either( 'frame_data: invalid line number in frame')