aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2020-11-13 16:29:50 +1300
committerTom Ryder <tom@sanctum.geek.nz>2020-11-13 16:29:50 +1300
commit6fffdcf6a46f8122816d993a61fc1471276a200c (patch)
treef0b953c93a5f9b55501007defc5e6e0acb7ed3be /README.md
parentMerge branch 'release/v10.16.0' (diff)
parentBump VERSION (diff)
downloaddotfiles-6fffdcf6a46f8122816d993a61fc1471276a200c.tar.gz
dotfiles-6fffdcf6a46f8122816d993a61fc1471276a200c.zip
Merge branch 'release/v10.17.0'v10.17.0
* release/v10.17.0: Use hyphens instead of asterisks for lists
Diffstat (limited to 'README.md')
-rw-r--r--README.md524
1 files changed, 262 insertions, 262 deletions
diff --git a/README.md b/README.md
index 1a25d102..6b8a08f7 100644
--- a/README.md
+++ b/README.md
@@ -36,16 +36,16 @@ a temporary directory first, so you can explore:
The default `install` target will install these targets and all their
dependencies:
-* `install-bin`
-* `install-curl`
-* `install-ex`
-* `install-git`
-* `install-gnupg`
-* `install-less`
-* `install-login-shell`
-* `install-man`
-* `install-readline`
-* `install-vim`
+- `install-bin`
+- `install-curl`
+- `install-ex`
+- `install-git`
+- `install-gnupg`
+- `install-less`
+- `install-login-shell`
+- `install-man`
+- `install-readline`
+- `install-vim`
The `install-login-shell` target looks at your `SHELL` environment variable,
and tries to figure out which shell's configuration files to install, falling
@@ -73,54 +73,54 @@ Tools
Configuration is included for:
-* Bourne-style POSIX shells, sharing a `.profile`, an `ENV` file, and some
+- Bourne-style POSIX shells, sharing a `.profile`, an `ENV` file, and some
helper functions:
- * [GNU Bash](https://www.gnu.org/software/bash/) (v3.0 or newer)
- * [Korn shell](http://www.kornshell.com/) (`ksh93`, `pdksh`, `mksh`)
- * [Z shell](https://www.zsh.org/)
-* [Abook](http://abook.sourceforge.net/)---curses address book program
-* [cURL](https://curl.haxx.se/)---Command-line tool for transferring data with
+ - [GNU Bash](https://www.gnu.org/software/bash/) (v3.0 or newer)
+ - [Korn shell](http://www.kornshell.com/) (`ksh93`, `pdksh`, `mksh`)
+ - [Z shell](https://www.zsh.org/)
+- [Abook](http://abook.sourceforge.net/)---curses address book program
+- [cURL](https://curl.haxx.se/)---Command-line tool for transferring data with
URL syntax
-* [Dillo](https://www.dillo.org/)---A lightweight web browser
-* [Dunst](https://dunst-project.org/)---A lightweight X11 notification daemon
+- [Dillo](https://www.dillo.org/)---A lightweight web browser
+- [Dunst](https://dunst-project.org/)---A lightweight X11 notification daemon
that works with `libnotify`
-* `finger(1)`---User information lookup program
-* [Git](https://git-scm.com/)---Distributed version control system
-* [GNU Emacs](https://www.gnu.org/software/emacs/)---Extensible text editor
-* [GnuPG](https://www.gnupg.org/)---GNU Privacy Guard, for private
+- `finger(1)`---User information lookup program
+- [Git](https://git-scm.com/)---Distributed version control system
+- [GNU Emacs](https://www.gnu.org/software/emacs/)---Extensible text editor
+- [GnuPG](https://www.gnupg.org/)---GNU Privacy Guard, for private
communication and file encryption
-* [GTK+](https://www.gtk.org/)---GIMP Toolkit, for graphical user interface
+- [GTK+](https://www.gtk.org/)---GIMP Toolkit, for graphical user interface
elements
-* [i3](https://i3wm.org/)---Tiling window manager
-* [less](https://www.gnu.org/software/less/)---Terminal pager
-* [mpv](https://mpv.io/)---Media player
-* [Mutt](http://www.mutt.org/)---Terminal mail user agent
-* [`mysql(1)`](https://linux.die.net/man/1/mysql)---Command-line MySQL client
-* [Ncmpcpp](https://rybczak.net/ncmpcpp/)---ncurses music player client
-* [Newsboat](https://newsboat.org/)---Terminal RSS/Atom feed reader
-* [`psql(1)`](https://linux.die.net/man/1/psql)---Command-line PostgreSQL
+- [i3](https://i3wm.org/)---Tiling window manager
+- [less](https://www.gnu.org/software/less/)---Terminal pager
+- [mpv](https://mpv.io/)---Media player
+- [Mutt](http://www.mutt.org/)---Terminal mail user agent
+- [`mysql(1)`](https://linux.die.net/man/1/mysql)---Command-line MySQL client
+- [Ncmpcpp](https://rybczak.net/ncmpcpp/)---ncurses music player client
+- [Newsboat](https://newsboat.org/)---Terminal RSS/Atom feed reader
+- [`psql(1)`](https://linux.die.net/man/1/psql)---Command-line PostgreSQL
client
-* [Perl::Critic](http://perlcritic.com/)---static source code analysis engine
+- [Perl::Critic](http://perlcritic.com/)---static source code analysis engine
for Perl
-* [Perl::Tidy](http://perltidy.sourceforge.net/)---reformats Perl source code
-* [Readline](https://tiswww.case.edu/php/chet/readline/rltop.html)---GNU
+- [Perl::Tidy](http://perltidy.sourceforge.net/)---reformats Perl source code
+- [Readline](https://tiswww.case.edu/php/chet/readline/rltop.html)---GNU
library for user input used by Bash, MySQL, and others
-* [rxvt-unicode](http://software.schmorp.de/pkg/rxvt-unicode.html)---Fork of
+- [rxvt-unicode](http://software.schmorp.de/pkg/rxvt-unicode.html)---Fork of
the rxvt terminal emulator with Unicode support
-* [Subversion](https://subversion.apache.org/)---Apache Subversion, a version
+- [Subversion](https://subversion.apache.org/)---Apache Subversion, a version
control system
-* [tidy](http://www.html-tidy.org/)---HTML/XHTML linter and tidier
-* [tmux](https://tmux.github.io/)---Terminal multiplexer similar to GNU Screen
-* [Vim](https://www.vim.org/)---Vi IMproved, a text editor
-* [X11](https://www.x.org/wiki/)---Windowing system with network transparency
+- [tidy](http://www.html-tidy.org/)---HTML/XHTML linter and tidier
+- [tmux](https://tmux.github.io/)---Terminal multiplexer similar to GNU Screen
+- [Vim](https://www.vim.org/)---Vi IMproved, a text editor
+- [X11](https://www.x.org/wiki/)---Windowing system with network transparency
for Unix
There is also some slightly customized support for multi-version environment
management for three major scripting languages:
-* [plenv](https://github.com/tokuhirom/plenv)---Perl
-* [pyenv](https://github.com/pyenv/pyenv)---Python
-* [rbenv](https://github.com/rbenv/rbenv)---Ruby
+- [plenv](https://github.com/tokuhirom/plenv)---Perl
+- [pyenv](https://github.com/pyenv/pyenv)---Python
+- [rbenv](https://github.com/rbenv/rbenv)---Ruby
The configurations for shells, Mutt, tmux, and Vim are the most likely to be of
interest. The i3 configuration is limited mainly to changing window switching
@@ -183,14 +183,14 @@ The hostname is elided if not connected via SSH. The working directory with
tilde abbreviation for `$HOME` is always shown. The rest of the prompt expands
based on context to include these elements, in this order:
-* Whether in a Git repository if applicable,
+- Whether in a Git repository if applicable,
-* The current version control branch, tag, or commit/revision 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 `git:` or
`svn:` prefix is added appropriately for disambiguation.
-* The number of running background jobs, if non-zero.
-* The exit status of the last command, if non-zero.
+- The number of running background jobs, if non-zero.
+- The exit status of the last command, if non-zero.
You can set `PROMPT_COLOR`, `PROMPT_PREFIX`, and `PROMPT_SUFFIX` too, which all
do about what you'd expect.
@@ -209,60 +209,60 @@ terminals.
If a function can be written in POSIX `sh` without too much hackery, I put it
in `sh/shrc.d` to be loaded by any POSIX interactive shell. Those include:
-* Four functions for using a "marked" directory, which I find a more manageable
+- Four functions for using a "marked" directory, which I find a more manageable
concept than the `pushd`/`popd` directory stack:
- * `md()` marks a given (or the current) directory.
- * `gd()` goes to the marked directory.
- * `pmd()` prints the marked directory.
- * `xd()` swaps the current and marked directories.
-* Ten other directory management and navigation functions:
- * `bd()` changes into a named ancestor of the current directory.
- * `gt()` changes into a directory or into a file's directory.
- * `lgt()` runs `gt()` on the first result from a `loc(1df)` search.
- * `mkcd()` creates a directory and changes into it.
- * `pd()` changes to the argument's parent directory.
- * `rd()` replaces the first instance of its first argument with its second
+ - `md()` marks a given (or the current) directory.
+ - `gd()` goes to the marked directory.
+ - `pmd()` prints the marked directory.
+ - `xd()` swaps the current and marked directories.
+- Ten other directory management and navigation functions:
+ - `bd()` changes into a named ancestor of the current directory.
+ - `gt()` changes into a directory or into a file's directory.
+ - `lgt()` runs `gt()` on the first result from a `loc(1df)` search.
+ - `mkcd()` creates a directory and changes into it.
+ - `pd()` changes to the argument's parent directory.
+ - `rd()` replaces the first instance of its first argument with its second
argument in `$PWD`, emulating a feature of the Zsh `cd` builtin that I
like.
- * `scr()` creates a temporary directory and changes into it.
- * `sd()` changes into a sibling of the current directory.
- * `ud()` changes into an indexed ancestor of a directory.
- * `vr()` tries to change to the root directory of a source control
+ - `scr()` creates a temporary directory and changes into it.
+ - `sd()` changes into a sibling of the current directory.
+ - `ud()` changes into an indexed ancestor of a directory.
+ - `vr()` tries to change to the root directory of a source control
repository.
-* Two editor wrapper functions:
- * `e()` invokes `$EDITOR`, or `ed(1)` if not set.
- * `v()` invokes `$VISUAL`, or `vi(1)` if not set.
-* `bc()` silences startup messages from GNU `bc(1)`.
-* `ed()` tries to get verbose error messages, a prompt, and a Readline
+- Two editor wrapper functions:
+ - `e()` invokes `$EDITOR`, or `ed(1)` if not set.
+ - `v()` invokes `$VISUAL`, or `vi(1)` if not set.
+- `bc()` silences startup messages from GNU `bc(1)`.
+- `ed()` tries to get verbose error messages, a prompt, and a Readline
environment for `ed(1)`.
-* `gdb()` silences startup messages from `gdb(1)`.
-* `grep()` tries to apply color and other options good for interactive use if
+- `gdb()` silences startup messages from `gdb(1)`.
+- `grep()` tries to apply color and other options good for interactive use if
available.
-* `hgrep()` allows searching `$HISTFILE`.
-* `keychain()` keeps `$GPG_TTY` up to date if a GnuPG agent is available.
-* `ls()` tries to apply color and other options good for interactive use if
+- `hgrep()` allows searching `$HISTFILE`.
+- `keychain()` keeps `$GPG_TTY` up to date if a GnuPG agent is available.
+- `ls()` tries to apply color and other options good for interactive use if
available.
- * `la()` runs `ls -A` if it can, or `ls -a` otherwise.
- * `ll()` runs `ls -Al` if it can, or `ls -al` otherwise.
-* `path()` manages the contents of `PATH` conveniently.
-* `scp()` tries to detect forgotten hostnames in `scp(1)` command calls.
-* `sudo()` forces `-H` for `sudo(8)` calls so that `$HOME` is never preserved;
+ - `la()` runs `ls -A` if it can, or `ls -a` otherwise.
+ - `ll()` runs `ls -Al` if it can, or `ls -al` otherwise.
+- `path()` manages the contents of `PATH` conveniently.
+- `scp()` tries to detect forgotten hostnames in `scp(1)` command calls.
+- `sudo()` forces `-H` for `sudo(8)` calls so that `$HOME` is never preserved;
I hate having `root`-owned files in my home directory.
-* `tree()` colorizes GNU `tree(1)` output if possible (without having
+- `tree()` colorizes GNU `tree(1)` output if possible (without having
`LS_COLORS` set).
-* `x()` is a one-key shortcut for `exec startx`.
+- `x()` is a one-key shortcut for `exec startx`.
There are a few other little tricks defined for other shells providing
non-POSIX features, as compatibility allows:
-* `keep()` stores ad-hoc shell functions and variables (Bash, Korn Shell 93, Z
+- `keep()` stores ad-hoc shell functions and variables (Bash, Korn Shell 93, Z
shell).
-* `prompt()` sets up my interactive prompt (Bash, Korn Shell, Z shell).
-* `pushd()` adds a default destination of `$HOME` to the `pushd` builtin
+- `prompt()` sets up my interactive prompt (Bash, Korn Shell, Z shell).
+- `pushd()` adds a default destination of `$HOME` to the `pushd` builtin
(Bash).
-* `vared()` allows interactively editing a variable with Readline, emulating a
+- `vared()` allows interactively editing a variable with Readline, emulating a
Z shell function I like by the same name (Bash).
-* `ver()` prints the current shell's version information (Bash, Korn Shell, Z
+- `ver()` prints the current shell's version information (Bash, Korn Shell, Z
shell).
#### Completion
@@ -275,13 +275,13 @@ startup without a lot of junk functions in my Bash namespace.
I do make some exceptions with completions defined in files in
`~/.bash_completion.d` for things I really do get tired of typing repeatedly:
-* Bash builtins: commands, help topics, shell options, variables, etc.
-* `find(1)`'s more portable options
-* `gpg(1)` long options
-* `make(1)` targets read from a `Makefile`
-* `man(1)` page titles
-* `pass(1)` entries
-* `ssh(1)` hostnames from `~/.ssh/config`
+- Bash builtins: commands, help topics, shell options, variables, etc.
+- `find(1)`'s more portable options
+- `gpg(1)` long options
+- `make(1)` targets read from a `Makefile`
+- `man(1)` page titles
+- `pass(1)` entries
+- `ssh(1)` hostnames from `~/.ssh/config`
For commands that pretty much always want to operate on text, such as text file
or stream editors, I exclude special file types and extensions I know are
@@ -413,220 +413,220 @@ interactive shells.
These scripts are installed by the `install-bin` target:
-* Three SSH-related scripts:
- * `sls(1df)` prints hostnames read from a `ssh_config(5)` file. It uses
+- Three SSH-related scripts:
+ - `sls(1df)` prints hostnames read from a `ssh_config(5)` file. It uses
`slsf(1df)` to read each one.
- * `sra(1df)` runs a command on multiple hosts read from `sls(1df)` and
+ - `sra(1df)` runs a command on multiple hosts read from `sls(1df)` and
prints output.
- * `sta(1df)` runs a command on multiple hosts read from `sls(1df)` and
+ - `sta(1df)` runs a command on multiple hosts read from `sls(1df)` and
prints the hostname if the command returns zero.
-* Five URL-related shortcut scripts:
- * `hurl(1df)` extracts values of `href` attributes of `<a>` tags, sorts
+- Five URL-related shortcut scripts:
+ - `hurl(1df)` extracts values of `href` attributes of `<a>` tags, sorts
them uniquely, and writes them to `stdout`; it requires
[pup](https://github.com/ericchiang/pup).
- * `murl(1df)` converts Markdown documents to HTML with `pandoc(1)` and runs
+ - `murl(1df)` converts Markdown documents to HTML with `pandoc(1)` and runs
the output through `hurl(1df)`.
- * `urlc(1df)` accepts a list of URLs on `stdin` and writes error messages
+ - `urlc(1df)` accepts a list of URLs on `stdin` and writes error messages
to `stderr` if any of the URLs are broken, redirecting, or are insecure
and have working secure versions; requires `curl(1)`.
- * `urlh(1df)` prints the values for a given HTTP header from a HEAD
+ - `urlh(1df)` prints the values for a given HTTP header from a HEAD
response.
- * `urlmt(1df)` prints the MIME type from the `Content-Type` header as
+ - `urlmt(1df)` prints the MIME type from the `Content-Type` header as
retrieved by `urlh(1df)`.
-* Three RFC-related shortcut scripts:
- * `rfcf(1df)` fetches ASCII RFCs from the IETF website.
- * `rfct(1df)` formats ASCII RFCs.
- * `rfcr(1df)` does both, displaying in a pager if appropriate, like a
+- Three RFC-related shortcut scripts:
+ - `rfcf(1df)` fetches ASCII RFCs from the IETF website.
+ - `rfct(1df)` formats ASCII RFCs.
+ - `rfcr(1df)` does both, displaying in a pager if appropriate, like a
`man(1)` reader for RFCs.
-* Five toy random-number scripts (not for sensitive/dead-serious use):
- * `rndi(1df)` gets a random integer within two bounds.
- * `rnds(1df)` attempts to get an optional random seed for `rndi(1df)`.
- * `rnda(1df)` uses `rndi(1df)` to choose a random argument.
- * `rndf(1df)` uses `rnda(1df)` to choose a random file from a directory.
- * `rndl(1df)` uses `rndi(1df)` to choose a random line from files.
-* Four file formatting scripts:
- * `d2u(1df)` converts DOS line endings in files to UNIX ones.
- * `u2d(1df)` converts UNIX line endings in files to DOS ones.
- * `stbl(1df)` strips a trailing blank line from the files in its arguments.
- * `stws(1df)` strips trailing spaces from the ends of lines of the files in
+- Five toy random-number scripts (not for sensitive/dead-serious use):
+ - `rndi(1df)` gets a random integer within two bounds.
+ - `rnds(1df)` attempts to get an optional random seed for `rndi(1df)`.
+ - `rnda(1df)` uses `rndi(1df)` to choose a random argument.
+ - `rndf(1df)` uses `rnda(1df)` to choose a random file from a directory.
+ - `rndl(1df)` uses `rndi(1df)` to choose a random line from files.
+- Four file formatting scripts:
+ - `d2u(1df)` converts DOS line endings in files to UNIX ones.
+ - `u2d(1df)` converts UNIX line endings in files to DOS ones.
+ - `stbl(1df)` strips a trailing blank line from the files in its arguments.
+ - `stws(1df)` strips trailing spaces from the ends of lines of the files in
its arguments.
-* Seven stream formatting scripts:
- * `sd2u(1df)` converts DOS line endings in streams to UNIX ones.
- * `su2d(1df)` converts UNIX line endings in streams to DOS ones.
- * `slow(1df)` converts uppercase to lowercase.
- * `supp(1df)` converts lowercase to uppercase.
- * `tl(1df)` tags input lines with a prefix or suffix, basically a `sed(1)`
+- Seven stream formatting scripts:
+ - `sd2u(1df)` converts DOS line endings in streams to UNIX ones.
+ - `su2d(1df)` converts UNIX line endings in streams to DOS ones.
+ - `slow(1df)` converts uppercase to lowercase.
+ - `supp(1df)` converts lowercase to uppercase.
+ - `tl(1df)` tags input lines with a prefix or suffix, basically a `sed(1)`
shortcut.
- * `tlcs(1df)` executes a command and uses `tl(1df)` to tag standard output
+ - `tlcs(1df)` executes a command and uses `tl(1df)` to tag standard output
and standard error lines, and color them if you want.
- * `unf(1df)` joins lines with leading spaces to the previous line.
+ - `unf(1df)` joins lines with leading spaces to the previous line.
Intended for unfolding HTTP headers, but it should work for most RFC 822
formats.
-* Six simple aggregate scripts for numbers:
- * `max(1df)` prints the maximum.
- * `mean(1df)` prints the mean.
- * `med(1df)` prints the median.
- * `min(1df)` prints the minimum.
- * `mode(1df)` prints the first encountered mode.
- * `tot(1df)` totals the set.
-* Three quick-and-dirty HTML tools:
- * `htenc(1df)` encodes.
- * `htdec(1df)` decodes.
- * `htrec(1df)` wraps `a` tags around URLs.
-* Two internet message quoting tools:
- * `quo(1df)` indents with quoting right angle-brackets.
- * `wro(1df)` adds a quote attribution header to its input.
-* Six Git-related tools:
- * `fgscr(1df)` finds Git repositories in a directory root and scrubs them
+- Six simple aggregate scripts for numbers:
+ - `max(1df)` prints the maximum.
+ - `mean(1df)` prints the mean.
+ - `med(1df)` prints the median.
+ - `min(1df)` prints the minimum.
+ - `mode(1df)` prints the first encountered mode.
+ - `tot(1df)` totals the set.
+- Three quick-and-dirty HTML tools:
+ - `htenc(1df)` encodes.
+ - `htdec(1df)` decodes.
+ - `htrec(1df)` wraps `a` tags around URLs.
+- Two internet message quoting tools:
+ - `quo(1df)` indents with quoting right angle-brackets.
+ - `wro(1df)` adds a quote attribution header to its input.
+- Six Git-related tools:
+ - `fgscr(1df)` finds Git repositories in a directory root and scrubs them
with `gscr(1df)`.
- * `grc(1df)` quietly tests whether the given directory appears to be a Git
+ - `grc(1df)` quietly tests whether the given directory appears to be a Git
repository with pending changes.
- * `gscr(1df)` scrubs Git repositories.
- * `isgr(1df)` quietly tests whether the given directory appears to be a Git
+ - `gscr(1df)` scrubs Git repositories.
+ - `isgr(1df)` quietly tests whether the given directory appears to be a Git
repository.
- * `jfc(1df)` adds and commits lazily to a Git repository.
- * `jfcd(1df)` watches a directory for changes and runs `jfc(1df)` if it
+ - `jfc(1df)` adds and commits lazily to a Git repository.
+ - `jfcd(1df)` watches a directory for changes and runs `jfc(1df)` if it
sees any.
-* Two time duration functions:
- * `hms(1df)` converts seconds to `hh:mm:ss` or `mm:ss` timestamps.
- * `sec(1df)` converts `hh:mm:ss` or `mm:ss` timestamps to seconds.
-* Three pipe interaction tools:
- * `pst(1df)` runs an interactive program on data before passing it along a
+- Two time duration functions:
+ - `hms(1df)` converts seconds to `hh:mm:ss` or `mm:ss` timestamps.
+ - `sec(1df)` converts `hh:mm:ss` or `mm:ss` timestamps to seconds.
+- Three pipe interaction tools:
+ - `pst(1df)` runs an interactive program on data before passing it along a
pipeline.
- * `ped(1df)` runs `pst(1df)` with `$EDITOR` or `ed(1)`.
- * `pvi(1df)` runs `pvi(1df)` with `$VISUAL` or `vi(1)`.
-* Two editor wrapper tools:
- * `mked(1df)` creates paths to all its arguments before invoking `$EDITOR`.
- * `mkvi(1df)` creates paths to all its arguments before invoking `$VISUAL`.
-* `ap(1df)` reads arguments for a given command from the standard input,
+ - `ped(1df)` runs `pst(1df)` with `$EDITOR` or `ed(1)`.
+ - `pvi(1df)` runs `pvi(1df)` with `$VISUAL` or `vi(1)`.
+- Two editor wrapper tools:
+ - `mked(1df)` creates paths to all its arguments before invoking `$EDITOR`.
+ - `mkvi(1df)` creates paths to all its arguments before invoking `$VISUAL`.
+- `ap(1df)` reads arguments for a given command from the standard input,
prompting if appropriate.
-* `apf(1df)` inserts arguments to a command with ones read from a file,
+- `apf(1df)` inserts arguments to a command with ones read from a file,
intended as a framework for shell wrappers or functions.
-* `ax(1df)` evaluates an AWK expression given on the command line; this is
+- `ax(1df)` 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.
-* `bcq(1df)` runs `bc(1)`, quieting it down if need be.
-* `bel(1df)` prints a terminal bell character.
-* `bl(1df)` generates a given number of blank lines.
-* `bp(1df)` runs `br(1df)` after prompting for an URL.
-* `br(1df)` launches `$BROWSER`.
-* `ca(1df)` prints a count of its given arguments.
-* `cf(1df)` prints a count of entries in a given directory.
-* `cfr(1df)` does the same as `cf(1df)`, but recurses into subdirectories as
+- `bcq(1df)` runs `bc(1)`, quieting it down if need be.
+- `bel(1df)` prints a terminal bell character.
+- `bl(1df)` generates a given number of blank lines.
+- `bp(1df)` runs `br(1df)` after prompting for an URL.
+- `br(1df)` launches `$BROWSER`.
+- `ca(1df)` prints a count of its given arguments.
+- `cf(1df)` prints a count of entries in a given directory.
+- `cfr(1df)` does the same as `cf(1df)`, but recurses into subdirectories as
well.
-* `chc(1df)` caches the output of a command.
-* `chn(1df)` runs a filter over its input a given number of times.
-* `clog(1df)` is a tiny timestamped log system.
-* `clrd(1df)` sets up a per-line file read, clearing the screen first.
-* `clwr(1df)` sets up a per-line file write, clearing the screen before each
+- `chc(1df)` caches the output of a command.
+- `chn(1df)` runs a filter over its input a given number of times.
+- `clog(1df)` is a tiny timestamped log system.
+- `clrd(1df)` sets up a per-line file read, clearing the screen first.
+- `clwr(1df)` sets up a per-line file write, clearing the screen before each
line.
-* `csmw(1df)` prints an English list of monospace-quoted words read from the
+- `csmw(1df)` prints an English list of monospace-quoted words read from the
input.
-* `dam(1df)` buffers all its input before emitting it as output.
-* `ddup(1df)` removes duplicate lines from unsorted input.
-* `defang(1df)` prevents dangerous URLs from being made into clickable links.
-* `dmp(1df)` copies a pass(1) entry selected by `dmenu(1)` to the X CLIPBOARD.
-* `dub(1df)` lists the biggest entries in a directory.
-* `edda(1df)` provides a means to run `ed(1)` over a set of files preserving
+- `dam(1df)` buffers all its input before emitting it as output.
+- `ddup(1df)` removes duplicate lines from unsorted input.
+- `defang(1df)` prevents dangerous URLs from being made into clickable links.
+- `dmp(1df)` copies a pass(1) entry selected by `dmenu(1)` to the X CLIPBOARD.
+- `dub(1df)` lists the biggest entries in a directory.
+- `edda(1df)` provides a means to run `ed(1)` over a set of files preserving
any options, mostly useful for scripts.
-* `eds(1df)` edits executable script files in `EDSPATH`, defaulting to
+- `eds(1df)` edits executable script files in `EDSPATH`, defaulting to
`~/.local/bin`, for personal scripting snippets.
-* `exm(1df)` works around a screen-clearing quirk of Vim's `ex` mode.
-* `finc(1df)` counts the number of results returned from a set of given
+- `exm(1df)` works around a screen-clearing quirk of Vim's `ex` mode.
+- `finc(1df)` counts the number of results returned from a set of given
`find(1)` conditions.
-* `fnl(1df)` runs a command and saves its output and error into temporary
+- `fnl(1df)` runs a command and saves its output and error into temporary
files, printing their paths and line counts.
-* `fnp(1df)` prints the given files to standard output, each with a plain text
+- `fnp(1df)` prints the given files to standard output, each with a plain text
heading with the filename in it.
-* `gms(1df)` runs a set of `getmailrc` files; does much the same thing as the
+- `gms(1df)` runs a set of `getmailrc` files; does much the same thing as the
script `getmails` in the `getmail` suite, but runs the requests in parallel
and does up to three silent retries using `try(1df)`.
-* `grec(1df)` is a more logically-named `grep -c`.
-* `gred(1df)` is a more logically-named `grep -v`.
-* `gwp(1df)` searches for alphanumeric words in a similar way to `grep(1)`.
-* `han(1df)` provides a `keywordprg` for Vim's Bash script file type that will
+- `grec(1df)` is a more logically-named `grep -c`.
+- `gred(1df)` is a more logically-named `grep -v`.
+- `gwp(1df)` searches for alphanumeric words in a similar way to `grep(1)`.
+- `han(1df)` provides a `keywordprg` for Vim's Bash script file type that will
look for `help` topics. You could use it from the shell too.
-* `igex(1df)` wraps around a command to allow you to ignore error conditions
+- `igex(1df)` wraps around a command to allow you to ignore error conditions
that don't actually worry you, exiting with 0 anyway.
-* `ix(1df)` posts its input to the `ix.io` pastebin.
-* `jfp(1df)` prints its input, excluding any shebang on the first line only.
-* `loc(1df)` is a quick-search wrapped around `find(1)`.
-* `maybe(1df)` is like `true(1)` or `false(1)`; given a probability of success,
+- `ix(1df)` posts its input to the `ix.io` pastebin.
+- `jfp(1df)` prints its input, excluding any shebang on the first line only.
+- `loc(1df)` is a quick-search wrapped around `find(1)`.
+- `maybe(1df)` is like `true(1)` or `false(1)`; given a probability of success,
it exits with success or failure. Good for quick tests.
-* `mex(1df)` makes given filenames in `$PATH` executable.
-* `mi5(1df)` is a crude preprocessor for `m4`.
-* `mim(1df)` starts an interactive Mutt message with its input.
-* `mftl(1df)` finds usable-looking targets in Makefiles.
-* `mkcp(1df)` creates a directory and copies preceding arguments into it.
-* `mkmv(1df)` creates a directory and moves preceding arguments into it.
-* `motd(1df)` shows the system MOTD.
-* `msc(1df)` crudely counts messages in an mbox.
-* `mw(1df)` prints alphabetic space-delimited words from the input one per
+- `mex(1df)` makes given filenames in `$PATH` executable.
+- `mi5(1df)` is a crude preprocessor for `m4`.
+- `mim(1df)` starts an interactive Mutt message with its input.
+- `mftl(1df)` finds usable-looking targets in Makefiles.
+- `mkcp(1df)` creates a directory and copies preceding arguments into it.
+- `mkmv(1df)` creates a directory and moves preceding arguments into it.
+- `motd(1df)` shows the system MOTD.
+- `msc(1df)` crudely counts messages in an mbox.
+- `mw(1df)` prints alphabetic space-delimited words from the input one per
line.
-* `oii(1df)` runs a command on input only if there is any.
-* `onl(1df)` crunches input down to one printable line.
-* `osc(1df)` implements a `netcat(1)`-like wrapper for `openssl(1)`'s
+- `oii(1df)` runs a command on input only if there is any.
+- `onl(1df)` crunches input down to one printable line.
+- `osc(1df)` implements a `netcat(1)`-like wrapper for `openssl(1)`'s
`s_client` sub-command.
-* `p(1df)` prints concatenated standard input; `cat(1)` as it should always
+- `p(1df)` prints concatenated standard input; `cat(1)` as it should always
have been.
-* `pa(1df)` prints its arguments, one per line.
-* `phpcsff(1df)` wraps around
+- `pa(1df)` prints its arguments, one per line.
+- `phpcsff(1df)` wraps around
[PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) to make it
a source code filter suitable for use as an `equalprg` in Vim.
-* `pp(1df)` prints the full path of each argument using `$PWD`.
-* `pph(1df)` runs `pp(1df)` and includes a leading `$HOSTNAME:`.
-* `paz(1df)` print its arguments terminated by NULL chars.
-* `pit(1df)` runs its input through a pager if its standard output looks like a
+- `pp(1df)` prints the full path of each argument using `$PWD`.
+- `pph(1df)` runs `pp(1df)` and includes a leading `$HOSTNAME:`.
+- `paz(1df)` print its arguments terminated by NULL chars.
+- `pit(1df)` runs its input through a pager if its standard output looks like a
terminal.
-* `pwg(1df)` generates just one decent password with `pwgen(1)`.
-* `qat(1df)` disables `stty echo` for the duration of a paste.
-* `rep(1df)` repeats a command a given number of times.
-* `rgl(1df)` is a very crude interactive `grep(1)` loop.
-* `shb(1df)` attempts to build shebang lines for scripts from the system paths.
-* `sqs(1df)` chops off query strings from filenames, usually downloads.
-* `sshi(1df)` prints human-readable SSH connection details.
-* `stex(1df)` strips extensions from filenames.
-* `sue(8df)` execs `sudoedit(8)` as the owner of all the file arguments given,
+- `pwg(1df)` generates just one decent password with `pwgen(1)`.
+- `qat(1df)` disables `stty echo` for the duration of a paste.
+- `rep(1df)` repeats a command a given number of times.
+- `rgl(1df)` is a very crude interactive `grep(1)` loop.
+- `shb(1df)` attempts to build shebang lines for scripts from the system paths.
+- `sqs(1df)` chops off query strings from filenames, usually downloads.
+- `sshi(1df)` prints human-readable SSH connection details.
+- `stex(1df)` strips extensions from filenames.
+- `sue(8df)` execs `sudoedit(8)` as the owner of all the file arguments given,
perhaps in cases where you may not necessarily have `root` `sudo(8)`
privileges.
-* `swr(1df)` allows you to run commands locally specifying remote files in
+- `swr(1df)` allows you to run commands locally specifying remote files in
`scp(1)`'s HOST:PATH format.
-* `td(1df)` manages a to-do file for you with `$EDITOR` and `git(1)`; I used to
+- `td(1df)` manages a to-do file for you with `$EDITOR` and `git(1)`; I used to
use Taskwarrior, but found it too complex and buggy.
-* `tm(1df)` runs `tmux(1)` with `attach-session -d` if a session exists, and
+- `tm(1df)` runs `tmux(1)` with `attach-session -d` if a session exists, and
`new-session` if it doesn't.
-* `trs(1df)` replaces strings (not regular expression) in its input.
-* `try(1df)` repeats a command up to a given number of times until it succeeds,
+- `trs(1df)` replaces strings (not regular expression) in its input.
+- `try(1df)` 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 `cron(8)` scripts.
-* `umake(1df)` iterates upwards through the directory tree from `$PWD` until it
+- `umake(1df)` iterates upwards through the directory tree from `$PWD` until it
finds a Makefile for which to run `make(1)` with the given arguments.
-* `uts(1df)` gets the current UNIX timestamp in an unorthodox way that should
+- `uts(1df)` gets the current UNIX timestamp in an unorthodox way that should
work on all POSIX-compliant operating systems.
-* `vest(1df)` runs `test(1)` but fails with explicit output via `vex(1df)`.
-* `vex(1df)` runs a command and prints `true` or `false` explicitly to `stdout`
+- `vest(1df)` runs `test(1)` but fails with explicit output via `vex(1df)`.
+- `vex(1df)` runs a command and prints `true` or `false` explicitly to `stdout`
based on the exit value.
-* `vic(1df)` tries to run a POSIX-compliant `vi(1)`.
-* `xrbg(1df)` applies the same randomly-selected background to each X screen.
-* `xrq(1df)` gets the values of specific resources out of `xrdb -query` output.
+- `vic(1df)` tries to run a POSIX-compliant `vi(1)`.
+- `xrbg(1df)` applies the same randomly-selected background to each X screen.
+- `xrq(1df)` gets the values of specific resources out of `xrdb -query` output.
There's some silly stuff in `install-games`:
-* `aaf(6df)` gets a random [ASCII Art Farts](http://www.asciiartfarts.com/)
+- `aaf(6df)` gets a random [ASCII Art Farts](http://www.asciiartfarts.com/)
comic.
-* `acq(6df)` allows you to interrogate AC, the interplanetary computer.
-* `aesth(6df)` converts English letters to their full width CJK analogues,
+- `acq(6df)` allows you to interrogate AC, the interplanetary computer.
+- `aesth(6df)` converts English letters to their full width CJK analogues,
for aesthetic purposes.
-* `squ(6df)` makes a reduced Latin square out of each line of input.
-* `kvlt(6df)` translates input to emulate a style of typing unique to black
+- `squ(6df)` makes a reduced Latin square out of each line of input.
+- `kvlt(6df)` translates input to emulate a style of typing unique to black
metal communities on the internet.
-* `philsay(6df)` shows a picture to accompany `pks(6df)` output.
-* `pks(6df)` laughs at a randomly selected word.
-* `rndn(6df)` implements an esoteric random number generation algorithm.
-* `strik(6df)` outputs s̶t̶r̶i̶k̶e̶d̶ ̶o̶u̶t̶ struck out text.
-* `rot13(6df)` rotates the Latin letters in its input.
-* `uuu(6df)` uuuuu uuuu uu uuuuuu uuuuuuu u uuu uuuuu.
-* `xyzzy(6df)` teleports to a marked location on the filesystem.
-* `zs(6df)` prefixes "z" case-appropriately to every occurrence of "s" in the
+- `philsay(6df)` shows a picture to accompany `pks(6df)` output.
+- `pks(6df)` laughs at a randomly selected word.
+- `rndn(6df)` implements an esoteric random number generation algorithm.
+- `strik(6df)` outputs s̶t̶r̶i̶k̶e̶d̶ ̶o̶u̶t̶ struck out text.
+- `rot13(6df)` rotates the Latin letters in its input.
+- `uuu(6df)` uuuuu uuuu uu uuuuuu uuuuuuu u uuu uuuuu.
+- `xyzzy(6df)` teleports to a marked location on the filesystem.
+- `zs(6df)` prefixes "z" case-appropriately to every occurrence of "s" in the
text on its standard input.
Manuals
@@ -647,17 +647,17 @@ functionality (yet).
There are also optional `lint` targets, if you have the appropriate tools
available to run them:
-* [ShellCheck](https://www.shellcheck.net/):
- * `lint-bash`
- * `lint-bin`
- * `lint-games`
- * `lint-ksh`
- * `lint-sh`
- * `lint-xinit`
-* Perl::Critic:
- * `lint-urxvt`
-* [Vint](https://github.com/Kuniwak/vint):
- * `lint-vim`
+- [ShellCheck](https://www.shellcheck.net/):
+ - `lint-bash`
+ - `lint-bin`
+ - `lint-games`
+ - `lint-ksh`
+ - `lint-sh`
+ - `lint-xinit`
+- Perl::Critic:
+ - `lint-urxvt`
+- [Vint](https://github.com/Kuniwak/vint):
+ - `lint-vim`
Future development
------------------
@@ -677,7 +677,7 @@ simple scripts, so do whatever you like with it if any of it's useful to you.
If you're feeling generous, please join and/or donate to a free software
advocacy group, and let me know you did it because of this project:
-* [Free Software Foundation](https://www.fsf.org/)
-* [Software in the Public Interest](https://www.spi-inc.org/)
-* [FreeBSD Foundation](https://www.freebsdfoundation.org/)
-* [OpenBSD Foundation](https://www.openbsdfoundation.org/)
+- [Free Software Foundation](https://www.fsf.org/)
+- [Software in the Public Interest](https://www.spi-inc.org/)
+- [FreeBSD Foundation](https://www.freebsdfoundation.org/)
+- [OpenBSD Foundation](https://www.openbsdfoundation.org/)