From 8ab1b9a0eebc7c7b52fd8f6b084d135e36a0f1c2 Mon Sep 17 00:00:00 2001 From: Andy Kipp Date: Fri, 26 Apr 2024 10:26:24 +0200 Subject: [PATCH] jobs: default representation changed to dict (#5363) * update * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: a <1@1.1> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- news/jobs_repr.rst | 23 +++++++++++++++++++++++ xonsh/jobs.py | 31 +++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 news/jobs_repr.rst diff --git a/news/jobs_repr.rst b/news/jobs_repr.rst new file mode 100644 index 000000000..3a7188382 --- /dev/null +++ b/news/jobs_repr.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* jobs: default representation changed to dict. + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/xonsh/jobs.py b/xonsh/jobs.py index 652967500..f96297ce4 100644 --- a/xonsh/jobs.py +++ b/xonsh/jobs.py @@ -335,23 +335,33 @@ def _clear_dead_jobs(): del get_jobs()[job] -def format_job_string(num: int) -> str: +def format_job_string(num: int, format="dict") -> str: try: job = get_jobs()[num] except KeyError: return "" tasks = get_tasks() - pos = "+" if tasks[0] == num else "-" if tasks[1] == num else " " - status = job["status"] - cmd = " ".join([" ".join(i) if isinstance(i, list) else i for i in job["cmds"]]) - pid = f"({job['pids'][-1]})" if job["pids"] else "" - bg = " &" if job["bg"] else "" - return f"[{num}]{pos} {status}: {cmd}{bg} {pid}" + r = { + "num": num, + "status": job["status"], + "cmd": " ".join( + [" ".join(i) if isinstance(i, list) else i for i in job["cmds"]] + ), + "pid": int(job["pids"][-1]) if job["pids"] else None, + } + + if format == "posix": + r["pos"] = "+" if tasks[0] == num else "-" if tasks[1] == num else " " + r["bg"] = " &" if job["bg"] else "" + r["pid"] = f"({r['pid']})" if r["pid"] else "" + return "[{num}]{pos} {status}: {cmd}{bg} {pid}".format(**r) + else: + return repr(r) -def print_one_job(num, outfile=sys.stdout): +def print_one_job(num, outfile=sys.stdout, format="dict"): """Print a line describing job number ``num``.""" - info = format_job_string(num) + info = format_job_string(num, format) if info: print(info, file=outfile) @@ -445,8 +455,9 @@ def jobs(args, stdin=None, stdout=sys.stdout, stderr=None): Display a list of all current jobs. """ _clear_dead_jobs() + format = "posix" if "--posix" in args else "dict" for j in get_tasks(): - print_one_job(j, outfile=stdout) + print_one_job(j, outfile=stdout, format=format) return None, None