X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=gopher.sh;h=91a02bb497360e3e3cfe32741685062dc901c56d;hb=a1fd1565357206c988b3c44bf868314cf0e8e60f;hp=6b16f264bed62a596d1feefe2f826639f0e0cab7;hpb=da184edf3222e7d0684ce1467b520bfbff52f127;p=gofetch.git diff --git a/gopher.sh b/gopher.sh index 6b16f26..91a02bb 100755 --- a/gopher.sh +++ b/gopher.sh @@ -11,12 +11,18 @@ # download: fake mode to download the result without changes # ENV variables: -# LESS: will be used with 'less' (think: "export LESS=-r") +# 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" @@ -44,22 +50,42 @@ SL= EL= if [ "$LINK_COLOR" != "-" ]; then SL="`tput setf $LINK_COLOR``tput setaf $LINK_COLOR`" - EL="`tput init`"; + EL="`tput init`" + export LESS="${LESS}-R" fi -PREFIX="[0-9h]" +# 'dialog' or text +if [ "$USE_DIALOG" = "" ]; then + if dialog --help >/dev/null 2>&1; then + USE_DIALOG=1 + else + USE_DIALOG=0 + fi +fi + +# Invert image viewer +if [ "$INVERT" = 1 ]; then + INVERT="--invert" +else + INVERT= +fi -# $0 [FILE] +PREFIX="[0-9hIg+]" + +# $0 [FILE] (dialog) # Display a gopher menu for the given resource cat_menu() { i=0 cat "$1" | grep "^i\|^$PREFIX" | while read ln; do - ln="`echo "$ln" | cut -f1`" if echo "$ln" | grep "^i" >/dev/null 2>&1; then - echo "$ln" | 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=`printf %2.f $i` + [ $i -le 9 ] && i=0$i field="`echo "$ln" | cut -c1`" case "$field" in 0) typ='TXT';; @@ -67,14 +93,16 @@ cat_menu() { 7) typ='(?)';; # query 8) typ='TEL';; # TELnet (not TELephone) h) typ='WEB';; # HTML - g) typ='GIF';; I) typ='IMG';; + g) typ='GIF';; +) typ='SVR';; # redundant server *) typ='!!!';; esac - echo "$ln" | sed "s:^.\\(.*\\):$typ $i $SL\\1$EL:g" - #else - # Bad line + 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 } @@ -94,7 +122,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,18 +141,51 @@ download) 0) cat "$tmp" | less ;; -1) +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 goto_server="`getsel "$tmp" $index 3`" 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 done ;; @@ -142,19 +203,23 @@ download) echo "" | less ;; g|I) - if convert -h >/dev/null 2>&1; then - if jp2a -h >/dev/null 2>&1; then + 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" - # not supported: --chars=" ░▒▓█" - jp2a --border --colors --chars=" .-+=o8#"\ + jp2a --border --chars=" .-+=o8#"\ + $INVERT \ --width=74 "$tmp.jpg" | less else - echo "required program not found to view images: jp2a" \ + echo "required program not found to view images: convert" \ | less fi else - echo "required program not found to view images: convert" \ - | less + echo "required program not found to view images:" \ + jp2a or img2aa | less fi ;; *) @@ -162,3 +227,4 @@ g|I) exit 3 ;; esac +