LoginSignup
18
17

More than 5 years have passed since last update.

話題の jq を便利に使う zsh の補完ファイルを書いた

Last updated at Posted at 2013-07-13

jq というコマンドがある。JSON をいい感じに読みやすくしてくれるコマンドラインツールだ。

Web の API を呼び出してテストするときとかに便利。

でも --help をつけてもヘルプメッセージがしょぼい感じで、使い方がよく分からなかった。なので zsh 補完ファイルを書いた。これでさくさくオプション指定できるようになる。

jq_zsh.png

zsh-users/zsh-completions (https://github.com/zsh-users/zsh-completions) に pull request を送ったのでそのうち取り込まれると思う。

自分でインストールして使う方法は以下。

補完ファイルをダウンロードする。

Gist に貼りつけた ので、そこから補完ファイルをダウンロードする。ファイル名は _jq にする。

_jq を適当な場所に配置する。

保存場所はどこでも良い。今回は $HOME/zsh-completions 以下に配置したとする。

~/.zshrc に以下を書く

.zshrc に以下を追記する。compinit を呼び出す前に書かないといけないので注意。

# これは compinit の前に書く
if [[ -d "$HOME/zsh-completions" ]]; then
    fpath=("$HOME/zsh-completions" $fpath)
fi

~/.zshrc を再読み込みする

% source ~/.zshrc

これで OK

最後に補完ファイルをここにも貼り付けておく。わりとシンプルな感じなので、他のコマンドの補完を書くときでも参考になると思う。

#compdef jq
# ------------------------------------------------------------------------------
# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the zsh-users nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
#  Completion script for jq (http://stedolan.github.io/jq/)
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
#  * Hideaki Miyake (https://github.com/mollifier)
#
# ------------------------------------------------------------------------------

declare -a opts args
args=(
  '(-h --help)'{-h,--help}'[display help information]'
  '(-V --version)'{-V,--version}'[display version information]'
  '(-s --slurp)'{-s,--slurp}'[run the filter just once]'
  '(-R --raw-input)'{-R,--raw-input}'[parse the input as not JSON but string]'
  '(-n --null-input)'{-n,--null-input}'[run the filter using null as the input]'
  '(-c --compact-output)'{-c,--compact-output}'[compact output]' \
  '(-C --color-output)'{-C,--color-output}'[colorize the output even if writing to a pipe or a file]'
  '(-M --monochrome-output)'{-M,--monochrome-output}'[not colorize the output]'
  '(-a --ascii-output)'{-a,--ascii-output}'[output with pure ASCII character]'
  '(-r --raw-output)'{-r,--raw-output}'[not format string result as a JSON string with quotes]'
  '--arg[passes a value to the jq program, e.g. --arg foo bar]:jq variable: '
  '1: :_guard "^-*" pattern'
  '*:files:->file'
)
local curcontext=$curcontext state line ret=1
declare -A opt_args

_arguments -C $opts \
  $args && ret=0

case $state in
  file)
    _files && ret=0
    ;;
esac

return $ret

# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et
18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17