git addするファイルをpecoで選択できるようにした

みんな大好きpecoを使って、git add出来るようにした

作ったもの

f:id:petitviolet:20140722215154g:plain

深いディレクトリにあるファイルが複数ある時、zshのtab補完でやるのも面倒だったので、peco使ってやりたいな〜と思ったからzsh関数書いた

コード

function peco-select-gitadd() {
    local selected_file_to_add=$(git status --porcelain | \
        peco --query "$LBUFFER" | \
        awk -F ' ' '{print $NF}')
    if [ -n "$selected_file_to_add" ]; then
      BUFFER="git add ${selected_file_to_add}"
      CURSOR=$#BUFFER
      zle accept-line
    fi
    zle clear-screen
}
zle -N peco-select-gitadd
bindkey "^g^a" peco-select-gitadd

これでCtrl-g+Ctrl-aとtypeすると上のデモのようにgit addするファイルが選べる

git add出来るファイル一覧をいい感じに取るのが難しく、git status --porcelain(--short)での出力結果をパースしてファイル名を取るようにした。
結果としてgit add出来る理由も表示出来たので、これはこれでいいかもしれない

疑問

git add出来るファイル、つまりunstagedあるいはuntrackedなファイルって、何か名称があるんだろうか