diff mbox series

[b4] b4: add shell completion via python-shtab

Message ID 20240227-shell-completion-v1-1-a809aad38589@gmail.com (mailing list archive)
State New
Headers show
Series [b4] b4: add shell completion via python-shtab | expand

Commit Message

Emil Velikov via B4 Relay Feb. 27, 2024, 1:18 p.m. UTC
From: Emil Velikov <emil.l.velikov@gmail.com>

The python-shtab module allows for static shell completion files,
whereas others like python-argcomplete, execute the underlying tool for
ever suggestion.

Currently it supports bash, zsh and tcsh - maintainer is open to patches
supporting fish.

In addition, the action completion (aka is the argument is a folder,
file, git sha, etc) is non-existing, but even as-is the completions are
quite useful.

To generate/install the zsh completion use:
 - ./b4.sh --print-completion zsh > _b4
 - mv _b4 /usr/share/zsh/site-functions/_b4

For more details, see the website https://github.com/iterative/shtab

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
As with any tool, having shell completion is a must both to improve
productivity and improve ramp-up for noobies.

Initially I started off writing zsh completion by hand, although the
100+ options quickly made me reconsider my life choices :-D

Instead we can use python-shtab, which:
 - is an amazing starting point
 - requires effectively zero maintenance by the b4 team

I have been using the zsh completion for a few weeks now and it works
fine. From a quick test the bash completion is also quite decent.

If needed, the generated files can be checked into the git repo and
expanded on. Even though personally I don't think that's a great idea.

Happy to do so, of course - let me know either way.
 src/b4/command.py | 7 +++++++
 1 file changed, 7 insertions(+)

base-commit: 7f3284906e67f138eae82271a6c3bde1ebb30791
change-id: 20240227-shell-completion-060a610f5b20

Best regards,
diff mbox series


diff --git a/src/b4/command.py b/src/b4/command.py
index be0f033..10cb4d0 100644
--- a/src/b4/command.py
+++ b/src/b4/command.py
@@ -363,6 +363,13 @@  def setup_parser() -> argparse.ArgumentParser:
                           help='Submit the token received via verification email')
+    try:
+        import shtab
+        shtab.add_argument_to(parser, ["-s", "--print-completion"])
+    except ImportError:
+        pass
     return parser