How does command-line tab completion work?

I’ve written a diary CLI program which lets me write a new entry or read an old entry. Here’s a simplified implementation:

#!/bin/bash
function usage {
  echo "usage: $(basename ${0}) write"
  echo "       $(basename ${0}) read <timestamp>"
  exit 1
}
case "${1}" in
  write )
    mkdir -p ~/diary
    nano ~/diary/"$(date '+%Y-%m-%d')"
    ;;
  read )
    if [ "${2}" = "" ]; then
      usage
    fi
    cat ~/diary/"${2}"
    ;;
  * )
    usage
    ;;
esac

This program prints its “usage” if the user gets it wrong:

$ mydiary
usage: mydiary write
       mydiary read <timestamp>
$ mydiary write
[nano opens for editing]
$ mydiary read
usage: mydiary write
       mydiary read <timestamp>
$ mydiary read 2018-01-14
Today I ate a crisp sandwich

But we can do better! With tab-completion, the user can see the possible commands without running them, and can complete the names of diary entries without typing them out fully.

I just released Vidrio, a free app for macOS and Windows to make your screen-sharing awesomely holographic. Vidrio shows your webcam video on your screen, just like a mirror. Then you just share or record your screen with Zoom, QuickTime, or any other app. Vidrio makes your presentations effortlessly engaging, showing your gestures, gazes, and expressions. #1 on Product Hunt. Available for macOS and Windows.

With Vidrio

With generic competitor

More by Jim

Tagged . All content copyright James Fisher 2018. This post is not associated with my employer. Found an error? Edit this page.