From 984e9909000174bf59a66f3305ae2d62e855b97b Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sat, 17 Jun 2023 21:46:56 +1200 Subject: Update dotfiles(7) manual page --- man/man7/dotfiles.7df | 686 +++++++++++++++++++++++++------------------------- 1 file changed, 350 insertions(+), 336 deletions(-) (limited to 'man/man7/dotfiles.7df') 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]c\f[R] switches -\f[C]makeprg\f[R] to \f[C]perl -c\f[R] for checking, and -\f[C]l\f[R] to \f[C]perlcritic\f[R] for linting. +\f[V]perl\f[R] filetypes, \f[V]c\f[R] switches +\f[V]makeprg\f[R] to \f[V]perl -c\f[R] for checking, and +\f[V]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]\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]\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 -- cgit v1.2.3