From fff26c1ca046ee58eedfb9942da3b33aff4e922d Mon Sep 17 00:00:00 2001 From: Andy Kipp Date: Fri, 20 Mar 2026 19:57:05 +0600 Subject: [PATCH 1/4] Implement xonsh shell xontrib Adds a new CLI tool using Fire in the xonsh shell. --- xontrib/fire.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 xontrib/fire.py diff --git a/xontrib/fire.py b/xontrib/fire.py new file mode 100644 index 00000000..b01f22d9 --- /dev/null +++ b/xontrib/fire.py @@ -0,0 +1,16 @@ +"""Turns any object into a CLI tool using Fire in the xonsh shell.""" + +@aliases.register +def _fire(args, stdout, stderr): + """Turns any object into a CLI tool using Fire in the xonsh shell.""" + if len(args) == 0: + print('Usage: fire [args|--help]', file=stderr) + print('Example: fire @ --help', file=stderr) + return 1 + def fixed_fire(): + """Fix https://github.com/google/python-fire/issues/188""" + import fire + fire.core.Display = lambda lines, out: stdout.write("\n".join(lines) + "\n") + return fire + with __xonsh__.env.swap(UPDATE_OS_ENVIRON=True, PAGER='-'): + fixed_fire().Fire(evalx(args[0]), command=args[1:], name=args[0]) From fc01370797363fb303edb8b1d4efd00c47991615 Mon Sep 17 00:00:00 2001 From: Andy Kipp Date: Fri, 20 Mar 2026 20:11:21 +0600 Subject: [PATCH 2/4] Refactor _fire function to simplify argument handling --- xontrib/fire.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/xontrib/fire.py b/xontrib/fire.py index b01f22d9..8138ea59 100644 --- a/xontrib/fire.py +++ b/xontrib/fire.py @@ -1,7 +1,8 @@ """Turns any object into a CLI tool using Fire in the xonsh shell.""" + @aliases.register -def _fire(args, stdout, stderr): +def _fire(args, stdout): """Turns any object into a CLI tool using Fire in the xonsh shell.""" if len(args) == 0: print('Usage: fire [args|--help]', file=stderr) @@ -12,5 +13,9 @@ def fixed_fire(): import fire fire.core.Display = lambda lines, out: stdout.write("\n".join(lines) + "\n") return fire + try: + obj = eval(args[0]) + except: + obj = evalx(args[0]) with __xonsh__.env.swap(UPDATE_OS_ENVIRON=True, PAGER='-'): - fixed_fire().Fire(evalx(args[0]), command=args[1:], name=args[0]) + fixed_fire().Fire(obj, command=args[1:], name=args[0]) From 35a88a5d8b9b2cf78da7bd2f5d35c65e13563863 Mon Sep 17 00:00:00 2001 From: Andy Kipp Date: Fri, 20 Mar 2026 20:16:22 +0600 Subject: [PATCH 3/4] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 912c08aa..9cf579b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ test = [ ] [tool.setuptools.packages.find] -include = ["fire*"] +include = ["fire*", "xontrib*"] [tool.setuptools.package-data] fire = ["console/*"] From fada037edf6562a7dbd818864584b474472e6faa Mon Sep 17 00:00:00 2001 From: Andy Kipp Date: Fri, 20 Mar 2026 20:37:46 +0600 Subject: [PATCH 4/4] Add Xonsh shell support section to README Added section on Xonsh shell support with examples. --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index 1482d56d..1d42d306 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,31 @@ Please see [The Python Fire Guide](docs/guide.md). _Note that these flags are separated from the Fire command by an isolated `--`._ +## Xonsh shell support + +```xsh +xpip install fire +xontrib load fire + +obj = {'var': 'val'} +fire obj var +# val + +type(@.env) +# xonsh.environ.Env +fire @.env get USER - upper +# PC + +type(@.imp) +# xonsh.built_ins.InlineImporter +fire @.imp.json dumps --help +# @.imp.json dumps OBJ +fire @.imp.json dumps '{"a":1}' --indent 4 +# { +# "a": 1 +# } +``` + ## License Licensed under the