aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--Makefile62
-rw-r--r--README.md23
-rw-r--r--VERSION4
-rw-r--r--bash/bash_completion.d/mosh.bash5
-rw-r--r--bin/dmenu_pass.sh18
-rw-r--r--check/urxvt.sh3
-rw-r--r--finger/pgpkey8
-rw-r--r--i3/config20
-rw-r--r--i3/status6
-rw-r--r--lint/urxvt.sh5
-rw-r--r--man/man1/dmenu_pass.1df17
-rw-r--r--man/man1/xrq.1df4
-rw-r--r--man/man7/dotfiles.7df713
-rw-r--r--mpv/mpv.conf10
-rw-r--r--mutt/muttrc3
-rw-r--r--[-rwxr-xr-x]mutt/muttrc.d/src.sh (renamed from mutt/muttrc.d/src)2
-rw-r--r--readline/inputrc7
-rw-r--r--rofi/bin/rofi_pass.sh92
-rw-r--r--sh/shrc.d/sudo.sh8
-rw-r--r--sxhkd/sxhkdrc13
-rw-r--r--terminfo/putty-256color.ti7
-rw-r--r--terminfo/putty.ti128
-rw-r--r--terminfo/rxvt-256color.ti8
-rw-r--r--terminfo/rxvt-unicode-256color.ti4
-rw-r--r--terminfo/rxvt-unicode.ti160
-rw-r--r--terminfo/rxvt.ti151
-rw-r--r--terminfo/screen-256color.ti7
-rw-r--r--terminfo/screen.ti100
-rw-r--r--tmux/tmux.conf3
-rw-r--r--urxvt/Xresources.d/URxvt32
-rw-r--r--urxvt/ext/select.pl85
-rw-r--r--urxvt/xsession.d/urxvt.sh2
-rw-r--r--vim/after/ftplugin/python.vim10
-rw-r--r--vim/after/plugin/dist.vim1
m---------vim/bundle/copy_linebreak0
m---------vim/bundle/spellfile_local0
m---------vim/bundle/strip_trailing_whitespace0
-rw-r--r--vim/filetype.vim15
-rw-r--r--vim/ftplugin/textarea.vim12
-rw-r--r--vim/plugin/dist.vim2
-rw-r--r--vim/vimrc54
-rw-r--r--vim/vimrc.stub21
-rw-r--r--x/Xresources108
-rw-r--r--x/Xresources.d/XTerm24
-rw-r--r--xfce/terminalrc40
-rw-r--r--yt-dlp/config5
47 files changed, 668 insertions, 1340 deletions
diff --git a/.gitignore b/.gitignore
index 107c89da..417741c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,7 +25,6 @@
/bin/dfv
/bin/dfv.m4
/bin/dfv.sh
-/bin/dmenu_pass
/bin/dub
/bin/edda
/bin/edda.m4
@@ -178,14 +177,15 @@
/games/zs
/git/config
/git/config.m4
+/git/template/hooks/post-update
/git/template/hooks/pre-commit
/git/template/hooks/prepare-commit-msg
-/git/template/hooks/post-update
/gnupg/profile.d/gnupg.sh
/gnupg/profile.d/gnupg.sh.m4
/include/mktd.m4
/less/less
/mutt/filters/markdown-to-html
+/mutt/muttrc.d/src
+/rofi/bin/rofi_pass
/tmux/bin/tmux
-/urxvt/ext/select
/x/xsession
diff --git a/Makefile b/Makefile
index 7743d696..9f98ce20 100644
--- a/Makefile
+++ b/Makefile
@@ -42,23 +42,20 @@
install-rbenv \
install-readline \
install-redshift \
+ install-rofi \
install-scrot \
install-sh \
install-subversion \
install-sxhkd \
install-systemd \
- install-terminfo \
install-tidy \
install-tmux \
- install-urxvt \
install-vim \
install-vim-gui \
install-vint \
install-wget \
install-x \
- install-xfce \
install-xsession \
- install-yt-dlp \
install-zsh \
check \
check-bash \
@@ -69,7 +66,6 @@
check-login-shell \
check-man \
check-sh \
- check-urxvt \
check-x \
check-xsession \
check-zsh \
@@ -80,7 +76,6 @@
lint-git-template-hooks \
lint-ksh \
lint-sh \
- lint-urxvt \
lint-vim \
lint-x \
lint-xsession
@@ -119,7 +114,6 @@ BINS = bin/ap \
bin/ddup \
bin/defang \
bin/dfv \
- bin/dmenu_pass \
bin/dub \
bin/edda \
bin/eds \
@@ -302,8 +296,8 @@ clean distclean:
include/mktd.m4 \
less/less \
mutt/filters/markdown-to-html \
+ mutt/muttrc.d/src \
tmux/bin/tmux \
- urxvt/ext/select \
x/xsession
.awk:
@@ -462,7 +456,8 @@ install-gnupg: gnupg/profile.d/gnupg.sh install-sh
install-i3: install-x
mkdir -p -- $(XDG_CONFIG_HOME)/i3
cp -p -- i3/config $(XDG_CONFIG_HOME)/i3
- cp -p -- i3/status $(XDG_CONFIG_HOME)/i3
+ mkdir -p -- $(XDG_CONFIG_HOME)/i3status
+ cp -p -- i3/status $(XDG_CONFIG_HOME)/i3status/config
install-init:
if test -d /run/systemd/system ; then make install-systemd ; fi
@@ -494,7 +489,7 @@ install-mpv:
$(XDG_DATA_HOME)/mpv/screenshots
cp -p -- mpv/mpv.conf $(XDG_CONFIG_HOME)/mpv
-install-mutt: install-gnupg install-mail mutt/filters/markdown-to-html
+install-mutt: install-gnupg install-mail mutt/filters/markdown-to-html mutt/muttrc.d/src
mkdir -p -- \
$(XDG_CONFIG_HOME)/mutt \
$(XDG_CONFIG_HOME)/mutt/muttrc.d \
@@ -570,15 +565,20 @@ install-redshift: install-x
cp -p -- redshift/redshift.conf $(XDG_CONFIG_HOME)
cp -p -- redshift/xsession.d/redshift.sh $(HOME)/.xsession.d
+install-rofi: rofi/bin/rofi_pass
+ mkdir -p -- $(HOME)/.local/bin
+ cp -p -- rofi/bin/rofi_pass $(HOME)/.local/bin
+
install-scrot:
mkdir -p -- $(XDG_DATA_HOME)/scrot/screenshots
install-sh: check-sh
- mkdir -p -- $(HOME)/.profile.d $(HOME)/.shrc.d
cp -p -- sh/profile $(HOME)/.profile
+ mkdir -p -- $(HOME)/.profile.d
cp -p -- sh/profile.d/*.sh $(HOME)/.profile.d
cp -p -- sh/shinit $(HOME)/.shinit
cp -p -- sh/shrc $(HOME)/.shrc
+ mkdir -p -- $(HOME)/.shrc.d
cp -p -- sh/shrc.d/*.sh $(HOME)/.shrc.d
install-subversion:
@@ -605,35 +605,18 @@ install-systemd: install-sh
cp -p -- systemd/user/run-.service.d/50-notify-email.conf \
$(XDG_DATA_HOME)/systemd/user/run-.service.d
-# Need to install these in appropriate order to meet dependencies; could trust
-# the system glob, but a fixed list is just more straightforward
-install-terminfo:
- tic terminfo/putty.ti
- tic terminfo/putty-256color.ti
- tic terminfo/rxvt.ti
- tic terminfo/rxvt-256color.ti
- tic terminfo/rxvt-unicode.ti
- tic terminfo/rxvt-unicode-256color.ti
- tic terminfo/screen.ti
- tic terminfo/screen-256color.ti
-
install-tidy: install-sh
cp -p -- tidy/profile.d/tidy.sh $(HOME)/.profile.d
mkdir -p -- $(XDG_CONFIG_HOME)/tidy
cp -p -- tidy/tidyrc $(XDG_CONFIG_HOME)/tidy/tidyrc
-install-tmux: tmux/bin/tmux tmux/tmux.conf install-systemd install-terminfo
+install-tmux: tmux/bin/tmux tmux/tmux.conf install-systemd
cp -p -- tmux/bin/tmux $(HOME)/.local/bin
cp -p -- tmux/profile.d/tmux.sh $(HOME)/.profile.d
cp -p -- tmux/tmux.conf $(HOME)/.tmux.conf
cp -p -- tmux/systemd/user/tmux.service \
$(XDG_DATA_HOME)/systemd/user
-install-urxvt: urxvt/ext/select install-x
- mkdir -p -- $(HOME)/.urxvt/ext
- cp -p -- urxvt/ext/select $(HOME)/.urxvt/ext
- cp -p -- urxvt/xsession.d/urxvt.sh $(HOME)/.xsession.d
-
VIM = vim
VIMDIR = $(HOME)/.vim
VIMRC = $(VIMDIR)/vimrc
@@ -673,21 +656,13 @@ install-wget: install-sh
install-x: check-x install-logrotate install-sh
cp -p -- x/Xresources $(HOME)/.Xresources
- mkdir -p -- $(HOME)/.xsession.d
cp -p -- x/shrc.d/x.sh $(HOME)/.shrc.d
- mkdir -p -- $(XDG_CONFIG_HOME)/log/xsession
- cp -p -- x/logrotate/config.d/xsession $(XDG_CONFIG_HOME)/logrotate/config.d
-
-install-xfce: install-x
- mkdir -p $(XDG_CONFIG_HOME)/xfce4/terminal
- cp -p -- xfce/terminalrc $(XDG_CONFIG_HOME)/xfce4/terminal/
+ mkdir -p -- $(HOME)/.xsession.d
install-xsession: x/xsession check-xsession install-x
cp -p -- x/xsession $(HOME)/.xsession
-
-install-yt-dlp install-youtube-dl:
- mkdir -p -- $(XDG_CONFIG_HOME)/yt-dlp
- cp -p -- yt-dlp/config $(XDG_CONFIG_HOME)/yt-dlp
+ mkdir -p -- $(XDG_CONFIG_HOME)/log/xsession
+ cp -p -- x/logrotate/config.d/xsession $(XDG_CONFIG_HOME)/logrotate/config.d
install-zsh: check-zsh install-sh
mkdir -p -- $(HOME)/.zshrc.d
@@ -726,9 +701,6 @@ check-login-shell:
check-sh:
sh check/sh.sh
-check-urxvt: urxvt/ext/select
- sh check/urxvt.sh
-
check-x:
sh check/x.sh
@@ -744,7 +716,6 @@ lint: lint-bash \
lint-git-template-hooks \
lint-ksh \
lint-sh \
- lint-urxvt \
lint-vim \
lint-x
@@ -766,9 +737,6 @@ lint-ksh: check-ksh
lint-sh: check-sh
sh lint/sh.sh
-lint-urxvt: check-urxvt
- sh lint/urxvt.sh
-
lint-vim:
sh lint/vim.sh
diff --git a/README.md b/README.md
index 0953a61a..6861776a 100644
--- a/README.md
+++ b/README.md
@@ -103,8 +103,6 @@ Configuration is included for:
- [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
- the rxvt terminal emulator with Unicode support
- [Subversion](https://subversion.apache.org/)---Apache Subversion, a version
control system
- [tidy](http://www.html-tidy.org/)---HTML/XHTML linter and tidier
@@ -112,8 +110,6 @@ Configuration is included for:
- [Vim](https://www.vim.org/)---Vi IMproved, a text editor
- [X11](https://www.x.org/wiki/)---Windowing system with network transparency
for Unix
-- [yt-dlp](https://github.com/yt-dlp/yt-dlp)---Download manager for video
- hosting websites
There is also some slightly customized support for multi-version environment
management for three major scripting languages:
@@ -124,8 +120,7 @@ management for three major scripting languages:
The configurations for shells, Mutt, tmux, and Vim are the most likely to be of
interest. The i3 configuration is limited mainly to changing window switching
-key bindings to match Vim's. There are a fair few resources defined for
-rxvt-unicode.
+key bindings to match Vim's.
### Shell
@@ -245,8 +240,6 @@ in `sh/shrc.d` to be loaded by any POSIX interactive shell. Those include:
- `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.
- `tor()` is just a terse shortcut for using Torsocks to anonymize TCP
connections from the current shell.
- `tree()` colorizes GNU `tree(1)` output if possible (without having
@@ -323,16 +316,6 @@ appealing.
You'll need Abook installed if you want to use the `query_command` I have
defined, and msmtp for the `sendmail` command.
-### rxvt-unicode
-
-I've butchered the URxvt Perl extensions `selection-to-clipboard` and
-`selection` into a single `select` extension in `~/.urxvt/ext`, which is the
-only extension I define in `~/.Xresources`.
-
-The included `.Xresources` file assumes that `urxvt` can use 256 colors and
-Perl extensions. If you're missing functionality, try changing
-`perl-ext-common` to `default`.
-
### tmux
These are just generally vi-friendly settings, and there isn't much out of the
@@ -525,8 +508,6 @@ These scripts are installed by the `install-bin` target:
- `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.
-- `dmenu_pass(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.
@@ -656,8 +637,6 @@ available to run them:
- `lint-ksh`
- `lint-sh`
- `lint-x`
-- Perl::Critic:
- - `lint-urxvt`
- [Vint](https://github.com/Kuniwak/vint):
- `lint-vim`
diff --git a/VERSION b/VERSION
index f5b77fed..f677da70 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-tejr dotfiles v12.23.0
-Tue, 20 Sep 2022 11:01:07 +0000
+tejr dotfiles v12.41.0
+Wed, 02 Aug 2023 21:39:23 +0000
diff --git a/bash/bash_completion.d/mosh.bash b/bash/bash_completion.d/mosh.bash
new file mode 100644
index 00000000..17d72ca1
--- /dev/null
+++ b/bash/bash_completion.d/mosh.bash
@@ -0,0 +1,5 @@
+# Completion for mosh(1) with ssh_config(5) hostnames
+if ! declare -F _ssh_config_hosts >/dev/null ; then
+ source "$HOME"/.bash_completion.d/_ssh_config_hosts.bash
+fi
+complete -F _ssh_config_hosts -o bashdefault -o default mosh
diff --git a/bin/dmenu_pass.sh b/bin/dmenu_pass.sh
deleted file mode 100644
index 2969cd16..00000000
--- a/bin/dmenu_pass.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-# Pick and type out a pass(1) password with dmenu(1) and xdotool(1)
-self=dmenu_pass
-cd -- "${PASSWORD_STORE_DIR:-"$HOME"/.password-store}" || exit
-# shellcheck disable=SC2016
-name=$(
- find . -name \*.gpg ! -type d |
- sed -e 's_^\./__' -e 's_\.gpg$__' |
- LC_ALL=C sort -f |
- dmenu
-)
-[ -n "$name" ] || exit
-password=$(pass show -- "$name" | head -n 1) || exit
-[ -n "$password" ] || exit
-printf %s "$password" | xdotool type --clearmodifiers --file - \
- || exit
-notify-send --app-name="$self" -- \
- "Password typed" \
- "$name"
diff --git a/check/urxvt.sh b/check/urxvt.sh
deleted file mode 100644
index e64ba1e5..00000000
--- a/check/urxvt.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-for perl in urxvt/ext/*.pl ; do
- perl -c "${perl%.pl}" || exit
-done
diff --git a/finger/pgpkey b/finger/pgpkey
index c10eab51..f9569c8f 100644
--- a/finger/pgpkey
+++ b/finger/pgpkey
@@ -1,4 +1,4 @@
-pub rsa4096 2013-03-12 [SC] [expires: 2023-06-30]
+pub rsa4096 2013-03-12 [SC] [expires: 2024-06-16]
FA09 C06E 1B67 0CD0 B2F5 DE60 C142 86EA 77BB 8872
uid [ultimate] Thomas Ryder (tyrmored, tejr) <tom@sanctum.geek.nz>
uid [ultimate] Thomas Ryder <tejr@echo-n.nz>
@@ -6,6 +6,6 @@ uid [ultimate] Thomas Ryder <secretary@plug.org.nz>
uid [ultimate] Thomas Ryder (TEJR) <tejr@cpan.org>
uid [ultimate] Thomas Ryder <tyrmored@inspire.net.nz>
uid [ultimate] Thomas Ryder <tej.ryder@gmail.com>
-sub rsa4096 2013-03-12 [E] [expires: 2023-06-30]
-sub rsa4096 2013-03-12 [S] [expires: 2023-06-30]
-sub rsa4096 2019-08-06 [A] [expires: 2023-06-30]
+sub rsa4096 2013-03-12 [E] [expires: 2024-06-16]
+sub rsa4096 2013-03-12 [S] [expires: 2024-06-16]
+sub rsa4096 2019-08-06 [A] [expires: 2024-06-16]
diff --git a/i3/config b/i3/config
index 1fe8e336..1e641b9f 100644
--- a/i3/config
+++ b/i3/config
@@ -4,11 +4,8 @@ set $mod Mod4
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
-# If the window is the only one on the workspace, forego the borders
-hide_edge_borders smart
-
-# Use a Unicode-capable font that should be available
-font pango:Liberation Mono 8
+# Use a nice Unicode-aware condensed font
+font pango:Noto Sans 10
# Mod+Shift+r restarts i3wm
bindsym $mod+Shift+r restart
@@ -87,17 +84,10 @@ mode "resize" {
# i3bar at bottom of screen
bar {
- position bottom
- status_command i3status --config ~/.config/i3/status
- workspace_buttons yes
-
+ separator_symbol "—"
+ status_command i3status
+ tray_padding 0
colors {
background #111111
- statusline #eeeeee
-
- focused_workspace #ffffff #285577
- active_workspace #ffffff #333333
- inactive_workspace #888888 #222222
- urgent_workspace #ffffff #900000
}
}
diff --git a/i3/status b/i3/status
index 9c9b60d6..534b1f8f 100644
--- a/i3/status
+++ b/i3/status
@@ -2,7 +2,6 @@
order += "load"
order += "tztime local"
-order += "battery 0"
load {
format = "%1min/%5min/%15min"
@@ -10,8 +9,3 @@ load {
tztime local {
format = "%Y-%m-%d %H:%M:%S"
}
-battery 0 {
- format = "%status %percentage %remaining %emptytime"
- path = "/sys/class/power_supply/BAT%d/uevent"
- low_threshold = 15
-}
diff --git a/lint/urxvt.sh b/lint/urxvt.sh
deleted file mode 100644
index 6e5fb503..00000000
--- a/lint/urxvt.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-set --
-for pl in urxvt/ext/*.pl ; do
- set -- "$@" "${pl%.pl}"
-done
-perlcritic --brutal -- "${pl%.pl}"
diff --git a/man/man1/dmenu_pass.1df b/man/man1/dmenu_pass.1df
deleted file mode 100644
index c83cd837..00000000
--- a/man/man1/dmenu_pass.1df
+++ /dev/null
@@ -1,17 +0,0 @@
-.TH DMENU_PASS 1df "May 2022" "Manual page for dmenu_pass"
-.SH NAME
-.B dmenu_pass
-\- pick and type a password-store password
-.SH SYNOPSIS
-.B dmenu_pass
-.SH DESCRIPTION
-.B dmenu_pass
-applies dmenu(1) to pick a password entry from a pass(1) store and types it out
-with xdotool(1).
-.P
-A notification with the default priority is sent when the password is
-successfully typed.
-.SH SEE ALSO
-dmenu(1), notify-send(1), pass(1), xdotool(1)
-.SH AUTHOR
-Tom Ryder <tom@sanctum.geek.nz>
diff --git a/man/man1/xrq.1df b/man/man1/xrq.1df
index 9dd7f0d1..184aa186 100644
--- a/man/man1/xrq.1df
+++ b/man/man1/xrq.1df
@@ -1,4 +1,4 @@
-.TH XRQ 1df "January 2017" "Manual page for xrq"
+.TH XRQ 1df "February 2023" "Manual page for xrq"
.SH NAME
.B xrq
\- query X resource values
@@ -7,7 +7,7 @@
Xft.hintstyle
.br
.B xrq
-URxvt.color0 URxvt.color9
+XTerm.vt100.color0 XTerm.vt100.color9
.SH DESCRIPTION
.B xrq
runs xrdb(1) with the -query option and filters for the values of the named
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
diff --git a/mpv/mpv.conf b/mpv/mpv.conf
index d1624a79..553d73b7 100644
--- a/mpv/mpv.conf
+++ b/mpv/mpv.conf
@@ -22,3 +22,13 @@ screenshot-format="png"
# ~/.local/share/mpv/screenshots/Red Dwarf S01E01.mkv/mpv_Red Dwarf S01E01.mkv_00:08:20.461_0001.png
#
screenshot-template="%f/mpv_%f_%P_%04n"
+
+# Don't try to find external subtitles for me; I'll specify if I want them.
+sub-auto=no
+
+# Get somewhat lower-resolution (<=640kps), lower-bitrate (<=500kbps) videos,
+# so that they come down quicker and slower systems are less likely to stutter
+# while playing them at busy times; if I want archival quality, I'll just
+# invoke yt-dlp directly.
+#
+ytdl-format="[height<=?640][tbr<=?500]"
diff --git a/mutt/muttrc b/mutt/muttrc
index 2a3dca8b..aba87363 100644
--- a/mutt/muttrc
+++ b/mutt/muttrc
@@ -23,7 +23,8 @@ set alias_file \
source $alias_file
# Don't send terminal bells on errors, but do send them when new mail arrives,
-# because that should light up my tmux window label and/or urxvt window.
+# because that should light up either my terminal emulator window or my tmux
+# window label.
#
unset beep
set beep_new
diff --git a/mutt/muttrc.d/src b/mutt/muttrc.d/src.sh
index 47cb2df1..60e0c566 100755..100644
--- a/mutt/muttrc.d/src
+++ b/mutt/muttrc.d/src.sh
@@ -1,5 +1,3 @@
-#!/bin/sh
-
# Build groups from address lists
for rc in "$HOME"/.config/mutt/muttrc.d/groups/*.list ; do
[ -e "$rc" ] || continue
diff --git a/readline/inputrc b/readline/inputrc
index 0da55708..90c53633 100644
--- a/readline/inputrc
+++ b/readline/inputrc
@@ -1,13 +1,6 @@
-# Don't mess with the eighth bit of characters
-set input-meta on
-set output-meta on
-
# Never ring any sort of bell during line reading
set bell-style none
-# Let readline do stuff like word killing, not stty(1)
-set bind-tty-special-chars off
-
# Color files by type in the same way as `ls`
set colored-stats on
diff --git a/rofi/bin/rofi_pass.sh b/rofi/bin/rofi_pass.sh
new file mode 100644
index 00000000..fb31a454
--- /dev/null
+++ b/rofi/bin/rofi_pass.sh
@@ -0,0 +1,92 @@
+# Pick password from local or remote password-store with rofi's dmenu emulation
+# mode, and write it to the active X11 window. Optionally, prefix it with the
+# username, being the last part of the slash-delimited password's name, and
+# a TAB press to move to the next field in a form.
+#
+self=rofi_pass
+
+# Abstraction to handle running shell commands (args or stdin) in either
+# a remote or local shell. If the environment variable PASSWORD_STORE_HOST is
+# set, it's used as the destination SSH hostname to the password store.
+#
+pass_shell() {
+ [ "$#" -le 1 ] || return
+ if [ -n "$PASSWORD_STORE_HOST" ] ; then
+ ssh -o StrictHostKeyChecking=yes -T -X -- \
+ "$PASSWORD_STORE_HOST" "$@"
+ elif [ "$#" -eq 1 ] ; then
+ "${SHELL:-/bin/sh}" -c "$1"
+ else
+ "${SHELL:-/bin/sh}" -s
+ fi
+}
+
+# Get a list of all the password paths, relative to the password store root,
+# including leading dot-slash and trailing .gpg extension.
+#
+get_paths() {
+ pass_shell <<-'EOF'
+ dir=${PASSWORD_STORE_DIR:-"$HOME"/.password-store}
+ cd -- "$dir" || exit
+ find . -name \*.gpg -type f || exit
+ EOF
+}
+
+# Get a list of all the password names, bytewise-sorted, with leading dot-slash
+# and trailing .gpg extension removed.
+#
+get_names() {
+ get_paths |
+ sed -e 's_^[.]/__' -e 's_[.]gpg$__' |
+ LC_COLLATE=C sort -f
+}
+
+# Write a password name to a shell to retrieve it, and read its first line;
+# write the name safely to the shell's input rather than as an argument.
+#
+get_password() {
+ name=$1
+ [ -n "$name" ] || return
+ printf '%s\n' "$name" |
+ pass_shell 'IFS= read -r name ; pass show "$name"' |
+ head -n 1
+}
+
+# Check for --login/-l option to paste a username-password combo, not just the
+# password (defaults to the latter).
+#
+login=0
+case $1 in
+ --login|-l) login=1 ;;
+esac
+
+# Apply rofi -dmenu to pick a password name. Use case-insensitive matching,
+# and don't accept arbitrary input.
+#
+name=$(get_names | rofi -dmenu -i -no-lazy-grab -only_match -p pass) || exit
+[ -n "$name" ] || exit
+
+# Retrieve the username for the chosen password, and then the secret itself;
+# check that we actually got more than an empty string back in both cases.
+#
+username=${name##*/}
+[ -n "$username" ] || exit
+password=$(get_password "$name") || exit
+[ -n "$password" ] || exit
+
+# Have xdotool type either the username-TAB-password, or just the password;
+# receiving it on its standard input rather than its arguments, for security.
+#
+if [ "$login" -eq 1 ] ; then
+ printf '%s\t%s' \
+ "$username" "$password"
+else
+ printf '%s' \
+ "$password"
+fi | xdotool type --clearmodifiers --delay=0 --file - || exit
+
+# Tell the user we wrote the password out, in case they're typing a password
+# into a field with echo turned off.
+#
+notify-send --app-name="$self" --icon=gcr-password -- \
+ 'Password typed' "$name"
diff --git a/sh/shrc.d/sudo.sh b/sh/shrc.d/sudo.sh
deleted file mode 100644
index d9e30bc4..00000000
--- a/sh/shrc.d/sudo.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-# Add the -H parameter to sudo(8) calls, always use the target user's $HOME
-sudo() {
- case $1 in
- -v) ;;
- *) set -- -H "$@" ;;
- esac
- command sudo "$@"
-}
diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc
index d655dc30..b4f823b6 100644
--- a/sxhkd/sxhkdrc
+++ b/sxhkd/sxhkdrc
@@ -8,7 +8,7 @@ super + b
exec x-www-browser
super + d
- exec dmenu_run
+ exec rofi -modi drun -show drun
super + g
exec xgoc
@@ -17,16 +17,19 @@ super + i
exec gimp
super + m
- exec x-terminal-emulator -e tm
+ exec x-terminal-emulator -title tm -e tm
super + p
- exec dmenu_pass
+ exec rofi_pass
+
+super + shift + p
+ exec rofi_pass --login
super + t
exec thunar
super + v
- exec x-terminal-emulator -e "$VISUAL"
+ exec x-terminal-emulator -title "$VISUAL" -e "$VISUAL"
Print
exec xsnap
@@ -47,4 +50,4 @@ XF86Audio{Lower,Raise}Volume
exec pactl set-sink-volume @DEFAULT_SINK@ {-5%,+5%}
XF86Calculator
- exec x-terminal-emulator -e bcq
+ exec x-terminal-emulator -title bcq -e bcq
diff --git a/terminfo/putty-256color.ti b/terminfo/putty-256color.ti
deleted file mode 100644
index 09d022b8..00000000
--- a/terminfo/putty-256color.ti
+++ /dev/null
@@ -1,7 +0,0 @@
-putty-256color| PuTTY with 256 colors,
- use=putty,
- colors#256,
- initc@,
- pairs#32767,
- setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
- setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
diff --git a/terminfo/putty.ti b/terminfo/putty.ti
deleted file mode 100644
index 068dbbd5..00000000
--- a/terminfo/putty.ti
+++ /dev/null
@@ -1,128 +0,0 @@
-putty| PuTTY,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- am,
- bce,
- bel=^G,
- blink=\E[5m,
- bold=\E[1m,
- bw,
- cbt=\E[Z,
- ccc,
- civis=\E[?25l,
- clear=\E[H\E[J,
- cnorm=\E[?25h,
- colors#8,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub1=^H,
- cub=\E[%p1%dD,
- cud1=\ED,
- cud=\E[%p1%dB,
- cuf1=\E[C,
- cuf=\E[%p1%dC,
- cup=\E[%i%p1%d;%p2%dH,
- cuu1=\EM,
- cuu=\E[%p1%dA,
- dch1=\E[P,
- dch=\E[%p1%dP,
- dispc=%?%p1%{8}%=%t\E%%G\342\227\230\E%%@%e%p1%{10}%=%t\E%%G\342\227\231\E%%@%e%p1%{12}%=%t\E%%G\342\231\0\E%%@%e%p1%{13}%=%t\E%%G\342\231\252\E%%@%e%p1%{14}%=%t\E%%G\342\231\253\E%%@%e%p1%{15}%=%t\E%%G\342\230\274\E%%@%e%p1%{27}%=%t\E%%G\342\206\220\E%%@%e%p1%{155}%=%t\E%%G\340\202\242\E%%@%e%p1%c%;,
- dl1=\E[M,
- dl=\E[%p1%dM,
- dsl=\E]0;\007,
- ech=\E[%p1%dX,
- ed=\E[J,
- el1=\E[1K,
- el=\E[K,
- enacs=\E(B\E)0,
- flash=\E[?5h\E[?5l,
- fsl=^G,
- home=\E[H,
- hpa=\E[%i%p1%dG,
- hs,
- ht=^I,
- hts=\EH,
- il1=\E[L,
- il=\E[%p1%dL,
- ind=^J,
- indn=\E[%p1%dS,
- initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
- is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>\E]R,
- it#8,
- kb2=\E[G,
- kbs=\177,
- kcbt=\E[Z,
- kcub1=\E[D,
- kcud1=\E[B,
- kcuf1=\E[C,
- kcuu1=\E[A,
- kdch1=\E[3~,
- kend=\E[4~,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\E[25~,
- kf14=\E[26~,
- kf15=\E[28~,
- kf16=\E[29~,
- kf17=\E[31~,
- kf18=\E[32~,
- kf19=\E[33~,
- kf1=\E[11~,
- kf20=\E[34~,
- kf2=\E[12~,
- kf3=\E[13~,
- kf4=\E[14~,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- khome=\E[1~,
- kich1=\E[2~,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- kspd=^Z,
- mir,
- msgr,
- ncv#22,
- nel=^M^J,
- oc=\E]R,
- op=\E[39;49m,
- pairs#64,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rin=\E[%p1%dT,
- rmacs=^O,
- rmam=\E[?7l,
- rmcup=\E[2J\E[?47l,
- rmir=\E[4l,
- rmpch=\E[10m,
- rmso=\E[27m,
- rmul=\E[24m,
- rs2=\E<\E["p\E[50;6"p\Ec\E[?3l\E]R\E[?1000l,
- s0ds=\E[10m,
- s1ds=\E[11m,
- s2ds=\E[12m,
- sc=\E7,
- setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
- sgr0=\E[m\017,
- sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
- smacs=^N,
- smam=\E[?7h,
- smcup=\E[?47h,
- smir=\E[4h,
- smpch=\E[11m,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- tsl=\E]0;,
- u6=\E[%i%d;%dR,
- u7=\E[6n,
- u8=\E[?6c,
- u9=\E[c,
- vpa=\E[%i%p1%dd,
- xenl,
- xon,
diff --git a/terminfo/rxvt-256color.ti b/terminfo/rxvt-256color.ti
deleted file mode 100644
index 22c35ec2..00000000
--- a/terminfo/rxvt-256color.ti
+++ /dev/null
@@ -1,8 +0,0 @@
-rxvt-256color| rxvt with 256 colors,
- use=rxvt,
- ccc,
- colors#256,
- initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
- pairs#32767,
- setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
- setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
diff --git a/terminfo/rxvt-unicode-256color.ti b/terminfo/rxvt-unicode-256color.ti
deleted file mode 100644
index 1a34a46f..00000000
--- a/terminfo/rxvt-unicode-256color.ti
+++ /dev/null
@@ -1,4 +0,0 @@
-rxvt-unicode-256color| rxvt-unicode with 256 colors,
- use=rxvt-unicode,
- colors#256,
- pairs#32767,
diff --git a/terminfo/rxvt-unicode.ti b/terminfo/rxvt-unicode.ti
deleted file mode 100644
index 05bef84a..00000000
--- a/terminfo/rxvt-unicode.ti
+++ /dev/null
@@ -1,160 +0,0 @@
-rxvt-unicode| rxvt-unicode,
- acsc=+C\,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- am,
- bce,
- bel=^G,
- blink=\E[5m,
- bold=\E[1m,
- btns#5,
- bw,
- ccc,
- civis=\E[?25l,
- clear=\E[H\E[2J,
- cnorm=\E[?25h,
- colors#88,
- cols#80,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub1=^H,
- cub=\E[%p1%dD,
- cud1=^J,
- cud=\E[%p1%dB,
- cuf1=\E[C,
- cuf=\E[%p1%dC,
- cup=\E[%i%p1%d;%p2%dH,
- cuu1=\E[A,
- cuu=\E[%p1%dA,
- cvvis=\E[?25h,
- dch1=\E[P,
- dch=\E[%p1%dP,
- dl1=\E[M,
- dl=\E[%p1%dM,
- dsl=\E]2;\007,
- ech=\E[%p1%dX,
- ed=\E[J,
- el1=\E[1K,
- el=\E[K,
- enacs=,
- eo,
- flash=\E[?5h$<20/>\E[?5l,
- fsl=^G,
- home=\E[H,
- hpa=\E[%i%p1%dG,
- hs,
- ht=^I,
- hts=\EH,
- ich1=\E[@,
- ich=\E[%p1%d@,
- il1=\E[L,
- il=\E[%p1%dL,
- ind=^J,
- indn=\E[%p1%dS,
- initc=\E]4;%p1%d;rgb\:%p2%{65535}%*%{1000}%/%4.4X/%p3%{65535}%*%{1000}%/%4.4X/%p4%{65535}%*%{1000}%/%4.4X\E\\,
- is1=\E[!p,
- is2=\E[r\E[m\E[2J\E[?7;25h\E[?1;3;4;5;6;9;66;1000;1001;1049l\E[4l,
- it#8,
- kDC=\E[3$,
- kEND=\E[8$,
- kHOM=\E[7$,
- kIC=\E[2$,
- kLFT=\E[d,
- kNXT=\E[6$,
- kPRV=\E[5$,
- kRIT=\E[c,
- ka1=\EOw,
- ka3=\EOy,
- kb2=\EOu,
- kbs=\177,
- kc1=\EOq,
- kc3=\EOs,
- kcbt=\E[Z,
- kcub1=\E[D,
- kcud1=\E[B,
- kcuf1=\E[C,
- kcuu1=\E[A,
- kdch1=\E[3~,
- kel=\E[8\^,
- kend=\E[8~,
- kent=\EOM,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\E[25~,
- kf14=\E[26~,
- kf15=\E[28~,
- kf16=\E[29~,
- kf17=\E[31~,
- kf18=\E[32~,
- kf19=\E[33~,
- kf1=\E[11~,
- kf20=\E[34~,
- kf2=\E[12~,
- kf3=\E[13~,
- kf4=\E[14~,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- kfnd=\E[1~,
- khome=\E[7~,
- kich1=\E[2~,
- km,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- kslt=\E[4~,
- lines#24,
- lm#0,
- mc0=\E[i,
- mc4=\E[4i,
- mc5=\E[5i,
- mc5i,
- mir,
- msgr,
- ncv#0,
- npc,
- op=\E[39;49m,
- pairs#7744,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rin=\E[%p1%dT,
- ritm=\E[23m,
- rmacs=\E(B,
- rmam=\E[?7l,
- rmcup=\E[r\E[?1049l,
- rmir=\E[4l,
- rmkx=\E>,
- rmso=\E[27m,
- rmul=\E[24m,
- rs1=\Ec,
- rs2=\E[r\E[m\E[?7;25h\E[?1;3;4;5;6;9;66;1000;1001;1049l\E[4l,
- s0ds=\E(B,
- s1ds=\E(0,
- s2ds=\E*B,
- s3ds=\E+B,
- sc=\E7,
- setab=\E[48;5;%p1%dm,
- setaf=\E[38;5;%p1%dm,
- setb=%?%p1%{7}%>%t\E[48;5;%p1%dm%e\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
- setf=%?%p1%{7}%>%t\E[38;5;%p1%dm%e\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
- sgr0=\E[m\E(B,
- sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
- sitm=\E[3m,
- smacs=\E(0,
- smam=\E[?7h,
- smcup=\E[?1049h,
- smir=\E[4h,
- smkx=\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- tsl=\E]2;,
- u6=\E[%i%d;%dR,
- u7=\E[6n,
- u8=\E[?1;2c,
- u9=\E[c,
- vpa=\E[%i%p1%dd,
- xenl,
- xon,
diff --git a/terminfo/rxvt.ti b/terminfo/rxvt.ti
deleted file mode 100644
index 62808d3c..00000000
--- a/terminfo/rxvt.ti
+++ /dev/null
@@ -1,151 +0,0 @@
-rxvt| rxvt,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- am,
- bce,
- bel=^G,
- blink=\E[5m,
- bold=\E[1m,
- civis=\E[?25l,
- clear=\E[H\E[2J,
- cnorm=\E[?25h,
- colors#8,
- cols#80,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub1=^H,
- cub=\E[%p1%dD,
- cud1=^J,
- cud=\E[%p1%dB,
- cuf1=\E[C,
- cuf=\E[%p1%dC,
- cup=\E[%i%p1%d;%p2%dH,
- cuu1=\E[A,
- cuu=\E[%p1%dA,
- dl1=\E[M,
- dl=\E[%p1%dM,
- ed=\E[J,
- el1=\E[1K,
- el=\E[K,
- enacs=\E(B\E)0,
- eo,
- flash=\E[?5h\E[?5l,
- home=\E[H,
- hpa=\E[%i%p1%dG,
- ht=^I,
- hts=\EH,
- ich1=\E[@,
- ich=\E[%p1%d@,
- il1=\E[L,
- il=\E[%p1%dL,
- ind=^J,
- is1=\E[?47l\E=\E[?1l,
- is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
- it#8,
- kDC=\E[3$,
- kEND=\E[8$,
- kHOM=\E[7$,
- kLFT=\E[d,
- kNXT=\E[6$,
- kPRV=\E[5$,
- kRIT=\E[c,
- ka1=\EOw,
- ka3=\EOy,
- kb2=\EOu,
- kbs=\177,
- kc1=\EOq,
- kc3=\EOs,
- kcbt=\E[Z,
- kcub1=\E[D,
- kcud1=\E[B,
- kcuf1=\E[C,
- kcuu1=\E[A,
- kdch1=\E[3~,
- kel=\E[8\^,
- kend=\E[8~,
- kent=\EOM,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf13=\E[25~,
- kf14=\E[26~,
- kf15=\E[28~,
- kf16=\E[29~,
- kf17=\E[31~,
- kf18=\E[32~,
- kf19=\E[33~,
- kf1=\E[11~,
- kf20=\E[34~,
- kf21=\E[23$,
- kf22=\E[24$,
- kf23=\E[11\^,
- kf24=\E[12\^,
- kf25=\E[13\^,
- kf26=\E[14\^,
- kf27=\E[15\^,
- kf28=\E[17\^,
- kf29=\E[18\^,
- kf2=\E[12~,
- kf30=\E[19\^,
- kf31=\E[20\^,
- kf32=\E[21\^,
- kf33=\E[23\^,
- kf34=\E[24\^,
- kf35=\E[25\^,
- kf36=\E[26\^,
- kf37=\E[28\^,
- kf38=\E[29\^,
- kf39=\E[31\^,
- kf3=\E[13~,
- kf40=\E[32\^,
- kf41=\E[33\^,
- kf42=\E[34\^,
- kf43=\E[23@,
- kf44=\E[24@,
- kf4=\E[14~,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- kfnd=\E[1~,
- khome=\E[7~,
- kich1=\E[2~,
- km,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- kslt=\E[4~,
- lines#24,
- mir,
- msgr,
- ncv@,
- op=\E[39;49m,
- pairs#64,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- rmacs=^O,
- rmcup=\E[2J\E[?47l\E8,
- rmir=\E[4l,
- rmkx=\E>,
- rmso=\E[27m,
- rmul=\E[24m,
- rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
- rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E=\E[?1000l\E[?25h,
- s0ds=\E(B,
- s1ds=\E(0,
- sc=\E7,
- setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
- sgr0=\E[m\017,
- sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
- smacs=^N,
- smcup=\E7\E[?47h,
- smir=\E[4h,
- smkx=\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- vpa=\E[%i%p1%dd,
- xenl,
- xon,
diff --git a/terminfo/screen-256color.ti b/terminfo/screen-256color.ti
deleted file mode 100644
index cc7faffe..00000000
--- a/terminfo/screen-256color.ti
+++ /dev/null
@@ -1,7 +0,0 @@
-screen-256color| GNU Screen or tmux with 256 colors,
- use=screen,
- colors#256,
- initc@,
- pairs#32767,
- setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
- setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
diff --git a/terminfo/screen.ti b/terminfo/screen.ti
deleted file mode 100644
index 4658f424..00000000
--- a/terminfo/screen.ti
+++ /dev/null
@@ -1,100 +0,0 @@
-screen| GNU Screen or tmux,
- acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- am,
- bel=^G,
- blink=\E[5m,
- bold=\E[1m,
- cbt=\E[Z,
- civis=\E[?25l,
- clear=\E[H\E[J,
- cnorm=\E[34h\E[?25h,
- colors#8,
- cols#80,
- cr=^M,
- csr=\E[%i%p1%d;%p2%dr,
- cub1=^H,
- cub=\E[%p1%dD,
- cud1=^J,
- cud=\E[%p1%dB,
- cuf1=\E[C,
- cuf=\E[%p1%dC,
- cup=\E[%i%p1%d;%p2%dH,
- cuu1=\EM,
- cuu=\E[%p1%dA,
- cvvis=\E[34l,
- dch1=\E[P,
- dch=\E[%p1%dP,
- dl1=\E[M,
- dl=\E[%p1%dM,
- ed=\E[J,
- el1=\E[1K,
- el=\E[K,
- enacs=\E(B\E)0,
- flash=\Eg,
- home=\E[H,
- ht=^I,
- hts=\EH,
- ich=\E[%p1%d@,
- il1=\E[L,
- il=\E[%p1%dL,
- ind=^J,
- is2=\E)0,
- it#8,
- kbs=\177,
- kcbt=\E[Z,
- kcub1=\EOD,
- kcud1=\EOB,
- kcuf1=\EOC,
- kcuu1=\EOA,
- kdch1=\E[3~,
- kend=\E[4~,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
- kf1=\EOP,
- kf2=\EOQ,
- kf3=\EOR,
- kf4=\EOS,
- kf5=\E[15~,
- kf6=\E[17~,
- kf7=\E[18~,
- kf8=\E[19~,
- kf9=\E[20~,
- khome=\E[1~,
- kich1=\E[2~,
- km,
- kmous=\E[M,
- knp=\E[6~,
- kpp=\E[5~,
- lines#24,
- mir,
- msgr,
- ncv@,
- nel=\EE,
- op=\E[39;49m,
- pairs#64,
- rc=\E8,
- rev=\E[7m,
- ri=\EM,
- ritm=\E[23m,
- rmacs=^O,
- rmcup=\E[?1049l,
- rmir=\E[4l,
- rmkx=\E[?1l\E>,
- rmso=\E[27m,
- rmul=\E[24m,
- rs2=\Ec\E[?1000l\E[?25h,
- sc=\E7,
- setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm,
- sgr0=\E[m\017,
- sgr=\E[0%?%p6%t;1%;%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
- sitm=\E[3m,
- smacs=^N,
- smcup=\E[?1049h,
- smir=\E[4h,
- smkx=\E[?1h\E=,
- smso=\E[7m,
- smul=\E[4m,
- tbc=\E[3g,
- xenl,
diff --git a/tmux/tmux.conf b/tmux/tmux.conf
index f6109afd..ad420528 100644
--- a/tmux/tmux.conf
+++ b/tmux/tmux.conf
@@ -4,9 +4,6 @@ set-option -g update-environment ''
# Setting this makes each new pane a non-login shell, which suits me better
set-option -g default-command "exec $SHELL"
-# Expect a 256-color terminal
-set-option -g default-terminal 'screen-256color'
-
# Change the prefix to ^A rather than the default of ^B, because I'm a godless
# GNU Screen refugee, and also I like using ^B in my shell and in Vim more
unbind-key C-b
diff --git a/urxvt/Xresources.d/URxvt b/urxvt/Xresources.d/URxvt
deleted file mode 100644
index f4c30d54..00000000
--- a/urxvt/Xresources.d/URxvt
+++ /dev/null
@@ -1,32 +0,0 @@
-! URxvt
-URxvt.cursorBlink: on
-URxvt.cutchars: <>│
-URxvt.internalBorder: 0
-URxvt.iso14755: false
-URxvt.iso14755_52: false
-URxvt.perl-ext-common: select
-URxvt.pointerBlank: true
-URxvt.saveLines: 10000
-URxvt.scrollBar: false
-URxvt.scrollTTyKeypress: true
-URxvt.scrollTTyOutput: false
-URxvt.secondaryScroll: true
-URxvt.urgentOnBell: true
-URxvt.background: #030303
-URxvt.foreground: #E0E0E0
-URxvt.color0: #030303
-URxvt.color1: #CC0000
-URxvt.color2: #3EAA06
-URxvt.color3: #C4A000
-URxvt.color4: #3465A4
-URxvt.color5: #75507B
-URxvt.color6: #06989A
-URxvt.color7: #D3D7CF
-URxvt.color8: #303030
-URxvt.color9: #EF2929
-URxvt.color10: #7AF234
-URxvt.color11: #FCE94F
-URxvt.color12: #729FCF
-URxvt.color13: #AD7FA8
-URxvt.color14: #34E2E2
-URxvt.color15: #EEEEEC
diff --git a/urxvt/ext/select.pl b/urxvt/ext/select.pl
deleted file mode 100644
index 7701e963..00000000
--- a/urxvt/ext/select.pl
+++ /dev/null
@@ -1,85 +0,0 @@
-# Tom Ryder's choice of selection behaviours for urxvt, butchered from included
-# URxvt extension scripts.
-
-# Force me to write this properly
-use strict;
-use warnings;
-use utf8;
-
-# Require at least this version of Perl
-use 5.006;
-
-# Use plain-English variable names
-use English qw(-no_match_vars);
-
-# Set version of this extension
-our $VERSION = 1.0;
-
-# On creation, read all of cutchars into a list of regex-quoted patterns
-sub on_init {
- my ($self) = @_;
- if ( defined( my $res = $self->resource('cutchars') ) ) {
- $res = $self->locale_decode($res);
- push @{ $self->{patterns} },
- qr{\G [\Q$res\E[:space:]]* ([^\Q$res\E[:space:]]+) }msx;
- }
- return ();
-}
-
-# Handle multiple-clicking selection extension
-sub on_sel_extend {
- my ($self) = @_;
-
- # Get attributes of the current selection
- my ( $row, $col ) = $self->selection_mark;
- my $line = $self->line($row);
- my $text = $line->t;
- my $markofs = $line->offset_of( $row, $col );
- my $curlen =
- $line->offset_of( $self->selection_end ) -
- $line->offset_of( $self->selection_beg );
-
- # Find all the possible matches
- my @matches;
- if ( $markofs < $line->l ) {
-
- # `perldoc -f study` says this does nothing useful anymore since
- # version 5.16
- study $text;
-
- for my $regex ( @{ $self->{patterns} } ) {
- while ( $text =~ m{$regex}gmsx ) {
- if ( $LAST_MATCH_START[1] <= $markofs
- and $markofs <= $LAST_MATCH_END[1] )
- {
- my $ofs = $LAST_MATCH_START[1];
- my $match = $1;
-
- push @matches, [ $ofs, length $match ];
- }
- }
- }
- }
-
- # If no more clever patterns matched, just snarf the whole line
- push @matches, [ 0, ( $line->end - $line->beg + 1 ) * $self->ncol ];
-
- # Iterate over the matches to choose the shortest one
- MATCH:
- for (
- sort { ## no critic (ProhibitReverseSortBlock)
- $a->[1] <=> $b->[1]
- or $b->[0] <=> $a->[0]
- } @matches
- )
- {
- my ( $ofs, $len ) = @{$_};
- next MATCH if $len <= $curlen;
- $self->selection_beg( $line->coord_of($ofs) );
- $self->selection_end( $line->coord_of( $ofs + $len ) );
- return 1;
- }
-
- # Done
- return ();
-}
diff --git a/urxvt/xsession.d/urxvt.sh b/urxvt/xsession.d/urxvt.sh
deleted file mode 100644
index 766c2939..00000000
--- a/urxvt/xsession.d/urxvt.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-# Start X terminator emulator daemon
-urxvtd --fork --opendisplay
diff --git a/vim/after/ftplugin/python.vim b/vim/after/ftplugin/python.vim
index b5071e3b..2ca1ae89 100644
--- a/vim/after/ftplugin/python.vim
+++ b/vim/after/ftplugin/python.vim
@@ -1,3 +1,11 @@
+" The Python runtime files didn't define b:undo_ftplugin until Vim v8.1.1048;
+" if it's not set yet, set it here (to something innoccuous) so that the
+" appending :let commands in the rest of this file don't break.
+"
+if !exists('b:undo_ftplugin')
+ let b:undo_ftplugin = 'setlocal tabstop<'
+endif
+
" Use pyflakes for syntax checking and autopep8 for tidying
compiler pyflakes
if executable('autopep8')
@@ -20,7 +28,7 @@ let b:undo_ftplugin .= '|nunmap <buffer> <LocalLeader>c'
" Mappings to choose 'equalprg'
nnoremap <buffer> <LocalLeader>t
- \ :<C-U>setlocal equalprg=equalprg=autopep8\ -aaa\ --\ -<CR>
+ \ :<C-U>setlocal equalprg=autopep8\ -aaa\ --\ -<CR>
nnoremap <buffer> <LocalLeader>i
\ :<C-U>setlocal equalprg<<CR>
let b:undo_ftplugin .= '|nunmap <buffer> <LocalLeader>t'
diff --git a/vim/after/plugin/dist.vim b/vim/after/plugin/dist.vim
index 98574de8..c53ebd2c 100644
--- a/vim/after/plugin/dist.vim
+++ b/vim/after/plugin/dist.vim
@@ -7,3 +7,4 @@ unlet loaded_rrhelper
unlet loaded_spellfile_plugin
unlet loaded_tarPlugin
unlet loaded_zipPlugin
+unlet loaded_manpager_plugin
diff --git a/vim/bundle/copy_linebreak b/vim/bundle/copy_linebreak
-Subproject 6692eef760ccfc2e1b888d1d604e3e1a156fcbc
+Subproject a0004c18da5f524f62e2da6e19be1a51ce282f3
diff --git a/vim/bundle/spellfile_local b/vim/bundle/spellfile_local
-Subproject 0958f0f8d9754b2e7571b6a50f4db434b719564
+Subproject 6199ee785c6fb964292ec6e82c5b8a0f79e2606
diff --git a/vim/bundle/strip_trailing_whitespace b/vim/bundle/strip_trailing_whitespace
-Subproject 90e60095bcfcfeb60bea60ba7f51bbfac3bf469
+Subproject 03782cdaf9db6329665316e1dc2d1b8270714a3
diff --git a/vim/filetype.vim b/vim/filetype.vim
index c616babd..eea7f1f5 100644
--- a/vim/filetype.vim
+++ b/vim/filetype.vim
@@ -73,6 +73,7 @@ augroup filetypedetect
\ sources.list
\,*/etc/apt/sources.list.d/*.list
\ setfiletype debsources
+ " Desktop files
autocmd BufNewFile,BufRead
\ ?*.desktop
\,?*.directory
@@ -94,6 +95,10 @@ augroup filetypedetect
autocmd BufNewFile,BufRead
\ ?*.dot
\ setfiletype dot
+ " NFS exports
+ autocmd BufNewFile,BufRead
+ \ exports
+ \ setfiletype exports
" Forth
autocmd BufNewFile,BufRead
\ ?*.fs,?*.ft
@@ -363,6 +368,10 @@ augroup filetypedetect
autocmd BufNewFile,BufRead
\ ?*.rb
\ setfiletype ruby
+ " Rust
+ autocmd BufNewFile,BufRead
+ \ ?*.rs
+ \ setfiletype rust
" Samba config
autocmd BufNewFile,BufRead
\ smb.conf
@@ -472,10 +481,6 @@ augroup filetypedetect
autocmd BufNewFile,BufRead
\ ?*.ti
\ setfiletype terminfo
- " TextEditorAnywhere text field
- autocmd BufNewFile,BufRead
- \ TextEditorAnywhere_??_??_??.txt
- \ setfiletype textarea
" Tidy config
autocmd BufNewFile,BufRead
\ .tidyrc
@@ -518,9 +523,7 @@ augroup filetypedetect
" Add automatic commands to find .Xresources subfiles
autocmd BufNewFile,BufRead
\ .Xresources
- \,*/.Xresources.d/*
\,Xresources
- \,*/Xresources.d/*
\ setfiletype xdefaults
" XHTML files
autocmd BufNewFile,BufRead
diff --git a/vim/ftplugin/textarea.vim b/vim/ftplugin/textarea.vim
deleted file mode 100644
index 4db97b58..00000000
--- a/vim/ftplugin/textarea.vim
+++ /dev/null
@@ -1,12 +0,0 @@
-" Set mail message as an alternative filetype
-if !exists('b:alternate_filetypes')
- let b:alternate_filetypes = [&filetype, 'mail']
-endif
-
-" Stop here if the user doesn't want ftplugin mappings
-if exists('no_plugin_maps') || exists('no_textarea_maps')
- finish
-endif
-
-" #s expands to the #signature tag used in Cerb
-inoreabbrev #s #signature
diff --git a/vim/plugin/dist.vim b/vim/plugin/dist.vim
index 3a84abaa..94974f5f 100644
--- a/vim/plugin/dist.vim
+++ b/vim/plugin/dist.vim
@@ -14,3 +14,5 @@ let loaded_netrwPlugin = 1
let loaded_rrhelper = 1
" I don't need extra spelling files
let loaded_spellfile_plugin = 1
+" No thanks, just plain `less` is fine for manual pages
+let loaded_manpager_plugin = 1
diff --git a/vim/vimrc b/vim/vimrc
index f3a5a500..66c1c68f 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -2,7 +2,7 @@
" Tom Ryder (tejr)'s Literate Vimrc
" -----------------------------------
"
-" Last updated: Fri, 06 May 2022 12:23:48 +0000
+" Last updated: Sun, 14 Jan 2024 03:06:40 +0000
"
" > And I was lifted up in heart, and thought
" > Of all my late-shown prowess in the lists,
@@ -556,6 +556,14 @@ if exists('+breakindent')
set breakindent
endif
+" I use `cd` with no argument to go $HOME in the shell all the time.
+" Analogous behavior for Vim with :cd makes sense to me. I can use :pwd (or
+" my <Leader>g mapping) if I want to see where I am.
+"
+if exists('+cdhome')
+ set cdhome
+endif
+
" Rather than rejecting operations like :write or :saveas when 'readonly' is
" set or in other situations in which data might be lost, Vim should give me
" a prompt to allow me to confirm that I know what I'm doing.
@@ -798,6 +806,15 @@ set noshowcmd
"
set shortmess+=I
+" Scrolling by screen line rather than file line makes sense to me. Turn the
+" option to do so on, if it's there. This only works with mouse scrolling,
+" which I don't use, and with CTRL-E, CTRL-Y, which I should be using more
+" anyway.
+"
+if exists('+smoothscroll')
+ set smoothscroll
+endif
+
" I find the defaults of new windows opening above or to the left of the
" previous window too jarring, because I'm used to both the i3 window manager
" and the tmux terminal multiplexer doing it the other way around, in reading
@@ -812,17 +829,6 @@ set splitbelow splitright
"
set notitle
-" Vim has an internal list of terminal types that support using smoother
-" terminal redrawing, and for which 'ttyfast' is normally set, described in
-" `:help 'ttyfast'`. That list includes most of the terminals I use, but
-" there are a couple more for which the 'ttyfast' option should apply: the
-" windows terminal emulator PuTTY, and the terminal multiplexer tmux, both of
-" which I use heavily.
-"
-if &term =~# '^putty\|^tmux'
- set ttyfast
-endif
-
" We really don't want a mouse; while I use it a lot for cut and paste in X,
" it just gets in the way if the tool running in the terminal tries to use it
" too. Mouse events should be exclusively handled by the terminal emulator
@@ -1027,9 +1033,9 @@ endif
" many of these.
"
-" Use backspace as an even quicker way to switch to the current buffer's
-" alternate buffer. User nickspoons of #vim was incredulous that I had never
-" used CTRL-^ and indeed did not know about it. I have since repented.
+" I use Mosh (the mobile shell) a lot, which uses CTRL-^ as its escape key.
+" That shadows Vim's shortcut to switch to the alternate buffer. Map
+" <Backspace> to do that instead.
"
nnoremap <Backspace>
\ <C-^>
@@ -1251,13 +1257,6 @@ noremap <Leader>w
ounmap <Leader>w
sunmap <Leader>w
-" This next one just shows option state of the 'formatoptions' affecting how
-" text is automatically formatted; it doesn't change its value.
-
-"" Leader,f shows the current 'formatoptions' at a glance
-nnoremap <Leader>f
- \ :<C-U>set formatoptions?<CR>
-
" I often have to switch between US English and NZ English. The latter is
" almost exactly the same as UK English in most locales, although we use
" dollars rather than pounds. This is mostly so I remember things like
@@ -1269,6 +1268,17 @@ nnoremap <Leader>z
nnoremap <Leader>u
\ :<C-U>set spelllang=en_us<CR>
+" I've also been trying to learn French lately (2023-04-03), and having
+" a spelling check there is handy for doing my homework.
+"
+" This mapping used to show the state of 'formatoptions', but I haven't been
+" using that nearly as often lately.
+"
+" <https://sanctum.geek.nz/images/ze-cultured-frenchman.png>
+"
+nnoremap <Leader>f
+ \ :<C-U>set spelllang=fr<CR>
+
" The next mapping is also for toggling an option, but it's more complicated;
" it uses a simple plugin of mine called copy_linebreak.vim to manage several
" options at once, related to the 'wrap' option that soft-wraps text.
diff --git a/vim/vimrc.stub b/vim/vimrc.stub
index 23a90608..2acd2d10 100644
--- a/vim/vimrc.stub
+++ b/vim/vimrc.stub
@@ -1,10 +1,9 @@
" We have a big, important decision to make here.
"
" Check that we're not running in 'compatible' mode, nor that the environment
-" calls for the same, that we're running Vim v7.0.0 or newer, and that we
-" haven't been invoked as just plain `vi`. If it's all clear, we can load the
-" main vimrc file from ~/.vim/vimrc to use Vim in all of its incompatible
-" glory, and then stop sourcing the rest of this file.
+" calls for the same, and that we're running Vim v7.0.0 or newer. If it's all
+" clear, we can load the main vimrc file from ~/.vim/vimrc to use Vim in all
+" of its incompatible glory, and then stop sourcing the rest of this file.
"
if !&compatible && !exists('$POSIXLY_CORRECT')
if v:version >= 700
@@ -14,13 +13,13 @@ if !&compatible && !exists('$POSIXLY_CORRECT')
endif
" If we got this far, it means we're running a tiny, 'compatible', and/or
-" ancient version of Vim.
-"
-" So, strip out the user runtime directories from 'runtimepath', force
-" 'compatible' on, source your trusty '~/.exrc', put on your dubbed cassette
-" copy of Kraftwerk's 'Computerwelt', and start using vi v3.7 on your
-" engineering department's Sun OS 4.x server via your VT220 terminal. It's
-" July 1985, you write K&R C, and it's good for you, like raisin bran.
+" ancient version of Vim. So: strip out the user runtime dirs from
+" 'runtimepath', force 'compatible' on, :source your trusty ~/.exrc, put on
+" your dubbed cassette copy of Kraftwerk's 'Computerwelt', and start using vi
+" v3.7 on your engineering department's SunOS 2.0 server via your shiny new
+" VT220 terminal. It's December 1985, and you're going home soon for the
+" holidays. You're writing K&R C tonight. It's good for you, like raisin
+" bran.
"
set runtimepath-=~/.vim
set runtimepath-=~/.vim/after
diff --git a/x/Xresources b/x/Xresources
index 3f586a87..829b208e 100644
--- a/x/Xresources
+++ b/x/Xresources
@@ -1,2 +1,106 @@
-#include ".Xresources.d/URxvt"
-#include ".Xresources.d/XTerm"
+/* Declare our xterms have 256 colors */
+XTerm.termName: xterm-256color
+
+/**
+ * Just use "xterm" as the title, no need to complicate it with the name of the
+ * actual binary called.
+ */
+XTerm.title: xterm
+
+/**
+ * Don't pass mouse events to applications, even if they ask for it; mouse
+ * interaction with command-line tools isn't normally very well-written anyway.
+ * Better just to treat it as text.
+ */
+XTerm.vt100.allowMouseOps: false
+
+/**
+ * Don't let applications set the window title; it's usually more confusing
+ * than helpful, with things like command wrappers getting in the way.
+ */
+XTerm.vt100.allowTitleOps: false
+
+/* Don't munge characters' 8th bit with Alt, send Escape prefix instead */
+XTerm.vt100.altIsNotMeta: true
+XTerm.vt100.altSendsEscape: true
+
+/* Flash my window manager if a BEL is sounded in an xterm */
+XTerm.vt100.bellIsUrgent: true
+
+/**
+ * Stick all of the non-control ASCII characters into the same xterm selection
+ * group as the alphanumeric ones added by default, except for space and the
+ * left and right angle brackets (less-than and greater-than), because being
+ * able to click URLs quickly outweighs anything else.
+ */
+XTerm.vt100.charClass: \
+ 33-59:48, \
+ 60:60, \
+ 61:48, \
+ 62:60, \
+ 63-126:48
+
+/**
+ * Set some less harsh colors than the xterm defaults; I think I got these from
+ * somewhere else and tweaked them, but I can't remember where it was now.
+ */
+XTerm.vt100.background: rgb:03/03/03
+XTerm.vt100.foreground: rgb:e0/e0/e0
+XTerm.vt100.color0: rgb:03/03/03
+XTerm.vt100.color1: rgb:cc/00/00
+XTerm.vt100.color2: rgb:3e/aa/06
+XTerm.vt100.color3: rgb:c4/a0/00
+XTerm.vt100.color4: rgb:34/65/a4
+XTerm.vt100.color5: rgb:75/50/7b
+XTerm.vt100.color6: rgb:06/98/9a
+XTerm.vt100.color7: rgb:d3/d7/cf
+XTerm.vt100.color8: rgb:30/30/30
+XTerm.vt100.color9: rgb:ef/29/29
+XTerm.vt100.color10: rgb:7a/f2/34
+XTerm.vt100.color11: rgb:fc/e9/4f
+XTerm.vt100.color12: rgb:72/9f/cf
+XTerm.vt100.color13: rgb:ad/7f/a8
+XTerm.vt100.color14: rgb:34/e2/e2
+XTerm.vt100.color15: rgb:ee/ee/ec
+
+/**
+ * Use Ubuntu Mono as a TrueType font if I decide to switch to it, but default
+ * to using the default bitmap font.
+ */
+XTerm.vt100.faceName: xft:Ubuntu Mono
+XTerm.vt100.faceSize: 9
+XTerm.vt100.renderFont: defaultOff
+
+/**
+ * Draw our own box characters, even if the font seems to support them. Using
+ * Ubuntu Mono at least, this removes gaps between vertical lines.
+ */
+XTerm.vt100.forceBoxChars: true
+
+/**
+ * Put the terminal text contents flush against the edges of the window,
+ * otherwise things like tmux look awkward.
+ */
+XTerm.vt100.internalBorder: 0
+
+/**
+ * Jump to the end of the buffer if I write to it, but don't if there's just
+ * something new to read. Funny how the defaults are the other way around...
+ */
+XTerm.vt100.scrollKey: true
+XTerm.vt100.scrollTtyOutput: false
+
+/**
+ * Bind extra keys to copy/paste to/from CLIPBOARD rather than PRIMARY, as
+ * a simple selection does.
+ */
+XTerm.vt100.translations: #override \n\
+ Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
+ Ctrl Shift <Key>V: insert-selection(CLIPBOARD)
+
+/**
+ * Trim trailing spaces from selections; if I'm copying text from a terminal
+ * emulator window, I probably don't want it byte-perfect for hashing purposes
+ * or anything like that.
+ */
+XTerm.vt100.trimSelection: true
diff --git a/x/Xresources.d/XTerm b/x/Xresources.d/XTerm
deleted file mode 100644
index 706abd87..00000000
--- a/x/Xresources.d/XTerm
+++ /dev/null
@@ -1,24 +0,0 @@
-! XTerm
-XTerm.termName: xterm-256color
-XTerm.vt100.bellIsUrgent: true
-XTerm.vt100.internalBorder: 0
-XTerm.vt100.eightBitInput: false
-XTerm.vt100.metaSendsEscape: true
-XTerm.vt100.background: #030303
-XTerm.vt100.foreground: #E0E0E0
-XTerm.vt100.color0: #030303
-XTerm.vt100.color1: #CC0000
-XTerm.vt100.color2: #3EAA06
-XTerm.vt100.color3: #C4A000
-XTerm.vt100.color4: #3465A4
-XTerm.vt100.color5: #75507B
-XTerm.vt100.color6: #06989A
-XTerm.vt100.color7: #D3D7CF
-XTerm.vt100.color8: #303030
-XTerm.vt100.color9: #EF2929
-XTerm.vt100.color10: #7AF234
-XTerm.vt100.color11: #FCE94F
-XTerm.vt100.color12: #729FCF
-XTerm.vt100.color13: #AD7FA8
-XTerm.vt100.color14: #34E2E2
-XTerm.vt100.color15: #EEEEEC
diff --git a/xfce/terminalrc b/xfce/terminalrc
deleted file mode 100644
index a260309b..00000000
--- a/xfce/terminalrc
+++ /dev/null
@@ -1,40 +0,0 @@
-[Configuration]
-BackgroundDarkness=0.950000
-BackgroundMode=TERMINAL_BACKGROUND_TRANSPARENT
-ColorPalette=#000000;#cc0000;#4e9a06;#c4a000;#3465a4;#75507b;#06989a;#d3d7cf;#555753;#ef2929;#8ae234;#fce94f;#739fcf;#ad7fa8;#34e2e2;#eeeeec
-FontName=Monospace 9
-MiscAlwaysShowTabs=FALSE
-MiscBell=FALSE
-MiscBellUrgent=FALSE
-MiscBordersDefault=TRUE
-MiscConfirmClose=FALSE
-MiscCopyOnSelect=TRUE
-MiscCursorBlinks=FALSE
-MiscCursorShape=TERMINAL_CURSOR_SHAPE_BLOCK
-MiscCycleTabs=TRUE
-MiscDefaultGeometry=80x24
-MiscHighlightUrls=TRUE
-MiscInheritGeometry=FALSE
-MiscMenubarDefault=TRUE
-MiscMiddleClickOpensUri=FALSE
-MiscMouseAutohide=TRUE
-MiscMouseWheelZoom=TRUE
-MiscNewTabAdjacent=FALSE
-MiscRewrapOnResize=TRUE
-MiscRightClickAction=TERMINAL_RIGHT_CLICK_ACTION_CONTEXT_MENU
-MiscSearchDialogOpacity=100
-MiscShowRelaunchDialog=TRUE
-MiscShowUnsafePasteDialog=FALSE
-MiscSlimTabs=FALSE
-MiscTabCloseButtons=TRUE
-MiscTabCloseMiddleClick=TRUE
-MiscTabPosition=GTK_POS_TOP
-MiscToolbarDefault=FALSE
-MiscUseShiftArrowsToScroll=FALSE
-ScrollingBar=TERMINAL_SCROLLBAR_NONE
-ScrollingOnKeystroke=FALSE
-ShortcutsNoHelpkey=TRUE
-ShortcutsNoMenukey=TRUE
-ShortcutsNoMnemonics=TRUE
-TextBlinkMode=TERMINAL_TEXT_BLINK_MODE_FOCUSED
-TitleMode=TERMINAL_TITLE_HIDE
diff --git a/yt-dlp/config b/yt-dlp/config
deleted file mode 100644
index ae2162f5..00000000
--- a/yt-dlp/config
+++ /dev/null
@@ -1,5 +0,0 @@
-# Get WebM if we can, but keep going if not
---format 'bestvideo[ext=webm]+bestaudio[ext=webm]/best'
-
-# Save into the ~/download directory
---output ~/download/%(title)s-%(id)s.%(ext)s