* Shell ** Add faces instead of reusing font-lock-{comment,string}. ** Understand ~autocd~ and ~cd !$~. ** Use Bash completions. E.g. in most terminals, typing ~ls TAB~ in a folder with a single file expands to ~ls that-file~. See [[https://debbugs.gnu.org/26661][bug#26661]], and [[https://github.com/szermatt/emacs-bash-completion/issues/45][szermatt/emacs-bash-completion!45]]. ** Handle DECSC, DECRC, CUU, ED, HVP and DECSTBM console codes. Used for APT's "Dpkg::Progress-Fancy" option, enabled by default with the high-level apt(8) command. Silly script emulating what APT does: #+begin_src bash #!/bin/bash set -eu if ! test "${LINES:-}" -a "${COLUMNS:-}" then echo Please export LINES and COLUMNS. exit 1 fi # Adapted from apt/apt-pkg/install-progress.cc. backup=$'\e7' # DECSC: backup cursor position. restore=$'\e8' # DECRC: restore cursor position. setup () { echo -n ${backup} # DECSTBM: restrict scrolling below command, and above progress # bar. Side-effect: move the cursor to position 1:1, # hence the backup/restore. echo -n $'\e[0;'$((LINES-1))'r' echo -n ${restore} } teardown () { # ED: clear everything from current position to end of screen. # Dixit Michael Vogt: "sledgehammer". echo -n $'\e[J' } # APT surrounds this setup phase with \n and \e[1A (CUU). I don't # know why; the comments say that this is to "avoid visual glitch when # the screen area shrinks by one row". No further explanation is # given in commit messages. setup for ((i=1;i