published on in Perl Programming Testing Tab completion fzf prove fd bat

Improving prove with Preview Windows

Last month, I talked about how to add tab completion to a CLI program, using fzf. Next we talked about a more generic solution which adds a preview window to a file search.

Today we will look at how to combine the knowledge from these two posts. What we want to do is have our custom completion for the prove CLI, but with a preview window. The solution looks like this:

_fzf_complete_prove() {
  _fzf_complete  --bind='ctrl-/:toggle-preview' --preview 'bat --style=numbers --color=always --line-range :50 {}' --reverse --multi --prompt="prove> " -- "$@" < <(
      fd -e t
  )
}

_fzf_complete_prove_post() {
    awk '{print $1}'
}

[ -n "$BASH" ] && complete -F _fzf_complete_prove -o default -o bashdefault prove

If you don’t have bat installed, you can use cat for your file previews instead. You’ll just need a different incantation in _fzf_complete_prove():

_fzf_complete_prove() {
  _fzf_complete  --bind='ctrl-/:toggle-preview' --preview 'cat {}' --reverse --multi --prompt="prove> " -- "$@" < <(
      fd -e t
  )
}

If you don’t have fd installed, swap it out with find or whatever your preferred tool is. Maybe something like find t | grep "\.t$". If you’re an ack user, you could try something like ack -f t | grep "\.t$".

For reference, this is where my fzf completions currently live in my dot-files.

That’s it! Now, you’ll get the same behaviour as we saw in our previous screencast, but you can now get it via prove **<tab>.

See the previous screencast for reference:

asciicast