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.7df713
1 files changed, 350 insertions, 363 deletions
diff --git a/man/man7/dotfiles.7df b/man/man7/dotfiles.7df
index 16366c51..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
@@ -158,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,9 +184,6 @@ Vim (https://www.vim.org/)\[em]Vi IMproved, a text editor
.IP \[bu] 2
X11 (https://www.x.org/wiki/)\[em]Windowing system with network
transparency for Unix
-.IP \[bu] 2
-yt-dlp (https://github.com/yt-dlp/yt-dlp)\[em]Download manager for video
-hosting websites
.PP
There is also some slightly customized support for multi-version
environment management for three major scripting languages:
@@ -190,27 +198,26 @@ 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\[cq]s.
-There are a fair few resources defined for rxvt-unicode.
.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
@@ -234,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:
@@ -258,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:
@@ -268,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
@@ -441,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
@@ -469,19 +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.
-.SS rxvt-unicode
-.PP
-I\[cq]ve butchered the URxvt Perl extensions
-\f[C]selection-to-clipboard\f[R] and \f[C]selection\f[R] into a single
-\f[C]select\f[R] extension in \f[C]\[ti]/.urxvt/ext\f[R], which is the
-only extension I define in \f[C]\[ti]/.Xresources\f[R].
-.PP
-The included \f[C].Xresources\f[R] file assumes that \f[C]urxvt\f[R] can
-use 256 colors and Perl extensions.
-If you\[cq]re missing functionality, try changing
-\f[C]perl-ext-common\f[R] to \f[C]default\f[R].
+\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
@@ -490,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
@@ -506,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
@@ -559,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
@@ -671,388 +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]dmenu_pass(1df)\f[R] copies a pass(1) entry selected by
-\f[C]dmenu(1)\f[R] to the X CLIPBOARD.
-.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]
-.IP \[bu] 2
-\f[C]lint-x\f[R]
-.RE
-.IP \[bu] 2
-Perl::Critic:
-.RS 2
+\f[V]lint-sh\f[R]
.IP \[bu] 2
-\f[C]lint-urxvt\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
@@ -1062,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