From 6df2fd694dfa3f0ebafca29af31a874e04cd5aa0 Mon Sep 17 00:00:00 2001 From: Hoang Nguyen Date: Wed, 9 Mar 2022 17:33:06 +0000 Subject: [PATCH] add fish shell completion (#2363) --- Makefile | 5 ++++- scripts/completion_fish.py | 45 ++++++++++++++++++++++++++++++++++++++ setup.py | 1 + 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100755 scripts/completion_fish.py diff --git a/Makefile b/Makefile index 1ab7e06d..10b10aec 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ test: executable: scripts/pyinstaller.py -completion: data/completion/gallery-dl data/completion/_gallery-dl +completion: data/completion/gallery-dl data/completion/_gallery-dl data/completion/gallery-dl.fish man: data/man/gallery-dl.1 data/man/gallery-dl.conf.5 @@ -46,3 +46,6 @@ data/completion/gallery-dl: gallery_dl/option.py scripts/completion_bash.py data/completion/_gallery-dl: gallery_dl/option.py scripts/completion_zsh.py $(PYTHON) scripts/completion_zsh.py + +data/completion/gallery-dl.fish: gallery_dl/option.py scripts/completion_fish.py + $(PYTHON) scripts/completion_fish.py diff --git a/scripts/completion_fish.py b/scripts/completion_fish.py new file mode 100755 index 00000000..1a1816cf --- /dev/null +++ b/scripts/completion_fish.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. + +"""Generate fish completion script from gallery-dl's argument parser""" + +import util +from gallery_dl import option + + +TEMPLATE = """complete -c gallery-dl -x +%(opts)s +""" + +opts = [] +for action in option.build_parser()._actions: + if not action.option_strings: + continue + + opt = "complete -c gallery-dl" + + if action.metavar: + if action.metavar == "FILE": + opt += " -r -F" + elif action.metavar == "PATH": + opt += " -x -a '(__fish_complete_directories)'" + else: + opt += " -x" + + for optstr in action.option_strings: + if optstr.startswith("--"): + opt += " -l '" + optstr[2:] + "'" + else: + opt += " -s '" + optstr[1:] + "'" + + opt += " -d '" + action.help.replace("'", '"') + "'" + + opts.append(opt) + +PATH = util.path("data/completion/gallery-dl.fish") +with open(PATH, "w", encoding="utf-8") as file: + file.write(TEMPLATE % {"opts": "\n".join(opts)}) diff --git a/setup.py b/setup.py index 1a5c315f..bf1d9279 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,7 @@ FILES = [ for (path, files) in [ ("share/bash-completion/completions", ["data/completion/gallery-dl"]), ("share/zsh/site-functions" , ["data/completion/_gallery-dl"]), + ("share/fish/vendor_completions.d" , ["data/completion/gallery-dl.fish"]), ("share/man/man1" , ["data/man/gallery-dl.1"]), ("share/man/man5" , ["data/man/gallery-dl.conf.5"]), ]