See PHI110. Currently, the cache here is bad: if tput fails, we'll keep running tput over and over again, since null is not cached.
Instead:
- Cache null.
- Dirty the cache when we receivew SIGWINCH, which indicates the window/terminal metadata has changed.