aboutsummaryrefslogtreecommitdiff
path: root/sh/shrc.d
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-12-14 13:14:00 +1300
committerTom Ryder <tom@sanctum.geek.nz>2018-12-14 13:14:00 +1300
commite0ff7ac01d6439d826ff9ef6f134a7638ade714f (patch)
tree781004065fefcbfd8e543a61de3d168383e71bde /sh/shrc.d
parentMerge branch 'release/v3.1.0' (diff)
parentBump VERSION (diff)
downloaddotfiles-e0ff7ac01d6439d826ff9ef6f134a7638ade714f.tar.gz
dotfiles-e0ff7ac01d6439d826ff9ef6f134a7638ade714f.zip
Merge branch 'release/v3.2.0'v3.2.0
* release/v3.2.0: Bump VERSION Refactor some conditionals Factor out zsh ENV hack into one file Refactor "path list" not to require a subshell Correct completion for deep pass(1) directories Move filetype.vim helper funcs into autoload Fix a local var name in openssl(1ssl) completion Correct a variable ref in openssl(1ssl) completion Disable shellcheck rules for missed definition Add filenames treatment to mex(1df) completion Remove unneeded declaration Refactor some completions to avoid loops Remove unneeded stdout redirect Remove unneeded semicolon from sh "for VAR ; do" Substitute bad `continue` for `return` Add actual completion matching to git completion Apply much simpler completion to Git
Diffstat (limited to 'sh/shrc.d')
-rw-r--r--sh/shrc.d/bc.sh3
-rw-r--r--sh/shrc.d/ed.sh6
-rw-r--r--sh/shrc.d/grep.sh20
-rw-r--r--sh/shrc.d/gt.sh4
-rw-r--r--sh/shrc.d/ls.sh36
-rw-r--r--sh/shrc.d/mkcd.sh3
-rw-r--r--sh/shrc.d/path.sh33
-rw-r--r--sh/shrc.d/tree.sh2
-rw-r--r--sh/shrc.d/vr.sh11
9 files changed, 74 insertions, 44 deletions
diff --git a/sh/shrc.d/bc.sh b/sh/shrc.d/bc.sh
index aee88e09..591b4359 100644
--- a/sh/shrc.d/bc.sh
+++ b/sh/shrc.d/bc.sh
@@ -6,8 +6,9 @@
bc() {
# Add --quiet to stop the annoying welcome banner
- [ -e "$HOME"/.cache/sh/opt/bc/quiet ] &&
+ if [ -e "$HOME"/.cache/sh/opt/bc/quiet ] ; then
set -- --quiet "$@"
+ fi
# Run bc(1) with the concluded arguments
command bc "$@"
diff --git a/sh/shrc.d/ed.sh b/sh/shrc.d/ed.sh
index e6b6eee8..dc8433f6 100644
--- a/sh/shrc.d/ed.sh
+++ b/sh/shrc.d/ed.sh
@@ -12,16 +12,18 @@ ed() {
fi
# Add --verbose to explain errors
- [ -e "$HOME"/.cache/sh/opt/ed/verbose ] &&
+ if [ -e "$HOME"/.cache/sh/opt/ed/verbose ] ; then
set -- --verbose "$@"
+ fi
# Add an asterisk prompt (POSIX feature)
set -- -p\* "$@"
# Run in rlwrap(1) if available
set -- ed "$@"
- command -v rlwrap >/dev/null 2>&1 &&
+ if command -v rlwrap >/dev/null 2>&1 ; then
set -- rlwrap --history-filename=/dev/null "$@"
+ fi
# Run determined command
command "$@"
diff --git a/sh/shrc.d/grep.sh b/sh/shrc.d/grep.sh
index 43797ef5..997babc9 100644
--- a/sh/shrc.d/grep.sh
+++ b/sh/shrc.d/grep.sh
@@ -9,37 +9,43 @@ unset -v GREP_OPTIONS
grep() {
# Add --binary-files=without-match to gracefully skip binary files
- [ -e "$HOME"/.cache/sh/opt/grep/binary-files ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/binary-files ] ; then
set -- --binary-files=without-match "$@"
+ fi
# Add --color=auto if the terminal has at least 8 colors
- [ -e "$HOME"/.cache/sh/opt/grep/color ] &&
- [ "$({ tput colors||tput Co||echo 0; } 2>/dev/null)" -ge 8 ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/color ] &&
+ [ "$({ tput colors||tput Co||echo 0; } 2>/dev/null)" -ge 8 ] ; then
set -- --color=auto "$@"
+ fi
# Add --devices=skip to gracefully skip devices
- [ -e "$HOME"/.cache/sh/opt/grep/devices ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/devices ] ; then
set -- --devices=skip "$@"
+ fi
# Add --directories=skip to gracefully skip directories
- [ -e "$HOME"/.cache/sh/opt/grep/directories ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/directories ] ; then
set -- --directories=skip "$@"
+ fi
# Add --exclude to ignore .gitignore and .gitmodules files
- [ -e "$HOME"/.cache/sh/opt/grep/exclude ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/exclude ] ; then
set -- \
--exclude=.gitignore \
--exclude=.gitmodules \
"$@"
+ fi
# Add --exclude-dir to ignore version control dot-directories
- [ -e "$HOME"/.cache/sh/opt/grep/exclude-dir ] &&
+ if [ -e "$HOME"/.cache/sh/opt/grep/exclude-dir ] ; then
set -- \
--exclude-dir=.cvs \
--exclude-dir=.git \
--exclude-dir=.hg \
--exclude-dir=.svn \
"$@"
+ fi
# Run grep(1) with the concluded arguments
command grep "$@"
diff --git a/sh/shrc.d/gt.sh b/sh/shrc.d/gt.sh
index 95ab4c2f..7a52571d 100644
--- a/sh/shrc.d/gt.sh
+++ b/sh/shrc.d/gt.sh
@@ -19,7 +19,9 @@ gt() {
done
# If target isn't a directory, chop to its parent
- [ -d "$1" ] || set -- "${1%/*}"
+ if ! [ -d "$1" ] ; then
+ set -- "${1%/*}"
+ fi
# Try to change into the determined directory, or root if empty
command cd -- "${1:-/}"
diff --git a/sh/shrc.d/ls.sh b/sh/shrc.d/ls.sh
index 7e843cc7..1083dfca 100644
--- a/sh/shrc.d/ls.sh
+++ b/sh/shrc.d/ls.sh
@@ -12,26 +12,30 @@ unset -v LS_OPTIONS LS_COLORS
# Define function proper
ls() {
- # -F to show trailing indicators of the filetype
- # -q to replace control chars with '?'
+ # POSIX options:
+ ## -F to show trailing indicators of the filetype
+ ## -q to replace control chars with '?'
set -- -Fq "$@"
-
- # If output is to a terminal, add -x to format entries across, not down
- [ -t 1 ] && set -- -x "$@"
-
- # Add --block-size=K to always show the filesize in kibibytes
- [ -e "$HOME"/.cache/sh/opt/ls/block-size ] &&
+ ## -x to format entries across, not down, if output looks like a terminal
+ if [ -t 1 ] ; then
+ set -- -x "$@"
+ fi
+
+ # GNU options:
+ ## Add --block-size=K to always show the filesize in kibibytes
+ if [ -e "$HOME"/.cache/sh/opt/ls/block-size ] ; then
set -- --block-size=1024 "$@"
-
- # Add --color if the terminal has at least 8 colors
- [ -e "$HOME"/.cache/sh/opt/ls/color ] &&
- [ "$({ tput colors||tput Co||echo 0; } 2>/dev/null)" -ge 8 ] &&
+ fi
+ ## Add --color if the terminal has at least 8 colors
+ if [ -e "$HOME"/.cache/sh/opt/ls/color ] &&
+ [ "$(exec 2>/dev/null;tput colors||tput Co||echo 0)" -ge 8 ] ; then
set -- --color=auto "$@"
-
- # Add --time-style='+%Y-%m-%d %H:%M:%S' to show the date in my preferred
- # (fixed) format
- [ -e "$HOME"/.cache/sh/opt/ls/time-style ] &&
+ fi
+ ## Add --time-style='+%Y-%m-%d %H:%M:%S' to show the date in my preferred
+ ## (fixed) format
+ if [ -e "$HOME"/.cache/sh/opt/ls/time-style ] ; then
set -- --time-style='+%Y-%m-%d %H:%M:%S' "$@"
+ fi
# If the operating system is FreeBSD, there are some specific options we
# can add that might mean different things to e.g. GNU ls(1)
diff --git a/sh/shrc.d/mkcd.sh b/sh/shrc.d/mkcd.sh
index c59a8c54..cd882b51 100644
--- a/sh/shrc.d/mkcd.sh
+++ b/sh/shrc.d/mkcd.sh
@@ -1,4 +1,5 @@
# Create a directory and change into it
mkcd() {
- mkdir -p -- "$1" && command cd -- "$1"
+ command -p mkdir -p -- "$1" || return
+ command cd -- "$1"
}
diff --git a/sh/shrc.d/path.sh b/sh/shrc.d/path.sh
index b6b1820f..a854e148 100644
--- a/sh/shrc.d/path.sh
+++ b/sh/shrc.d/path.sh
@@ -5,15 +5,16 @@ path() {
case $1 in
# List current directories in PATH
- list|'') (
- path=$PATH:
- while [ -n "$path" ] ; do
- dir=${path%%:*}
- path=${path#*:}
- [ -n "$dir" ] || continue
- printf '%s\n' "$dir"
+ list|'')
+ set -- "$PATH":
+ while [ -n "$1" ] ; do
+ case $1 in
+ :*) ;;
+ *) printf '%s\n' "${1%%:*}" ;;
+ esac
+ set -- "${1#*:}"
done
- ) ;;
+ ;;
# Helper function checks directory argument makes sense
_argcheck)
@@ -33,7 +34,9 @@ path() {
# Add a directory at the start of $PATH
insert)
- [ "$#" -eq 2 ] || set -- "$1" "$PWD"
+ if ! [ "$#" -eq 2 ] ; then
+ set -- "$1" "$PWD"
+ fi
path _argcheck "$@" || return
if path check "$2" ; then
printf >&2 'path(): %s: %s already in PATH\n' "$@"
@@ -44,7 +47,9 @@ path() {
# Add a directory to the end of $PATH
append)
- [ "$#" -eq 2 ] || set -- "$1" "$PWD"
+ if ! [ "$#" -eq 2 ] ; then
+ set -- "$1" "$PWD"
+ fi
path _argcheck "$@" || return
if path check "$2" ; then
printf >&2 'path(): %s: %s already in PATH\n' "$@"
@@ -55,7 +60,9 @@ path() {
# Remove a directory from $PATH
remove)
- [ "$#" -eq 2 ] || set -- "$1" "$PWD"
+ if ! [ "$#" -eq 2 ] ; then
+ set -- "$1" "$PWD"
+ fi
path _argcheck "$@" || return
if ! path check "$2" ; then
printf >&2 'path(): %s: %s not in PATH\n' "$@"
@@ -107,7 +114,9 @@ path() {
# Check whether a directory is in PATH
check)
path _argcheck "$@" || return
- [ "$#" -eq 2 ] || set -- "$1" "$PWD"
+ if ! [ "$#" -eq 2 ] ; then
+ set -- "$1" "$PWD"
+ fi
case :$PATH: in
*:"$2":*) return 0 ;;
esac
diff --git a/sh/shrc.d/tree.sh b/sh/shrc.d/tree.sh
index d462f3e1..a7e5bef3 100644
--- a/sh/shrc.d/tree.sh
+++ b/sh/shrc.d/tree.sh
@@ -22,7 +22,7 @@ tree() {
[ -t 1 ] || exit
# Not if output terminal doesn't have at least 8 colors
- [ "$({ tput colors||tput Co||echo 0; } 2>/dev/null)" -ge 8 ]
+ [ "$(exec 2>/dev/null;tput colors||tput Co||echo 0)" -ge 8 ]
) ; then
set -- -C "$@"
diff --git a/sh/shrc.d/vr.sh b/sh/shrc.d/vr.sh
index 8b35357c..c7057ec2 100644
--- a/sh/shrc.d/vr.sh
+++ b/sh/shrc.d/vr.sh
@@ -11,9 +11,14 @@ vr() {
exit 2
fi
- # Get path from first argument, strip trailing slash
+ # Get path from first argument
path=${1:-"$PWD"}
- [ "$path" = / ] || path=${path%/}
+
+ # Strip a trailing slash
+ case $path in
+ (/) ;;
+ (*) path=${path%/} ;;
+ esac
# Step into the directory
cd -- "$path" || exit
@@ -34,7 +39,7 @@ vr() {
# that is the root (bad)
while svn info >/dev/null 2>&1 ; do
root=$PWD
- [ "$root" = / ] && break
+ ! [ "$root" = / ] || break
cd .. || exit
done
if [ -n "$root" ] ; then