From 8e7829492005649d32ad91c41f380065fcea5562 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 21:26:00 -0800 Subject: [PATCH 1/6] aliases/general: cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - use `-A` instead of `-a` for `ls`, - quote variable expansions, - don’t *assign* default expansions, - don’t alias `piano` without `pianobar`, - enable `bash-it` aliases in the default profile… --- aliases/available/general.aliases.bash | 21 +++++++++++---------- profiles/default.bash_it | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/aliases/available/general.aliases.bash b/aliases/available/general.aliases.bash index 42930ab4d2..ba4cac1b06 100644 --- a/aliases/available/general.aliases.bash +++ b/aliases/available/general.aliases.bash @@ -1,4 +1,5 @@ # shellcheck shell=bash +# shellcheck source-path=SCRIPTDIR about-alias 'general aliases' if command ls --color -d . &> /dev/null; then @@ -9,16 +10,16 @@ fi # List directory contents alias sl=ls alias la='ls -AF' # Compact view, show hidden -alias ll='ls -al' -alias l='ls -a' +alias ll='ls -Al' +alias l='ls -A' alias l1='ls -1' alias lf='ls -F' alias _='sudo' # Shortcuts to edit startup files -alias vbrc='${VISUAL:-vim} ~/.bashrc' -alias vbpf='${VISUAL:-vim} ~/.bash_profile' +alias vbrc='"${VISUAL:-vim}" ~/.bashrc' +alias vbpf='"${VISUAL:-vim}" ~/.bash_profile' # colored grep # Need to check an existing file for a pattern that will be found to ensure @@ -35,11 +36,11 @@ alias c='clear' alias cls='clear' alias edit='${EDITOR:-${ALTERNATE_EDITOR?}}' -alias pager='${PAGER:=less}' +alias pager='${PAGER:-less}' alias q='exit' -alias irc='${IRC_CLIENT:=irc}' +alias irc='${IRC_CLIENT:-irc}' # Language aliases alias rb='ruby' @@ -47,8 +48,9 @@ alias py='python' alias ipy='ipython' # Pianobar can be found here: http://github.com/PromyLOPh/pianobar/ - +if _command_exists pianobar; then alias piano='pianobar' +fi alias ..='cd ..' # Go up one directory alias cd..='cd ..' # Common misspelling for going up one directory @@ -72,8 +74,8 @@ alias rd='rmdir' alias xt='extract' # sudo editors -alias svim='sudo ${VISUAL:-vim}' -alias snano='sudo nano' +alias svim='sudo "${VISUAL:-vim}"' +alias snano='sudo "${ALTERNATE_EDITOR:-nano}"' # Display whatever file is regular file or folder function catt() { @@ -92,5 +94,4 @@ function catt() { # aliases and enable just the ones for Bash-it explicitly: # bash-it disable alias general # bash-it enable alias bash-it -# shellcheck source-path=SCRIPTDIR source "$BASH_IT/aliases/available/bash-it.aliases.bash" diff --git a/profiles/default.bash_it b/profiles/default.bash_it index 9a55f6c7de..9eab8a475d 100644 --- a/profiles/default.bash_it +++ b/profiles/default.bash_it @@ -10,3 +10,4 @@ completion system # aliases aliases general +aliases bash-it From f36793bf2b4b9a90b61c2c7a37ef05f0d34d8972 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 21:41:59 -0800 Subject: [PATCH 2/6] aliases/directory: split out directory shortcuts --- aliases/available/directory.aliases.bash | 26 ++++++++++++++++++++++++ aliases/available/general.aliases.bash | 26 ++---------------------- profiles/default.bash_it | 1 + 3 files changed, 29 insertions(+), 24 deletions(-) create mode 100644 aliases/available/directory.aliases.bash diff --git a/aliases/available/directory.aliases.bash b/aliases/available/directory.aliases.bash new file mode 100644 index 0000000000..671ceffe5e --- /dev/null +++ b/aliases/available/directory.aliases.bash @@ -0,0 +1,26 @@ +# shellcheck shell=bash +about-alias 'Shortcuts for directory commands: ls, cd, &c.' + +if command ls --color -d . &> /dev/null; then + alias ls='ls --color=auto' + # BSD `ls` doesn't need an argument (`-G`) when `$CLICOLOR` is set. +fi + +# List directory contents +alias sl=ls +alias la='ls -AF' # Compact view, show hidden +alias ll='ls -Al' +alias l='ls -A' +alias l1='ls -1' +alias lf='ls -F' + +# Change directory +alias ..='cd ..' # Go up one directory +alias cd..='cd ..' # Common misspelling for going up one directory +alias ...='cd ../..' # Go up two directories +alias ....='cd ../../..' # Go up three directories +alias -- -='cd -' # Go back + +# Create or remove directory +alias md='mkdir -p' +alias rd='rmdir' diff --git a/aliases/available/general.aliases.bash b/aliases/available/general.aliases.bash index ba4cac1b06..3cfa5727b4 100644 --- a/aliases/available/general.aliases.bash +++ b/aliases/available/general.aliases.bash @@ -2,19 +2,6 @@ # shellcheck source-path=SCRIPTDIR about-alias 'general aliases' -if command ls --color -d . &> /dev/null; then - alias ls='ls --color=auto' - # BSD `ls` doesn't need an argument (`-G`) when `$CLICOLOR` is set. -fi - -# List directory contents -alias sl=ls -alias la='ls -AF' # Compact view, show hidden -alias ll='ls -Al' -alias l='ls -A' -alias l1='ls -1' -alias lf='ls -F' - alias _='sudo' # Shortcuts to edit startup files @@ -49,15 +36,9 @@ alias ipy='ipython' # Pianobar can be found here: http://github.com/PromyLOPh/pianobar/ if _command_exists pianobar; then -alias piano='pianobar' + alias piano='pianobar' fi -alias ..='cd ..' # Go up one directory -alias cd..='cd ..' # Common misspelling for going up one directory -alias ...='cd ../..' # Go up two directories -alias ....='cd ../../..' # Go up three directories -alias -- -='cd -' # Go back - # Shell History alias h='history' @@ -66,10 +47,6 @@ if ! _command_exists tree; then alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'" fi -# Directory -alias md='mkdir -p' -alias rd='rmdir' - # Shorten extract alias xt='extract' @@ -95,3 +72,4 @@ function catt() { # bash-it disable alias general # bash-it enable alias bash-it source "$BASH_IT/aliases/available/bash-it.aliases.bash" +source "$BASH_IT/aliases/available/directory.aliases.bash" diff --git a/profiles/default.bash_it b/profiles/default.bash_it index 9eab8a475d..8a8ee26c0e 100644 --- a/profiles/default.bash_it +++ b/profiles/default.bash_it @@ -11,3 +11,4 @@ completion system # aliases aliases general aliases bash-it +aliases directory From 18e27b7b8448a04749c7e122e17392130c7a18e7 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 21:52:47 -0800 Subject: [PATCH 3/6] aliases/editor: split out editor shortcuts --- aliases/available/editor.aliases.bash | 14 ++++++++++++++ aliases/available/general.aliases.bash | 10 +--------- aliases/available/vim.aliases.bash | 6 ++++-- profiles/default.bash_it | 1 + 4 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 aliases/available/editor.aliases.bash diff --git a/aliases/available/editor.aliases.bash b/aliases/available/editor.aliases.bash new file mode 100644 index 0000000000..654f910f77 --- /dev/null +++ b/aliases/available/editor.aliases.bash @@ -0,0 +1,14 @@ +# shellcheck shell=bash +about-alias 'shortcuts for editing' + +alias edit='${EDITOR:-${ALTERNATE_EDITOR:-nano}}' +alias e='edit' + +# sudo editors +alias svim='sudo ${VISUAL:-vim}' +alias snano='sudo ${ALTERNATE_EDITOR:-nano}' +alias sedit='sudo ${EDITOR:-${ALTERNATE_EDITOR:-nano}}' + +# Shortcuts to edit startup files +alias vbrc='${VISUAL:-vim} ~/.bashrc' +alias vbpf='${VISUAL:-vim} ~/.bash_profile' diff --git a/aliases/available/general.aliases.bash b/aliases/available/general.aliases.bash index 3cfa5727b4..539940b2b2 100644 --- a/aliases/available/general.aliases.bash +++ b/aliases/available/general.aliases.bash @@ -4,10 +4,6 @@ about-alias 'general aliases' alias _='sudo' -# Shortcuts to edit startup files -alias vbrc='"${VISUAL:-vim}" ~/.bashrc' -alias vbpf='"${VISUAL:-vim}" ~/.bash_profile' - # colored grep # Need to check an existing file for a pattern that will be found to ensure # that the check works when on an OS that supports the color option @@ -22,7 +18,6 @@ fi alias c='clear' alias cls='clear' -alias edit='${EDITOR:-${ALTERNATE_EDITOR?}}' alias pager='${PAGER:-less}' alias q='exit' @@ -50,10 +45,6 @@ fi # Shorten extract alias xt='extract' -# sudo editors -alias svim='sudo "${VISUAL:-vim}"' -alias snano='sudo "${ALTERNATE_EDITOR:-nano}"' - # Display whatever file is regular file or folder function catt() { for i in "$@"; do @@ -73,3 +64,4 @@ function catt() { # bash-it enable alias bash-it source "$BASH_IT/aliases/available/bash-it.aliases.bash" source "$BASH_IT/aliases/available/directory.aliases.bash" +source "$BASH_IT/aliases/available/editor.aliases.bash" diff --git a/aliases/available/vim.aliases.bash b/aliases/available/vim.aliases.bash index f80687640b..d6383175c2 100644 --- a/aliases/available/vim.aliases.bash +++ b/aliases/available/vim.aliases.bash @@ -1,9 +1,11 @@ # shellcheck shell=bash about-alias 'vim abbreviations' -_command_exists vim || return +alias v='${VISUAL:-vim}' -alias v='vim' +if ! _command_exists vim; then + _log_warning "Without 'vim', these aliases just aren't that useful..." +fi # open the vim help in fullscreen incorporated from # https://stackoverflow.com/a/4687513 alias vimh='vim -c ":h | only"' diff --git a/profiles/default.bash_it b/profiles/default.bash_it index 8a8ee26c0e..7985e501a9 100644 --- a/profiles/default.bash_it +++ b/profiles/default.bash_it @@ -12,3 +12,4 @@ completion system aliases general aliases bash-it aliases directory +aliases editor From f076319a961fc0ab8798f8aa0299660f499faa68 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 21:54:15 -0800 Subject: [PATCH 4/6] aliases/general: move `xt` to `plugin/extract` --- aliases/available/general.aliases.bash | 3 --- plugins/available/extract.plugin.bash | 12 ++++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/aliases/available/general.aliases.bash b/aliases/available/general.aliases.bash index 539940b2b2..365b39eccd 100644 --- a/aliases/available/general.aliases.bash +++ b/aliases/available/general.aliases.bash @@ -42,9 +42,6 @@ if ! _command_exists tree; then alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'" fi -# Shorten extract -alias xt='extract' - # Display whatever file is regular file or folder function catt() { for i in "$@"; do diff --git a/plugins/available/extract.plugin.bash b/plugins/available/extract.plugin.bash index 9fc05c7d92..c10e41767a 100644 --- a/plugins/available/extract.plugin.bash +++ b/plugins/available/extract.plugin.bash @@ -1,19 +1,19 @@ -cite about-plugin +# shellcheck shell=bash about-plugin 'one command to extract them all...' # extract file(s) from compressed status -extract() { +function extract() { local opt local OPTIND=1 while getopts "hv" opt; do case "$opt" in h) - cat < options: -h show this message and exit -v verbosely list files processed -End-Of-Usage +EOU return ;; v) @@ -71,3 +71,7 @@ End-Of-Usage shift done } + +# Shorten extract +alias xt='extract' + From 32523a5e21335c6fb7fdbfe8b5dbcc0ffbfffa86 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 21:55:53 -0800 Subject: [PATCH 5/6] plugin/extract: `shfmt` --- plugins/available/extract.plugin.bash | 120 +++++++++++++------------- 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/plugins/available/extract.plugin.bash b/plugins/available/extract.plugin.bash index c10e41767a..b32a35a97a 100644 --- a/plugins/available/extract.plugin.bash +++ b/plugins/available/extract.plugin.bash @@ -3,75 +3,77 @@ about-plugin 'one command to extract them all...' # extract file(s) from compressed status function extract() { - local opt - local OPTIND=1 - while getopts "hv" opt; do - case "$opt" in - h) - cat < options: -h show this message and exit -v verbosely list files processed EOU - return - ;; - v) - local -r verbose='v' - ;; - ?) - extract -h >&2 - return 1 - ;; - esac - done - shift $((OPTIND-1)) + return + ;; + v) + local -r verbose='v' + ;; + ?) + extract -h >&2 + return 1 + ;; + esac + done + shift $((OPTIND - 1)) - [ $# -eq 0 ] && extract -h && return 1 - while [ $# -gt 0 ]; do - if [[ ! -f "$1" ]]; then - echo "extract: '$1' is not a valid file" >&2 - shift - continue - fi + [ $# -eq 0 ] && extract -h && return 1 + while [ $# -gt 0 ]; do + if [[ ! -f "$1" ]]; then + echo "extract: '$1' is not a valid file" >&2 + shift + continue + fi - local -r filename=$(basename -- $1) - local -r filedirname=$(dirname -- $1) - local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< $filename) - if [ "$filename" = "$targetdirname" ]; then - # archive type either not supported or it doesn't need dir creation - targetdirname="" - else - mkdir -v "$filedirname/$targetdirname" - fi + local -r filename=$(basename -- $1) + local -r filedirname=$(dirname -- $1) + local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< $filename) + if [ "$filename" = "$targetdirname" ]; then + # archive type either not supported or it doesn't need dir creation + targetdirname="" + else + mkdir -v "$filedirname/$targetdirname" + fi - if [ -f "$1" ]; then - case "$1" in - *.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;; - *.tar.gz|*.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;; - *.tar.xz|*.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;; - *.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;; - *.bz2) bunzip2 "$1" ;; - *.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;; - *.pax.gz) gunzip "$1"; set -- "$@" "${1:0:-3}" ;; - *.gz) gunzip "$1" ;; - *.pax) pax -r -f "$1" ;; - *.pkg) pkgutil --expand "$1" "${1:0:-4}" ;; - *.rar) unrar x "$1" ;; - *.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;; - *.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;; - *.xz) xz --decompress "$1" ;; - *.zip|*.war|*.jar|*.nupkg) unzip "$1" -d "$filedirname/$targetdirname" ;; - *.Z) uncompress "$1" ;; - *.7z) 7za x -o"$filedirname/$targetdirname" "$1" ;; - *) echo "'$1' cannot be extracted via extract" >&2;; - esac - fi + if [ -f "$1" ]; then + case "$1" in + *.tar.bz2 | *.tbz | *.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;; + *.tar.gz | *.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;; + *.tar.xz | *.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;; + *.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;; + *.bz2) bunzip2 "$1" ;; + *.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;; + *.pax.gz) + gunzip "$1" + set -- "$@" "${1:0:-3}" + ;; + *.gz) gunzip "$1" ;; + *.pax) pax -r -f "$1" ;; + *.pkg) pkgutil --expand "$1" "${1:0:-4}" ;; + *.rar) unrar x "$1" ;; + *.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;; + *.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;; + *.xz) xz --decompress "$1" ;; + *.zip | *.war | *.jar | *.nupkg) unzip "$1" -d "$filedirname/$targetdirname" ;; + *.Z) uncompress "$1" ;; + *.7z) 7za x -o"$filedirname/$targetdirname" "$1" ;; + *) echo "'$1' cannot be extracted via extract" >&2 ;; + esac + fi - shift - done + shift + done } # Shorten extract alias xt='extract' - From 1671df94f63ba6565fe1e87499b5c0f523488598 Mon Sep 17 00:00:00 2001 From: John D Pell Date: Thu, 17 Feb 2022 22:02:35 -0800 Subject: [PATCH 6/6] plugin/extract: `shellcheck` --- clean_files.txt | 1 + plugins/available/extract.plugin.bash | 29 ++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/clean_files.txt b/clean_files.txt index 54180c19fd..6a0f8ed957 100644 --- a/clean_files.txt +++ b/clean_files.txt @@ -98,6 +98,7 @@ plugins/available/colors.plugin.bash plugins/available/direnv.plugin.bash plugins/available/dirs.plugin.bash plugins/available/docker-machine.plugin.bash +plugins/available/extract.plugin.bash plugins/available/gif.plugin.bash plugins/available/git-subrepo.plugin.bash plugins/available/git.plugin.bash diff --git a/plugins/available/extract.plugin.bash b/plugins/available/extract.plugin.bash index b32a35a97a..c6ca728194 100644 --- a/plugins/available/extract.plugin.bash +++ b/plugins/available/extract.plugin.bash @@ -3,8 +3,8 @@ about-plugin 'one command to extract them all...' # extract file(s) from compressed status function extract() { - local opt - local OPTIND=1 + local opt OPTIND=1 verbose + local filename filedirname targetdirname while getopts "hv" opt; do case "$opt" in h) @@ -27,32 +27,37 @@ EOU done shift $((OPTIND - 1)) - [ $# -eq 0 ] && extract -h && return 1 - while [ $# -gt 0 ]; do - if [[ ! -f "$1" ]]; then + if [[ $# -eq 0 ]]; then + extract -h + return 1 + fi + + while [[ $# -gt 0 ]]; do + if [[ ! -f "${1:-}" ]]; then echo "extract: '$1' is not a valid file" >&2 shift continue fi - local -r filename=$(basename -- $1) - local -r filedirname=$(dirname -- $1) - local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< $filename) - if [ "$filename" = "$targetdirname" ]; then + local -r filename=$(basename -- "$1") + local -r filedirname=$(dirname -- "$1") + # shellcheck disable=SC2001 # we don't depend on `extglob`... + targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< "$filename") + if [[ "$filename" == "$targetdirname" ]]; then # archive type either not supported or it doesn't need dir creation targetdirname="" else mkdir -v "$filedirname/$targetdirname" fi - if [ -f "$1" ]; then + if [[ -f "$1" ]]; then case "$1" in *.tar.bz2 | *.tbz | *.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.gz | *.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.xz | *.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;; *.bz2) bunzip2 "$1" ;; - *.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;; + *.deb) dpkg-deb -x"${verbose}" "$1" "${1:0:-4}" ;; *.pax.gz) gunzip "$1" set -- "$@" "${1:0:-3}" @@ -61,7 +66,7 @@ EOU *.pax) pax -r -f "$1" ;; *.pkg) pkgutil --expand "$1" "${1:0:-4}" ;; *.rar) unrar x "$1" ;; - *.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;; + *.rpm) rpm2cpio "$1" | cpio -idm"${verbose}" ;; *.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;; *.xz) xz --decompress "$1" ;; *.zip | *.war | *.jar | *.nupkg) unzip "$1" -d "$filedirname/$targetdirname" ;;