Skip to content

Commit

Permalink
Fix shellcheck warnings and errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
iridakos committed Mar 8, 2018
1 parent eb01f9c commit dae1cbd
Showing 1 changed file with 38 additions and 23 deletions.
61 changes: 38 additions & 23 deletions goto.bash
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,15 @@ USAGE
# Helpful for ~, ., .. paths
function _goto_expand_directory()
{
printf "$(cd "$1" 2>/dev/null && pwd)"
cd "$1" 2>/dev/null && pwd
}

# Lists regstered aliases.
function _goto_list_aliases()
{
local IFS=$'\n'
if [ -f ~/.goto ]; then
echo "$(sed '/^\s*$/d' ~/.goto 2>/dev/null)"
sed '/^\s*$/d' ~/.goto 2>/dev/null
else
echo "You haven't configured any directory aliases yet."
fi
Expand All @@ -110,13 +110,16 @@ function _goto_register_alias()
return
fi

local resolved=$(_goto_find_alias_directory $1)
local resolved
resolved=$(_goto_find_alias_directory "$1")

if [ -n "$resolved" ]; then
_goto_error "alias '$1' exists"
return
fi

local directory="$(_goto_expand_directory "$2")"
local directory
directory=$(_goto_expand_directory "$2")
if [ -z "$directory" ]; then
_goto_error "failed to register '$1' to '$2' - can't cd to directory"
return
Expand All @@ -135,45 +138,55 @@ function _goto_unregister_alias
return
fi

local resolved=$(_goto_find_alias_directory $1)
local resolved
resolved=$(_goto_find_alias_directory "$1")
if [ -z "$resolved" ]; then
_goto_error "alias '$1' does not exist"
return
fi

# Delete entry from file.
echo "$(sed "/^$1 /d" ~/.goto)" > ~/.goto
sed "/^$1 /d" ~/.goto > ~/.goto_ && mv ~/.goto_ ~/.goto
echo "Alias '$1' unregistered successfully."
}

# Unregisters aliases whose directories no longer exist.
function _goto_cleanup()
{
while IFS='' read -r entry || [[ -n "$entry" ]]; do
al=$(echo $entry | sed 's/ .*//')
dir=$(echo $entry | sed 's/[^ ]* //')
local match al dir

mapfile -t matches < <(cat ~/.goto 2>/dev/null)

for i in "${!matches[@]}"; do
IFS=' ' read -r -a match <<< "${matches[$i]}"

al="${match[0]}"
dir="${match[*]:1}"

if [ -n "$al" ] && [ ! -d "$dir" ]; then
echo "Cleaning up: $al - $dir"
_goto_unregister_alias $al
_goto_unregister_alias "$al"
fi
done <<< "$(cat ~/.goto 2>/dev/null)"
done
}

# Changes to the given alias' directory
function _goto_directory()
{
local target=$(_goto_resolve_alias "$1")
local target
target=$(_goto_resolve_alias "$1")

if [ -n "$target" ]; then
cd "$target"
cd "$target" || _goto_error "Failed to goto '$target'"
fi
}

# Fetches the alias directory.
function _goto_find_alias_directory()
{
local resolved=$(sed -n "/^$1 /p" ~/.goto 2>/dev/null | sed 's/[^ ]* //')
local resolved

resolved=$(sed -n "/^$1 /p" ~/.goto 2>/dev/null | sed 's/[^ ]* //')
echo "$resolved"
}

Expand All @@ -187,7 +200,9 @@ function _goto_error()
# Fetches alias directory, errors if it doesn't exist.
function _goto_resolve_alias()
{
local resolved=$(_goto_find_alias_directory "$1")
local resolved

resolved=$(_goto_find_alias_directory "$1")
if [ -z "$resolved" ]; then
_goto_error "unregistered alias $1"
echo ""
Expand All @@ -199,22 +214,22 @@ function _goto_resolve_alias()
# Completes the goto function with the available commands
function _complete_goto_commands()
{
COMPREPLY=($(compgen -W "-r --register -u --unregister -l --list -c --cleanup" -- "$1"))
mapfile -t COMPREPLY < <(compgen -W '-r --register -u --unregister -l --list -c --cleanup' -- "$1")
}

# Completes the goto function with the available aliases
function _complete_goto_aliases()
{
local IFS=$'\n' expr
local IFS=$'\n' matches

local matches=($(sed -n "/^$1/p" ~/.goto 2>/dev/null))
mapfile -t matches < <(sed -n "/^$1/p" ~/.goto 2>/dev/null)

if [ "${#matches[@]}" -eq "1" ]; then
# remove the filenames attribute from the completion method
compopt +o filenames 2>/dev/null

# if you find only one alias don't append the directory
COMPREPLY=$(printf ${matches[0]} | sed 's/ .*//')
COMPREPLY=("${matches[0]// *}")
else
for i in "${!matches[@]}"; do
# remove the filenames attribute from the completion method
Expand All @@ -223,11 +238,11 @@ function _complete_goto_aliases()
if ! [[ $(uname -s) =~ Darwin* ]]; then
matches[$i]=$(printf '%*s' "-$COLUMNS" "${matches[$i]}")

COMPREPLY+=($(compgen -W "${matches[$i]}"))
COMPREPLY+=("$(compgen -W "${matches[$i]}")")
else
al=$(echo ${matches[$i]} | sed 's/ .*//')
al=$("${matches[$i]// */}")

COMPREPLY+=($(compgen -W "$al"))
COMPREPLY+=("$(compgen -W "$al")")
fi
done
fi
Expand Down Expand Up @@ -261,7 +276,7 @@ function _complete_goto()

if [[ $prev = "-r" ]] || [[ $prev = "--register" ]]; then
# prompt with directories only if user tries to register an alias
COMPREPLY=($(compgen -d -- "$cur"))
mapfile -t COMPREPLY < <(compgen -d -- "$cur")
fi
fi
}
Expand Down

0 comments on commit dae1cbd

Please sign in to comment.