-
-
Save hacolab/c67c2956503bc154e83e850d4b331f6d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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