From ca0fdcd5c943e1e2f6f6d19631268d842e920913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Hohnst=C3=A4dt?= Date: Sun, 11 Apr 2021 14:07:50 +0200 Subject: [PATCH] Bash completion --- lib/arguments.cpp | 14 +++++++++++++- lib/arguments.h | 1 + lib/main.cpp | 6 +++--- misc/Makefile | 4 +++- misc/xca.completion | 6 ++++++ 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 misc/xca.completion diff --git a/lib/arguments.cpp b/lib/arguments.cpp index bd9fe965..bcb84a62 100644 --- a/lib/arguments.cpp +++ b/lib/arguments.cpp @@ -159,11 +159,23 @@ QString arguments::rst() return s; } +QString arguments::completion() +{ + QStringList sl; + for (auto i = opts.begin(); i != opts.end(); ++i) + sl << QString("--%1").arg(i->long_opt); + return sl.join(" "); +} + QString arguments::doc(const QString &which) { if (which == "rst") return rst(); - return man(); + if (which == "man") + return man(); + if (which == "completion") + return completion(); + return QString(); } size_t arguments::maxOptWidth() diff --git a/lib/arguments.h b/lib/arguments.h index 2470d500..151b782c 100644 --- a/lib/arguments.h +++ b/lib/arguments.h @@ -50,6 +50,7 @@ class arguments static QString help(); static QString man(); static QString rst(); + static QString completion(); static size_t maxOptWidth(); static QString doc(const QString &which); diff --git a/lib/main.cpp b/lib/main.cpp index 6dee4f3d..6daa74c2 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -300,9 +300,9 @@ static void read_cmdline(int argc, char *argv[]) int main(int argc, char *argv[]) { - const char *xca_man = getenv("XCA_MAN"); - if (xca_man && *xca_man) { - puts(CCHAR(arguments::doc(xca_man))); + const char *xca_special = getenv("XCA_SPECIAL"); + if (xca_special && *xca_special) { + puts(CCHAR(arguments::doc(xca_special))); return 0; } #if QT_VERSION < 0x050000 diff --git a/misc/Makefile b/misc/Makefile index 6b7281d4..1bd3459a 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -27,11 +27,13 @@ endif install: install -m 755 -d $(DESTDIR)$(xca_prefix) \ $(DESTDIR)$(datarootdir)/applications \ - $(DESTDIR)$(datarootdir)/mime/packages + $(DESTDIR)$(datarootdir)/mime/packages \ + $(DESTDIR)$(datarootdir)/bash-completion/completions install -m 644 $(CONFIG_OBJ) $(SRCPATH)*.xca \ $(DESTDIR)$(xca_prefix) install -m 644 $(SRCPATH)xca.desktop $(DESTDIR)$(datarootdir)/applications install -m 644 $(SRCPATH)xca.xml $(DESTDIR)$(datarootdir)/mime/packages + install -m 644 $(SRCPATH)xca.completion $(DESTDIR)$(datarootdir)/bash-completion/completions/xca if test -z "$(DESTDIR)"; then \ update-mime-database $(datarootdir)/mime || :; \ update-desktop-database || :; \ diff --git a/misc/xca.completion b/misc/xca.completion new file mode 100644 index 00000000..5f42842d --- /dev/null +++ b/misc/xca.completion @@ -0,0 +1,6 @@ + +_XCA_WORDS="$(XCA_SPECIAL=completion xca)" +_xca() { + COMPREPLY=($(compgen -o bashdefault -W "$_XCA_WORDS" -- "${COMP_WORDS[COMP_CWORD]}")) +} +complete -F _xca xca