diff options
-rw-r--r-- | VERSION | 4 | ||||
-rw-r--r-- | bin/ax.sh | 17 | ||||
-rw-r--r-- | bin/bl.awk | 5 | ||||
-rw-r--r-- | bin/bl.sh | 10 | ||||
-rw-r--r-- | bin/clog.sh | 24 | ||||
-rw-r--r-- | bin/sra.sh | 3 | ||||
-rw-r--r-- | bin/sshi.sh | 2 | ||||
-rw-r--r-- | man/man1/ax.1df | 12 | ||||
-rw-r--r-- | man/man1/clog.1df | 20 | ||||
-rw-r--r-- | sh/profile.d/editor.sh | 6 | ||||
-rw-r--r-- | sh/profile.d/visual.sh | 2 | ||||
-rw-r--r-- | sh/shrc.d/tree.sh | 1 | ||||
-rw-r--r-- | vim/doc/copy_linebreak.txt | 4 | ||||
-rw-r--r-- | vim/doc/mail_mutt.txt | 2 | ||||
-rw-r--r-- | vim/doc/strip_trailing_whitespace.txt | 2 |
15 files changed, 61 insertions, 53 deletions
@@ -1,2 +1,2 @@ -tejr dotfiles v0.22.1 -Fri Dec 29 01:10:55 UTC 2017 +tejr dotfiles v0.23.0 +Sun Jan 14 23:30:34 UTC 2018 @@ -3,8 +3,8 @@ # Count arguments case $# in - # If one argument, we assume format is %s - 1) form=%s expr=$1 ;; + # If one argument, we assume format is %s\n + 1) form='%s\n' expr=$1 ;; # If two arguments, first is format, second expression 2) form=$1 expr=$2 ;; @@ -16,12 +16,7 @@ case $# in ;; esac -# Form program -prog=$(printf ' - BEGIN { - printf "%s\\n", %s - } -' "$form" "$expr") - -# Run program -awk "$prog" +# Important note: there's little stopping the user from putting a fully-fledged +# Awk program into the expression; don't use this anywhere that code injection +# could wreck your life. See manual page ax(1df). +awk -v form="$form" 'BEGIN{printf form,('"$expr"');exit}' diff --git a/bin/bl.awk b/bin/bl.awk new file mode 100644 index 00000000..0be2fc6e --- /dev/null +++ b/bin/bl.awk @@ -0,0 +1,5 @@ +# Generate blank lines +BEGIN { + while (ARGV[1]--) + print "" +} diff --git a/bin/bl.sh b/bin/bl.sh deleted file mode 100644 index 6dd3d687..00000000 --- a/bin/bl.sh +++ /dev/null @@ -1,10 +0,0 @@ -# Generate blank lines -if [ "$#" -ne 1 ] || [ "$1" -lt 0 ] ; then - printf >&2 'bl: Non-negative line count needed as sole argument\n' - exit 2 -fi -n=0 -while [ "$n" -lt "${1:-0}" ] ; do - printf '\n' - n=$((n+1)) -done diff --git a/bin/clog.sh b/bin/clog.sh index 1b612d68..3269c508 100644 --- a/bin/clog.sh +++ b/bin/clog.sh @@ -1,17 +1,17 @@ # Record a timestamped message to a logfile, defaulting to ~/.clog -self=clog -# Ignore arguments -set -- +# Build the cat(1) command we'll run, wrapping it in rlwrap(1) if available and +# applicable. +if [ "$#" -eq 0 ] && [ -t 0 ] && command -v rlwrap >/dev/null 2>&1 ; then + set -- rlwrap --history-filename=/dev/null cat -- "${@:--}" +else + set -- cat -- "${@:--}" +fi -# If we have rlwrap, quietly use it -command -v rlwrap >/dev/null 2>&1 && - set -- rlwrap --history-filename=/dev/null -C "$self" "$@" - -# Write the date, the standard input (rlwrapped if applicable), and two dashes -# to $CLOG, defaulting to ~/.clog. +# Write the date, the input, and two dashes to $CLOG, defaulting to ~/.clog. +clog=${CLOG:-"$HOME"/.clog} { date - "$@" cat - - printf '%s\n' -- -} >>"${CLOG:-"$HOME"/.clog}" + "$@" + printf -- '--\n' +} >> "$clog" @@ -3,5 +3,6 @@ exec 3<&0 sls | while read -r hostname ; do printf 'sra: %s\n' "$hostname" - ssh -qt -- "$hostname" "$@" <&3 # shellcheck disable=SC2029 + # shellcheck disable=SC2029 + ssh -qt -- "$hostname" "$@" <&3 done diff --git a/bin/sshi.sh b/bin/sshi.sh index 0d1591f1..4872765d 100644 --- a/bin/sshi.sh +++ b/bin/sshi.sh @@ -20,7 +20,7 @@ printf '%s\n' "$SSH_CONNECTION" "${SSH_TTY:-unknown}" | sh=$(dig -x "$si" +short 2>/dev/null | sed 's/\.$//;1q') # Print the results in a human-readable format - printf "%s:%u -> %s:%u (%s)\n" \ + printf '%s:%u -> %s:%u (%s)\n' \ "${ch:-"$ci"}" "$cp" \ "${sh:-"$si"}" "$sp" \ "$tty" diff --git a/man/man1/ax.1df b/man/man1/ax.1df index b3218d37..40125167 100644 --- a/man/man1/ax.1df +++ b/man/man1/ax.1df @@ -1,15 +1,21 @@ -.TH AX 1df "July 2016" "Manual page for ax" +.TH AX 1df "January 2018" "Manual page for ax" .SH NAME .B ax \- evaluate an awk expression .SH SYNOPSIS -.B ax '2.0+3.0' +.B ax +\&'2.0+3.0' .br -.B ax %.2f 'sin(2)' +.B ax +\&'%.2f\\n' 'sin(2)' .SH DESCRIPTION .B ax evaluates an expression given on the command line with awk(1) and prints its result using awk's printf, with an optional format specified preceding the expression. +.SH SECURITY +Note that the second argument has no evaluation protection on it. There's very +little to stop a user putting a fully-fledged awk program in as the second +argument if they needed to. Don't accept untrusted user input in this argument! .SH AUTHOR Tom Ryder <tom@sanctum.geek.nz> diff --git a/man/man1/clog.1df b/man/man1/clog.1df index 43193076..f9300347 100644 --- a/man/man1/clog.1df +++ b/man/man1/clog.1df @@ -3,18 +3,28 @@ .B clog \- record timestamped logs in a file .SH SYNOPSIS +$ .B clog .br -getting real tired of all this overengineering +Getting real tired of all this overengineering. .br ^D +.br +$ +.B clog +file1 file2 +.br +$ +command | +.B clog .SH DESCRIPTION .B clog -receives a message on stdin, timestamps it with a leading date(1), and writes -it to the file with path in environment variable CLOG, defaulting to ~/.clog, -terminating each entry with two hyphens. +receives a message on stdin or from the file arguments, timestamps it with a +leading date(1), and writes it to the file with path in environment variable +CLOG, defaulting to ~/.clog, terminating each entry with two hyphens. .P -If rlwrap(1) is found, it will be used for the line editing. If not, just the +If there are no files to read and standard input is coming from a terminal, and +rlwrap(1) is found, it will be used for the line editing. If not, just the terminal's cooked mode will be used. .SH AUTHOR Tom Ryder <tom@sanctum.geek.nz> diff --git a/sh/profile.d/editor.sh b/sh/profile.d/editor.sh index debb93b6..d8d13e0a 100644 --- a/sh/profile.d/editor.sh +++ b/sh/profile.d/editor.sh @@ -1,7 +1,7 @@ # Ideally, we'd use plain old ed(1), but many Linux distributions don't install # it by default if command -v ed >/dev/null 2>&1 ; then - EDITOR=ed + EDITOR='ed' # Failing that, if the system's implementation of ex(1) looks like Vim and we # have exm(1df) in our $PATH, use the latter to work around Vim's ex mode @@ -15,11 +15,11 @@ elif ( (*) exit 1 ;; esac ) >/dev/null 2>&1 ; then - EDITOR=exm + EDITOR='exm' # Otherwise, we can just call ex(1) directly else - EDITOR=ex + EDITOR='ex' fi export EDITOR diff --git a/sh/profile.d/visual.sh b/sh/profile.d/visual.sh index 38ab9893..119d81c7 100644 --- a/sh/profile.d/visual.sh +++ b/sh/profile.d/visual.sh @@ -1,3 +1,3 @@ # Use first found implementation of vi(1) -VISUAL=vi +VISUAL='vi' export VISUAL diff --git a/sh/shrc.d/tree.sh b/sh/shrc.d/tree.sh index ca134fe2..d462f3e1 100644 --- a/sh/shrc.d/tree.sh +++ b/sh/shrc.d/tree.sh @@ -12,6 +12,7 @@ tree() { case $opt in n) n=1 ;; C) C=1 ;; + *) ;; esac done [ -z "$C" ] || exit 0 diff --git a/vim/doc/copy_linebreak.txt b/vim/doc/copy_linebreak.txt index 7efbad4b..581c6166 100644 --- a/vim/doc/copy_linebreak.txt +++ b/vim/doc/copy_linebreak.txt @@ -26,11 +26,11 @@ There are no default key mappings to any of these targers; you should define them yourself in your |vimrc|. For example: > :nmap <Leader>b <Plug>CopyLinebreakToggle - +< COMMANDS *copy_linebreak-commands* If the |+user_commands| feature is available, commands provided are: -> + `:CopyLinebreakEnable`: *:CopyLinebreakEnable* Enable copy-paste friendly line break options. `:CopyLinebreakDisable`: *:CopyLinebreakDisable* diff --git a/vim/doc/mail_mutt.txt b/vim/doc/mail_mutt.txt index c3f8afaa..1129651d 100644 --- a/vim/doc/mail_mutt.txt +++ b/vim/doc/mail_mutt.txt @@ -23,7 +23,7 @@ agent, as the initial content of a new message. :.MailMutt :3,6MailMutt :95,$MailMutt - +< MAPPINGS *mail_mutt-mappings* Three <Plug> mapping targets are also provided for convenience. No attempt is diff --git a/vim/doc/strip_trailing_whitespace.txt b/vim/doc/strip_trailing_whitespace.txt index 9e2907d4..2b220231 100644 --- a/vim/doc/strip_trailing_whitespace.txt +++ b/vim/doc/strip_trailing_whitespace.txt @@ -27,7 +27,7 @@ mappable in any mode. There is no default key mapping to the target; you should define this yourself in your |vimrc|. For example: > :nmap <Leader>x <Plug>StripTrailingWhitespace> - +< AUTHOR *strip_trailing_whitespace-author* Written and maintained by Tom Ryder <tom@sanctum.geek.nz>. |