Skip to content

macOS の bash で mkdocs のコマンドを補完する

MkDocs で作成したコンテンツをローカルで確認する際、シェルから mkdocs serve を手打ちしていましたが、サブコマンドをフルスペルで手入力するのが面倒なので bash 用の補完ファイルを作成してみました。

検証環境

対象 バージョン
macOS 14.2.1
bash 5.2.26
bash-completion@2 2.11
mkdocs 1.5.3

mkdcos のヘルプ

mkdocs のサブコマンドを確認する為、ヘルプを表示させます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ mkdocs --help
Usage: mkdocs [OPTIONS] COMMAND [ARGS]...

  MkDocs - Project documentation with Markdown.

Options:
  -V, --version         Show the version and exit.
  -q, --quiet           Silence warnings
  -v, --verbose         Enable verbose output
  --color / --no-color  Force enable or disable color and wrapping for the output. Default is auto-detect.
  -h, --help            Show this message and exit.

Commands:
  build      Build the MkDocs documentation
  get-deps   Show required PyPI packages inferred from plugins in mkdocs.yml
  gh-deploy  Deploy your documentation to GitHub Pages
  new        Create a new MkDocs project
  serve      Run the builtin development server

サブコマンドの候補は以下の 5 つ、存在することが分かります。

  1. build
  2. get-deps
  3. gh-deploy
  4. new
  5. serve

補完用ファイルの作成

以下の内容で /opt/homebrew/etc/bash_completion.d/mkdocs というファイルを新規作成しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
_mkdocs() {
    local cur prev words cword split
    _init_completion || return

    local defaultIFS=$' \t\n'
    local IFS=$defaultIFS

    case $cword in
        1)
            COMPREPLY=( $(compgen -W 'build get-deps gh-deploy new serve' -- "$cur") )
            ;;
        *)
            case ${words[1]} in
                build)
                    ;;
                get-deps)
                    ;;
                gh-deploy)
                    ;;
                new)
                    ;;
                serve)
                    ;;
            esac
            ;;
    esac
}

complete -F _mkdocs mkdocs

作成後はファイルに実行権限を付与します。

1
chmod 755 /opt/homebrew/etc/bash_completion.d/mkdocs

新規にシェルを起動します。 これで mkdocs s[TAB]mkdocs serve に補完されるようになりました。