Skip to content

Instantly share code, notes, and snippets.

@hacolab
Last active July 22, 2019 15:01
Show Gist options
  • Save hacolab/c67c2956503bc154e83e850d4b331f6d to your computer and use it in GitHub Desktop.
Save hacolab/c67c2956503bc154e83e850d4b331f6d to your computer and use it in GitHub Desktop.
#!/bin/sh
CMD_NAME=`basename $0`
VERSION=0.1.0
usage() {
cat <<- HELPEND
"pkg" wrapper command with fzf
USAGE:
$CMD_NAME [-l] [-niIRv] [package-name]
OPTIONS:
[source]
-l if set '-l', search installed local packages
if not set, search from all packages
[action]
-n print name of selected packages
-i print info of selected packages
-I install selected packages
-R remove selected packages
-v print this command version
HELPEND
}
# analyze options & parameters
PKG_LIST_CMD_ALL="pkg search -x"
PKG_LIST_CMD_INSTALLED="pkg info -x -I"
PKG_INFO_CMD="pkg search -f"
action=
while getopts :ilnvIR option
do
case $option in
n | i | I | R )
action=$option
;;
l )
list_cmd="$PKG_LIST_CMD_INSTALLED"
;;
v )
echo version: $VERSION && exit 0
;;
\? )
usage && exit 1
;;
esac
done
shift `expr "$OPTIND" - 1`
# set list command
[ "$action" = "I" ] && list_cmd=$PKG_LIST_CMD_ALL
[ "$action" = "R" ] && list_cmd=$PKG_LIST_CMD_INSTALLED
list_cmd=${list_cmd-$PKG_LIST_CMD_ALL}
# set search query
pkg_name=${1-"."}
search_query=
#echo "act: $action"
#echo "list: $list_cmd"
#echo "pkg: $pkg_name"
#echo "query: $search_query"
# select packages with fzf
PKG_NAME_PICK_PATTERN="s/^\\([^ ]*\\).*/\\1/"
selected_pkgs=`$list_cmd $pkg_name \
| fzf -m -q "$search_query" \
--preview "echo {} \
| sed '$PKG_NAME_PICK_PATTERN' \
| xargs $PKG_INFO_CMD" \
--preview-window right:wrap \
--bind '?:toggle-preview' \
| sed -e "$PKG_NAME_PICK_PATTERN"`
# cancelled?
[ -z "$selected_pkgs" ] && exit 0
# select action
prompt () {
[ "`echo -n`" = "-n" ] && echo "$@\c" || echo -n "$@"
}
while [ -z "$action" ]
do
echo ""
echo "# Selected packages"
echo "-------------------------------------------"
echo $selected_pkgs | tr ' ' '\n'
echo ""
echo "# Please select action"
echo "-------------------------------------------"
echo " n : print name of selected packages"
echo " i : print info of selected packages"
echo " I : install selected packages"
echo " R : remove selected packages"
echo " q : quit"
echo "-------------------------------------------"
prompt "> "
read action
case $action in
n | i | I | R )
break
;;
q )
exit 0
;;
* )
echo "[ERROR] unknown action: $action"
action=
;;
esac
done > /dev/stderr
# do action
case $action in
n )
echo $selected_pkgs | tr ' ' '\n'
;;
i )
echo $selected_pkgs | tr ' ' '\n' | xargs -L 1 $list_cmd -f
;;
I )
set -x
sudo pkg install $selected_pkgs
;;
R )
set -x
sudo pkg remove $selected_pkgs
;;
* )
echo "ERR: unknown action!"
goto :SELECT_ACTION
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment