Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2914

作って学ぶbashタブ補完、mixコマンドを補完する

$
0
0

「mixコマンドの補完が効けばいいのにな」と思ったことはありませんか?
bashのProgrammable Completionで作れるみたいです。

今回はそれを作ったので紹介します。

環境

bash-completionがインストールされていることが前提です。
インストールされていない場合は以下でインストールします。

# debian系$ sudo apt install bash-completion

作り方

以下がとても詳しいのでココでは解説しません。

compgentコマンドとcompleteコマンドについては以下

既に作られている実装

検索すると同じ目的のいくつかの実装がありました。
てっとりばやく使いたい場合はこれらから選んで使うのもありと思います。

自分で作ってみた

既に作られているものを使うのは簡単だと思ったのですが、
bashのタブ補完は自分で作ることができれば他にも応用できそうな気がしたので作ってみました。

以下を~/.bash_completionとして保存し、terminalを開き直すと使えるようになります。
※ディレクトリ移動後の一発目がちょっともたつきます。

_mix(){local cur prev words cword split
  _init_completion ||return

  make_opts(){_mix_opts=""
    readarray -t _mix_task_list < <(mix help)local task
    for task in"${_mix_task_list[@]}";do
      task=$(echo"$task" | awk'{print $2}')# ignore "mix" self and "iex -S mix"case$taskin"#"|"-S");;*)
          _mix_opts+="$task ";;esacdone}local current_pwd=$(pwd)if[[-z"$_mix_task_list"]]||[[$_mix_last_pwd!=$current_pwd]];then
    make_opts
  fi
  _mix_last_pwd=$current_pwdif[[$prev== mix ]]||[[$prev==help]];then
    COMPREPLY=($(compgen-W"$_mix_opts"--"$cur"))fi}&&complete-F _mix mix

おわり

bashがまったく書けなくて辛かったです:skull:
「いいね」よろしくお願いします。:wink:


Viewing all articles
Browse latest Browse all 2914

Trending Articles