aboutsummaryrefslogtreecommitdiff
path: root/man/man7/dotfiles.7df
diff options
context:
space:
mode:
Diffstat (limited to 'man/man7/dotfiles.7df')
-rw-r--r--man/man7/dotfiles.7df948
1 files changed, 474 insertions, 474 deletions
diff --git a/man/man7/dotfiles.7df b/man/man7/dotfiles.7df
index c230806e..83616552 100644
--- a/man/man7/dotfiles.7df
+++ b/man/man7/dotfiles.7df
@@ -1,12 +1,26 @@
-.\" Automatically generated by Pandoc 2.2.1
+.\" Automatically generated by Pandoc 2.17.1.1
.\"
-.TH "DOTFILES" "7" "October 2017" "Tom Ryder's personal scripts and configuration" ""
+.\" Define V font for inline verbatim, using C font in formats
+.\" that render this, and otherwise B font.
+.ie "\f[CB]x\f[]"x" \{\
+. ftr V B
+. ftr VI BI
+. ftr VB B
+. ftr VBI BI
+.\}
+.el \{\
+. ftr V CR
+. ftr VI CI
+. ftr VB CB
+. ftr VBI CBI
+.\}
+.TH "DOTFILES" "7" "October 2017" "Tom Ryder\[cq]s personal scripts and configuration" ""
.hy
.SH Dotfiles (Tom Ryder)
.PP
This is my personal repository of configuration files and scripts for
-\f[C]$HOME\f[], including most of the settings that migrate well between
-machines.
+\f[V]$HOME\f[R], including most of the settings that migrate well
+between machines.
.PP
This repository began as a simple way to share Vim and tmux
configuration, but a lot of scripts and shell configuration have been
@@ -15,111 +29,109 @@ added over time, making it into a personal suite of custom Unix tools.
.IP
.nf
\f[C]
-$\ mkdir\ \-p\ ~/.local/share
-$\ git\ clone\ https://sanctum.geek.nz/code/dotfiles.git\ ~/.local/share/dotfiles
-$\ cd\ ~/.local/share/dotfiles
-$\ git\ submodule\ init
-$\ git\ submodule\ update
-$\ make
-$\ make\ \-n\ install\ \ #\ Check\ output\ carefully
-$\ make\ install
-\f[]
+$ mkdir -p \[ti]/.local/src
+$ git clone https://dev.sanctum.geek.nz/code/dotfiles.git \[ti]/.local/src/dotfiles
+$ cd \[ti]/.local/src/dotfiles
+$ git submodule init
+$ git submodule update
+$ make
+$ make -n install # Check output carefully
+$ make install
+\f[R]
.fi
.PP
-For the default \f[C]all\f[] target, you'll need a POSIX\-fearing
-userland, including \f[C]make(1)\f[] and \f[C]m4(1)\f[].
+For the default \f[V]all\f[R] target, you\[cq]ll need a POSIX-fearing
+userland, including \f[V]make(1)\f[R] and \f[V]m4(1)\f[R].
.PP
-The installation \f[C]Makefile\f[] overwrites things standing in the way
-of its installed files without backing them up, so read the output of
-\f[C]make\ \-n\ install\f[] before running \f[C]make\ install\f[]
-carefully, to make sure you aren't going to lose anything unexpected.
-If you're still not sure, install it in a temporary directory first, so
-you can explore:
+The installation \f[V]Makefile\f[R] overwrites things standing in the
+way of its installed files without backing them up, so read the output
+of \f[V]make -n install\f[R] before running \f[V]make install\f[R]
+carefully, to make sure you aren\[cq]t going to lose anything
+unexpected.
+If you\[cq]re still not sure, install it in a temporary directory first,
+so you can explore:
.IP
.nf
\f[C]
-$\ tmpdir=$(mktemp\ \-d)
-$\ make\ install\ HOME="$tmpdir"
-$\ env\ \-i\ HOME="$tmpdir"\ TERM="$TERM"\ "$SHELL"\ \-l
-\f[]
+$ tmpdir=$(mktemp -d)
+$ make install HOME=\[dq]$tmpdir\[dq]
+$ env -i HOME=\[dq]$tmpdir\[dq] TERM=\[dq]$TERM\[dq] \[dq]$SHELL\[dq] -l
+\f[R]
.fi
.PP
-The default \f[C]install\f[] target will install these targets and all
+The default \f[V]install\f[R] target will install these targets and all
their dependencies:
.IP \[bu] 2
-\f[C]install\-bin\f[]
+\f[V]install-bin\f[R]
.IP \[bu] 2
-\f[C]install\-curl\f[]
+\f[V]install-curl\f[R]
.IP \[bu] 2
-\f[C]install\-ex\f[]
+\f[V]install-ex\f[R]
.IP \[bu] 2
-\f[C]install\-git\f[]
+\f[V]install-git\f[R]
.IP \[bu] 2
-\f[C]install\-gnupg\f[]
+\f[V]install-gnupg\f[R]
.IP \[bu] 2
-\f[C]install\-less\f[]
+\f[V]install-less\f[R]
.IP \[bu] 2
-\f[C]install\-login\-shell\f[]
+\f[V]install-login-shell\f[R]
.IP \[bu] 2
-\f[C]install\-man\f[]
+\f[V]install-man\f[R]
.IP \[bu] 2
-\f[C]install\-readline\f[]
+\f[V]install-readline\f[R]
.IP \[bu] 2
-\f[C]install\-vim\f[]
+\f[V]install-vim\f[R]
.PP
-The \f[C]install\-login\-shell\f[] target looks at your \f[C]SHELL\f[]
-environment variable, and tries to figure out which shell's
-configuration files to install, falling back on \f[C]install\-sh\f[].
+The \f[V]install-login-shell\f[R] target looks at your \f[V]SHELL\f[R]
+environment variable, and tries to figure out which shell\[cq]s
+configuration files to install, falling back on \f[V]install-sh\f[R].
.PP
-The remaining files can be installed with the other \f[C]install\-*\f[]
+The remaining files can be installed with the other \f[V]install-*\f[R]
targets.
-Try \f[C]awk\ \-f\ bin/mftl.awk\ Makefile\f[] in the project's root
+Try \f[V]awk -f bin/mftl.awk Makefile\f[R] in the project\[cq]s root
directory to see a list.
.SS Configuration
.PP
-To keep a set of \f[C]make\f[] targets useful for a specific user or
-host, you can list them in a newline\-separated file
-\f[C]~/.config/dotfiles/config\f[], and install using that with the
-special \f[C]install\-conf\f[] target.
-This can include macro settings for the \f[C]Makefile\f[], too:
+To keep a set of \f[V]make\f[R] targets useful for a specific user or
+host, you can list them in a newline-separated file
+\f[V]\[ti]/.config/dotfiles/config\f[R], and install using that with the
+special \f[V]install-conf\f[R] target.
+This can include macro settings for the \f[V]Makefile\f[R], too:
.IP
.nf
\f[C]
-$\ cd
-$\ cat\ .config/dotfiles/config
-install\-bash
-install\-bin
-EMAIL=you\@example.com
-$\ make\ \-C\ .local/share/dotfiles\ install\-conf
-\f[]
+$ cd
+$ cat .config/dotfiles/config
+install-bash
+install-bin
+EMAIL=you\[at]example.com
+$ make -C .local/src/dotfiles install-conf
+\f[R]
.fi
.SS Tools
.PP
Configuration is included for:
.IP \[bu] 2
-Bourne\-style POSIX shells, sharing a \f[C]\&.profile\f[], an
-\f[C]ENV\f[] file, and some helper functions:
+Bourne-style POSIX shells, sharing a \f[V].profile\f[R], an
+\f[V]ENV\f[R] file, and some helper functions:
.RS 2
.IP \[bu] 2
GNU Bash (https://www.gnu.org/software/bash/) (v3.0 or newer)
.IP \[bu] 2
-Korn shell (http://www.kornshell.com/) (\f[C]ksh93\f[], \f[C]pdksh\f[],
-\f[C]mksh\f[])
+Korn shell (http://www.kornshell.com/) (\f[V]ksh93\f[R],
+\f[V]pdksh\f[R], \f[V]mksh\f[R])
.IP \[bu] 2
Z shell (https://www.zsh.org/)
.RE
.IP \[bu] 2
Abook (http://abook.sourceforge.net/)\[em]curses address book program
.IP \[bu] 2
-cURL (https://curl.haxx.se/)\[em]Command\-line tool for transferring
-data with URL syntax
+cURL (https://curl.haxx.se/)\[em]Command-line tool for transferring data
+with URL syntax
.IP \[bu] 2
Dillo (https://www.dillo.org/)\[em]A lightweight web browser
.IP \[bu] 2
-Dunst (https://dunst-project.org/)\[em]A lightweight X11 notification
-daemon that works with \f[C]libnotify\f[]
-.IP \[bu] 2
-\f[C]finger(1)\f[]\[em]User information lookup program
+\f[V]finger(1)\f[R]\[em]User information lookup program
.IP \[bu] 2
Git (https://git-scm.com/)\[em]Distributed version control system
.IP \[bu] 2
@@ -129,9 +141,6 @@ editor
GnuPG (https://www.gnupg.org/)\[em]GNU Privacy Guard, for private
communication and file encryption
.IP \[bu] 2
-GTK+ (https://www.gtk.org/)\[em]GIMP Toolkit, for graphical user
-interface elements
-.IP \[bu] 2
i3 (https://i3wm.org/)\[em]Tiling window manager
.IP \[bu] 2
less (https://www.gnu.org/software/less/)\[em]Terminal pager
@@ -140,14 +149,20 @@ mpv (https://mpv.io/)\[em]Media player
.IP \[bu] 2
Mutt (http://www.mutt.org/)\[em]Terminal mail user agent
.IP \[bu] 2
-\f[C]mysql(1)\f[] (https://linux.die.net/man/1/mysql)\[em]Command\-line
+\f[V]mysql(1)\f[R] (https://linux.die.net/man/1/mysql)\[em]Command-line
MySQL client
.IP \[bu] 2
+ncmpcpp (https://rybczak.net/ncmpcpp/)\[em]ncurses based MPD client
+inspired by ncmpc
+.IP \[bu] 2
Newsboat (https://newsboat.org/)\[em]Terminal RSS/Atom feed reader
.IP \[bu] 2
-\f[C]psql(1)\f[] (https://linux.die.net/man/1/psql)\[em]Command\-line
+\f[V]psql(1)\f[R] (https://linux.die.net/man/1/psql)\[em]Command-line
PostgreSQL client
.IP \[bu] 2
+Parcellite (http://parcellite.sourceforge.net/)\[em]clipboard manager
+for X
+.IP \[bu] 2
Perl::Critic (http://perlcritic.com/)\[em]static source code analysis
engine for Perl
.IP \[bu] 2
@@ -157,9 +172,6 @@ code
Readline (https://tiswww.case.edu/php/chet/readline/rltop.html)\[em]GNU
library for user input used by Bash, MySQL, and others
.IP \[bu] 2
-rxvt\-unicode (http://software.schmorp.de/pkg/rxvt-unicode.html)\[em]Fork
-of the rxvt terminal emulator with Unicode support
-.IP \[bu] 2
Subversion (https://subversion.apache.org/)\[em]Apache Subversion, a
version control system
.IP \[bu] 2
@@ -173,7 +185,7 @@ Vim (https://www.vim.org/)\[em]Vi IMproved, a text editor
X11 (https://www.x.org/wiki/)\[em]Windowing system with network
transparency for Unix
.PP
-There is also some slightly customized support for multi\-version
+There is also some slightly customized support for multi-version
environment management for three major scripting languages:
.IP \[bu] 2
plenv (https://github.com/tokuhirom/plenv)\[em]Perl
@@ -185,28 +197,27 @@ rbenv (https://github.com/rbenv/rbenv)\[em]Ruby
The configurations for shells, Mutt, tmux, and Vim are the most likely
to be of interest.
The i3 configuration is limited mainly to changing window switching key
-bindings to match Vim's.
-There are a fair few resources defined for rxvt\-unicode.
+bindings to match Vim\[cq]s.
.SS Shell
.PP
On GNU/Linux, I use Bash; on *BSD, I use some variant of Korn Shell,
-preferably \f[C]ksh93\f[] if it's available.
+preferably \f[V]ksh93\f[R] if it\[cq]s available.
.SS POSIX core
.PP
-My \f[C]~/.profile\f[] and other files in \f[C]sh\f[] are written in
-POSIX shell script, so they \f[I]should\f[] work in most
-POSIX\-conforming \f[C]sh(1)\f[] implementations.
-Please email me if you find a case where they don't!
+My \f[V]\[ti]/.profile\f[R] and other files in \f[V]sh\f[R] are written
+in POSIX shell script, so they \f[I]should\f[R] work in most
+POSIX-conforming \f[V]sh(1)\f[R] implementations.
+Please email me if you find a case where they don\[cq]t!
.PP
Further shell snippets to run on login are sourced from
-\f[C]~/.profile.d\f[] by \f[C]~/.profile\f[].
+\f[V]\[ti]/.profile.d\f[R] by \f[V]\[ti]/.profile\f[R].
Most of these boil down to exporting variables appropriate to the system
and the software it has available.
.PP
Configuration that should be sourced for all conforming
-\f[I]interactive\f[] shells is kept in \f[C]~/.shrc\f[], with subscripts
-read from \f[C]~/.shrc.d\f[].
-There's a \f[C]~/.shinit\f[] shim to act as \f[C]ENV\f[].
+\f[I]interactive\f[R] shells is kept in \f[V]\[ti]/.shrc\f[R], with
+subscripts read from \f[V]\[ti]/.shrc.d\f[R].
+There\[cq]s a \f[V]\[ti]/.shinit\f[R] shim to act as \f[V]ENV\f[R].
.SS GNU Bash
.PP
My Bash scripts are written to work with GNU Bash v3.0 or
@@ -216,45 +227,45 @@ items to arrays:
.IP
.nf
\f[C]
-array[${#array[\@]}]=$item
-\f[]
+array[${#array[\[at]]}]=$item
+\f[R]
.fi
.PP
-This doesn't work for arrays with sparse indices; compare this to the
-much nicer syntax available since 3.1\-alpha1, which does:
+This doesn\[cq]t work for arrays with sparse indices; compare this to
+the much nicer syntax available since 3.1-alpha1, which does:
.IP
.nf
\f[C]
-array+=("$item")
-\f[]
+array+=(\[dq]$item\[dq])
+\f[R]
.fi
.PP
I do use some features that are only available in versions after v3.0,
-such as newer \f[C]shopt\f[] options like \f[C]dirspell\f[], or
-variables like \f[C]PROMPT_DIRTRIM\f[].
-These are set only after testing \f[C]BASH_VERSINFO\f[] appropriately.
+such as newer \f[V]shopt\f[R] options like \f[V]dirspell\f[R], or
+variables like \f[V]PROMPT_DIRTRIM\f[R].
+These are set only after testing \f[V]BASH_VERSINFO\f[R] appropriately.
.SS Prompt
.PP
A terminal session with my prompt looks something like this:
.IP
.nf
\f[C]
-~$\ ssh\ remote
-remote:~$\ cd\ .local/share/dotfiles
-remote:~/.local/share/dotfiles(master+!)$\ git\ status
-\ M\ README.md
-M\ \ bash/bashrc.d/prompt.bash
-A\ \ init
-remote:~/.local/share/dotfiles(master+!)$\ foobar
-foobar:\ command\ not\ found
-remote:~/.local/share/dotfiles(master+!)<127>$\ sleep\ 5\ &
-[1]\ 28937
-remote:~/.local/share/dotfiles(master+!){1}$
-\f[]
+\[ti]$ ssh remote
+remote:\[ti]$ cd .local/src/dotfiles
+remote:\[ti]/.local/src/dotfiles(master+!)$ git status
+ M README.md
+M bash/bashrc.d/prompt.bash
+A init
+remote:\[ti]/.local/src/dotfiles(master+!)$ foobar
+foobar: command not found
+remote:\[ti]/.local/src/dotfiles(master+!)<127>$ sleep 5 &
+[1] 28937
+remote:\[ti]/.local/src/dotfiles(master+!){1}$
+\f[R]
.fi
.PP
The hostname is elided if not connected via SSH.
-The working directory with tilde abbreviation for \f[C]$HOME\f[] is
+The working directory with tilde abbreviation for \f[V]$HOME\f[R] is
always shown.
The rest of the prompt expands based on context to include these
elements, in this order:
@@ -264,191 +275,192 @@ Whether in a Git repository if applicable,
The current version control branch, tag, or commit/revision if
applicable, and punctuation to show repository status including
reference to upstreams at a glance.
-Subversion support can also be enabled, in which case a \f[C]git:\f[] or
-\f[C]svn:\f[] prefix is added appropriately for disambiguation.
+Subversion support can also be enabled, in which case a \f[V]git:\f[R]
+or \f[V]svn:\f[R] prefix is added appropriately for disambiguation.
.IP \[bu] 2
-The number of running background jobs, if non\-zero.
+The number of running background jobs, if non-zero.
.IP \[bu] 2
-The exit status of the last command, if non\-zero.
+The exit status of the last command, if non-zero.
.PP
-You can set \f[C]PROMPT_COLOR\f[], \f[C]PROMPT_PREFIX\f[], and
-\f[C]PROMPT_SUFFIX\f[] too, which all do about what you'd expect.
+You can set \f[V]PROMPT_COLOR\f[R], \f[V]PROMPT_PREFIX\f[R], and
+\f[V]PROMPT_SUFFIX\f[R] too, which all do about what you\[cq]d expect.
.PP
-If you start up GNU Bash, Korn shell, or Z shell, and that doesn't match
-your login shell, the prompt should display an appropriate prefix.
+If you start up GNU Bash, Korn shell, or Z shell, and that doesn\[cq]t
+match your login shell, the prompt should display an appropriate prefix.
.PP
-This is all managed within the \f[C]prompt\f[] function.
-There's some mildly hacky logic on \f[C]tput\f[] codes included such
-that it should work correctly for most common terminals using both
-\f[C]termcap(5)\f[] and \f[C]terminfo(5)\f[], including *BSD systems.
-It's also designed to degrade gracefully for eight\-color and no\-color
-terminals.
+This is all managed within the \f[V]prompt\f[R] function.
+There\[cq]s some mildly hacky logic on \f[V]tput\f[R] codes included
+such that it should work correctly for most common terminals using both
+\f[V]termcap(5)\f[R] and \f[V]terminfo(5)\f[R], including *BSD systems.
+It\[cq]s also designed to degrade gracefully for eight-color and
+no-color terminals.
.SS Functions
.PP
-If a function can be written in POSIX \f[C]sh\f[] without too much
-hackery, I put it in \f[C]sh/shrc.d\f[] to be loaded by any POSIX
+If a function can be written in POSIX \f[V]sh\f[R] without too much
+hackery, I put it in \f[V]sh/shrc.d\f[R] to be loaded by any POSIX
interactive shell.
Those include:
.IP \[bu] 2
Four functions for using a \[lq]marked\[rq] directory, which I find a
-more manageable concept than the \f[C]pushd\f[]/\f[C]popd\f[] directory
-stack:
+more manageable concept than the \f[V]pushd\f[R]/\f[V]popd\f[R]
+directory stack:
.RS 2
.IP \[bu] 2
-\f[C]md()\f[] marks a given (or the current) directory.
+\f[V]md()\f[R] marks a given (or the current) directory.
.IP \[bu] 2
-\f[C]gd()\f[] goes to the marked directory.
+\f[V]gd()\f[R] goes to the marked directory.
.IP \[bu] 2
-\f[C]pmd()\f[] prints the marked directory.
+\f[V]pmd()\f[R] prints the marked directory.
.IP \[bu] 2
-\f[C]xd()\f[] swaps the current and marked directories.
+\f[V]xd()\f[R] swaps the current and marked directories.
.RE
.IP \[bu] 2
Ten other directory management and navigation functions:
.RS 2
.IP \[bu] 2
-\f[C]bd()\f[] changes into a named ancestor of the current directory.
+\f[V]bd()\f[R] changes into a named ancestor of the current directory.
.IP \[bu] 2
-\f[C]gt()\f[] changes into a directory or into a file's directory.
+\f[V]gt()\f[R] changes into a directory or into a file\[cq]s directory.
.IP \[bu] 2
-\f[C]lgt()\f[] runs \f[C]gt()\f[] on the first result from a
-\f[C]loc(1df)\f[] search.
+\f[V]lgt()\f[R] runs \f[V]gt()\f[R] on the first result from a
+\f[V]loc(1df)\f[R] search.
.IP \[bu] 2
-\f[C]mkcd()\f[] creates a directory and changes into it.
+\f[V]mkcd()\f[R] creates a directory and changes into it.
.IP \[bu] 2
-\f[C]pd()\f[] changes to the argument's parent directory.
+\f[V]pd()\f[R] changes to the argument\[cq]s parent directory.
.IP \[bu] 2
-\f[C]rd()\f[] replaces the first instance of its first argument with its
-second argument in \f[C]$PWD\f[], emulating a feature of the Zsh
-\f[C]cd\f[] builtin that I like.
+\f[V]rd()\f[R] replaces the first instance of its first argument with
+its second argument in \f[V]$PWD\f[R], emulating a feature of the Zsh
+\f[V]cd\f[R] builtin that I like.
.IP \[bu] 2
-\f[C]scr()\f[] creates a temporary directory and changes into it.
+\f[V]scr()\f[R] creates a temporary directory and changes into it.
.IP \[bu] 2
-\f[C]sd()\f[] changes into a sibling of the current directory.
+\f[V]sd()\f[R] changes into a sibling of the current directory.
.IP \[bu] 2
-\f[C]ud()\f[] changes into an indexed ancestor of a directory.
+\f[V]ud()\f[R] changes into an indexed ancestor of a directory.
.IP \[bu] 2
-\f[C]vr()\f[] tries to change to the root directory of a source control
+\f[V]vr()\f[R] tries to change to the root directory of a source control
repository.
.RE
.IP \[bu] 2
Two editor wrapper functions:
.RS 2
.IP \[bu] 2
-\f[C]e()\f[] invokes \f[C]$EDITOR\f[], or \f[C]ed(1)\f[] if not set.
+\f[V]e()\f[R] invokes \f[V]$EDITOR\f[R], or \f[V]ed(1)\f[R] if not set.
.IP \[bu] 2
-\f[C]v()\f[] invokes \f[C]$VISUAL\f[], or \f[C]vi(1)\f[] if not set.
+\f[V]v()\f[R] invokes \f[V]$VISUAL\f[R], or \f[V]vi(1)\f[R] if not set.
.RE
.IP \[bu] 2
-\f[C]bc()\f[] silences startup messages from GNU \f[C]bc(1)\f[].
+\f[V]bc()\f[R] silences startup messages from GNU \f[V]bc(1)\f[R].
.IP \[bu] 2
-\f[C]ed()\f[] tries to get verbose error messages, a prompt, and a
-Readline environment for \f[C]ed(1)\f[].
+\f[V]ed()\f[R] tries to get verbose error messages, a prompt, and a
+Readline environment for \f[V]ed(1)\f[R].
.IP \[bu] 2
-\f[C]gdb()\f[] silences startup messages from \f[C]gdb(1)\f[].
+\f[V]gdb()\f[R] silences startup messages from \f[V]gdb(1)\f[R].
.IP \[bu] 2
-\f[C]grep()\f[] tries to apply color and other options good for
+\f[V]grep()\f[R] tries to apply color and other options good for
interactive use if available.
.IP \[bu] 2
-\f[C]hgrep()\f[] allows searching \f[C]$HISTFILE\f[].
-.IP \[bu] 2
-\f[C]keychain()\f[] keeps \f[C]$GPG_TTY\f[] up to date if a GnuPG agent
-is available.
+\f[V]hgrep()\f[R] allows searching \f[V]$HISTFILE\f[R].
.IP \[bu] 2
-\f[C]ls()\f[] tries to apply color and other options good for
+\f[V]ls()\f[R] tries to apply color and other options good for
interactive use if available.
.RS 2
.IP \[bu] 2
-\f[C]la()\f[] runs \f[C]ls\ \-A\f[] if it can, or \f[C]ls\ \-a\f[]
+\f[V]la()\f[R] runs \f[V]ls -A\f[R] if it can, or \f[V]ls -a\f[R]
otherwise.
.IP \[bu] 2
-\f[C]ll()\f[] runs \f[C]ls\ \-Al\f[] if it can, or \f[C]ls\ \-al\f[]
+\f[V]ll()\f[R] runs \f[V]ls -Al\f[R] if it can, or \f[V]ls -al\f[R]
otherwise.
.RE
.IP \[bu] 2
-\f[C]path()\f[] manages the contents of \f[C]PATH\f[] conveniently.
+\f[V]path()\f[R] manages the contents of \f[V]PATH\f[R] conveniently.
.IP \[bu] 2
-\f[C]scp()\f[] tries to detect forgotten hostnames in \f[C]scp(1)\f[]
+\f[V]scp()\f[R] tries to detect forgotten hostnames in \f[V]scp(1)\f[R]
command calls.
.IP \[bu] 2
-\f[C]sudo()\f[] forces \f[C]\-H\f[] for \f[C]sudo(8)\f[] calls so that
-\f[C]$HOME\f[] is never preserved; I hate having \f[C]root\f[]\-owned
+\f[V]sudo()\f[R] forces \f[V]-H\f[R] for \f[V]sudo(8)\f[R] calls so that
+\f[V]$HOME\f[R] is never preserved; I hate having \f[V]root\f[R]-owned
files in my home directory.
.IP \[bu] 2
-\f[C]tree()\f[] colorizes GNU \f[C]tree(1)\f[] output if possible
-(without having \f[C]LS_COLORS\f[] set).
+\f[V]tor()\f[R] is just a terse shortcut for using Torsocks to anonymize
+TCP connections from the current shell.
.IP \[bu] 2
-\f[C]x()\f[] is a one\-key shortcut for \f[C]exec\ startx\f[].
+\f[V]tree()\f[R] colorizes GNU \f[V]tree(1)\f[R] output if possible
+(without having \f[V]LS_COLORS\f[R] set).
+.IP \[bu] 2
+\f[V]x()\f[R] is a one-key shortcut for \f[V]exec startx\f[R].
.PP
There are a few other little tricks defined for other shells providing
-non\-POSIX features, as compatibility allows:
+non-POSIX features, as compatibility allows:
.IP \[bu] 2
-\f[C]keep()\f[] stores ad\-hoc shell functions and variables (Bash, Korn
+\f[V]keep()\f[R] stores ad-hoc shell functions and variables (Bash, Korn
Shell 93, Z shell).
.IP \[bu] 2
-\f[C]prompt()\f[] sets up my interactive prompt (Bash, Korn Shell, Z
+\f[V]prompt()\f[R] sets up my interactive prompt (Bash, Korn Shell, Z
shell).
.IP \[bu] 2
-\f[C]pushd()\f[] adds a default destination of \f[C]$HOME\f[] to the
-\f[C]pushd\f[] builtin (Bash).
+\f[V]pushd()\f[R] adds a default destination of \f[V]$HOME\f[R] to the
+\f[V]pushd\f[R] builtin (Bash).
.IP \[bu] 2
-\f[C]vared()\f[] allows interactively editing a variable with Readline,
+\f[V]vared()\f[R] allows interactively editing a variable with Readline,
emulating a Z shell function I like by the same name (Bash).
.IP \[bu] 2
-\f[C]ver()\f[] prints the current shell's version information (Bash,
-Korn Shell, Z shell).
+\f[V]ver()\f[R] prints the current shell\[cq]s version information
+(Bash, Korn Shell, Z shell).
.SS Completion
.PP
-I find the \f[C]bash\-completion\f[] package a bit too heavy for my
+I find the \f[V]bash-completion\f[R] package a bit too heavy for my
tastes, and turn it off using a stub file installed in
-\f[C]~/.config/bash_completion\f[].
+\f[V]\[ti]/.config/bash_completion\f[R].
The majority of the time I just want to complete paths anyway, and this
makes for a quicker startup without a lot of junk functions in my Bash
namespace.
.PP
I do make some exceptions with completions defined in files in
-\f[C]~/.bash_completion.d\f[] for things I really do get tired of typing
-repeatedly:
+\f[V]\[ti]/.bash_completion.d\f[R] for things I really do get tired of
+typing repeatedly:
.IP \[bu] 2
Bash builtins: commands, help topics, shell options, variables, etc.
.IP \[bu] 2
-\f[C]find(1)\f[]'s more portable options
+\f[V]find(1)\f[R]\[cq]s more portable options
.IP \[bu] 2
-\f[C]gpg(1)\f[] long options
+\f[V]gpg(1)\f[R] long options
.IP \[bu] 2
-\f[C]make(1)\f[] targets read from a \f[C]Makefile\f[]
+\f[V]make(1)\f[R] targets read from a \f[V]Makefile\f[R]
.IP \[bu] 2
-\f[C]man(1)\f[] page titles
+\f[V]man(1)\f[R] page titles
.IP \[bu] 2
-\f[C]pass(1)\f[] entries
+\f[V]pass(1)\f[R] entries
.IP \[bu] 2
-\f[C]ssh(1)\f[] hostnames from \f[C]~/.ssh/config\f[]
+\f[V]ssh(1)\f[R] hostnames from \f[V]\[ti]/.ssh/config\f[R]
.PP
For commands that pretty much always want to operate on text, such as
text file or stream editors, I exclude special file types and extensions
I know are binary.
-I don't actually read the file, so this is more of a heuristic thing,
-and sometimes it will get things wrong.
+I don\[cq]t actually read the file, so this is more of a heuristic
+thing, and sometimes it will get things wrong.
.PP
I also add completions for my own scripts and functions where useful.
The completions are dynamically loaded if Bash is version 4.0 or
greater.
-Otherwise, they're all loaded on startup.
+Otherwise, they\[cq]re all loaded on startup.
.SS Korn shell
.PP
These are experimental; they are mostly used to tinker with MirBSD
-\f[C]mksh\f[], AT&T \f[C]ksh93\f[], and OpenBSD \f[C]pdksh\f[].
+\f[V]mksh\f[R], AT&T \f[V]ksh93\f[R], and OpenBSD \f[V]pdksh\f[R].
All shells in this family default to a yellow prompt if detected.
.SS Z shell
.PP
These are experimental; I do not like Z shell much at the moment.
-The files started as a joke (\f[C]exec\ bash\f[]).
-\f[C]zsh\f[] shells default to having a prompt colored cyan.
+The files started as a joke (\f[V]exec bash\f[R]).
+\f[V]zsh\f[R] shells default to having a prompt colored cyan.
.SS Mutt
.PP
-My mail is kept in individual Maildir\-format directories under
-\f[C]~/mail\f[], with the system mail spool in e.g.
-\f[C]/var/mail/tejr\f[] being where most unfiltered new mail is spooled.
+My mail is kept in individual Maildir-format directories under
+\f[V]\[ti]/mail\f[R], with the system mail spool in
+e.g.\ \f[V]/var/mail/tejr\f[R] being where most unfiltered new mail is
+spooled.
I use Getmail (http://pyropus.ca/software/getmail/),
maildrop (https://www.courier-mta.org/maildrop/), and
msmtp (https://marlam.de/msmtp/); the configurations for these are not
@@ -460,203 +472,194 @@ The GnuPG and S/MIME interfacing is done with
GPGme (https://www.gnupg.org/related_software/gpgme/), rather than
defining commands for each crypto operation.
I wrote an article about this
-setup (https://sanctum.geek.nz/arabesque/gnu-linux-crypto-email/) if it
+setup (https://blog.sanctum.geek.nz/gnu-linux-crypto-email/) if it
sounds appealing.
.PP
-You'll need Abook installed if you want to use the
-\f[C]query_command\f[] I have defined, and msmtp for the
-\f[C]sendmail\f[] command.
-.SS rxvt\-unicode
-.PP
-I've butchered the URxvt Perl extensions
-\f[C]selection\-to\-clipboard\f[] and \f[C]selection\f[] into a single
-\f[C]select\f[] extension in \f[C]~/.urxvt/ext\f[], which is the only
-extension I define in \f[C]~/.Xresources\f[].
-.PP
-The included \f[C]\&.Xresources\f[] file assumes that \f[C]urxvt\f[] can
-use 256 colors and Perl extensions.
-If you're missing functionality, try changing \f[C]perl\-ext\-common\f[]
-to \f[C]default\f[].
+You\[cq]ll need Abook installed if you want to use the
+\f[V]query_command\f[R] I have defined, and msmtp for the
+\f[V]sendmail\f[R] command.
.SS tmux
.PP
-These are just generally vi\-friendly settings, and there isn't much out
-of the ordinary.
-Note that the configuration presently uses a hard\-coded 256\-color
-color scheme, and uses non\-login shells, with an attempt to control the
+These are just generally vi-friendly settings, and there isn\[cq]t much
+out of the ordinary.
+Note that the configuration presently uses a hard-coded 256-color color
+scheme, and uses non-login shells, with an attempt to control the
environment to stop shells thinking they have access to an X display.
.PP
-The shell scripts in \f[C]bin\f[] include \f[C]tm(1df)\f[], a shortcut
-to make \f[C]attach\f[] into the default command if no arguments are
+The shell scripts in \f[V]bin\f[R] include \f[V]tm(1df)\f[R], a shortcut
+to make \f[V]attach\f[R] into the default command if no arguments are
given and sessions do already exist.
-My \f[C]~/.inputrc\f[] file binds Alt+M to run that, and Tmux in turn
-binds the same key combination to detach.
+My \f[V]\[ti]/.inputrc\f[R] file binds Alt+M to run that, and Tmux in
+turn binds the same key combination to detach.
.SS Vim
.PP
The majority of the Vim configuration is just setting options, with a
-fair few mappings and remappings, both global and buffer\-local.
-It's extensively commented.
+fair few mappings and remappings, both global and buffer-local.
+It\[cq]s extensively commented.
.SS XDG Basedirs
.PP
The XDG Base Directory
-Specification (https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)'s
+Specification (https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)\[cq]s
environment variables are checked on startup, and appropriate
directories are added to the start and end of
-\f[C]\[aq]runtimepath\[aq]\f[].
-I use these separate directories for machine\-local configuration,
-usually in \f[C]~/.config/vim\f[], while all the files that this suite
-installs land in \f[C]~/.vim\f[].
+\f[V]\[aq]runtimepath\[aq]\f[R].
+I use these separate directories for machine-local configuration,
+usually in \f[V]\[ti]/.config/vim\f[R], while all the files that this
+suite installs land in \f[V]\[ti]/.vim\f[R].
Backups, swap files, persistent undo data, saved views, and the
-\f[C]viminfo\f[] file all live under \f[C]XDG_CACHE_HOME\f[], normally
-\f[C]~/.cache/vim\f[].
+\f[V]viminfo\f[R] file all live under \f[V]XDG_CACHE_HOME\f[R], normally
+\f[V]\[ti]/.cache/vim\f[R].
.SS Filetypes
.PP
-I define my own \f[C]filetype.vim\f[] and \f[C]scripts.vim\f[], so that
-filetype detection works in a way I like, and loads quickly.
+I define my own \f[V]filetype.vim\f[R] and \f[V]scripts.vim\f[R], so
+that filetype detection works in a way I like, and loads quickly.
They are unlikely to suit you as they are, but if you want to use it,
you can extend them with your favorite filetypes in custom
-\f[C]ftdetect\f[] rules.
+\f[V]ftdetect\f[R] rules.
.SS Plugins
.PP
If the logic for doing something involves more than a few lines or any
-structures like functions that can be decoupled from \f[C]$MYVIMRC\f[],
-I like to implement it as a plugin in \f[C]~/.vim/plugin\f[] and/or
-\f[C]~/.vim/autoload\f[], with documentation for each in
-\f[C]~/.vim/doc\f[].
+structures like functions that can be decoupled from \f[V]$MYVIMRC\f[R],
+I like to implement it as a plugin in \f[V]\[ti]/.vim/plugin\f[R] and/or
+\f[V]\[ti]/.vim/autoload\f[R], with documentation for each in
+\f[V]\[ti]/.vim/doc\f[R].
.PP
They eventually get either discarded if I stop using them, or spun off
into their own repositories and added to this repository as submodules
-under \f[C]vim/bundle\f[] if I don't.
+under \f[V]vim/bundle\f[R] if I don\[cq]t.
Some of them I upload to
vim.org (https://www.vim.org/account/profile.php?user_id=73687).
.SS Filetype plugins
.PP
I apply some replacement or supplementary configuration specific to file
-types I often edit in \f[C]~/.vim\f[] and \f[C]~/.vim/after\f[], in the
-\f[C]ftplugin\f[], \f[C]indent\f[], and \f[C]syntax\f[] subdirectories.
+types I often edit in \f[V]\[ti]/.vim\f[R] and
+\f[V]\[ti]/.vim/after\f[R], in the \f[V]ftplugin\f[R], \f[V]indent\f[R],
+and \f[V]syntax\f[R] subdirectories.
Some of these filetype plugins or extensions may also eventually be
removed to be separately distributed, and installed via submodules
instead.
.SS Compilers
.PP
-I define a few of my own \f[C]:compiler\f[] scripts for
-\f[C]~/.vim/compiler\f[] to check and lint appropriate filetypes.
+I define a few of my own \f[V]:compiler\f[R] scripts for
+\f[V]\[ti]/.vim/compiler\f[R] to check and lint appropriate filetypes.
I bind checking\[em]\[lq]does it run?\[rq]\[em]and linting\[em]\[lq]is
it good?\[rq]\[em]with separate local leader maps; for example, for
-\f[C]perl\f[] filetypes, \f[C]<LocalLeader>c\f[] switches
-\f[C]makeprg\f[] to \f[C]perl\ \-c\f[] for checking, and
-\f[C]<LocalLeader>l\f[] to \f[C]perlcritic\f[] for linting.
+\f[V]perl\f[R] filetypes, \f[V]<LocalLeader>c\f[R] switches
+\f[V]makeprg\f[R] to \f[V]perl -c\f[R] for checking, and
+\f[V]<LocalLeader>l\f[R] to \f[V]perlcritic\f[R] for linting.
.SS No Neovim support
.PP
-The configuration doesn't explicitly support Neovim, although most of it
-will probably work; you would probably just comment out the settings for
-a few of the removed options.
+The configuration doesn\[cq]t explicitly support Neovim, although most
+of it will probably work; you would probably just comment out the
+settings for a few of the removed options.
.SS Scripts
.PP
Where practical, I make short scripts into POSIX (but not Bourne)
-\f[C]sh(1)\f[], \f[C]awk(1)\f[], or \f[C]sed(1)\f[] scripts in
-\f[C]~/.local/bin\f[].
+\f[V]sh(1)\f[R], \f[V]awk(1)\f[R], or \f[V]sed(1)\f[R] scripts in
+\f[V]\[ti]/.local/bin\f[R].
I try to use shell functions only when I actually need to, which tends
-to be when I need to change the state of the user's current shell, or to
-limit a change in behavior only to interactive shells.
+to be when I need to change the state of the user\[cq]s current shell,
+or to limit a change in behavior only to interactive shells.
.PP
-These scripts are installed by the \f[C]install\-bin\f[] target:
+These scripts are installed by the \f[V]install-bin\f[R] target:
.IP \[bu] 2
-Three SSH\-related scripts:
+Three SSH-related scripts:
.RS 2
.IP \[bu] 2
-\f[C]sls(1df)\f[] prints hostnames read from a \f[C]ssh_config(5)\f[]
-file.
-It uses \f[C]slsf(1df)\f[] to read each one.
+\f[V]sls(1df)\f[R] prints hostnames read from \f[V]ssh_config(5)\f[R]
+files.
+It uses \f[V]slsf(1df)\f[R] to read each one.
.IP \[bu] 2
-\f[C]sra(1df)\f[] runs a command on multiple hosts read from
-\f[C]sls(1df)\f[] and prints output.
+\f[V]sra(1df)\f[R] runs a command on multiple hosts read from
+\f[V]sls(1df)\f[R] and prints output.
.IP \[bu] 2
-\f[C]sta(1df)\f[] runs a command on multiple hosts read from
-\f[C]sls(1df)\f[] and prints the hostname if the command returns zero.
+\f[V]sta(1df)\f[R] runs a command on multiple hosts read from
+\f[V]sls(1df)\f[R] and prints the hostname if the command returns zero.
.RE
.IP \[bu] 2
-Five URL\-related shortcut scripts:
+Five URL-related shortcut scripts:
.RS 2
.IP \[bu] 2
-\f[C]hurl(1df)\f[] extracts values of \f[C]href\f[] attributes of
-\f[C]<a>\f[] tags, sorts them uniquely, and writes them to
-\f[C]stdout\f[]; it requires pup (https://github.com/ericchiang/pup).
+\f[V]hurl(1df)\f[R] extracts values of \f[V]href\f[R] attributes of
+\f[V]<a>\f[R] tags, sorts them uniquely, and writes them to
+\f[V]stdout\f[R]; it requires pup (https://github.com/ericchiang/pup).
.IP \[bu] 2
-\f[C]murl(1df)\f[] converts Markdown documents to HTML with
-\f[C]pandoc(1)\f[] and runs the output through \f[C]hurl(1df)\f[].
+\f[V]murl(1df)\f[R] converts Markdown documents to HTML with
+\f[V]pandoc(1)\f[R] and runs the output through \f[V]hurl(1df)\f[R].
.IP \[bu] 2
-\f[C]urlc(1df)\f[] accepts a list of URLs on \f[C]stdin\f[] and writes
-error messages to \f[C]stderr\f[] if any of the URLs are broken,
+\f[V]urlc(1df)\f[R] accepts a list of URLs on \f[V]stdin\f[R] and writes
+error messages to \f[V]stderr\f[R] if any of the URLs are broken,
redirecting, or are insecure and have working secure versions; requires
-\f[C]curl(1)\f[].
+\f[V]curl(1)\f[R].
.IP \[bu] 2
-\f[C]urlh(1df)\f[] prints the values for a given HTTP header from a HEAD
-response.
+\f[V]urlh(1df)\f[R] prints the values for a given HTTP header from a
+HEAD response.
.IP \[bu] 2
-\f[C]urlmt(1df)\f[] prints the MIME type from the \f[C]Content\-Type\f[]
-header as retrieved by \f[C]urlh(1df)\f[].
+\f[V]urlmt(1df)\f[R] prints the MIME type from the
+\f[V]Content-Type\f[R] header as retrieved by \f[V]urlh(1df)\f[R].
.RE
.IP \[bu] 2
-Three RFC\-related shortcut scripts:
+Three RFC-related shortcut scripts:
.RS 2
.IP \[bu] 2
-\f[C]rfcf(1df)\f[] fetches ASCII RFCs from the IETF website.
+\f[V]rfcf(1df)\f[R] fetches ASCII RFCs from the IETF website.
.IP \[bu] 2
-\f[C]rfct(1df)\f[] formats ASCII RFCs.
+\f[V]rfct(1df)\f[R] formats ASCII RFCs.
.IP \[bu] 2
-\f[C]rfcr(1df)\f[] does both, displaying in a pager if appropriate, like
-a \f[C]man(1)\f[] reader for RFCs.
+\f[V]rfcr(1df)\f[R] does both, displaying in a pager if appropriate,
+like a \f[V]man(1)\f[R] reader for RFCs.
.RE
.IP \[bu] 2
-Five toy random\-number scripts (not for sensitive/dead\-serious use):
+Five toy random-number scripts (not for sensitive/dead-serious use):
.RS 2
.IP \[bu] 2
-\f[C]rndi(1df)\f[] gets a random integer within two bounds.
+\f[V]rndi(1df)\f[R] gets a random integer within two bounds.
.IP \[bu] 2
-\f[C]rnds(1df)\f[] attempts to get an optional random seed for
-\f[C]rndi(1df)\f[].
+\f[V]rnds(1df)\f[R] attempts to get an optional random seed for
+\f[V]rndi(1df)\f[R].
.IP \[bu] 2
-\f[C]rnda(1df)\f[] uses \f[C]rndi(1df)\f[] to choose a random argument.
+\f[V]rnda(1df)\f[R] uses \f[V]rndi(1df)\f[R] to choose a random
+argument.
.IP \[bu] 2
-\f[C]rndf(1df)\f[] uses \f[C]rnda(1df)\f[] to choose a random file from
-a directory.
+\f[V]rndf(1df)\f[R] uses \f[V]rnda(1df)\f[R] to choose a random file
+from a directory.
.IP \[bu] 2
-\f[C]rndl(1df)\f[] uses \f[C]rndi(1df)\f[] to choose a random line from
-files.
+\f[V]rndl(1df)\f[R] uses \f[V]rndi(1df)\f[R] to choose a random line
+from files.
.RE
.IP \[bu] 2
Four file formatting scripts:
.RS 2
.IP \[bu] 2
-\f[C]d2u(1df)\f[] converts DOS line endings in files to UNIX ones.
+\f[V]d2u(1df)\f[R] converts DOS line endings in files to UNIX ones.
.IP \[bu] 2
-\f[C]u2d(1df)\f[] converts UNIX line endings in files to DOS ones.
+\f[V]u2d(1df)\f[R] converts UNIX line endings in files to DOS ones.
.IP \[bu] 2
-\f[C]stbl(1df)\f[] strips a trailing blank line from the files in its
+\f[V]stbl(1df)\f[R] strips a trailing blank line from the files in its
arguments.
.IP \[bu] 2
-\f[C]stws(1df)\f[] strips trailing spaces from the ends of lines of the
+\f[V]stws(1df)\f[R] strips trailing spaces from the ends of lines of the
files in its arguments.
.RE
.IP \[bu] 2
Seven stream formatting scripts:
.RS 2
.IP \[bu] 2
-\f[C]sd2u(1df)\f[] converts DOS line endings in streams to UNIX ones.
+\f[V]sd2u(1df)\f[R] converts DOS line endings in streams to UNIX ones.
.IP \[bu] 2
-\f[C]su2d(1df)\f[] converts UNIX line endings in streams to DOS ones.
+\f[V]su2d(1df)\f[R] converts UNIX line endings in streams to DOS ones.
.IP \[bu] 2
-\f[C]slow(1df)\f[] converts uppercase to lowercase.
+\f[V]slow(1df)\f[R] converts uppercase to lowercase.
.IP \[bu] 2
-\f[C]supp(1df)\f[] converts lowercase to uppercase.
+\f[V]supp(1df)\f[R] converts lowercase to uppercase.
.IP \[bu] 2
-\f[C]tl(1df)\f[] tags input lines with a prefix or suffix, basically a
-\f[C]sed(1)\f[] shortcut.
+\f[V]tl(1df)\f[R] tags input lines with a prefix or suffix, basically a
+\f[V]sed(1)\f[R] shortcut.
.IP \[bu] 2
-\f[C]tlcs(1df)\f[] executes a command and uses \f[C]tl(1df)\f[] to tag
+\f[V]tlcs(1df)\f[R] executes a command and uses \f[V]tl(1df)\f[R] to tag
standard output and standard error lines, and color them if you want.
.IP \[bu] 2
-\f[C]unf(1df)\f[] joins lines with leading spaces to the previous line.
+\f[V]unf(1df)\f[R] joins lines with leading spaces to the previous line.
Intended for unfolding HTTP headers, but it should work for most RFC 822
formats.
.RE
@@ -664,383 +667,379 @@ formats.
Six simple aggregate scripts for numbers:
.RS 2
.IP \[bu] 2
-\f[C]max(1df)\f[] prints the maximum.
+\f[V]max(1df)\f[R] prints the maximum.
.IP \[bu] 2
-\f[C]mean(1df)\f[] prints the mean.
+\f[V]mean(1df)\f[R] prints the mean.
.IP \[bu] 2
-\f[C]med(1df)\f[] prints the median.
+\f[V]med(1df)\f[R] prints the median.
.IP \[bu] 2
-\f[C]min(1df)\f[] prints the minimum.
+\f[V]min(1df)\f[R] prints the minimum.
.IP \[bu] 2
-\f[C]mode(1df)\f[] prints the first encountered mode.
+\f[V]mode(1df)\f[R] prints the first encountered mode.
.IP \[bu] 2
-\f[C]tot(1df)\f[] totals the set.
+\f[V]tot(1df)\f[R] totals the set.
.RE
.IP \[bu] 2
-Three quick\-and\-dirty HTML tools:
+Three quick-and-dirty HTML tools:
.RS 2
.IP \[bu] 2
-\f[C]htenc(1df)\f[] encodes.
+\f[V]htenc(1df)\f[R] encodes.
.IP \[bu] 2
-\f[C]htdec(1df)\f[] decodes.
+\f[V]htdec(1df)\f[R] decodes.
.IP \[bu] 2
-\f[C]htrec(1df)\f[] wraps \f[C]a\f[] tags around URLs.
+\f[V]htrec(1df)\f[R] wraps \f[V]a\f[R] tags around URLs.
.RE
.IP \[bu] 2
Two internet message quoting tools:
.RS 2
.IP \[bu] 2
-\f[C]quo(1df)\f[] indents with quoting right angle\-brackets.
+\f[V]quo(1df)\f[R] indents with quoting right angle-brackets.
.IP \[bu] 2
-\f[C]wro(1df)\f[] adds a quote attribution header to its input.
+\f[V]wro(1df)\f[R] adds a quote attribution header to its input.
.RE
.IP \[bu] 2
-Six Git\-related tools:
+Six Git-related tools:
.RS 2
.IP \[bu] 2
-\f[C]fgscr(1df)\f[] finds Git repositories in a directory root and
-scrubs them with \f[C]gscr(1df)\f[].
+\f[V]fgscr(1df)\f[R] finds Git repositories in a directory root and
+scrubs them with \f[V]gscr(1df)\f[R].
.IP \[bu] 2
-\f[C]grc(1df)\f[] quietly tests whether the given directory appears to
+\f[V]grc(1df)\f[R] quietly tests whether the given directory appears to
be a Git repository with pending changes.
.IP \[bu] 2
-\f[C]gscr(1df)\f[] scrubs Git repositories.
+\f[V]gscr(1df)\f[R] scrubs Git repositories.
.IP \[bu] 2
-\f[C]isgr(1df)\f[] quietly tests whether the given directory appears to
+\f[V]isgr(1df)\f[R] quietly tests whether the given directory appears to
be a Git repository.
.IP \[bu] 2
-\f[C]jfc(1df)\f[] adds and commits lazily to a Git repository.
+\f[V]jfc(1df)\f[R] adds and commits lazily to a Git repository.
.IP \[bu] 2
-\f[C]jfcd(1df)\f[] watches a directory for changes and runs
-\f[C]jfc(1df)\f[] if it sees any.
+\f[V]jfcd(1df)\f[R] watches a directory for changes and runs
+\f[V]jfc(1df)\f[R] if it sees any.
.RE
.IP \[bu] 2
Two time duration functions:
.RS 2
.IP \[bu] 2
-\f[C]hms(1df)\f[] converts seconds to \f[C]hh:mm:ss\f[] or
-\f[C]mm:ss\f[] timestamps.
+\f[V]hms(1df)\f[R] converts seconds to \f[V]hh:mm:ss\f[R] or
+\f[V]mm:ss\f[R] timestamps.
.IP \[bu] 2
-\f[C]sec(1df)\f[] converts \f[C]hh:mm:ss\f[] or \f[C]mm:ss\f[]
+\f[V]sec(1df)\f[R] converts \f[V]hh:mm:ss\f[R] or \f[V]mm:ss\f[R]
timestamps to seconds.
.RE
.IP \[bu] 2
Three pipe interaction tools:
.RS 2
.IP \[bu] 2
-\f[C]pst(1df)\f[] runs an interactive program on data before passing it
+\f[V]pst(1df)\f[R] runs an interactive program on data before passing it
along a pipeline.
.IP \[bu] 2
-\f[C]ped(1df)\f[] runs \f[C]pst(1df)\f[] with \f[C]$EDITOR\f[] or
-\f[C]ed(1)\f[].
+\f[V]ped(1df)\f[R] runs \f[V]pst(1df)\f[R] with \f[V]$EDITOR\f[R] or
+\f[V]ed(1)\f[R].
.IP \[bu] 2
-\f[C]pvi(1df)\f[] runs \f[C]pvi(1df)\f[] with \f[C]$VISUAL\f[] or
-\f[C]vi(1)\f[].
+\f[V]pvi(1df)\f[R] runs \f[V]pvi(1df)\f[R] with \f[V]$VISUAL\f[R] or
+\f[V]vi(1)\f[R].
.RE
.IP \[bu] 2
Two editor wrapper tools:
.RS 2
.IP \[bu] 2
-\f[C]mked(1df)\f[] creates paths to all its arguments before invoking
-\f[C]$EDITOR\f[].
+\f[V]mked(1df)\f[R] creates paths to all its arguments before invoking
+\f[V]$EDITOR\f[R].
.IP \[bu] 2
-\f[C]mkvi(1df)\f[] creates paths to all its arguments before invoking
-\f[C]$VISUAL\f[].
+\f[V]mkvi(1df)\f[R] creates paths to all its arguments before invoking
+\f[V]$VISUAL\f[R].
.RE
.IP \[bu] 2
-\f[C]ap(1df)\f[] reads arguments for a given command from the standard
+\f[V]ap(1df)\f[R] reads arguments for a given command from the standard
input, prompting if appropriate.
.IP \[bu] 2
-\f[C]apf(1df)\f[] inserts arguments to a command with ones read from a
+\f[V]apf(1df)\f[R] inserts arguments to a command with ones read from a
file, intended as a framework for shell wrappers or functions.
.IP \[bu] 2
-\f[C]ax(1df)\f[] evaluates an AWK expression given on the command line;
+\f[V]ax(1df)\f[R] evaluates an AWK expression given on the command line;
this is intended as a quick way to test how AWK would interpret a given
expression.
.IP \[bu] 2
-\f[C]bcq(1df)\f[] runs \f[C]bc(1)\f[], quieting it down if need be.
+\f[V]bcq(1df)\f[R] runs \f[V]bc(1)\f[R], quieting it down if need be.
.IP \[bu] 2
-\f[C]bel(1df)\f[] prints a terminal bell character.
+\f[V]bel(1df)\f[R] prints a terminal bell character.
.IP \[bu] 2
-\f[C]bl(1df)\f[] generates a given number of blank lines.
+\f[V]bl(1df)\f[R] generates a given number of blank lines.
.IP \[bu] 2
-\f[C]bp(1df)\f[] runs \f[C]br(1df)\f[] after prompting for an URL.
+\f[V]bp(1df)\f[R] runs \f[V]br(1df)\f[R] after prompting for an URL.
.IP \[bu] 2
-\f[C]br(1df)\f[] launches \f[C]$BROWSER\f[].
+\f[V]br(1df)\f[R] launches \f[V]$BROWSER\f[R].
.IP \[bu] 2
-\f[C]ca(1df)\f[] prints a count of its given arguments.
+\f[V]ca(1df)\f[R] prints a count of its given arguments.
.IP \[bu] 2
-\f[C]cf(1df)\f[] prints a count of entries in a given directory.
+\f[V]cf(1df)\f[R] prints a count of entries in a given directory.
.IP \[bu] 2
-\f[C]cfr(1df)\f[] does the same as \f[C]cf(1df)\f[], but recurses into
+\f[V]cfr(1df)\f[R] does the same as \f[V]cf(1df)\f[R], but recurses into
subdirectories as well.
.IP \[bu] 2
-\f[C]chc(1df)\f[] caches the output of a command.
+\f[V]chc(1df)\f[R] caches the output of a command.
.IP \[bu] 2
-\f[C]chn(1df)\f[] runs a filter over its input a given number of times.
+\f[V]chn(1df)\f[R] runs a filter over its input a given number of times.
.IP \[bu] 2
-\f[C]clog(1df)\f[] is a tiny timestamped log system.
+\f[V]clog(1df)\f[R] is a tiny timestamped log system.
.IP \[bu] 2
-\f[C]clrd(1df)\f[] sets up a per\-line file read, clearing the screen
+\f[V]clrd(1df)\f[R] sets up a per-line file read, clearing the screen
first.
.IP \[bu] 2
-\f[C]clwr(1df)\f[] sets up a per\-line file write, clearing the screen
+\f[V]clwr(1df)\f[R] sets up a per-line file write, clearing the screen
before each line.
.IP \[bu] 2
-\f[C]csmw(1df)\f[] prints an English list of monospace\-quoted words
+\f[V]csmw(1df)\f[R] prints an English list of monospace-quoted words
read from the input.
.IP \[bu] 2
-\f[C]dam(1df)\f[] buffers all its input before emitting it as output.
+\f[V]dam(1df)\f[R] buffers all its input before emitting it as output.
.IP \[bu] 2
-\f[C]ddup(1df)\f[] removes duplicate lines from unsorted input.
+\f[V]ddup(1df)\f[R] removes duplicate lines from unsorted input.
.IP \[bu] 2
-\f[C]defang(1df)\f[] prevents dangerous URLs from being made into
+\f[V]defang(1df)\f[R] prevents dangerous URLs from being made into
clickable links.
.IP \[bu] 2
-\f[C]dmp(1df)\f[] copies a pass(1) entry selected by \f[C]dmenu(1)\f[]
-to the X CLIPBOARD.
-.IP \[bu] 2
-\f[C]dub(1df)\f[] lists the biggest entries in a directory.
+\f[V]dub(1df)\f[R] lists the biggest entries in a directory.
.IP \[bu] 2
-\f[C]edda(1df)\f[] provides a means to run \f[C]ed(1)\f[] over a set of
-files preserving any options, mostly useful for scripts.
+\f[V]edda(1df)\f[R] provides a means to run \f[V]ed(1)\f[R] over a set
+of files preserving any options, mostly useful for scripts.
.IP \[bu] 2
-\f[C]eds(1df)\f[] edits executable script files in \f[C]EDSPATH\f[],
-defaulting to \f[C]~/.local/bin\f[], for personal scripting snippets.
+\f[V]eds(1df)\f[R] edits executable script files in \f[V]EDSPATH\f[R],
+defaulting to \f[V]\[ti]/.local/bin\f[R], for personal scripting
+snippets.
.IP \[bu] 2
-\f[C]exm(1df)\f[] works around a screen\-clearing quirk of Vim's
-\f[C]ex\f[] mode.
+\f[V]exm(1df)\f[R] works around a screen-clearing quirk of Vim\[cq]s
+\f[V]ex\f[R] mode.
.IP \[bu] 2
-\f[C]finc(1df)\f[] counts the number of results returned from a set of
-given \f[C]find(1)\f[] conditions.
+\f[V]finc(1df)\f[R] counts the number of results returned from a set of
+given \f[V]find(1)\f[R] conditions.
.IP \[bu] 2
-\f[C]fnl(1df)\f[] runs a command and saves its output and error into
+\f[V]fnl(1df)\f[R] runs a command and saves its output and error into
temporary files, printing their paths and line counts.
.IP \[bu] 2
-\f[C]fnp(1df)\f[] prints the given files to standard output, each with a
-plain text heading with the filename in it.
+\f[V]fnp(1df)\f[R] prints the given files to standard output, each with
+a plain text heading with the filename in it.
.IP \[bu] 2
-\f[C]gms(1df)\f[] runs a set of \f[C]getmailrc\f[] files; does much the
-same thing as the script \f[C]getmails\f[] in the \f[C]getmail\f[]
+\f[V]gms(1df)\f[R] runs a set of \f[V]getmailrc\f[R] files; does much
+the same thing as the script \f[V]getmails\f[R] in the \f[V]getmail\f[R]
suite, but runs the requests in parallel and does up to three silent
-retries using \f[C]try(1df)\f[].
+retries using \f[V]try(1df)\f[R].
.IP \[bu] 2
-\f[C]grec(1df)\f[] is a more logically\-named \f[C]grep\ \-c\f[].
+\f[V]grec(1df)\f[R] is a more logically-named \f[V]grep -c\f[R].
.IP \[bu] 2
-\f[C]gred(1df)\f[] is a more logically\-named \f[C]grep\ \-v\f[].
+\f[V]gred(1df)\f[R] is a more logically-named \f[V]grep -v\f[R].
.IP \[bu] 2
-\f[C]gwp(1df)\f[] searches for alphanumeric words in a similar way to
-\f[C]grep(1)\f[].
+\f[V]gwp(1df)\f[R] searches for alphanumeric words in a similar way to
+\f[V]grep(1)\f[R].
.IP \[bu] 2
-\f[C]han(1df)\f[] provides a \f[C]keywordprg\f[] for Vim's Bash script
-file type that will look for \f[C]help\f[] topics.
+\f[V]han(1df)\f[R] provides a \f[V]keywordprg\f[R] for Vim\[cq]s Bash
+script file type that will look for \f[V]help\f[R] topics.
You could use it from the shell too.
.IP \[bu] 2
-\f[C]igex(1df)\f[] wraps around a command to allow you to ignore error
-conditions that don't actually worry you, exiting with 0 anyway.
+\f[V]igex(1df)\f[R] wraps around a command to allow you to ignore error
+conditions that don\[cq]t actually worry you, exiting with 0 anyway.
.IP \[bu] 2
-\f[C]ix(1df)\f[] posts its input to the \f[C]ix.io\f[] pastebin.
+\f[V]ix(1df)\f[R] posts its input to the \f[V]ix.io\f[R] pastebin.
.IP \[bu] 2
-\f[C]jfp(1df)\f[] prints its input, excluding any shebang on the first
+\f[V]jfp(1df)\f[R] prints its input, excluding any shebang on the first
line only.
.IP \[bu] 2
-\f[C]loc(1df)\f[] is a quick\-search wrapped around \f[C]find(1)\f[].
+\f[V]loc(1df)\f[R] is a quick-search wrapped around \f[V]find(1)\f[R].
.IP \[bu] 2
-\f[C]maybe(1df)\f[] is like \f[C]true(1)\f[] or \f[C]false(1)\f[]; given
-a probability of success, it exits with success or failure.
+\f[V]maybe(1df)\f[R] is like \f[V]true(1)\f[R] or \f[V]false(1)\f[R];
+given a probability of success, it exits with success or failure.
Good for quick tests.
.IP \[bu] 2
-\f[C]mex(1df)\f[] makes given filenames in \f[C]$PATH\f[] executable.
+\f[V]mex(1df)\f[R] makes given filenames in \f[V]$PATH\f[R] executable.
.IP \[bu] 2
-\f[C]mi5(1df)\f[] is a crude preprocessor for \f[C]m4\f[].
+\f[V]mi5(1df)\f[R] is a crude preprocessor for \f[V]m4\f[R].
.IP \[bu] 2
-\f[C]mim(1df)\f[] starts an interactive Mutt message with its input.
+\f[V]mim(1df)\f[R] starts an interactive Mutt message with its input.
.IP \[bu] 2
-\f[C]mftl(1df)\f[] finds usable\-looking targets in Makefiles.
+\f[V]mftl(1df)\f[R] finds usable-looking targets in Makefiles.
.IP \[bu] 2
-\f[C]mkcp(1df)\f[] creates a directory and copies preceding arguments
+\f[V]mkcp(1df)\f[R] creates a directory and copies preceding arguments
into it.
.IP \[bu] 2
-\f[C]mkmv(1df)\f[] creates a directory and moves preceding arguments
+\f[V]mkmv(1df)\f[R] creates a directory and moves preceding arguments
into it.
.IP \[bu] 2
-\f[C]motd(1df)\f[] shows the system MOTD.
+\f[V]motd(1df)\f[R] shows the system MOTD.
.IP \[bu] 2
-\f[C]msc(1df)\f[] crudely counts messages in an mbox.
+\f[V]msc(1df)\f[R] crudely counts messages in an mbox.
.IP \[bu] 2
-\f[C]mw(1df)\f[] prints alphabetic space\-delimited words from the input
+\f[V]mw(1df)\f[R] prints alphabetic space-delimited words from the input
one per line.
.IP \[bu] 2
-\f[C]oii(1df)\f[] runs a command on input only if there is any.
+\f[V]oii(1df)\f[R] runs a command on input only if there is any.
.IP \[bu] 2
-\f[C]onl(1df)\f[] crunches input down to one printable line.
+\f[V]onl(1df)\f[R] crunches input down to one printable line.
.IP \[bu] 2
-\f[C]osc(1df)\f[] implements a \f[C]netcat(1)\f[]\-like wrapper for
-\f[C]openssl(1)\f[]'s \f[C]s_client\f[] sub\-command.
+\f[V]osc(1df)\f[R] implements a \f[V]netcat(1)\f[R]-like wrapper for
+\f[V]openssl(1)\f[R]\[cq]s \f[V]s_client\f[R] sub-command.
.IP \[bu] 2
-\f[C]p(1df)\f[] prints concatenated standard input; \f[C]cat(1)\f[] as
+\f[V]p(1df)\f[R] prints concatenated standard input; \f[V]cat(1)\f[R] as
it should always have been.
.IP \[bu] 2
-\f[C]pa(1df)\f[] prints its arguments, one per line.
+\f[V]pa(1df)\f[R] prints its arguments, one per line.
.IP \[bu] 2
-\f[C]phpcsff(1df)\f[] wraps around
-PHP\-CS\-Fixer (https://github.com/FriendsOfPHP/PHP-CS-Fixer) to make it
-a source code filter suitable for use as an \f[C]equalprg\f[] in Vim.
+\f[V]phpcsff(1df)\f[R] wraps around
+PHP-CS-Fixer (https://github.com/FriendsOfPHP/PHP-CS-Fixer) to make it a
+source code filter suitable for use as an \f[V]equalprg\f[R] in Vim.
.IP \[bu] 2
-\f[C]pp(1df)\f[] prints the full path of each argument using
-\f[C]$PWD\f[].
+\f[V]pp(1df)\f[R] prints the full path of each argument using
+\f[V]$PWD\f[R].
.IP \[bu] 2
-\f[C]pph(1df)\f[] runs \f[C]pp(1df)\f[] and includes a leading
-\f[C]$HOSTNAME:\f[].
+\f[V]pph(1df)\f[R] runs \f[V]pp(1df)\f[R] and includes a leading
+\f[V]$HOSTNAME:\f[R].
.IP \[bu] 2
-\f[C]paz(1df)\f[] print its arguments terminated by NULL chars.
+\f[V]paz(1df)\f[R] print its arguments terminated by NULL chars.
.IP \[bu] 2
-\f[C]pit(1df)\f[] runs its input through a pager if its standard output
+\f[V]pit(1df)\f[R] runs its input through a pager if its standard output
looks like a terminal.
.IP \[bu] 2
-\f[C]pwg(1df)\f[] generates just one decent password with
-\f[C]pwgen(1)\f[].
+\f[V]pwg(1df)\f[R] generates just one decent password with
+\f[V]pwgen(1)\f[R].
.IP \[bu] 2
-\f[C]qat(1df)\f[] disables \f[C]stty\ echo\f[] for the duration of a
+\f[V]qat(1df)\f[R] disables \f[V]stty echo\f[R] for the duration of a
paste.
.IP \[bu] 2
-\f[C]rep(1df)\f[] repeats a command a given number of times.
+\f[V]rep(1df)\f[R] repeats a command a given number of times.
.IP \[bu] 2
-\f[C]rgl(1df)\f[] is a very crude interactive \f[C]grep(1)\f[] loop.
+\f[V]rgl(1df)\f[R] is a very crude interactive \f[V]grep(1)\f[R] loop.
.IP \[bu] 2
-\f[C]shb(1df)\f[] attempts to build shebang lines for scripts from the
+\f[V]shb(1df)\f[R] attempts to build shebang lines for scripts from the
system paths.
.IP \[bu] 2
-\f[C]sqs(1df)\f[] chops off query strings from filenames, usually
+\f[V]sqs(1df)\f[R] chops off query strings from filenames, usually
downloads.
.IP \[bu] 2
-\f[C]sshi(1df)\f[] prints human\-readable SSH connection details.
+\f[V]sshi(1df)\f[R] prints human-readable SSH connection details.
.IP \[bu] 2
-\f[C]stex(1df)\f[] strips extensions from filenames.
+\f[V]stex(1df)\f[R] strips extensions from filenames.
.IP \[bu] 2
-\f[C]sue(8df)\f[] execs \f[C]sudoedit(8)\f[] as the owner of all the
+\f[V]sue(8df)\f[R] execs \f[V]sudoedit(8)\f[R] as the owner of all the
file arguments given, perhaps in cases where you may not necessarily
-have \f[C]root\f[] \f[C]sudo(8)\f[] privileges.
+have \f[V]root\f[R] \f[V]sudo(8)\f[R] privileges.
.IP \[bu] 2
-\f[C]swr(1df)\f[] allows you to run commands locally specifying remote
-files in \f[C]scp(1)\f[]'s HOST:PATH format.
+\f[V]swr(1df)\f[R] allows you to run commands locally specifying remote
+files in \f[V]scp(1)\f[R]\[cq]s HOST:PATH format.
.IP \[bu] 2
-\f[C]td(1df)\f[] manages a to\-do file for you with \f[C]$EDITOR\f[] and
-\f[C]git(1)\f[]; I used to use Taskwarrior, but found it too complex and
-buggy.
+\f[V]td(1df)\f[R] manages a to-do file for you with \f[V]$EDITOR\f[R]
+and \f[V]git(1)\f[R]; I used to use Taskwarrior, but found it too
+complex and buggy.
.IP \[bu] 2
-\f[C]tm(1df)\f[] runs \f[C]tmux(1)\f[] with
-\f[C]attach\-session\ \-d\f[] if a session exists, and
-\f[C]new\-session\f[] if it doesn't.
+\f[V]tm(1df)\f[R] runs \f[V]tmux(1)\f[R] with
+\f[V]attach-session -d\f[R] if a session exists, and
+\f[V]new-session\f[R] if it doesn\[cq]t.
.IP \[bu] 2
-\f[C]trs(1df)\f[] replaces strings (not regular expression) in its
+\f[V]trs(1df)\f[R] replaces strings (not regular expression) in its
input.
.IP \[bu] 2
-\f[C]try(1df)\f[] repeats a command up to a given number of times until
+\f[V]try(1df)\f[R] repeats a command up to a given number of times until
it succeeds, only printing error output if all three attempts failed.
-Good for tolerating blips or temporary failures in \f[C]cron(8)\f[]
+Good for tolerating blips or temporary failures in \f[V]cron(8)\f[R]
scripts.
.IP \[bu] 2
-\f[C]umake(1df)\f[] iterates upwards through the directory tree from
-\f[C]$PWD\f[] until it finds a Makefile for which to run
-\f[C]make(1)\f[] with the given arguments.
+\f[V]umake(1df)\f[R] iterates upwards through the directory tree from
+\f[V]$PWD\f[R] until it finds a Makefile for which to run
+\f[V]make(1)\f[R] with the given arguments.
.IP \[bu] 2
-\f[C]uts(1df)\f[] gets the current UNIX timestamp in an unorthodox way
-that should work on all POSIX\-compliant operating systems.
+\f[V]uts(1df)\f[R] gets the current UNIX timestamp in an unorthodox way
+that should work on all POSIX-compliant operating systems.
.IP \[bu] 2
-\f[C]vest(1df)\f[] runs \f[C]test(1)\f[] but fails with explicit output
-via \f[C]vex(1df)\f[].
+\f[V]vest(1df)\f[R] runs \f[V]test(1)\f[R] but fails with explicit
+output via \f[V]vex(1df)\f[R].
.IP \[bu] 2
-\f[C]vex(1df)\f[] runs a command and prints \f[C]true\f[] or
-\f[C]false\f[] explicitly to \f[C]stdout\f[] based on the exit value.
+\f[V]vex(1df)\f[R] runs a command and prints \f[V]true\f[R] or
+\f[V]false\f[R] explicitly to \f[V]stdout\f[R] based on the exit value.
.IP \[bu] 2
-\f[C]vic(1df)\f[] tries to run a POSIX\-compliant \f[C]vi(1)\f[].
+\f[V]vic(1df)\f[R] tries to run a POSIX-compliant \f[V]vi(1)\f[R].
.IP \[bu] 2
-\f[C]xrbg(1df)\f[] applies the same randomly\-selected background to
+\f[V]xrbg(1df)\f[R] applies the same randomly-selected background to
each X screen.
.IP \[bu] 2
-\f[C]xrq(1df)\f[] gets the values of specific resources out of
-\f[C]xrdb\ \-query\f[] output.
+\f[V]xrq(1df)\f[R] gets the values of specific resources out of
+\f[V]xrdb -query\f[R] output.
.PP
-There's some silly stuff in \f[C]install\-games\f[]:
+There\[cq]s some silly stuff in \f[V]install-games\f[R]:
.IP \[bu] 2
-\f[C]aaf(6df)\f[] gets a random ASCII Art
+\f[V]aaf(6df)\f[R] gets a random ASCII Art
Farts (http://www.asciiartfarts.com/) comic.
.IP \[bu] 2
-\f[C]acq(6df)\f[] allows you to interrogate AC, the interplanetary
+\f[V]acq(6df)\f[R] allows you to interrogate AC, the interplanetary
computer.
.IP \[bu] 2
-\f[C]aesth(6df)\f[] converts English letters to their full width CJK
-analogues, for aesthetic purposes.
+\f[V]aesth(6df)\f[R] converts English letters to their full width CJK
+analogues, for
+\[uFF41]\[uFF45]\[uFF53]\[uFF54]\[uFF48]\[uFF45]\[uFF54]\[uFF49]\[uFF43]
+purposes.
.IP \[bu] 2
-\f[C]squ(6df)\f[] makes a reduced Latin square out of each line of
+\f[V]squ(6df)\f[R] makes a reduced Latin square out of each line of
input.
.IP \[bu] 2
-\f[C]kvlt(6df)\f[] translates input to emulate a style of typing unique
+\f[V]kvlt(6df)\f[R] translates input to emulate a style of typing unique
to black metal communities on the internet.
.IP \[bu] 2
-\f[C]philsay(6df)\f[] shows a picture to accompany \f[C]pks(6df)\f[]
+\f[V]philsay(6df)\f[R] shows a picture to accompany \f[V]pks(6df)\f[R]
output.
.IP \[bu] 2
-\f[C]pks(6df)\f[] laughs at a randomly selected word.
+\f[V]pks(6df)\f[R] laughs at a randomly selected word.
.IP \[bu] 2
-\f[C]rndn(6df)\f[] implements an esoteric random number generation
+\f[V]rndn(6df)\f[R] implements an esoteric random number generation
algorithm.
.IP \[bu] 2
-\f[C]strik(6df)\f[] outputs s̶t̶r̶i̶k̶e̶d̶ ̶o̶u̶t̶ struck out text.
+\f[V]strik(6df)\f[R] outputs
+s\[u0336]t\[u0336]r\[u0336]i\[u0336]k\[u0336]e\[u0336]d\[u0336]
+\[u0336]o\[u0336]u\[u0336]t\[u0336] struck out text.
.IP \[bu] 2
-\f[C]rot13(6df)\f[] rotates the Latin letters in its input.
+\f[V]rot13(6df)\f[R] rotates the Latin letters in its input.
.IP \[bu] 2
-\f[C]uuu(6df)\f[] uuuuu uuuu uu uuuuuu uuuuuuu u uuu uuuuu.
+\f[V]uuu(6df)\f[R] uuuuu uuuu uu uuuuuu uuuuuuu u uuu uuuuu.
.IP \[bu] 2
-\f[C]xyzzy(6df)\f[] teleports to a marked location on the filesystem.
+\f[V]xyzzy(6df)\f[R] teleports to a marked location on the filesystem.
.IP \[bu] 2
-\f[C]zs(6df)\f[] prefixes \[lq]z\[rq] case\-appropriately to every
+\f[V]zs(6df)\f[R] prefixes \[lq]z\[rq] case-appropriately to every
occurrence of \[lq]s\[rq] in the text on its standard input.
.SS Manuals
.PP
-The \f[C]install\-bin\f[] and \f[C]install\-games\f[] targets install
+The \f[V]install-bin\f[R] and \f[V]install-games\f[R] targets install
manuals for each script.
If you want to read the manuals, you may need to add
-\f[C]~/.local/share/man\f[] to your \f[C]~/.manpath\f[] or
-\f[C]/etc/manpath\f[] configuration, depending on your system.
+\f[V]\[ti]/.local/share/man\f[R] to your \f[V]\[ti]/.manpath\f[R] or
+\f[V]/etc/manpath\f[R] configuration, depending on your system.
.SS Testing
.PP
You can check that both sets of shell scripts are syntactically correct
-with \f[C]make\ check\-bash\f[] or \f[C]make\ check\-sh\f[], or
-\f[C]make\ check\f[] for everything including the scripts in
-\f[C]bin\f[] and \f[C]games\f[].
-There's no proper test suite for the actual functionality (yet).
+with \f[V]make check-bash\f[R] or \f[V]make check-sh\f[R], or
+\f[V]make check\f[R] for everything including the scripts in
+\f[V]bin\f[R] and \f[V]games\f[R].
+There\[cq]s no proper test suite for the actual functionality (yet).
.PP
-There are also optional \f[C]lint\f[] targets, if you have the
+There are also optional \f[V]lint\f[R] targets, if you have the
appropriate tools available to run them:
.IP \[bu] 2
ShellCheck (https://www.shellcheck.net/):
.RS 2
.IP \[bu] 2
-\f[C]lint\-bash\f[]
+\f[V]lint-bash\f[R]
.IP \[bu] 2
-\f[C]lint\-bin\f[]
+\f[V]lint-bin\f[R]
.IP \[bu] 2
-\f[C]lint\-games\f[]
+\f[V]lint-games\f[R]
.IP \[bu] 2
-\f[C]lint\-ksh\f[]
+\f[V]lint-ksh\f[R]
.IP \[bu] 2
-\f[C]lint\-sh\f[]
-.IP \[bu] 2
-\f[C]lint\-xinit\f[]
-.RE
-.IP \[bu] 2
-Perl::Critic:
-.RS 2
+\f[V]lint-sh\f[R]
.IP \[bu] 2
-\f[C]lint\-urxvt\f[]
+\f[V]lint-x\f[R]
.RE
.IP \[bu] 2
Vint (https://github.com/Kuniwak/vint):
.RS 2
.IP \[bu] 2
-\f[C]lint\-vim\f[]
+\f[V]lint-vim\f[R]
.RE
.SS Future development
.PP
@@ -1050,11 +1049,12 @@ See IDEAS.md.
See ISSUES.md.
.SS License
.PP
-Public domain; see the included \f[C]UNLICENSE\f[] file.
-It's just configuration and simple scripts, so do whatever you like with
-it if any of it's useful to you.
-If you're feeling generous, please join and/or donate to a free software
-advocacy group, and let me know you did it because of this project:
+Public domain; see the included \f[V]UNLICENSE\f[R] file.
+It\[cq]s just configuration and simple scripts, so do whatever you like
+with it if any of it\[cq]s useful to you.
+If you\[cq]re feeling generous, please join and/or donate to a free
+software advocacy group, and let me know you did it because of this
+project:
.IP \[bu] 2
Free Software Foundation (https://www.fsf.org/)
.IP \[bu] 2