X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=gopher.sh;h=0ec852b0cf9f1dbe15def858d60f295ac1f756a7;hb=61fcec09f7f5d1361d763a35bcd3f966ed0aef88;hp=b1bda9bca700b5c573eb97715f6b6f5e28210fa3;hpb=1ad44e822af9e74ddd04896eed6fbbab3de65572;p=gofetch.git diff --git a/gopher.sh b/gopher.sh index b1bda9b..0ec852b 100755 --- a/gopher.sh +++ b/gopher.sh @@ -11,23 +11,38 @@ # download: fake mode to download the result without changes # ENV variables: +# USE_DIALOG: force the usage of the command 'dialog' +# : true if dialog is found +# 0 : do not +# 1 : force the use of dialog # LINK_COLOR: escape sequences colour (def: 2) # - : means no escape sequence # 1 : means colour 1 # 2 : means colour 2 # [...] +# INVERT : invert the output for image viewing (for white backgrounds) +# 0 : do not invert (default) +# 1 : invert SERVER="$1" SELECTOR="$2" PORT="$3" MODE="$4" +PREFIX="[0-9hIg+]" + # Defaults: [ "$PORT" = "" ] && PORT=70 if [ "$MODE" = "" ]; then # "" or dir-like selector? -> 1 ; if not -> 0 echo "$SELECTOR" | grep "/$" >/dev/null && MODE=1 || MODE=0 [ "$SELECTOR" = "" ] && MODE=1 + + # check explicit modes: + if echo "$SELECTOR" | grep "^/\($PREFIX\|download\)/" >/dev/null; then + MODE="`echo "$SELECTOR" | cut -f2 -d/`" + SELECTOR="`echo "$SELECTOR" | sed 's:^/[^/]*/::'`" + fi fi if [ "$SERVER" = "" ]; then @@ -44,18 +59,36 @@ EL= if [ "$LINK_COLOR" != "-" ]; then SL="`tput setf $LINK_COLOR``tput setaf $LINK_COLOR`" EL="`tput init`" - LESS="${LESS}-R" + export LESS="${LESS}-R" fi -PREFIX="[0-9hIg]" +# 'dialog' or text +if [ "$USE_DIALOG" = "" ]; then + if dialog --help >/dev/null 2>&1; then + USE_DIALOG=1 + else + USE_DIALOG=0 + fi +fi -# $0 [FILE] +# Invert image viewer +if [ "$INVERT" = 1 ]; then + INVERT="--invert" +else + INVERT= +fi + +# $0 [FILE] (dialog) # Display a gopher menu for the given resource cat_menu() { i=0 cat "$1" | grep "^i\|^$PREFIX" | while read ln; do if echo "$ln" | grep "^i" >/dev/null 2>&1; then - echo "$ln" | cut -f1 | sed "s:^.: :g" + if [ "$2" != dialog ]; then + echo "$ln" | sed "s:^.\([^\t]*\).*$: \1:g" + else + echo "$ln" | sed 's:":'"''"':g;s:^.\([^\t]*\).*$:" " "\1":g' + fi elif echo "$ln" | grep "^$PREFIX" >/dev/null 2>&1; then i=`expr $i + 1` [ $i -le 9 ] && i=0$i @@ -71,7 +104,11 @@ cat_menu() { +) typ='SVR';; # redundant server *) typ='!!!';; esac - echo "$ln" | sed "s:^.\\([^\t]*\\).*:$typ $i $SL\\1$EL:g" + if [ "$2" != dialog ]; then + echo "$ln" | sed "s:^.\\([^\t]*\\).*:$typ $i $SL\\1$EL:g" + else + echo "$ln" | sed "s:"'"'":'':g;s:^.\\([^\t]*\\).*:"'"'"$typ $i"'"'" "'"\1"'":g" + fi fi done } @@ -91,7 +128,7 @@ getsel() { # Save page content to 'tmp' file tmp="`mktemp -t gofetch.current_page.XXXXXX`" finish() { - rm -rf "$tmp" "$tmp.jpg" + rm -rf "$tmp" "$tmp.jpg" "$tmp.menu" "$tmp.choice" } trap finish EXIT @@ -113,8 +150,38 @@ download) 1|+) CHOICE=start while [ "$CHOICE" != "" ]; do - cat_menu "$tmp" | less - read -p "[$SELECTOR]: " CHOICE + if [ "$USE_DIALOG" = 1 ]; then + > "$tmp.menu" + cat_menu "$tmp" dialog | while read ln; do + echo -n " $ln" >> "$tmp.menu" + done + [ "$LINES" = "" ] && LINES=`tput lines` + [ "$COLUMNS" = "" ] && COLUMNS=`tput cols` + title="$SERVER: $SELECTOR" + dialog --extra-button --extra-label Back \ + --cancel-label Exit \ + --no-shadow \ + --menu "$title" \ + "$LINES" "$COLUMNS" "$LINES" \ + --file "$tmp.menu" 2>"$tmp.choice" + val=$? + clear + + if [ $val = 3 ]; then + CHOICE="" + elif [ $val = 1 ]; then + CHOICE="q" + else + CHOICE="`cat "$tmp.choice" | cut -c5-`" + fi + + rm "$tmp.menu" + rm "$tmp.choice" + else + cat_menu "$tmp" | less + read -p "[$SELECTOR]: " CHOICE + fi + [ "$CHOICE" = q ] && exit 255 # force-quit index="`expr 1 \* "$CHOICE" 2>/dev/null`" if [ "$index" != "" ]; then @@ -122,6 +189,7 @@ download) goto_sel="`getsel "$tmp" $index 2`" goto_port="`getsel "$tmp" $index 4`" goto_mode="`getsel "$tmp" $index 1 | cut -c1`" + echo "Digging to [$goto_server:$goto_port] [$goto_sel]..." sh "$0" "$goto_server" "$goto_sel" "$goto_port" "$goto_mode" [ $? = 255 ] && exit 255 # force-quit fi @@ -143,11 +211,13 @@ download) g|I) if img2aa --help >/dev/null 2>&1; then img2aa --mode=DITHERING \ + $INVERT \ --width=74 "$tmp" | less elif jp2a -h >/dev/null 2>&1; then if convert -h >/dev/null 2>&1; then convert "$tmp" "$tmp.jpg" jp2a --border --chars=" .-+=o8#"\ + $INVERT \ --width=74 "$tmp.jpg" | less else echo "required program not found to view images: convert" \