[med-svn] [Git][med-team/seqkit][master] 4 commits: d/shell_completions/*, d/install: Add shell completions for bash, zsh and fish

Nilesh Patra (@nilesh) gitlab at salsa.debian.org
Sun Sep 26 21:37:06 BST 2021



Nilesh Patra pushed to branch master at Debian Med / seqkit


Commits:
b1bcf46d by Nilesh Patra at 2021-09-27T01:50:42+05:30
d/shell_completions/*, d/install: Add shell completions for bash, zsh and fish

- - - - -
51d789a0 by Nilesh Patra at 2021-09-26T20:25:41+00:00
d/p/fix-version.patch: Fix version to 2.0.1

- - - - -
fb43e47f by Nilesh Patra at 2021-09-26T20:32:06+00:00
Update manpages

- - - - -
8f2987c1 by Nilesh Patra at 2021-09-27T02:06:34+05:30
[skip ci] Interim changelog entry

- - - - -


9 changed files:

- debian/changelog
- + debian/patches/fix-version.patch
- debian/patches/series
- debian/seqkit-benchmark.1
- debian/seqkit.1
- debian/seqkit.install
- + debian/shell_completions/_seqkit
- + debian/shell_completions/seqkit
- + debian/shell_completions/seqkit.fish


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,13 @@
+seqkit (2.0.1+ds-2) UNRELEASED; urgency=medium
+
+  * d/shell_completions/*, d/install: Add shell completions
+    for bash, zsh and fish
+  * d/p/fix-version.patch: Fix version to 2.0.1
+  * Update manpages
+TODO: waiting for upstream to clarify https://github.com/shenwei356/seqkit/issues/248
+
+ -- Nilesh Patra <nilesh at debian.org>  Mon, 27 Sep 2021 02:02:18 +0530
+
 seqkit (2.0.1+ds-1) unstable; urgency=medium
 
   * New upstream version


=====================================
debian/patches/fix-version.patch
=====================================
@@ -0,0 +1,11 @@
+--- a/seqkit/cmd/version.go
++++ b/seqkit/cmd/version.go
+@@ -29,7 +29,7 @@
+ )
+ 
+ // VERSION of seqkit
+-const VERSION = "2.0.0"
++const VERSION = "2.0.1"
+ 
+ // versionCmd represents the version command
+ var versionCmd = &cobra.Command{


=====================================
debian/patches/series
=====================================
@@ -1,2 +1,3 @@
 use-upstream-go-logger.patch
 spellings.patch
+fix-version.patch


=====================================
debian/seqkit-benchmark.1
=====================================
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.16.
-.TH SEQKIT-BENCHMARK "1" "January 2021" "seqkit-benchmark 0.15.0+ds" "User Commands"
+.TH SEQKIT-BENCHMARK "1" "September 2021" "seqkit-benchmark 2.0.1+ds" "User Commands"
 .SH NAME
 seqkit-benchmark \- cross-platform and ultrafast toolkit for FASTA/Q file manipulation
 .SH DESCRIPTION


=====================================
debian/seqkit.1
=====================================
@@ -1,24 +1,31 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.16.
-.TH SEQKIT "1" "January 2021" "seqkit 0.15.0+ds" "User Commands"
+.TH SEQKIT "1" "September 2021" "seqkit 2.0.1+ds" "User Commands"
 .SH NAME
 seqkit \- cross-platform and ultrafast toolkit for FASTA/Q file manipulation
 .SH DESCRIPTION
 SeqKit \fB\-\-\fR a cross\-platform and ultrafast toolkit for FASTA/Q file manipulation
 .PP
-Version: 0.15.0
+Version: 2.0.1
 .PP
 Author: Wei Shen <shenwei356 at gmail.com>
 .PP
 Documents  : http://bioinf.shenwei.me/seqkit
 Source code: https://github.com/shenwei356/seqkit
 Please cite: https://doi.org/10.1371/journal.pone.0163962
+.PP
+Seqkit utlizies the pgzip (https://github.com/klauspost/pgzip) package to
+read and write gzip file, and the outputted gzip file would be slighty
+larger than files generated by GNU gzip.
+.PP
+Seqkit writes gzip files very fast, much faster than the multi\-threaded pigz,
+therefore there's no need to pipe the result to gzip/pigz.
 .SS "Usage:"
 .IP
 seqkit [command]
 .SS "Available Commands:"
 .TP
 amplicon
-retrieve amplicon (or specific region around it) via primer(s)
+extract amplicon (or specific region around it) via primer(s)
 .TP
 bam
 monitoring and online histograms of BAM record features
@@ -26,6 +33,9 @@ monitoring and online histograms of BAM record features
 common
 find common sequences of multiple files by id/name/sequence
 .TP
+completion
+generate the autocompletion script for the specified shell
+.TP
 concat
 concatenate sequences with same ID from multiple files
 .TP
@@ -45,11 +55,12 @@ fq2fa
 convert FASTQ to FASTA
 .TP
 fx2tab
-convert FASTA/Q to tabular format (with length/GC content/GC skew)
+convert FASTA/Q to tabular format (and length, GC content, average quality...)
 .IP
-genautocomplete generate shell autocompletion script
+genautocomplete generate shell autocompletion script (bash|zsh|fish|powershell)
 grep            search sequences by ID/name/sequence/sequence motifs, mismatch allowed
 head            print first N FASTA/Q records
+head\-genome     print sequences of the first genome with common prefixes in name
 help            Help about any command
 locate          locate subsequences/motifs, mismatch allowed
 mutate          edit sequence (point mutation, insertion, deletion)
@@ -58,13 +69,13 @@ range           print FASTA/Q records in a range (start:end)
 rename          rename duplicated IDs
 replace         replace name/sequence by regular expression
 restart         reset start position for circular genome
-rmdup           remove duplicated sequences by id/name/sequence
+rmdup           remove duplicated sequences by ID/name/sequence
 sample          sample sequences by number or proportion
-sana            sanitize broken single line fastq files
+sana            sanitize broken single line FASTQ files
 scat            real time recursive concatenation and streaming of fastx files
-seq             transform sequences (revserse, complement, extract ID...)
+seq             transform sequences (extract ID, filter by length, remove gaps...)
 shuffle         shuffle sequences
-sliding         sliding sequences, circular genome supported
+sliding         extract subsequences in sliding windows
 sort            sort sequences by id/name/sequence/length
 split           split sequences into files by id/seq region/size/parts (mainly for FASTA)
 split2          split sequences into files by size/parts (FASTA, PE/SE FASTQ)
@@ -104,7 +115,7 @@ be quiet and do not show extra information
 sequence type (dna|rna|protein|unlimit|auto) (for auto, it automatically detect by the first sequence) (default "auto")
 .TP
 \fB\-j\fR, \fB\-\-threads\fR int
-number of CPUs. (default value: 1 for single\-CPU PC, 2 for others. can also set with environment variable SEQKIT_THREADS) (default 2)
+number of CPUs. can also set with environment variable SEQKIT_THREADS) (default 4)
 .PP
 Use "seqkit [command] \fB\-\-help\fR" for more information about a command.
 .SH AUTHOR


=====================================
debian/seqkit.install
=====================================
@@ -1,2 +1,5 @@
-debian/tmp/usr/bin/benchmark	usr/lib/seqkit
-debian/tmp/usr/bin/seqkit	usr/bin
+debian/tmp/usr/bin/benchmark		usr/lib/seqkit
+debian/tmp/usr/bin/seqkit		usr/bin
+debian/shell_completions/seqkit		usr/share/bash-completion/completions
+debian/shell_completions/_seqkit	usr/share/zsh/vendor-completions
+debian/shell_completions/seqkit.fish	usr/share/fish/vendor_completions.d


=====================================
debian/shell_completions/_seqkit
=====================================
@@ -0,0 +1,159 @@
+#compdef _seqkit seqkit
+
+# zsh completion for seqkit                               -*- shell-script -*-
+
+__seqkit_debug()
+{
+    local file="$BASH_COMP_DEBUG_FILE"
+    if [[ -n ${file} ]]; then
+        echo "$*" >> "${file}"
+    fi
+}
+
+_seqkit()
+{
+    local shellCompDirectiveError=1
+    local shellCompDirectiveNoSpace=2
+    local shellCompDirectiveNoFileComp=4
+    local shellCompDirectiveFilterFileExt=8
+    local shellCompDirectiveFilterDirs=16
+
+    local lastParam lastChar flagPrefix requestComp out directive compCount comp lastComp
+    local -a completions
+
+    __seqkit_debug "\n========= starting completion logic =========="
+    __seqkit_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"
+
+    # The user could have moved the cursor backwards on the command-line.
+    # We need to trigger completion from the $CURRENT location, so we need
+    # to truncate the command-line ($words) up to the $CURRENT location.
+    # (We cannot use $CURSOR as its value does not work when a command is an alias.)
+    words=("${=words[1,CURRENT]}")
+    __seqkit_debug "Truncated words[*]: ${words[*]},"
+
+    lastParam=${words[-1]}
+    lastChar=${lastParam[-1]}
+    __seqkit_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"
+
+    # For zsh, when completing a flag with an = (e.g., seqkit -n=<TAB>)
+    # completions must be prefixed with the flag
+    setopt local_options BASH_REMATCH
+    if [[ "${lastParam}" =~ '-.*=' ]]; then
+        # We are dealing with a flag with an =
+        flagPrefix="-P ${BASH_REMATCH}"
+    fi
+
+    # Prepare the command to obtain completions
+    requestComp="${words[1]} __complete ${words[2,-1]}"
+    if [ "${lastChar}" = "" ]; then
+        # If the last parameter is complete (there is a space following it)
+        # We add an extra empty parameter so we can indicate this to the go completion code.
+        __seqkit_debug "Adding extra empty parameter"
+        requestComp="${requestComp} \"\""
+    fi
+
+    __seqkit_debug "About to call: eval ${requestComp}"
+
+    # Use eval to handle any environment variables and such
+    out=$(eval ${requestComp} 2>/dev/null)
+    __seqkit_debug "completion output: ${out}"
+
+    # Extract the directive integer following a : from the last line
+    local lastLine
+    while IFS='\n' read -r line; do
+        lastLine=${line}
+    done < <(printf "%s\n" "${out[@]}")
+    __seqkit_debug "last line: ${lastLine}"
+
+    if [ "${lastLine[1]}" = : ]; then
+        directive=${lastLine[2,-1]}
+        # Remove the directive including the : and the newline
+        local suffix
+        (( suffix=${#lastLine}+2))
+        out=${out[1,-$suffix]}
+    else
+        # There is no directive specified.  Leave $out as is.
+        __seqkit_debug "No directive found.  Setting do default"
+        directive=0
+    fi
+
+    __seqkit_debug "directive: ${directive}"
+    __seqkit_debug "completions: ${out}"
+    __seqkit_debug "flagPrefix: ${flagPrefix}"
+
+    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
+        __seqkit_debug "Completion received error. Ignoring completions."
+        return
+    fi
+
+    compCount=0
+    while IFS='\n' read -r comp; do
+        if [ -n "$comp" ]; then
+            # If requested, completions are returned with a description.
+            # The description is preceded by a TAB character.
+            # For zsh's _describe, we need to use a : instead of a TAB.
+            # We first need to escape any : as part of the completion itself.
+            comp=${comp//:/\\:}
+
+            local tab=$(printf '\t')
+            comp=${comp//$tab/:}
+
+            ((compCount++))
+            __seqkit_debug "Adding completion: ${comp}"
+            completions+=${comp}
+            lastComp=$comp
+        fi
+    done < <(printf "%s\n" "${out[@]}")
+
+    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
+        # File extension filtering
+        local filteringCmd
+        filteringCmd='_files'
+        for filter in ${completions[@]}; do
+            if [ ${filter[1]} != '*' ]; then
+                # zsh requires a glob pattern to do file filtering
+                filter="\*.$filter"
+            fi
+            filteringCmd+=" -g $filter"
+        done
+        filteringCmd+=" ${flagPrefix}"
+
+        __seqkit_debug "File filtering command: $filteringCmd"
+        _arguments '*:filename:'"$filteringCmd"
+    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
+        # File completion for directories only
+        local subDir
+        subdir="${completions[1]}"
+        if [ -n "$subdir" ]; then
+            __seqkit_debug "Listing directories in $subdir"
+            pushd "${subdir}" >/dev/null 2>&1
+        else
+            __seqkit_debug "Listing directories in ."
+        fi
+
+        _arguments '*:dirname:_files -/'" ${flagPrefix}"
+        if [ -n "$subdir" ]; then
+            popd >/dev/null 2>&1
+        fi
+    elif [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ] && [ ${compCount} -eq 1 ]; then
+        __seqkit_debug "Activating nospace."
+        # We can use compadd here as there is no description when
+        # there is only one completion.
+        compadd -S '' "${lastComp}"
+    elif [ ${compCount} -eq 0 ]; then
+        if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
+            __seqkit_debug "deactivating file completion"
+        else
+            # Perform file completion
+            __seqkit_debug "activating file completion"
+            _arguments '*:filename:_files'" ${flagPrefix}"
+        fi
+    else
+        _describe "completions" completions $(echo $flagPrefix)
+    fi
+}
+
+# don't run the completion function when being source-ed or eval-ed
+if [ "$funcstack[1]" = "_seqkit" ]; then
+	_seqkit
+fi


=====================================
debian/shell_completions/seqkit
=====================================
@@ -0,0 +1,3320 @@
+# bash completion for seqkit                               -*- shell-script -*-
+
+__seqkit_debug()
+{
+    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
+        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
+    fi
+}
+
+# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
+# _init_completion. This is a very minimal version of that function.
+__seqkit_init_completion()
+{
+    COMPREPLY=()
+    _get_comp_words_by_ref "$@" cur prev words cword
+}
+
+__seqkit_index_of_word()
+{
+    local w word=$1
+    shift
+    index=0
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+        index=$((index+1))
+    done
+    index=-1
+}
+
+__seqkit_contains_word()
+{
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
+    return 1
+}
+
+__seqkit_handle_go_custom_completion()
+{
+    __seqkit_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"
+
+    local shellCompDirectiveError=1
+    local shellCompDirectiveNoSpace=2
+    local shellCompDirectiveNoFileComp=4
+    local shellCompDirectiveFilterFileExt=8
+    local shellCompDirectiveFilterDirs=16
+
+    local out requestComp lastParam lastChar comp directive args
+
+    # Prepare the command to request completions for the program.
+    # Calling ${words[0]} instead of directly seqkit allows to handle aliases
+    args=("${words[@]:1}")
+    requestComp="${words[0]} __completeNoDesc ${args[*]}"
+
+    lastParam=${words[$((${#words[@]}-1))]}
+    lastChar=${lastParam:$((${#lastParam}-1)):1}
+    __seqkit_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"
+
+    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
+        # If the last parameter is complete (there is a space following it)
+        # We add an extra empty parameter so we can indicate this to the go method.
+        __seqkit_debug "${FUNCNAME[0]}: Adding extra empty parameter"
+        requestComp="${requestComp} \"\""
+    fi
+
+    __seqkit_debug "${FUNCNAME[0]}: calling ${requestComp}"
+    # Use eval to handle any environment variables and such
+    out=$(eval "${requestComp}" 2>/dev/null)
+
+    # Extract the directive integer at the very end of the output following a colon (:)
+    directive=${out##*:}
+    # Remove the directive
+    out=${out%:*}
+    if [ "${directive}" = "${out}" ]; then
+        # There is not directive specified
+        directive=0
+    fi
+    __seqkit_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
+    __seqkit_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"
+
+    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
+        # Error code.  No completion.
+        __seqkit_debug "${FUNCNAME[0]}: received error from custom completion go code"
+        return
+    else
+        if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                __seqkit_debug "${FUNCNAME[0]}: activating no space"
+                compopt -o nospace
+            fi
+        fi
+        if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                __seqkit_debug "${FUNCNAME[0]}: activating no file completion"
+                compopt +o default
+            fi
+        fi
+    fi
+
+    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
+        # File extension filtering
+        local fullFilter filter filteringCmd
+        # Do not use quotes around the $out variable or else newline
+        # characters will be kept.
+        for filter in ${out[*]}; do
+            fullFilter+="$filter|"
+        done
+
+        filteringCmd="_filedir $fullFilter"
+        __seqkit_debug "File filtering command: $filteringCmd"
+        $filteringCmd
+    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
+        # File completion for directories only
+        local subDir
+        # Use printf to strip any trailing newline
+        subdir=$(printf "%s" "${out[0]}")
+        if [ -n "$subdir" ]; then
+            __seqkit_debug "Listing directories in $subdir"
+            __seqkit_handle_subdirs_in_dir_flag "$subdir"
+        else
+            __seqkit_debug "Listing directories in ."
+            _filedir -d
+        fi
+    else
+        while IFS='' read -r comp; do
+            COMPREPLY+=("$comp")
+        done < <(compgen -W "${out[*]}" -- "$cur")
+    fi
+}
+
+__seqkit_handle_reply()
+{
+    __seqkit_debug "${FUNCNAME[0]}"
+    local comp
+    case $cur in
+        -*)
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                compopt -o nospace
+            fi
+            local allflags
+            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
+                allflags=("${must_have_one_flag[@]}")
+            else
+                allflags=("${flags[*]} ${two_word_flags[*]}")
+            fi
+            while IFS='' read -r comp; do
+                COMPREPLY+=("$comp")
+            done < <(compgen -W "${allflags[*]}" -- "$cur")
+            if [[ $(type -t compopt) = "builtin" ]]; then
+                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
+            fi
+
+            # complete after --flag=abc
+            if [[ $cur == *=* ]]; then
+                if [[ $(type -t compopt) = "builtin" ]]; then
+                    compopt +o nospace
+                fi
+
+                local index flag
+                flag="${cur%=*}"
+                __seqkit_index_of_word "${flag}" "${flags_with_completion[@]}"
+                COMPREPLY=()
+                if [[ ${index} -ge 0 ]]; then
+                    PREFIX=""
+                    cur="${cur#*=}"
+                    ${flags_completion[${index}]}
+                    if [ -n "${ZSH_VERSION}" ]; then
+                        # zsh completion needs --flag= prefix
+                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
+                    fi
+                fi
+            fi
+            return 0;
+            ;;
+    esac
+
+    # check if we are handling a flag with special work handling
+    local index
+    __seqkit_index_of_word "${prev}" "${flags_with_completion[@]}"
+    if [[ ${index} -ge 0 ]]; then
+        ${flags_completion[${index}]}
+        return
+    fi
+
+    # we are parsing a flag and don't have a special handler, no completion
+    if [[ ${cur} != "${words[cword]}" ]]; then
+        return
+    fi
+
+    local completions
+    completions=("${commands[@]}")
+    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
+        completions+=("${must_have_one_noun[@]}")
+    elif [[ -n "${has_completion_function}" ]]; then
+        # if a go completion function is provided, defer to that function
+        __seqkit_handle_go_custom_completion
+    fi
+    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
+        completions+=("${must_have_one_flag[@]}")
+    fi
+    while IFS='' read -r comp; do
+        COMPREPLY+=("$comp")
+    done < <(compgen -W "${completions[*]}" -- "$cur")
+
+    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
+        while IFS='' read -r comp; do
+            COMPREPLY+=("$comp")
+        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
+    fi
+
+    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
+		if declare -F __seqkit_custom_func >/dev/null; then
+			# try command name qualified custom func
+			__seqkit_custom_func
+		else
+			# otherwise fall back to unqualified for compatibility
+			declare -F __custom_func >/dev/null && __custom_func
+		fi
+    fi
+
+    # available in bash-completion >= 2, not always present on macOS
+    if declare -F __ltrim_colon_completions >/dev/null; then
+        __ltrim_colon_completions "$cur"
+    fi
+
+    # If there is only 1 completion and it is a flag with an = it will be completed
+    # but we don't want a space after the =
+    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
+       compopt -o nospace
+    fi
+}
+
+# The arguments should be in the form "ext1|ext2|extn"
+__seqkit_handle_filename_extension_flag()
+{
+    local ext="$1"
+    _filedir "@(${ext})"
+}
+
+__seqkit_handle_subdirs_in_dir_flag()
+{
+    local dir="$1"
+    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
+}
+
+__seqkit_handle_flag()
+{
+    __seqkit_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    # if a command required a flag, and we found it, unset must_have_one_flag()
+    local flagname=${words[c]}
+    local flagvalue
+    # if the word contained an =
+    if [[ ${words[c]} == *"="* ]]; then
+        flagvalue=${flagname#*=} # take in as flagvalue after the =
+        flagname=${flagname%=*} # strip everything after the =
+        flagname="${flagname}=" # but put the = back
+    fi
+    __seqkit_debug "${FUNCNAME[0]}: looking for ${flagname}"
+    if __seqkit_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
+        must_have_one_flag=()
+    fi
+
+    # if you set a flag which only applies to this command, don't show subcommands
+    if __seqkit_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
+      commands=()
+    fi
+
+    # keep flag value with flagname as flaghash
+    # flaghash variable is an associative array which is only supported in bash > 3.
+    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+        if [ -n "${flagvalue}" ] ; then
+            flaghash[${flagname}]=${flagvalue}
+        elif [ -n "${words[ $((c+1)) ]}" ] ; then
+            flaghash[${flagname}]=${words[ $((c+1)) ]}
+        else
+            flaghash[${flagname}]="true" # pad "true" for bool flag
+        fi
+    fi
+
+    # skip the argument to a two word flag
+    if [[ ${words[c]} != *"="* ]] && __seqkit_contains_word "${words[c]}" "${two_word_flags[@]}"; then
+			  __seqkit_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
+        c=$((c+1))
+        # if we are looking for a flags value, don't show commands
+        if [[ $c -eq $cword ]]; then
+            commands=()
+        fi
+    fi
+
+    c=$((c+1))
+
+}
+
+__seqkit_handle_noun()
+{
+    __seqkit_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    if __seqkit_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
+        must_have_one_noun=()
+    elif __seqkit_contains_word "${words[c]}" "${noun_aliases[@]}"; then
+        must_have_one_noun=()
+    fi
+
+    nouns+=("${words[c]}")
+    c=$((c+1))
+}
+
+__seqkit_handle_command()
+{
+    __seqkit_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+
+    local next_command
+    if [[ -n ${last_command} ]]; then
+        next_command="_${last_command}_${words[c]//:/__}"
+    else
+        if [[ $c -eq 0 ]]; then
+            next_command="_seqkit_root_command"
+        else
+            next_command="_${words[c]//:/__}"
+        fi
+    fi
+    c=$((c+1))
+    __seqkit_debug "${FUNCNAME[0]}: looking for ${next_command}"
+    declare -F "$next_command" >/dev/null && $next_command
+}
+
+__seqkit_handle_word()
+{
+    if [[ $c -ge $cword ]]; then
+        __seqkit_handle_reply
+        return
+    fi
+    __seqkit_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
+    if [[ "${words[c]}" == -* ]]; then
+        __seqkit_handle_flag
+    elif __seqkit_contains_word "${words[c]}" "${commands[@]}"; then
+        __seqkit_handle_command
+    elif [[ $c -eq 0 ]]; then
+        __seqkit_handle_command
+    elif __seqkit_contains_word "${words[c]}" "${command_aliases[@]}"; then
+        # aliashash variable is an associative array which is only supported in bash > 3.
+        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+            words[c]=${aliashash[${words[c]}]}
+            __seqkit_handle_command
+        else
+            __seqkit_handle_noun
+        fi
+    else
+        __seqkit_handle_noun
+    fi
+    __seqkit_handle_word
+}
+
+_seqkit_amplicon()
+{
+    last_command="seqkit_amplicon"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--bed")
+    local_nonpersistent_flags+=("--bed")
+    flags+=("--flanking-region")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--flanking-region")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--forward=")
+    two_word_flags+=("--forward")
+    two_word_flags+=("-F")
+    local_nonpersistent_flags+=("--forward")
+    local_nonpersistent_flags+=("--forward=")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--immediate-output")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--immediate-output")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--max-mismatch=")
+    two_word_flags+=("--max-mismatch")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--max-mismatch")
+    local_nonpersistent_flags+=("--max-mismatch=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--only-positive-strand")
+    flags+=("-P")
+    local_nonpersistent_flags+=("--only-positive-strand")
+    local_nonpersistent_flags+=("-P")
+    flags+=("--primer-file=")
+    two_word_flags+=("--primer-file")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--primer-file")
+    local_nonpersistent_flags+=("--primer-file=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--region=")
+    two_word_flags+=("--region")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--region")
+    local_nonpersistent_flags+=("--region=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--reverse=")
+    two_word_flags+=("--reverse")
+    two_word_flags+=("-R")
+    local_nonpersistent_flags+=("--reverse")
+    local_nonpersistent_flags+=("--reverse=")
+    local_nonpersistent_flags+=("-R")
+    flags+=("--save-unmatched")
+    flags+=("-u")
+    local_nonpersistent_flags+=("--save-unmatched")
+    local_nonpersistent_flags+=("-u")
+    flags+=("--strict-mode")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--strict-mode")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_bam()
+{
+    last_command="seqkit_bam"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--bins=")
+    two_word_flags+=("--bins")
+    two_word_flags+=("-B")
+    local_nonpersistent_flags+=("--bins")
+    local_nonpersistent_flags+=("--bins=")
+    local_nonpersistent_flags+=("-B")
+    flags+=("--bundle=")
+    two_word_flags+=("--bundle")
+    two_word_flags+=("-N")
+    local_nonpersistent_flags+=("--bundle")
+    local_nonpersistent_flags+=("--bundle=")
+    local_nonpersistent_flags+=("-N")
+    flags+=("--count=")
+    two_word_flags+=("--count")
+    two_word_flags+=("-c")
+    local_nonpersistent_flags+=("--count")
+    local_nonpersistent_flags+=("--count=")
+    local_nonpersistent_flags+=("-c")
+    flags+=("--delay=")
+    two_word_flags+=("--delay")
+    two_word_flags+=("-W")
+    local_nonpersistent_flags+=("--delay")
+    local_nonpersistent_flags+=("--delay=")
+    local_nonpersistent_flags+=("-W")
+    flags+=("--dump")
+    flags+=("-y")
+    local_nonpersistent_flags+=("--dump")
+    local_nonpersistent_flags+=("-y")
+    flags+=("--exclude-ids=")
+    two_word_flags+=("--exclude-ids")
+    two_word_flags+=("-G")
+    local_nonpersistent_flags+=("--exclude-ids")
+    local_nonpersistent_flags+=("--exclude-ids=")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--exec-after=")
+    two_word_flags+=("--exec-after")
+    two_word_flags+=("-e")
+    local_nonpersistent_flags+=("--exec-after")
+    local_nonpersistent_flags+=("--exec-after=")
+    local_nonpersistent_flags+=("-e")
+    flags+=("--exec-before=")
+    two_word_flags+=("--exec-before")
+    two_word_flags+=("-E")
+    local_nonpersistent_flags+=("--exec-before")
+    local_nonpersistent_flags+=("--exec-before=")
+    local_nonpersistent_flags+=("-E")
+    flags+=("--field=")
+    two_word_flags+=("--field")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--field")
+    local_nonpersistent_flags+=("--field=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--grep-ids=")
+    two_word_flags+=("--grep-ids")
+    two_word_flags+=("-g")
+    local_nonpersistent_flags+=("--grep-ids")
+    local_nonpersistent_flags+=("--grep-ids=")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--idx-count")
+    flags+=("-C")
+    local_nonpersistent_flags+=("--idx-count")
+    local_nonpersistent_flags+=("-C")
+    flags+=("--idx-stat")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--idx-stat")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--img=")
+    two_word_flags+=("--img")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--img")
+    local_nonpersistent_flags+=("--img=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--list-fields")
+    flags+=("-H")
+    local_nonpersistent_flags+=("--list-fields")
+    local_nonpersistent_flags+=("-H")
+    flags+=("--log")
+    flags+=("-L")
+    local_nonpersistent_flags+=("--log")
+    local_nonpersistent_flags+=("-L")
+    flags+=("--map-qual=")
+    two_word_flags+=("--map-qual")
+    two_word_flags+=("-q")
+    local_nonpersistent_flags+=("--map-qual")
+    local_nonpersistent_flags+=("--map-qual=")
+    local_nonpersistent_flags+=("-q")
+    flags+=("--pass")
+    flags+=("-x")
+    local_nonpersistent_flags+=("--pass")
+    local_nonpersistent_flags+=("-x")
+    flags+=("--pretty")
+    flags+=("-k")
+    local_nonpersistent_flags+=("--pretty")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--prim-only")
+    flags+=("-F")
+    local_nonpersistent_flags+=("--prim-only")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--print-freq=")
+    two_word_flags+=("--print-freq")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--print-freq")
+    local_nonpersistent_flags+=("--print-freq=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--quiet-mode")
+    flags+=("-Q")
+    local_nonpersistent_flags+=("--quiet-mode")
+    local_nonpersistent_flags+=("-Q")
+    flags+=("--range-max=")
+    two_word_flags+=("--range-max")
+    two_word_flags+=("-M")
+    local_nonpersistent_flags+=("--range-max")
+    local_nonpersistent_flags+=("--range-max=")
+    local_nonpersistent_flags+=("-M")
+    flags+=("--range-min=")
+    two_word_flags+=("--range-min")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--range-min")
+    local_nonpersistent_flags+=("--range-min=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--reset")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--reset")
+    local_nonpersistent_flags+=("-R")
+    flags+=("--silent-mode")
+    flags+=("-Z")
+    local_nonpersistent_flags+=("--silent-mode")
+    local_nonpersistent_flags+=("-Z")
+    flags+=("--stat")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--stat")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--tool=")
+    two_word_flags+=("--tool")
+    two_word_flags+=("-T")
+    local_nonpersistent_flags+=("--tool")
+    local_nonpersistent_flags+=("--tool=")
+    local_nonpersistent_flags+=("-T")
+    flags+=("--top-bam=")
+    two_word_flags+=("--top-bam")
+    two_word_flags+=("-@")
+    local_nonpersistent_flags+=("--top-bam")
+    local_nonpersistent_flags+=("--top-bam=")
+    local_nonpersistent_flags+=("-@")
+    flags+=("--top-size=")
+    two_word_flags+=("--top-size")
+    two_word_flags+=("-?")
+    local_nonpersistent_flags+=("--top-size")
+    local_nonpersistent_flags+=("--top-size=")
+    local_nonpersistent_flags+=("-?")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_common()
+{
+    last_command="seqkit_common"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--by-seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--by-seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--only-positive-strand")
+    flags+=("-P")
+    local_nonpersistent_flags+=("--only-positive-strand")
+    local_nonpersistent_flags+=("-P")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_concat()
+{
+    last_command="seqkit_concat"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_convert()
+{
+    last_command="seqkit_convert"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--dry-run")
+    flags+=("-d")
+    local_nonpersistent_flags+=("--dry-run")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--force")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--force")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--from=")
+    two_word_flags+=("--from")
+    local_nonpersistent_flags+=("--from")
+    local_nonpersistent_flags+=("--from=")
+    flags+=("--nrecords=")
+    two_word_flags+=("--nrecords")
+    two_word_flags+=("-n")
+    local_nonpersistent_flags+=("--nrecords")
+    local_nonpersistent_flags+=("--nrecords=")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--thresh-B-in-n-most-common=")
+    two_word_flags+=("--thresh-B-in-n-most-common")
+    two_word_flags+=("-N")
+    local_nonpersistent_flags+=("--thresh-B-in-n-most-common")
+    local_nonpersistent_flags+=("--thresh-B-in-n-most-common=")
+    local_nonpersistent_flags+=("-N")
+    flags+=("--thresh-illumina1.5-frac=")
+    two_word_flags+=("--thresh-illumina1.5-frac")
+    two_word_flags+=("-F")
+    local_nonpersistent_flags+=("--thresh-illumina1.5-frac")
+    local_nonpersistent_flags+=("--thresh-illumina1.5-frac=")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--to=")
+    two_word_flags+=("--to")
+    local_nonpersistent_flags+=("--to")
+    local_nonpersistent_flags+=("--to=")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_duplicate()
+{
+    last_command="seqkit_duplicate"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--times=")
+    two_word_flags+=("--times")
+    two_word_flags+=("-n")
+    local_nonpersistent_flags+=("--times")
+    local_nonpersistent_flags+=("--times=")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_faidx()
+{
+    last_command="seqkit_faidx"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--full-head")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--full-head")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--immediate-output")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--immediate-output")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--region-file=")
+    two_word_flags+=("--region-file")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--region-file")
+    local_nonpersistent_flags+=("--region-file=")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--use-regexp")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--use-regexp")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_fish()
+{
+    last_command="seqkit_fish"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    flags+=("-a")
+    local_nonpersistent_flags+=("--all")
+    local_nonpersistent_flags+=("-a")
+    flags+=("--aln-params=")
+    two_word_flags+=("--aln-params")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--aln-params")
+    local_nonpersistent_flags+=("--aln-params=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--invert")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--invert")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--min-qual=")
+    two_word_flags+=("--min-qual")
+    two_word_flags+=("-q")
+    local_nonpersistent_flags+=("--min-qual")
+    local_nonpersistent_flags+=("--min-qual=")
+    local_nonpersistent_flags+=("-q")
+    flags+=("--out-bam=")
+    two_word_flags+=("--out-bam")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--out-bam")
+    local_nonpersistent_flags+=("--out-bam=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--pass")
+    flags+=("-x")
+    local_nonpersistent_flags+=("--pass")
+    local_nonpersistent_flags+=("-x")
+    flags+=("--print-aln")
+    flags+=("-g")
+    local_nonpersistent_flags+=("--print-aln")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--print-desc")
+    flags+=("-D")
+    local_nonpersistent_flags+=("--print-desc")
+    local_nonpersistent_flags+=("-D")
+    flags+=("--query-fastx=")
+    two_word_flags+=("--query-fastx")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--query-fastx")
+    local_nonpersistent_flags+=("--query-fastx=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--query-sequences=")
+    two_word_flags+=("--query-sequences")
+    two_word_flags+=("-F")
+    local_nonpersistent_flags+=("--query-sequences")
+    local_nonpersistent_flags+=("--query-sequences=")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--ranges=")
+    two_word_flags+=("--ranges")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--ranges")
+    local_nonpersistent_flags+=("--ranges=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--stranded")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--stranded")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--validate-seq")
+    flags+=("-v")
+    local_nonpersistent_flags+=("--validate-seq")
+    local_nonpersistent_flags+=("-v")
+    flags+=("--validate-seq-length=")
+    two_word_flags+=("--validate-seq-length")
+    two_word_flags+=("-V")
+    local_nonpersistent_flags+=("--validate-seq-length")
+    local_nonpersistent_flags+=("--validate-seq-length=")
+    local_nonpersistent_flags+=("-V")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_fq2fa()
+{
+    last_command="seqkit_fq2fa"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_fx2tab()
+{
+    last_command="seqkit_fx2tab"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alphabet")
+    flags+=("-a")
+    local_nonpersistent_flags+=("--alphabet")
+    local_nonpersistent_flags+=("-a")
+    flags+=("--avg-qual")
+    flags+=("-q")
+    local_nonpersistent_flags+=("--avg-qual")
+    local_nonpersistent_flags+=("-q")
+    flags+=("--base-content=")
+    two_word_flags+=("--base-content")
+    two_word_flags+=("-B")
+    local_nonpersistent_flags+=("--base-content")
+    local_nonpersistent_flags+=("--base-content=")
+    local_nonpersistent_flags+=("-B")
+    flags+=("--base-count=")
+    two_word_flags+=("--base-count")
+    two_word_flags+=("-C")
+    local_nonpersistent_flags+=("--base-count")
+    local_nonpersistent_flags+=("--base-count=")
+    local_nonpersistent_flags+=("-C")
+    flags+=("--case-sensitive")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--case-sensitive")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--gc")
+    flags+=("-g")
+    local_nonpersistent_flags+=("--gc")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--gc-skew")
+    flags+=("-G")
+    local_nonpersistent_flags+=("--gc-skew")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--header-line")
+    flags+=("-H")
+    local_nonpersistent_flags+=("--header-line")
+    local_nonpersistent_flags+=("-H")
+    flags+=("--length")
+    flags+=("-l")
+    local_nonpersistent_flags+=("--length")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--no-qual")
+    flags+=("-Q")
+    local_nonpersistent_flags+=("--no-qual")
+    local_nonpersistent_flags+=("-Q")
+    flags+=("--only-id")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--only-id")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--qual-ascii-base=")
+    two_word_flags+=("--qual-ascii-base")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--qual-ascii-base")
+    local_nonpersistent_flags+=("--qual-ascii-base=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--seq-hash")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--seq-hash")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_genautocomplete()
+{
+    last_command="seqkit_genautocomplete"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--file=")
+    two_word_flags+=("--file")
+    local_nonpersistent_flags+=("--file")
+    local_nonpersistent_flags+=("--file=")
+    flags+=("--help")
+    flags+=("-h")
+    local_nonpersistent_flags+=("--help")
+    local_nonpersistent_flags+=("-h")
+    flags+=("--shell=")
+    two_word_flags+=("--shell")
+    local_nonpersistent_flags+=("--shell")
+    local_nonpersistent_flags+=("--shell=")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_grep()
+{
+    last_command="seqkit_grep"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--by-seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--by-seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--circular")
+    flags+=("-c")
+    local_nonpersistent_flags+=("--circular")
+    local_nonpersistent_flags+=("-c")
+    flags+=("--degenerate")
+    flags+=("-d")
+    local_nonpersistent_flags+=("--degenerate")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--delete-matched")
+    local_nonpersistent_flags+=("--delete-matched")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--immediate-output")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--immediate-output")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--invert-match")
+    flags+=("-v")
+    local_nonpersistent_flags+=("--invert-match")
+    local_nonpersistent_flags+=("-v")
+    flags+=("--max-mismatch=")
+    two_word_flags+=("--max-mismatch")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--max-mismatch")
+    local_nonpersistent_flags+=("--max-mismatch=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--only-positive-strand")
+    flags+=("-P")
+    local_nonpersistent_flags+=("--only-positive-strand")
+    local_nonpersistent_flags+=("-P")
+    flags+=("--pattern=")
+    two_word_flags+=("--pattern")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--pattern")
+    local_nonpersistent_flags+=("--pattern=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--pattern-file=")
+    two_word_flags+=("--pattern-file")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--pattern-file")
+    local_nonpersistent_flags+=("--pattern-file=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--region=")
+    two_word_flags+=("--region")
+    two_word_flags+=("-R")
+    local_nonpersistent_flags+=("--region")
+    local_nonpersistent_flags+=("--region=")
+    local_nonpersistent_flags+=("-R")
+    flags+=("--use-regexp")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--use-regexp")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_head()
+{
+    last_command="seqkit_head"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--number=")
+    two_word_flags+=("--number")
+    two_word_flags+=("-n")
+    local_nonpersistent_flags+=("--number")
+    local_nonpersistent_flags+=("--number=")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_head-genome()
+{
+    last_command="seqkit_head-genome"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--mini-common-words=")
+    two_word_flags+=("--mini-common-words")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--mini-common-words")
+    local_nonpersistent_flags+=("--mini-common-words=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_help()
+{
+    last_command="seqkit_help"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    has_completion_function=1
+    noun_aliases=()
+}
+
+_seqkit_locate()
+{
+    last_command="seqkit_locate"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--bed")
+    local_nonpersistent_flags+=("--bed")
+    flags+=("--circular")
+    flags+=("-c")
+    local_nonpersistent_flags+=("--circular")
+    local_nonpersistent_flags+=("-c")
+    flags+=("--degenerate")
+    flags+=("-d")
+    local_nonpersistent_flags+=("--degenerate")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--gtf")
+    local_nonpersistent_flags+=("--gtf")
+    flags+=("--hide-matched")
+    flags+=("-M")
+    local_nonpersistent_flags+=("--hide-matched")
+    local_nonpersistent_flags+=("-M")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--immediate-output")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--immediate-output")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--max-mismatch=")
+    two_word_flags+=("--max-mismatch")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--max-mismatch")
+    local_nonpersistent_flags+=("--max-mismatch=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--non-greedy")
+    flags+=("-G")
+    local_nonpersistent_flags+=("--non-greedy")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--only-positive-strand")
+    flags+=("-P")
+    local_nonpersistent_flags+=("--only-positive-strand")
+    local_nonpersistent_flags+=("-P")
+    flags+=("--pattern=")
+    two_word_flags+=("--pattern")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--pattern")
+    local_nonpersistent_flags+=("--pattern=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--pattern-file=")
+    two_word_flags+=("--pattern-file")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--pattern-file")
+    local_nonpersistent_flags+=("--pattern-file=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--use-fmi")
+    flags+=("-F")
+    local_nonpersistent_flags+=("--use-fmi")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--use-regexp")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--use-regexp")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--validate-seq-length=")
+    two_word_flags+=("--validate-seq-length")
+    two_word_flags+=("-V")
+    local_nonpersistent_flags+=("--validate-seq-length")
+    local_nonpersistent_flags+=("--validate-seq-length=")
+    local_nonpersistent_flags+=("-V")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_mutate()
+{
+    last_command="seqkit_mutate"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--deletion=")
+    two_word_flags+=("--deletion")
+    two_word_flags+=("-d")
+    local_nonpersistent_flags+=("--deletion")
+    local_nonpersistent_flags+=("--deletion=")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--ignore-case")
+    flags+=("-I")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--insertion=")
+    two_word_flags+=("--insertion")
+    two_word_flags+=("-i")
+    local_nonpersistent_flags+=("--insertion")
+    local_nonpersistent_flags+=("--insertion=")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--invert-match")
+    flags+=("-v")
+    local_nonpersistent_flags+=("--invert-match")
+    local_nonpersistent_flags+=("-v")
+    flags+=("--pattern=")
+    two_word_flags+=("--pattern")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--pattern")
+    local_nonpersistent_flags+=("--pattern=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--pattern-file=")
+    two_word_flags+=("--pattern-file")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--pattern-file")
+    local_nonpersistent_flags+=("--pattern-file=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--point=")
+    two_word_flags+=("--point")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--point")
+    local_nonpersistent_flags+=("--point=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--use-regexp")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--use-regexp")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_pair()
+{
+    last_command="seqkit_pair"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--force")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--force")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--out-dir=")
+    two_word_flags+=("--out-dir")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-dir")
+    local_nonpersistent_flags+=("--out-dir=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--read1=")
+    two_word_flags+=("--read1")
+    two_word_flags+=("-1")
+    local_nonpersistent_flags+=("--read1")
+    local_nonpersistent_flags+=("--read1=")
+    local_nonpersistent_flags+=("-1")
+    flags+=("--read2=")
+    two_word_flags+=("--read2")
+    two_word_flags+=("-2")
+    local_nonpersistent_flags+=("--read2")
+    local_nonpersistent_flags+=("--read2=")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--save-unpaired")
+    flags+=("-u")
+    local_nonpersistent_flags+=("--save-unpaired")
+    local_nonpersistent_flags+=("-u")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_range()
+{
+    last_command="seqkit_range"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--range=")
+    two_word_flags+=("--range")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--range")
+    local_nonpersistent_flags+=("--range=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_rename()
+{
+    last_command="seqkit_rename"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--force")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--force")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--multiple-outfiles")
+    flags+=("-m")
+    local_nonpersistent_flags+=("--multiple-outfiles")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--out-dir=")
+    two_word_flags+=("--out-dir")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-dir")
+    local_nonpersistent_flags+=("--out-dir=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_replace()
+{
+    last_command="seqkit_replace"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--by-seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--keep-key")
+    flags+=("-K")
+    local_nonpersistent_flags+=("--keep-key")
+    local_nonpersistent_flags+=("-K")
+    flags+=("--keep-untouch")
+    flags+=("-U")
+    local_nonpersistent_flags+=("--keep-untouch")
+    local_nonpersistent_flags+=("-U")
+    flags+=("--key-capt-idx=")
+    two_word_flags+=("--key-capt-idx")
+    two_word_flags+=("-I")
+    local_nonpersistent_flags+=("--key-capt-idx")
+    local_nonpersistent_flags+=("--key-capt-idx=")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--key-miss-repl=")
+    two_word_flags+=("--key-miss-repl")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--key-miss-repl")
+    local_nonpersistent_flags+=("--key-miss-repl=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--kv-file=")
+    two_word_flags+=("--kv-file")
+    two_word_flags+=("-k")
+    local_nonpersistent_flags+=("--kv-file")
+    local_nonpersistent_flags+=("--kv-file=")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--nr-width=")
+    two_word_flags+=("--nr-width")
+    local_nonpersistent_flags+=("--nr-width")
+    local_nonpersistent_flags+=("--nr-width=")
+    flags+=("--pattern=")
+    two_word_flags+=("--pattern")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--pattern")
+    local_nonpersistent_flags+=("--pattern=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--replacement=")
+    two_word_flags+=("--replacement")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--replacement")
+    local_nonpersistent_flags+=("--replacement=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_restart()
+{
+    last_command="seqkit_restart"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--new-start=")
+    two_word_flags+=("--new-start")
+    two_word_flags+=("-i")
+    local_nonpersistent_flags+=("--new-start")
+    local_nonpersistent_flags+=("--new-start=")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_rmdup()
+{
+    last_command="seqkit_rmdup"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--by-seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--by-seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--dup-num-file=")
+    two_word_flags+=("--dup-num-file")
+    two_word_flags+=("-D")
+    local_nonpersistent_flags+=("--dup-num-file")
+    local_nonpersistent_flags+=("--dup-num-file=")
+    local_nonpersistent_flags+=("-D")
+    flags+=("--dup-seqs-file=")
+    two_word_flags+=("--dup-seqs-file")
+    two_word_flags+=("-d")
+    local_nonpersistent_flags+=("--dup-seqs-file")
+    local_nonpersistent_flags+=("--dup-seqs-file=")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--only-positive-strand")
+    flags+=("-P")
+    local_nonpersistent_flags+=("--only-positive-strand")
+    local_nonpersistent_flags+=("-P")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_sample()
+{
+    last_command="seqkit_sample"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--number=")
+    two_word_flags+=("--number")
+    two_word_flags+=("-n")
+    local_nonpersistent_flags+=("--number")
+    local_nonpersistent_flags+=("--number=")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--proportion=")
+    two_word_flags+=("--proportion")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--proportion")
+    local_nonpersistent_flags+=("--proportion=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--rand-seed=")
+    two_word_flags+=("--rand-seed")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--rand-seed")
+    local_nonpersistent_flags+=("--rand-seed=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--two-pass")
+    flags+=("-2")
+    local_nonpersistent_flags+=("--two-pass")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_sana()
+{
+    last_command="seqkit_sana"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-gaps")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--allow-gaps")
+    local_nonpersistent_flags+=("-A")
+    flags+=("--format=")
+    two_word_flags+=("--format")
+    two_word_flags+=("-i")
+    local_nonpersistent_flags+=("--format")
+    local_nonpersistent_flags+=("--format=")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--in-format=")
+    two_word_flags+=("--in-format")
+    two_word_flags+=("-I")
+    local_nonpersistent_flags+=("--in-format")
+    local_nonpersistent_flags+=("--in-format=")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--out-format=")
+    two_word_flags+=("--out-format")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-format")
+    local_nonpersistent_flags+=("--out-format=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--qual-ascii-base=")
+    two_word_flags+=("--qual-ascii-base")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--qual-ascii-base")
+    local_nonpersistent_flags+=("--qual-ascii-base=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_scat()
+{
+    last_command="seqkit_scat"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-gaps")
+    flags+=("-A")
+    local_nonpersistent_flags+=("--allow-gaps")
+    local_nonpersistent_flags+=("-A")
+    flags+=("--delta=")
+    two_word_flags+=("--delta")
+    two_word_flags+=("-d")
+    local_nonpersistent_flags+=("--delta")
+    local_nonpersistent_flags+=("--delta=")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--drop-time=")
+    two_word_flags+=("--drop-time")
+    two_word_flags+=("-D")
+    local_nonpersistent_flags+=("--drop-time")
+    local_nonpersistent_flags+=("--drop-time=")
+    local_nonpersistent_flags+=("-D")
+    flags+=("--find-only")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--find-only")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--format=")
+    two_word_flags+=("--format")
+    two_word_flags+=("-i")
+    local_nonpersistent_flags+=("--format")
+    local_nonpersistent_flags+=("--format=")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--gz-only")
+    flags+=("-g")
+    local_nonpersistent_flags+=("--gz-only")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--in-format=")
+    two_word_flags+=("--in-format")
+    two_word_flags+=("-I")
+    local_nonpersistent_flags+=("--in-format")
+    local_nonpersistent_flags+=("--in-format=")
+    local_nonpersistent_flags+=("-I")
+    flags+=("--out-format=")
+    two_word_flags+=("--out-format")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-format")
+    local_nonpersistent_flags+=("--out-format=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--qual-ascii-base=")
+    two_word_flags+=("--qual-ascii-base")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--qual-ascii-base")
+    local_nonpersistent_flags+=("--qual-ascii-base=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--regexp=")
+    two_word_flags+=("--regexp")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--regexp")
+    local_nonpersistent_flags+=("--regexp=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--time-limit=")
+    two_word_flags+=("--time-limit")
+    two_word_flags+=("-T")
+    local_nonpersistent_flags+=("--time-limit")
+    local_nonpersistent_flags+=("--time-limit=")
+    local_nonpersistent_flags+=("-T")
+    flags+=("--wait-pid=")
+    two_word_flags+=("--wait-pid")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--wait-pid")
+    local_nonpersistent_flags+=("--wait-pid=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_seq()
+{
+    last_command="seqkit_seq"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--color")
+    flags+=("-k")
+    local_nonpersistent_flags+=("--color")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--complement")
+    flags+=("-p")
+    local_nonpersistent_flags+=("--complement")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--dna2rna")
+    local_nonpersistent_flags+=("--dna2rna")
+    flags+=("--gap-letters=")
+    two_word_flags+=("--gap-letters")
+    two_word_flags+=("-G")
+    local_nonpersistent_flags+=("--gap-letters")
+    local_nonpersistent_flags+=("--gap-letters=")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--lower-case")
+    flags+=("-l")
+    local_nonpersistent_flags+=("--lower-case")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--max-len=")
+    two_word_flags+=("--max-len")
+    two_word_flags+=("-M")
+    local_nonpersistent_flags+=("--max-len")
+    local_nonpersistent_flags+=("--max-len=")
+    local_nonpersistent_flags+=("-M")
+    flags+=("--max-qual=")
+    two_word_flags+=("--max-qual")
+    two_word_flags+=("-R")
+    local_nonpersistent_flags+=("--max-qual")
+    local_nonpersistent_flags+=("--max-qual=")
+    local_nonpersistent_flags+=("-R")
+    flags+=("--min-len=")
+    two_word_flags+=("--min-len")
+    two_word_flags+=("-m")
+    local_nonpersistent_flags+=("--min-len")
+    local_nonpersistent_flags+=("--min-len=")
+    local_nonpersistent_flags+=("-m")
+    flags+=("--min-qual=")
+    two_word_flags+=("--min-qual")
+    two_word_flags+=("-Q")
+    local_nonpersistent_flags+=("--min-qual")
+    local_nonpersistent_flags+=("--min-qual=")
+    local_nonpersistent_flags+=("-Q")
+    flags+=("--name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--only-id")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--only-id")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--qual")
+    flags+=("-q")
+    local_nonpersistent_flags+=("--qual")
+    local_nonpersistent_flags+=("-q")
+    flags+=("--qual-ascii-base=")
+    two_word_flags+=("--qual-ascii-base")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--qual-ascii-base")
+    local_nonpersistent_flags+=("--qual-ascii-base=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--remove-gaps")
+    flags+=("-g")
+    local_nonpersistent_flags+=("--remove-gaps")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--reverse")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--reverse")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--rna2dna")
+    local_nonpersistent_flags+=("--rna2dna")
+    flags+=("--seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--upper-case")
+    flags+=("-u")
+    local_nonpersistent_flags+=("--upper-case")
+    local_nonpersistent_flags+=("-u")
+    flags+=("--validate-seq")
+    flags+=("-v")
+    local_nonpersistent_flags+=("--validate-seq")
+    local_nonpersistent_flags+=("-v")
+    flags+=("--validate-seq-length=")
+    two_word_flags+=("--validate-seq-length")
+    two_word_flags+=("-V")
+    local_nonpersistent_flags+=("--validate-seq-length")
+    local_nonpersistent_flags+=("--validate-seq-length=")
+    local_nonpersistent_flags+=("-V")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_shuffle()
+{
+    last_command="seqkit_shuffle"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--keep-temp")
+    flags+=("-k")
+    local_nonpersistent_flags+=("--keep-temp")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--rand-seed=")
+    two_word_flags+=("--rand-seed")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--rand-seed")
+    local_nonpersistent_flags+=("--rand-seed=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--two-pass")
+    flags+=("-2")
+    local_nonpersistent_flags+=("--two-pass")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_sliding()
+{
+    last_command="seqkit_sliding"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--circular")
+    flags+=("-c")
+    local_nonpersistent_flags+=("--circular")
+    local_nonpersistent_flags+=("-c")
+    flags+=("--circular-genome")
+    flags+=("-C")
+    local_nonpersistent_flags+=("--circular-genome")
+    local_nonpersistent_flags+=("-C")
+    flags+=("--greedy")
+    flags+=("-g")
+    local_nonpersistent_flags+=("--greedy")
+    local_nonpersistent_flags+=("-g")
+    flags+=("--step=")
+    two_word_flags+=("--step")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--step")
+    local_nonpersistent_flags+=("--step=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--window=")
+    two_word_flags+=("--window")
+    two_word_flags+=("-W")
+    local_nonpersistent_flags+=("--window")
+    local_nonpersistent_flags+=("--window=")
+    local_nonpersistent_flags+=("-W")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_sort()
+{
+    last_command="seqkit_sort"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-bases")
+    flags+=("-b")
+    local_nonpersistent_flags+=("--by-bases")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--by-length")
+    flags+=("-l")
+    local_nonpersistent_flags+=("--by-length")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--by-name")
+    flags+=("-n")
+    local_nonpersistent_flags+=("--by-name")
+    local_nonpersistent_flags+=("-n")
+    flags+=("--by-seq")
+    flags+=("-s")
+    local_nonpersistent_flags+=("--by-seq")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--gap-letters=")
+    two_word_flags+=("--gap-letters")
+    two_word_flags+=("-G")
+    local_nonpersistent_flags+=("--gap-letters")
+    local_nonpersistent_flags+=("--gap-letters=")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--ignore-case")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--ignore-case")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--keep-temp")
+    flags+=("-k")
+    local_nonpersistent_flags+=("--keep-temp")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--natural-order")
+    flags+=("-N")
+    local_nonpersistent_flags+=("--natural-order")
+    local_nonpersistent_flags+=("-N")
+    flags+=("--reverse")
+    flags+=("-r")
+    local_nonpersistent_flags+=("--reverse")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--seq-prefix-length=")
+    two_word_flags+=("--seq-prefix-length")
+    two_word_flags+=("-L")
+    local_nonpersistent_flags+=("--seq-prefix-length")
+    local_nonpersistent_flags+=("--seq-prefix-length=")
+    local_nonpersistent_flags+=("-L")
+    flags+=("--two-pass")
+    flags+=("-2")
+    local_nonpersistent_flags+=("--two-pass")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_split()
+{
+    last_command="seqkit_split"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-id")
+    flags+=("-i")
+    local_nonpersistent_flags+=("--by-id")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--by-part=")
+    two_word_flags+=("--by-part")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--by-part")
+    local_nonpersistent_flags+=("--by-part=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--by-region=")
+    two_word_flags+=("--by-region")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--by-region")
+    local_nonpersistent_flags+=("--by-region=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--by-size=")
+    two_word_flags+=("--by-size")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--by-size")
+    local_nonpersistent_flags+=("--by-size=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--dry-run")
+    flags+=("-d")
+    local_nonpersistent_flags+=("--dry-run")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--force")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--force")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--keep-temp")
+    flags+=("-k")
+    local_nonpersistent_flags+=("--keep-temp")
+    local_nonpersistent_flags+=("-k")
+    flags+=("--out-dir=")
+    two_word_flags+=("--out-dir")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-dir")
+    local_nonpersistent_flags+=("--out-dir=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--two-pass")
+    flags+=("-2")
+    local_nonpersistent_flags+=("--two-pass")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_split2()
+{
+    last_command="seqkit_split2"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--by-length=")
+    two_word_flags+=("--by-length")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--by-length")
+    local_nonpersistent_flags+=("--by-length=")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--by-part=")
+    two_word_flags+=("--by-part")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--by-part")
+    local_nonpersistent_flags+=("--by-part=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--by-size=")
+    two_word_flags+=("--by-size")
+    two_word_flags+=("-s")
+    local_nonpersistent_flags+=("--by-size")
+    local_nonpersistent_flags+=("--by-size=")
+    local_nonpersistent_flags+=("-s")
+    flags+=("--force")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--force")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--out-dir=")
+    two_word_flags+=("--out-dir")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--out-dir")
+    local_nonpersistent_flags+=("--out-dir=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--read1=")
+    two_word_flags+=("--read1")
+    two_word_flags+=("-1")
+    local_nonpersistent_flags+=("--read1")
+    local_nonpersistent_flags+=("--read1=")
+    local_nonpersistent_flags+=("-1")
+    flags+=("--read2=")
+    two_word_flags+=("--read2")
+    two_word_flags+=("-2")
+    local_nonpersistent_flags+=("--read2")
+    local_nonpersistent_flags+=("--read2=")
+    local_nonpersistent_flags+=("-2")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_stats()
+{
+    last_command="seqkit_stats"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--all")
+    flags+=("-a")
+    local_nonpersistent_flags+=("--all")
+    local_nonpersistent_flags+=("-a")
+    flags+=("--basename")
+    flags+=("-b")
+    local_nonpersistent_flags+=("--basename")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--fq-encoding=")
+    two_word_flags+=("--fq-encoding")
+    two_word_flags+=("-E")
+    local_nonpersistent_flags+=("--fq-encoding")
+    local_nonpersistent_flags+=("--fq-encoding=")
+    local_nonpersistent_flags+=("-E")
+    flags+=("--gap-letters=")
+    two_word_flags+=("--gap-letters")
+    two_word_flags+=("-G")
+    local_nonpersistent_flags+=("--gap-letters")
+    local_nonpersistent_flags+=("--gap-letters=")
+    local_nonpersistent_flags+=("-G")
+    flags+=("--skip-err")
+    flags+=("-e")
+    local_nonpersistent_flags+=("--skip-err")
+    local_nonpersistent_flags+=("-e")
+    flags+=("--stdin-label=")
+    two_word_flags+=("--stdin-label")
+    two_word_flags+=("-i")
+    local_nonpersistent_flags+=("--stdin-label")
+    local_nonpersistent_flags+=("--stdin-label=")
+    local_nonpersistent_flags+=("-i")
+    flags+=("--tabular")
+    flags+=("-T")
+    local_nonpersistent_flags+=("--tabular")
+    local_nonpersistent_flags+=("-T")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_subseq()
+{
+    last_command="seqkit_subseq"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--bed=")
+    two_word_flags+=("--bed")
+    local_nonpersistent_flags+=("--bed")
+    local_nonpersistent_flags+=("--bed=")
+    flags+=("--chr=")
+    two_word_flags+=("--chr")
+    local_nonpersistent_flags+=("--chr")
+    local_nonpersistent_flags+=("--chr=")
+    flags+=("--down-stream=")
+    two_word_flags+=("--down-stream")
+    two_word_flags+=("-d")
+    local_nonpersistent_flags+=("--down-stream")
+    local_nonpersistent_flags+=("--down-stream=")
+    local_nonpersistent_flags+=("-d")
+    flags+=("--feature=")
+    two_word_flags+=("--feature")
+    local_nonpersistent_flags+=("--feature")
+    local_nonpersistent_flags+=("--feature=")
+    flags+=("--gtf=")
+    two_word_flags+=("--gtf")
+    local_nonpersistent_flags+=("--gtf")
+    local_nonpersistent_flags+=("--gtf=")
+    flags+=("--gtf-tag=")
+    two_word_flags+=("--gtf-tag")
+    local_nonpersistent_flags+=("--gtf-tag")
+    local_nonpersistent_flags+=("--gtf-tag=")
+    flags+=("--only-flank")
+    flags+=("-f")
+    local_nonpersistent_flags+=("--only-flank")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--region=")
+    two_word_flags+=("--region")
+    two_word_flags+=("-r")
+    local_nonpersistent_flags+=("--region")
+    local_nonpersistent_flags+=("--region=")
+    local_nonpersistent_flags+=("-r")
+    flags+=("--up-stream=")
+    two_word_flags+=("--up-stream")
+    two_word_flags+=("-u")
+    local_nonpersistent_flags+=("--up-stream")
+    local_nonpersistent_flags+=("--up-stream=")
+    local_nonpersistent_flags+=("-u")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_tab2fx()
+{
+    last_command="seqkit_tab2fx"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--buffer-size=")
+    two_word_flags+=("--buffer-size")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--buffer-size")
+    local_nonpersistent_flags+=("--buffer-size=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--comment-line-prefix=")
+    two_word_flags+=("--comment-line-prefix")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--comment-line-prefix")
+    local_nonpersistent_flags+=("--comment-line-prefix=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_translate()
+{
+    last_command="seqkit_translate"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--allow-unknown-codon")
+    flags+=("-x")
+    local_nonpersistent_flags+=("--allow-unknown-codon")
+    local_nonpersistent_flags+=("-x")
+    flags+=("--append-frame")
+    flags+=("-F")
+    local_nonpersistent_flags+=("--append-frame")
+    local_nonpersistent_flags+=("-F")
+    flags+=("--clean")
+    local_nonpersistent_flags+=("--clean")
+    flags+=("--frame=")
+    two_word_flags+=("--frame")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--frame")
+    local_nonpersistent_flags+=("--frame=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--init-codon-as-M")
+    flags+=("-M")
+    local_nonpersistent_flags+=("--init-codon-as-M")
+    local_nonpersistent_flags+=("-M")
+    flags+=("--list-transl-table=")
+    two_word_flags+=("--list-transl-table")
+    two_word_flags+=("-l")
+    local_nonpersistent_flags+=("--list-transl-table")
+    local_nonpersistent_flags+=("--list-transl-table=")
+    local_nonpersistent_flags+=("-l")
+    flags+=("--list-transl-table-with-amb-codons=")
+    two_word_flags+=("--list-transl-table-with-amb-codons")
+    two_word_flags+=("-L")
+    local_nonpersistent_flags+=("--list-transl-table-with-amb-codons")
+    local_nonpersistent_flags+=("--list-transl-table-with-amb-codons=")
+    local_nonpersistent_flags+=("-L")
+    flags+=("--transl-table=")
+    two_word_flags+=("--transl-table")
+    two_word_flags+=("-T")
+    local_nonpersistent_flags+=("--transl-table")
+    local_nonpersistent_flags+=("--transl-table=")
+    local_nonpersistent_flags+=("-T")
+    flags+=("--trim")
+    local_nonpersistent_flags+=("--trim")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_version()
+{
+    last_command="seqkit_version"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--check-update")
+    flags+=("-u")
+    local_nonpersistent_flags+=("--check-update")
+    local_nonpersistent_flags+=("-u")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_watch()
+{
+    last_command="seqkit_watch"
+
+    command_aliases=()
+
+    commands=()
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--bins=")
+    two_word_flags+=("--bins")
+    two_word_flags+=("-B")
+    local_nonpersistent_flags+=("--bins")
+    local_nonpersistent_flags+=("--bins=")
+    local_nonpersistent_flags+=("-B")
+    flags+=("--delay=")
+    two_word_flags+=("--delay")
+    two_word_flags+=("-W")
+    local_nonpersistent_flags+=("--delay")
+    local_nonpersistent_flags+=("--delay=")
+    local_nonpersistent_flags+=("-W")
+    flags+=("--dump")
+    flags+=("-y")
+    local_nonpersistent_flags+=("--dump")
+    local_nonpersistent_flags+=("-y")
+    flags+=("--fields=")
+    two_word_flags+=("--fields")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--fields")
+    local_nonpersistent_flags+=("--fields=")
+    local_nonpersistent_flags+=("-f")
+    flags+=("--img=")
+    two_word_flags+=("--img")
+    two_word_flags+=("-O")
+    local_nonpersistent_flags+=("--img")
+    local_nonpersistent_flags+=("--img=")
+    local_nonpersistent_flags+=("-O")
+    flags+=("--list-fields")
+    flags+=("-H")
+    local_nonpersistent_flags+=("--list-fields")
+    local_nonpersistent_flags+=("-H")
+    flags+=("--log")
+    flags+=("-L")
+    local_nonpersistent_flags+=("--log")
+    local_nonpersistent_flags+=("-L")
+    flags+=("--pass")
+    flags+=("-x")
+    local_nonpersistent_flags+=("--pass")
+    local_nonpersistent_flags+=("-x")
+    flags+=("--print-freq=")
+    two_word_flags+=("--print-freq")
+    two_word_flags+=("-p")
+    local_nonpersistent_flags+=("--print-freq")
+    local_nonpersistent_flags+=("--print-freq=")
+    local_nonpersistent_flags+=("-p")
+    flags+=("--qual-ascii-base=")
+    two_word_flags+=("--qual-ascii-base")
+    two_word_flags+=("-b")
+    local_nonpersistent_flags+=("--qual-ascii-base")
+    local_nonpersistent_flags+=("--qual-ascii-base=")
+    local_nonpersistent_flags+=("-b")
+    flags+=("--quiet-mode")
+    flags+=("-Q")
+    local_nonpersistent_flags+=("--quiet-mode")
+    local_nonpersistent_flags+=("-Q")
+    flags+=("--reset")
+    flags+=("-R")
+    local_nonpersistent_flags+=("--reset")
+    local_nonpersistent_flags+=("-R")
+    flags+=("--validate-seq")
+    flags+=("-v")
+    local_nonpersistent_flags+=("--validate-seq")
+    local_nonpersistent_flags+=("-v")
+    flags+=("--validate-seq-length=")
+    two_word_flags+=("--validate-seq-length")
+    two_word_flags+=("-V")
+    local_nonpersistent_flags+=("--validate-seq-length")
+    local_nonpersistent_flags+=("--validate-seq-length=")
+    local_nonpersistent_flags+=("-V")
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+_seqkit_root_command()
+{
+    last_command="seqkit"
+
+    command_aliases=()
+
+    commands=()
+    commands+=("amplicon")
+    commands+=("bam")
+    commands+=("common")
+    commands+=("concat")
+    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+        command_aliases+=("concate")
+        aliashash["concate"]="concat"
+    fi
+    commands+=("convert")
+    commands+=("duplicate")
+    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+        command_aliases+=("dup")
+        aliashash["dup"]="duplicate"
+    fi
+    commands+=("faidx")
+    commands+=("fish")
+    commands+=("fq2fa")
+    commands+=("fx2tab")
+    commands+=("genautocomplete")
+    commands+=("grep")
+    commands+=("head")
+    commands+=("head-genome")
+    commands+=("help")
+    commands+=("locate")
+    commands+=("mutate")
+    commands+=("pair")
+    commands+=("range")
+    commands+=("rename")
+    commands+=("replace")
+    commands+=("restart")
+    commands+=("rmdup")
+    commands+=("sample")
+    commands+=("sana")
+    commands+=("scat")
+    commands+=("seq")
+    commands+=("shuffle")
+    commands+=("sliding")
+    commands+=("sort")
+    commands+=("split")
+    commands+=("split2")
+    commands+=("stats")
+    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
+        command_aliases+=("stat")
+        aliashash["stat"]="stats"
+    fi
+    commands+=("subseq")
+    commands+=("tab2fx")
+    commands+=("translate")
+    commands+=("version")
+    commands+=("watch")
+
+    flags=()
+    two_word_flags=()
+    local_nonpersistent_flags=()
+    flags_with_completion=()
+    flags_completion=()
+
+    flags+=("--alphabet-guess-seq-length=")
+    two_word_flags+=("--alphabet-guess-seq-length")
+    flags+=("--id-ncbi")
+    flags+=("--id-regexp=")
+    two_word_flags+=("--id-regexp")
+    flags+=("--infile-list=")
+    two_word_flags+=("--infile-list")
+    flags+=("--line-width=")
+    two_word_flags+=("--line-width")
+    two_word_flags+=("-w")
+    flags+=("--out-file=")
+    two_word_flags+=("--out-file")
+    two_word_flags+=("-o")
+    flags+=("--quiet")
+    flags+=("--seq-type=")
+    two_word_flags+=("--seq-type")
+    two_word_flags+=("-t")
+    flags+=("--threads=")
+    two_word_flags+=("--threads")
+    two_word_flags+=("-j")
+
+    must_have_one_flag=()
+    must_have_one_noun=()
+    noun_aliases=()
+}
+
+__start_seqkit()
+{
+    local cur prev words cword
+    declare -A flaghash 2>/dev/null || :
+    declare -A aliashash 2>/dev/null || :
+    if declare -F _init_completion >/dev/null 2>&1; then
+        _init_completion -s || return
+    else
+        __seqkit_init_completion -n "=" || return
+    fi
+
+    local c=0
+    local flags=()
+    local two_word_flags=()
+    local local_nonpersistent_flags=()
+    local flags_with_completion=()
+    local flags_completion=()
+    local commands=("seqkit")
+    local must_have_one_flag=()
+    local must_have_one_noun=()
+    local has_completion_function
+    local last_command
+    local nouns=()
+
+    __seqkit_handle_word
+}
+
+if [[ $(type -t compopt) = "builtin" ]]; then
+    complete -o default -F __start_seqkit seqkit
+else
+    complete -o default -o nospace -F __start_seqkit seqkit
+fi
+
+# ex: ts=4 sw=4 et filetype=sh


=====================================
debian/shell_completions/seqkit.fish
=====================================
@@ -0,0 +1,164 @@
+# fish completion for seqkit                               -*- shell-script -*-
+
+function __seqkit_debug
+    set file "$BASH_COMP_DEBUG_FILE"
+    if test -n "$file"
+        echo "$argv" >> $file
+    end
+end
+
+function __seqkit_perform_completion
+    __seqkit_debug "Starting __seqkit_perform_completion with: $argv"
+
+    set args (string split -- " " "$argv")
+    set lastArg "$args[-1]"
+
+    __seqkit_debug "args: $args"
+    __seqkit_debug "last arg: $lastArg"
+
+    set emptyArg ""
+    if test -z "$lastArg"
+        __seqkit_debug "Setting emptyArg"
+        set emptyArg \"\"
+    end
+    __seqkit_debug "emptyArg: $emptyArg"
+
+    if not type -q "$args[1]"
+        # This can happen when "complete --do-complete seqkit" is called when running this script.
+        __seqkit_debug "Cannot find $args[1]. No completions."
+        return
+    end
+
+    set requestComp "$args[1] __complete $args[2..-1] $emptyArg"
+    __seqkit_debug "Calling $requestComp"
+
+    set results (eval $requestComp 2> /dev/null)
+    set comps $results[1..-2]
+    set directiveLine $results[-1]
+
+    # For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
+    # completions must be prefixed with the flag
+    set flagPrefix (string match -r -- '-.*=' "$lastArg")
+
+    __seqkit_debug "Comps: $comps"
+    __seqkit_debug "DirectiveLine: $directiveLine"
+    __seqkit_debug "flagPrefix: $flagPrefix"
+
+    for comp in $comps
+        printf "%s%s\n" "$flagPrefix" "$comp"
+    end
+
+    printf "%s\n" "$directiveLine"
+end
+
+# This function does three things:
+# 1- Obtain the completions and store them in the global __seqkit_comp_results
+# 2- Set the __seqkit_comp_do_file_comp flag if file completion should be performed
+#    and unset it otherwise
+# 3- Return true if the completion results are not empty
+function __seqkit_prepare_completions
+    # Start fresh
+    set --erase __seqkit_comp_do_file_comp
+    set --erase __seqkit_comp_results
+
+    # Check if the command-line is already provided.  This is useful for testing.
+    if not set --query __seqkit_comp_commandLine
+        # Use the -c flag to allow for completion in the middle of the line
+        set __seqkit_comp_commandLine (commandline -c)
+    end
+    __seqkit_debug "commandLine is: $__seqkit_comp_commandLine"
+
+    set results (__seqkit_perform_completion "$__seqkit_comp_commandLine")
+    set --erase __seqkit_comp_commandLine
+    __seqkit_debug "Completion results: $results"
+
+    if test -z "$results"
+        __seqkit_debug "No completion, probably due to a failure"
+        # Might as well do file completion, in case it helps
+        set --global __seqkit_comp_do_file_comp 1
+        return 1
+    end
+
+    set directive (string sub --start 2 $results[-1])
+    set --global __seqkit_comp_results $results[1..-2]
+
+    __seqkit_debug "Completions are: $__seqkit_comp_results"
+    __seqkit_debug "Directive is: $directive"
+
+    set shellCompDirectiveError 1
+    set shellCompDirectiveNoSpace 2
+    set shellCompDirectiveNoFileComp 4
+    set shellCompDirectiveFilterFileExt 8
+    set shellCompDirectiveFilterDirs 16
+
+    if test -z "$directive"
+        set directive 0
+    end
+
+    set compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
+    if test $compErr -eq 1
+        __seqkit_debug "Received error directive: aborting."
+        # Might as well do file completion, in case it helps
+        set --global __seqkit_comp_do_file_comp 1
+        return 1
+    end
+
+    set filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
+    set dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
+    if test $filefilter -eq 1; or test $dirfilter -eq 1
+        __seqkit_debug "File extension filtering or directory filtering not supported"
+        # Do full file completion instead
+        set --global __seqkit_comp_do_file_comp 1
+        return 1
+    end
+
+    set nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
+    set nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
+
+    __seqkit_debug "nospace: $nospace, nofiles: $nofiles"
+
+    # Important not to quote the variable for count to work
+    set numComps (count $__seqkit_comp_results)
+    __seqkit_debug "numComps: $numComps"
+
+    if test $numComps -eq 1; and test $nospace -ne 0
+        # To support the "nospace" directive we trick the shell
+        # by outputting an extra, longer completion.
+        __seqkit_debug "Adding second completion to perform nospace directive"
+        set --append __seqkit_comp_results $__seqkit_comp_results[1].
+    end
+
+    if test $numComps -eq 0; and test $nofiles -eq 0
+        __seqkit_debug "Requesting file completion"
+        set --global __seqkit_comp_do_file_comp 1
+    end
+
+    # If we don't want file completion, we must return true even if there
+    # are no completions found.  This is because fish will perform the last
+    # completion command, even if its condition is false, if no other
+    # completion command was triggered
+    return (not set --query __seqkit_comp_do_file_comp)
+end
+
+# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
+# so we can properly delete any completions provided by another script.
+# The space after the the program name is essential to trigger completion for the program
+# and not completion of the program name itself.
+complete --do-complete "seqkit " > /dev/null 2>&1
+# Using '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
+
+# Remove any pre-existing completions for the program since we will be handling all of them.
+complete -c seqkit -e
+
+# The order in which the below two lines are defined is very important so that __seqkit_prepare_completions
+# is called first.  It is __seqkit_prepare_completions that sets up the __seqkit_comp_do_file_comp variable.
+#
+# This completion will be run second as complete commands are added FILO.
+# It triggers file completion choices when __seqkit_comp_do_file_comp is set.
+complete -c seqkit -n 'set --query __seqkit_comp_do_file_comp'
+
+# This completion will be run first as complete commands are added FILO.
+# The call to __seqkit_prepare_completions will setup both __seqkit_comp_results and __seqkit_comp_do_file_comp.
+# It provides the program's completion choices.
+complete -c seqkit -n '__seqkit_prepare_completions' -f -a '$__seqkit_comp_results'
+



View it on GitLab: https://salsa.debian.org/med-team/seqkit/-/compare/83f9d7b53389e1238aae90a45f61b086f8256bb9...8f2987c1999b2c9c2242020fdd358ebe28e729ce

-- 
View it on GitLab: https://salsa.debian.org/med-team/seqkit/-/compare/83f9d7b53389e1238aae90a45f61b086f8256bb9...8f2987c1999b2c9c2242020fdd358ebe28e729ce
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20210926/f2aae4f3/attachment-0001.htm>


More information about the debian-med-commit mailing list