aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2023-06-17 21:47:13 +1200
committerTom Ryder <tom@sanctum.geek.nz>2023-06-17 21:47:13 +1200
commit4a3f04e29f51cec8ee29ff1d9bcc399db9444798 (patch)
tree2fbbadd6f2f150aac886b677c47c90bfc6b7fa23
parentRevert "Be strict about modifiers for xterm cop... (diff)
parentUpdate PGP key (diff)
downloaddotfiles-4a3f04e29f51cec8ee29ff1d9bcc399db9444798.tar.gz
dotfiles-4a3f04e29f51cec8ee29ff1d9bcc399db9444798.zip
Merge branch 'release/v12.39.0' into develop
* release/v12.39.0: Update PGP key Update dotfiles(7) manual page
-rw-r--r--VERSION4
-rw-r--r--finger/pgpkey1
-rw-r--r--man/man7/dotfiles.7df686
3 files changed, 352 insertions, 339 deletions
diff --git a/VERSION b/VERSION
index 5a8553d8..2921494c 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-tejr dotfiles v12.38.0
-Wed, 10 May 2023 23:17:07 +0000
+tejr dotfiles v12.39.0
+Sat, 17 Jun 2023 09:46:54 +0000
diff --git a/finger/pgpkey b/finger/pgpkey
index ef71e198..f9569c8f 100644
--- a/finger/pgpkey
+++ b/finger/pgpkey
@@ -9,4 +9,3 @@ uid [ultimate] Thomas Ryder <tej.ryder@gmail.com>
sub rsa4096 2013-03-12 [E] [expires: 2024-06-16]
sub rsa4096 2013-03-12 [S] [expires: 2024-06-16]
sub rsa4096 2019-08-06 [A] [expires: 2024-06-16]
-
diff --git a/man/man7/dotfiles.7df b/man/man7/dotfiles.7df
index 9d528c3e..83616552 100644
--- a/man/man7/dotfiles.7df
+++ b/man/man7/dotfiles.7df
@@ -1,11 +1,25 @@
-.\" Automatically generated by Pandoc 2.9.2.1
+.\" Automatically generated by Pandoc 2.17.1.1
.\"
+.\" 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[R], including most of the settings that migrate well
+\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
@@ -26,12 +40,12 @@ $ make install
\f[R]
.fi
.PP
-For the default \f[C]all\f[R] target, you\[cq]ll need a POSIX-fearing
-userland, including \f[C]make(1)\f[R] and \f[C]m4(1)\f[R].
+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[R] overwrites things standing in the
+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[C]make -n install\f[R] before running \f[C]make install\f[R]
+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,
@@ -45,44 +59,44 @@ $ env -i HOME=\[dq]$tmpdir\[dq] TERM=\[dq]$TERM\[dq] \[dq]$SHELL\[dq] -l
\f[R]
.fi
.PP
-The default \f[C]install\f[R] 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[R]
+\f[V]install-bin\f[R]
.IP \[bu] 2
-\f[C]install-curl\f[R]
+\f[V]install-curl\f[R]
.IP \[bu] 2
-\f[C]install-ex\f[R]
+\f[V]install-ex\f[R]
.IP \[bu] 2
-\f[C]install-git\f[R]
+\f[V]install-git\f[R]
.IP \[bu] 2
-\f[C]install-gnupg\f[R]
+\f[V]install-gnupg\f[R]
.IP \[bu] 2
-\f[C]install-less\f[R]
+\f[V]install-less\f[R]
.IP \[bu] 2
-\f[C]install-login-shell\f[R]
+\f[V]install-login-shell\f[R]
.IP \[bu] 2
-\f[C]install-man\f[R]
+\f[V]install-man\f[R]
.IP \[bu] 2
-\f[C]install-readline\f[R]
+\f[V]install-readline\f[R]
.IP \[bu] 2
-\f[C]install-vim\f[R]
+\f[V]install-vim\f[R]
.PP
-The \f[C]install-login-shell\f[R] target looks at your \f[C]SHELL\f[R]
+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[C]install-sh\f[R].
+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[R]
+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[R] in the project\[cq]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[R] targets useful for a specific user or
+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[C]\[ti]/.config/dotfiles/config\f[R], and install using that with the
-special \f[C]install-conf\f[R] target.
-This can include macro settings for the \f[C]Makefile\f[R], too:
+\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]
@@ -98,14 +112,14 @@ $ make -C .local/src/dotfiles install-conf
.PP
Configuration is included for:
.IP \[bu] 2
-Bourne-style POSIX shells, sharing a \f[C].profile\f[R], an
-\f[C]ENV\f[R] 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[R],
-\f[C]pdksh\f[R], \f[C]mksh\f[R])
+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
@@ -117,7 +131,7 @@ with URL syntax
.IP \[bu] 2
Dillo (https://www.dillo.org/)\[em]A lightweight web browser
.IP \[bu] 2
-\f[C]finger(1)\f[R]\[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
@@ -135,7 +149,7 @@ 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[R] (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
@@ -143,7 +157,7 @@ inspired by ncmpc
.IP \[bu] 2
Newsboat (https://newsboat.org/)\[em]Terminal RSS/Atom feed reader
.IP \[bu] 2
-\f[C]psql(1)\f[R] (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
@@ -187,23 +201,23 @@ 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[R] if it\[cq]s available.
+preferably \f[V]ksh93\f[R] if it\[cq]s available.
.SS POSIX core
.PP
-My \f[C]\[ti]/.profile\f[R] and other files in \f[C]sh\f[R] are written
+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[C]sh(1)\f[R] implementations.
+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]\[ti]/.profile.d\f[R] by \f[C]\[ti]/.profile\f[R].
+\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[R] shells is kept in \f[C]\[ti]/.shrc\f[R], with
-subscripts read from \f[C]\[ti]/.shrc.d\f[R].
-There\[cq]s a \f[C]\[ti]/.shinit\f[R] shim to act as \f[C]ENV\f[R].
+\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
@@ -227,9 +241,9 @@ array+=(\[dq]$item\[dq])
.fi
.PP
I do use some features that are only available in versions after v3.0,
-such as newer \f[C]shopt\f[R] options like \f[C]dirspell\f[R], or
-variables like \f[C]PROMPT_DIRTRIM\f[R].
-These are set only after testing \f[C]BASH_VERSINFO\f[R] 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:
@@ -251,7 +265,7 @@ remote:\[ti]/.local/src/dotfiles(master+!){1}$
.fi
.PP
The hostname is elided if not connected via SSH.
-The working directory with tilde abbreviation for \f[C]$HOME\f[R] 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:
@@ -261,165 +275,165 @@ 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[R]
-or \f[C]svn:\f[R] 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.
.IP \[bu] 2
The exit status of the last command, if non-zero.
.PP
-You can set \f[C]PROMPT_COLOR\f[R], \f[C]PROMPT_PREFIX\f[R], and
-\f[C]PROMPT_SUFFIX\f[R] too, which all do about what you\[cq]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\[cq]t
match your login shell, the prompt should display an appropriate prefix.
.PP
-This is all managed within the \f[C]prompt\f[R] function.
-There\[cq]s some mildly hacky logic on \f[C]tput\f[R] codes included
+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[C]termcap(5)\f[R] and \f[C]terminfo(5)\f[R], including *BSD systems.
+\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[R] without too much
-hackery, I put it in \f[C]sh/shrc.d\f[R] 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[R]/\f[C]popd\f[R]
+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[R] 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[R] goes to the marked directory.
+\f[V]gd()\f[R] goes to the marked directory.
.IP \[bu] 2
-\f[C]pmd()\f[R] prints the marked directory.
+\f[V]pmd()\f[R] prints the marked directory.
.IP \[bu] 2
-\f[C]xd()\f[R] 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[R] 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[R] changes into a directory or into a file\[cq]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[R] runs \f[C]gt()\f[R] on the first result from a
-\f[C]loc(1df)\f[R] 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[R] 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[R] changes to the argument\[cq]s parent directory.
+\f[V]pd()\f[R] changes to the argument\[cq]s parent directory.
.IP \[bu] 2
-\f[C]rd()\f[R] replaces the first instance of its first argument with
-its second argument in \f[C]$PWD\f[R], emulating a feature of the Zsh
-\f[C]cd\f[R] 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[R] 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[R] 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[R] 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[R] 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[R] invokes \f[C]$EDITOR\f[R], or \f[C]ed(1)\f[R] 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[R] invokes \f[C]$VISUAL\f[R], or \f[C]vi(1)\f[R] 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[R] silences startup messages from GNU \f[C]bc(1)\f[R].
+\f[V]bc()\f[R] silences startup messages from GNU \f[V]bc(1)\f[R].
.IP \[bu] 2
-\f[C]ed()\f[R] tries to get verbose error messages, a prompt, and a
-Readline environment for \f[C]ed(1)\f[R].
+\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[R] silences startup messages from \f[C]gdb(1)\f[R].
+\f[V]gdb()\f[R] silences startup messages from \f[V]gdb(1)\f[R].
.IP \[bu] 2
-\f[C]grep()\f[R] 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[R] allows searching \f[C]$HISTFILE\f[R].
+\f[V]hgrep()\f[R] allows searching \f[V]$HISTFILE\f[R].
.IP \[bu] 2
-\f[C]ls()\f[R] 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[R] runs \f[C]ls -A\f[R] if it can, or \f[C]ls -a\f[R]
+\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[R] runs \f[C]ls -Al\f[R] if it can, or \f[C]ls -al\f[R]
+\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[R] manages the contents of \f[C]PATH\f[R] conveniently.
+\f[V]path()\f[R] manages the contents of \f[V]PATH\f[R] conveniently.
.IP \[bu] 2
-\f[C]scp()\f[R] tries to detect forgotten hostnames in \f[C]scp(1)\f[R]
+\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[R] forces \f[C]-H\f[R] for \f[C]sudo(8)\f[R] calls so that
-\f[C]$HOME\f[R] is never preserved; I hate having \f[C]root\f[R]-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]tor()\f[R] is just a terse shortcut for using Torsocks to anonymize
+\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]tree()\f[R] colorizes GNU \f[C]tree(1)\f[R] output if possible
-(without having \f[C]LS_COLORS\f[R] set).
+\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[C]x()\f[R] is a one-key shortcut for \f[C]exec startx\f[R].
+\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:
.IP \[bu] 2
-\f[C]keep()\f[R] 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[R] 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[R] adds a default destination of \f[C]$HOME\f[R] to the
-\f[C]pushd\f[R] 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[R] 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[R] prints the current shell\[cq]s version information
+\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[R] 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]\[ti]/.config/bash_completion\f[R].
+\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]\[ti]/.bash_completion.d\f[R] for things I really do get tired of
+\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[R]\[cq]s more portable options
+\f[V]find(1)\f[R]\[cq]s more portable options
.IP \[bu] 2
-\f[C]gpg(1)\f[R] long options
+\f[V]gpg(1)\f[R] long options
.IP \[bu] 2
-\f[C]make(1)\f[R] targets read from a \f[C]Makefile\f[R]
+\f[V]make(1)\f[R] targets read from a \f[V]Makefile\f[R]
.IP \[bu] 2
-\f[C]man(1)\f[R] page titles
+\f[V]man(1)\f[R] page titles
.IP \[bu] 2
-\f[C]pass(1)\f[R] entries
+\f[V]pass(1)\f[R] entries
.IP \[bu] 2
-\f[C]ssh(1)\f[R] hostnames from \f[C]\[ti]/.ssh/config\f[R]
+\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
@@ -434,18 +448,18 @@ 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[R], AT&T \f[C]ksh93\f[R], and OpenBSD \f[C]pdksh\f[R].
+\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[R]).
-\f[C]zsh\f[R] 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]\[ti]/mail\f[R], with the system mail spool in
-e.g.\ \f[C]/var/mail/tejr\f[R] being where most unfiltered new mail is
+\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
@@ -462,8 +476,8 @@ setup (https://blog.sanctum.geek.nz/gnu-linux-crypto-email/) if it
sounds appealing.
.PP
You\[cq]ll need Abook installed if you want to use the
-\f[C]query_command\f[R] I have defined, and msmtp for the
-\f[C]sendmail\f[R] command.
+\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\[cq]t much
@@ -472,10 +486,10 @@ 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[R] include \f[C]tm(1df)\f[R], a shortcut
-to make \f[C]attach\f[R] 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]\[ti]/.inputrc\f[R] file binds Alt+M to run that, and Tmux in
+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
@@ -488,51 +502,51 @@ The XDG Base Directory
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[R].
+\f[V]\[aq]runtimepath\[aq]\f[R].
I use these separate directories for machine-local configuration,
-usually in \f[C]\[ti]/.config/vim\f[R], while all the files that this
-suite installs land in \f[C]\[ti]/.vim\f[R].
+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[R] file all live under \f[C]XDG_CACHE_HOME\f[R], normally
-\f[C]\[ti]/.cache/vim\f[R].
+\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[R] and \f[C]scripts.vim\f[R], so
+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[R] 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[R],
-I like to implement it as a plugin in \f[C]\[ti]/.vim/plugin\f[R] and/or
-\f[C]\[ti]/.vim/autoload\f[R], with documentation for each in
-\f[C]\[ti]/.vim/doc\f[R].
+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[R] if I don\[cq]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]\[ti]/.vim\f[R] and
-\f[C]\[ti]/.vim/after\f[R], in the \f[C]ftplugin\f[R], \f[C]indent\f[R],
-and \f[C]syntax\f[R] 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[R] scripts for
-\f[C]\[ti]/.vim/compiler\f[R] 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[R] filetypes, \f[C]<LocalLeader>c\f[R] switches
-\f[C]makeprg\f[R] to \f[C]perl -c\f[R] for checking, and
-\f[C]<LocalLeader>l\f[R] to \f[C]perlcritic\f[R] 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\[cq]t explicitly support Neovim, although most
@@ -541,111 +555,111 @@ 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[R], \f[C]awk(1)\f[R], or \f[C]sed(1)\f[R] scripts in
-\f[C]\[ti]/.local/bin\f[R].
+\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\[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[R] target:
+These scripts are installed by the \f[V]install-bin\f[R] target:
.IP \[bu] 2
Three SSH-related scripts:
.RS 2
.IP \[bu] 2
-\f[C]sls(1df)\f[R] prints hostnames read from \f[C]ssh_config(5)\f[R]
+\f[V]sls(1df)\f[R] prints hostnames read from \f[V]ssh_config(5)\f[R]
files.
-It uses \f[C]slsf(1df)\f[R] to read each one.
+It uses \f[V]slsf(1df)\f[R] to read each one.
.IP \[bu] 2
-\f[C]sra(1df)\f[R] runs a command on multiple hosts read from
-\f[C]sls(1df)\f[R] 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[R] runs a command on multiple hosts read from
-\f[C]sls(1df)\f[R] 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:
.RS 2
.IP \[bu] 2
-\f[C]hurl(1df)\f[R] extracts values of \f[C]href\f[R] attributes of
-\f[C]<a>\f[R] tags, sorts them uniquely, and writes them to
-\f[C]stdout\f[R]; 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[R] converts Markdown documents to HTML with
-\f[C]pandoc(1)\f[R] and runs the output through \f[C]hurl(1df)\f[R].
+\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[R] accepts a list of URLs on \f[C]stdin\f[R] and writes
-error messages to \f[C]stderr\f[R] 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[R].
+\f[V]curl(1)\f[R].
.IP \[bu] 2
-\f[C]urlh(1df)\f[R] prints the values for a given HTTP header from a
+\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[R] prints the MIME type from the
-\f[C]Content-Type\f[R] header as retrieved by \f[C]urlh(1df)\f[R].
+\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:
.RS 2
.IP \[bu] 2
-\f[C]rfcf(1df)\f[R] 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[R] formats ASCII RFCs.
+\f[V]rfct(1df)\f[R] formats ASCII RFCs.
.IP \[bu] 2
-\f[C]rfcr(1df)\f[R] does both, displaying in a pager if appropriate,
-like a \f[C]man(1)\f[R] 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):
.RS 2
.IP \[bu] 2
-\f[C]rndi(1df)\f[R] 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[R] attempts to get an optional random seed for
-\f[C]rndi(1df)\f[R].
+\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[R] uses \f[C]rndi(1df)\f[R] to choose a random
+\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[R] uses \f[C]rnda(1df)\f[R] to choose a random file
+\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[R] uses \f[C]rndi(1df)\f[R] to choose a random line
+\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[R] 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[R] 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[R] 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[R] 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[R] 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[R] 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[R] converts uppercase to lowercase.
+\f[V]slow(1df)\f[R] converts uppercase to lowercase.
.IP \[bu] 2
-\f[C]supp(1df)\f[R] converts lowercase to uppercase.
+\f[V]supp(1df)\f[R] converts lowercase to uppercase.
.IP \[bu] 2
-\f[C]tl(1df)\f[R] tags input lines with a prefix or suffix, basically a
-\f[C]sed(1)\f[R] 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[R] executes a command and uses \f[C]tl(1df)\f[R] 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[R] 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
@@ -653,379 +667,379 @@ formats.
Six simple aggregate scripts for numbers:
.RS 2
.IP \[bu] 2
-\f[C]max(1df)\f[R] prints the maximum.
+\f[V]max(1df)\f[R] prints the maximum.
.IP \[bu] 2
-\f[C]mean(1df)\f[R] prints the mean.
+\f[V]mean(1df)\f[R] prints the mean.
.IP \[bu] 2
-\f[C]med(1df)\f[R] prints the median.
+\f[V]med(1df)\f[R] prints the median.
.IP \[bu] 2
-\f[C]min(1df)\f[R] prints the minimum.
+\f[V]min(1df)\f[R] prints the minimum.
.IP \[bu] 2
-\f[C]mode(1df)\f[R] prints the first encountered mode.
+\f[V]mode(1df)\f[R] prints the first encountered mode.
.IP \[bu] 2
-\f[C]tot(1df)\f[R] totals the set.
+\f[V]tot(1df)\f[R] totals the set.
.RE
.IP \[bu] 2
Three quick-and-dirty HTML tools:
.RS 2
.IP \[bu] 2
-\f[C]htenc(1df)\f[R] encodes.
+\f[V]htenc(1df)\f[R] encodes.
.IP \[bu] 2
-\f[C]htdec(1df)\f[R] decodes.
+\f[V]htdec(1df)\f[R] decodes.
.IP \[bu] 2
-\f[C]htrec(1df)\f[R] wraps \f[C]a\f[R] 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[R] 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[R] 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:
.RS 2
.IP \[bu] 2
-\f[C]fgscr(1df)\f[R] finds Git repositories in a directory root and
-scrubs them with \f[C]gscr(1df)\f[R].
+\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[R] 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[R] scrubs Git repositories.
+\f[V]gscr(1df)\f[R] scrubs Git repositories.
.IP \[bu] 2
-\f[C]isgr(1df)\f[R] 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[R] 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[R] watches a directory for changes and runs
-\f[C]jfc(1df)\f[R] 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[R] converts seconds to \f[C]hh:mm:ss\f[R] or
-\f[C]mm:ss\f[R] 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[R] converts \f[C]hh:mm:ss\f[R] or \f[C]mm:ss\f[R]
+\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[R] 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[R] runs \f[C]pst(1df)\f[R] with \f[C]$EDITOR\f[R] or
-\f[C]ed(1)\f[R].
+\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[R] runs \f[C]pvi(1df)\f[R] with \f[C]$VISUAL\f[R] or
-\f[C]vi(1)\f[R].
+\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[R] creates paths to all its arguments before invoking
-\f[C]$EDITOR\f[R].
+\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[R] creates paths to all its arguments before invoking
-\f[C]$VISUAL\f[R].
+\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[R] 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[R] 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[R] 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[R] runs \f[C]bc(1)\f[R], 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[R] prints a terminal bell character.
+\f[V]bel(1df)\f[R] prints a terminal bell character.
.IP \[bu] 2
-\f[C]bl(1df)\f[R] 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[R] runs \f[C]br(1df)\f[R] 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[R] launches \f[C]$BROWSER\f[R].
+\f[V]br(1df)\f[R] launches \f[V]$BROWSER\f[R].
.IP \[bu] 2
-\f[C]ca(1df)\f[R] 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[R] 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[R] does the same as \f[C]cf(1df)\f[R], 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[R] 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[R] 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[R] 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[R] 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[R] 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[R] 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[R] 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[R] 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[R] 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]dub(1df)\f[R] 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[R] provides a means to run \f[C]ed(1)\f[R] over a set
+\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[R] edits executable script files in \f[C]EDSPATH\f[R],
-defaulting to \f[C]\[ti]/.local/bin\f[R], for personal scripting
+\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[R] works around a screen-clearing quirk of Vim\[cq]s
-\f[C]ex\f[R] 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[R] counts the number of results returned from a set of
-given \f[C]find(1)\f[R] 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[R] 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[R] prints the given files to standard output, each with
+\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[R] runs a set of \f[C]getmailrc\f[R] files; does much
-the same thing as the script \f[C]getmails\f[R] in the \f[C]getmail\f[R]
+\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[R].
+retries using \f[V]try(1df)\f[R].
.IP \[bu] 2
-\f[C]grec(1df)\f[R] is a more logically-named \f[C]grep -c\f[R].
+\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[R] is a more logically-named \f[C]grep -v\f[R].
+\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[R] searches for alphanumeric words in a similar way to
-\f[C]grep(1)\f[R].
+\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[R] provides a \f[C]keywordprg\f[R] for Vim\[cq]s Bash
-script file type that will look for \f[C]help\f[R] 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[R] wraps around a command to allow you to ignore error
+\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[R] posts its input to the \f[C]ix.io\f[R] 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[R] 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[R] is a quick-search wrapped around \f[C]find(1)\f[R].
+\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[R] is like \f[C]true(1)\f[R] or \f[C]false(1)\f[R];
+\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[R] makes given filenames in \f[C]$PATH\f[R] 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[R] is a crude preprocessor for \f[C]m4\f[R].
+\f[V]mi5(1df)\f[R] is a crude preprocessor for \f[V]m4\f[R].
.IP \[bu] 2
-\f[C]mim(1df)\f[R] 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[R] 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[R] 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[R] 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[R] shows the system MOTD.
+\f[V]motd(1df)\f[R] shows the system MOTD.
.IP \[bu] 2
-\f[C]msc(1df)\f[R] 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[R] 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[R] 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[R] 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[R] implements a \f[C]netcat(1)\f[R]-like wrapper for
-\f[C]openssl(1)\f[R]\[cq]s \f[C]s_client\f[R] 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[R] prints concatenated standard input; \f[C]cat(1)\f[R] 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[R] 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[R] wraps around
+\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[C]equalprg\f[R] in Vim.
+source code filter suitable for use as an \f[V]equalprg\f[R] in Vim.
.IP \[bu] 2
-\f[C]pp(1df)\f[R] prints the full path of each argument using
-\f[C]$PWD\f[R].
+\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[R] runs \f[C]pp(1df)\f[R] and includes a leading
-\f[C]$HOSTNAME:\f[R].
+\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[R] 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[R] 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[R] generates just one decent password with
-\f[C]pwgen(1)\f[R].
+\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[R] disables \f[C]stty echo\f[R] 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[R] 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[R] is a very crude interactive \f[C]grep(1)\f[R] 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[R] 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[R] 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[R] 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[R] strips extensions from filenames.
+\f[V]stex(1df)\f[R] strips extensions from filenames.
.IP \[bu] 2
-\f[C]sue(8df)\f[R] execs \f[C]sudoedit(8)\f[R] 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[R] \f[C]sudo(8)\f[R] privileges.
+have \f[V]root\f[R] \f[V]sudo(8)\f[R] privileges.
.IP \[bu] 2
-\f[C]swr(1df)\f[R] allows you to run commands locally specifying remote
-files in \f[C]scp(1)\f[R]\[cq]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[R] manages a to-do file for you with \f[C]$EDITOR\f[R]
-and \f[C]git(1)\f[R]; I used to use Taskwarrior, but found it too
+\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[R] runs \f[C]tmux(1)\f[R] with
-\f[C]attach-session -d\f[R] if a session exists, and
-\f[C]new-session\f[R] if it doesn\[cq]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[R] 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[R] 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[R]
+Good for tolerating blips or temporary failures in \f[V]cron(8)\f[R]
scripts.
.IP \[bu] 2
-\f[C]umake(1df)\f[R] iterates upwards through the directory tree from
-\f[C]$PWD\f[R] until it finds a Makefile for which to run
-\f[C]make(1)\f[R] 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[R] gets the current UNIX timestamp in an unorthodox way
+\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[R] runs \f[C]test(1)\f[R] but fails with explicit
-output via \f[C]vex(1df)\f[R].
+\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[R] runs a command and prints \f[C]true\f[R] or
-\f[C]false\f[R] explicitly to \f[C]stdout\f[R] 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[R] tries to run a POSIX-compliant \f[C]vi(1)\f[R].
+\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[R] 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[R] gets the values of specific resources out of
-\f[C]xrdb -query\f[R] output.
+\f[V]xrq(1df)\f[R] gets the values of specific resources out of
+\f[V]xrdb -query\f[R] output.
.PP
-There\[cq]s some silly stuff in \f[C]install-games\f[R]:
+There\[cq]s some silly stuff in \f[V]install-games\f[R]:
.IP \[bu] 2
-\f[C]aaf(6df)\f[R] 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[R] 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[R] converts English letters to their full width CJK
+\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[R] 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[R] 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[R] shows a picture to accompany \f[C]pks(6df)\f[R]
+\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[R] 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[R] 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[R] outputs
+\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[R] 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[R] 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[R] 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[R] 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[R] and \f[C]install-games\f[R] 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]\[ti]/.local/share/man\f[R] to your \f[C]\[ti]/.manpath\f[R] or
-\f[C]/etc/manpath\f[R] 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[R] or \f[C]make check-sh\f[R], or
-\f[C]make check\f[R] for everything including the scripts in
-\f[C]bin\f[R] and \f[C]games\f[R].
+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[R] 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[R]
+\f[V]lint-bash\f[R]
.IP \[bu] 2
-\f[C]lint-bin\f[R]
+\f[V]lint-bin\f[R]
.IP \[bu] 2
-\f[C]lint-games\f[R]
+\f[V]lint-games\f[R]
.IP \[bu] 2
-\f[C]lint-ksh\f[R]
+\f[V]lint-ksh\f[R]
.IP \[bu] 2
-\f[C]lint-sh\f[R]
+\f[V]lint-sh\f[R]
.IP \[bu] 2
-\f[C]lint-x\f[R]
+\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[R]
+\f[V]lint-vim\f[R]
.RE
.SS Future development
.PP
@@ -1035,7 +1049,7 @@ See IDEAS.md.
See ISSUES.md.
.SS License
.PP
-Public domain; see the included \f[C]UNLICENSE\f[R] file.
+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