summaryrefslogtreecommitdiffstats
path: root/src/init/starship.xsh
diff options
context:
space:
mode:
Diffstat (limited to 'src/init/starship.xsh')
-rw-r--r--src/init/starship.xsh17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/init/starship.xsh b/src/init/starship.xsh
new file mode 100644
index 000000000..64439d203
--- /dev/null
+++ b/src/init/starship.xsh
@@ -0,0 +1,17 @@
+import uuid
+
+
+def starship_prompt():
+ last_cmd = __xonsh__.history[-1] if __xonsh__.history else None
+ status = last_cmd.rtn if last_cmd else 0
+ # I believe this is equivalent to xonsh.jobs.get_next_job_number() for our purposes,
+ # but we can't use that function because of https://gitter.im/xonsh/xonsh?at=60e8832d82dd9050f5e0c96a
+ jobs = sum(1 for job in __xonsh__.all_jobs.values() if job['obj'] and job['obj'].poll() is None)
+ duration = round((last_cmd.ts[1] - last_cmd.ts[0]) * 1000) if last_cmd else 0
+ # The `| cat` is a workaround for https://github.com/xonsh/xonsh/issues/3786. See https://github.com/starship/starship/pull/2807#discussion_r667316323.
+ return $(::STARSHIP:: prompt --status=@(status) --jobs=@(jobs) --cmd-duration=@(duration) | cat)
+
+
+$PROMPT = starship_prompt
+$STARSHIP_SHELL = "xonsh"
+$STARSHIP_SESSION_KEY = uuid.uuid4().hex