Guest User

Untitled

a guest
Apr 23rd, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.58 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. _fbcmd() {
  4.  
  5.     __msgbox() {
  6.         text=`cat`
  7.         NL="
  8. "
  9.         w=`echo -ne "$text" | wc -L`
  10.         h=`echo -ne "$text" | wc -l`
  11.         x=$[ ( $COLUMNS - $w ) / 2 - 4 ]
  12.         y=$[ ( $LINES  -  $h ) / 2 - 2 ]
  13.         roof=`printf %${w}s " "`
  14.         text=$roof$NL${roof// /=}$NL$text$NL${roof// /=}$NL$roof
  15.        
  16.         local IFS=$NL
  17.         for line in $text; do
  18.             if [ "$line" != "$roof" ]; then
  19.                 pre="  |"
  20.                 suf=`printf %$(( $w - ${#line} ))s ""`"|  "
  21.             else
  22.                 pre="   "
  23.                 suf="   "
  24.             fi
  25.             echo -ne "[${y};${x}H$pre$line$suf" >&2
  26.             let y++
  27.         done
  28.     }
  29.  
  30.     local prevw curw gen flist
  31.     local prev cur
  32.     local prefix suffix
  33.     local NL=$'\n'
  34.     COMPREPLY=()
  35.     prevw=${COMP_WORDS[COMP_CWORD-1]}
  36.     curw=${COMP_WORDS[COMP_CWORD]}
  37.     gen=
  38.     flist=0
  39.     if [ $COMP_CWORD = 1 ]; then
  40.         curw=${curw^^*}
  41.         gen="ADDALBUM ADDPERM ADDPIC ADDPICD ALBUMS ALLINFO APICS AUTH COMMENT DELPOST DISPLAY EVENTS FEED1 FEED2 FEEDLINK FEEDNOTE FEVENTS FGROUPS FINBOX FINFO FLAST FONLINE FPICS FQL FRIENDS FSTATUS FSTREAM FULLPOST GO HELP HOME INBOX LIKE LIMITS LOADDISP LOADINFO LOADNOTE MSG MUTUAL MYWALL NOTICES NOTIFY NSEND OPICS PINBOX POST PPICS PPOST RECENT RESET RESTATUS RSVP SAVEDISP SAVEINFO SAVEPREF SENTMAIL SFILTERS SHOWPERM SHOWPREF STATUS STREAM TAGPIC UFIELDS UPDATE USAGE VERSION WALLPOST WHOAMI"
  42.     else
  43.         case "${COMP_WORDS[1]}" in
  44.         ADDPIC|ADDPICD)
  45.             case $COMP_CWORD in
  46.             2)
  47.                 _get_comp_words_by_ref cur prev
  48.                 if [ "${COMP_WORDS[1]}" = "ADDPICD" ]; then
  49.                     _filedir -d
  50.                 else
  51.                     _filedir '@([jJ][pP]?([eE])[gG])'
  52.                 fi
  53.                 ;;
  54.             3)
  55.                 fbcmd ALBUMS | __msgbox
  56.                 ;;
  57.             esac
  58.             ;;
  59.         ALBUMS|ALLINFO|FEVENTS|FGROUPS|FINBOX|FLAST|FONLINE|FPICS|FRIENDS|FSTATUS|FSTREAM|MUTUAL|NSEND|OPICS|PPICS|RECENT|WALLPOST)
  60.             flist=1
  61.             case "${COMP_WORDS[1]}" in
  62.             FPICS|OPICS|PPICS)
  63.                 if [ $COMP_CWORD -eq 3 ]; then
  64.                     _get_comp_words_by_ref cur prev
  65.                     _filedir -d
  66.                     flist=0
  67.                 fi;;
  68.             FSTREAM)
  69.                 if [ $COMP_CWORD -eq 3 ]; then
  70.                     gen="count new"
  71.                     flist=0
  72.                 fi;;
  73.             RECENT)
  74.                 if [ $COMP_CWORD -eq 3 ]; then
  75.                     gen="count"
  76.                     flist=0
  77.                 fi;;
  78.             esac
  79.             ;;
  80.         APICS)
  81.             case $COMP_CWORD in
  82.             2)
  83.                 fbcmd ALBUMS | __msgbox
  84.                 ;;
  85.             3)
  86.                 _get_comp_words_by_ref cur prev
  87.                 _filedir -d
  88.                 ;;
  89.             esac;;
  90.         FINFO)
  91.             case $COMP_CWORD in
  92.             2)
  93.                 gen="$(fbcmd UFIELDS | sed -ne '2,$p')"
  94.                 if expr "$curw" : ".*," 2>/dev/null >&2; then
  95.                     prefix="${curw%,*},"
  96.                     curw=${curw##*,}
  97.                 else
  98.                     prefix=
  99.                 fi
  100.                 #suffix=,
  101.                 COMPREPLY=($(compgen -P "$prefix" -S "$suffix" -W "$gen" -- $curw))
  102.                 ;;
  103.             3)
  104.                 flist=1
  105.                 ;;
  106.             esac
  107.             ;;
  108.         FQL)
  109.             # FIXME
  110.             ;;
  111.         GO)
  112.             gen="access album app auth contribute editapps event faq github group help home inbox install link msg notice post stream update wall wiki"
  113.             ;;
  114.         INBOX|PINBOX|SENTMAIL)
  115.             gen="count unread new"
  116.             ;;
  117.         MYWALL)
  118.             gen="count new"
  119.             ;;
  120.         NOTICES)
  121.             gen="unread markread"
  122.             ;;
  123.         LIMITS|NOTIFY|RESET|SFILTERS|SHOWPERM|UFIELDS|WHOAMI)
  124.             # no parameter
  125.             ;;
  126.         POST)
  127.             case $COMP_CWORD in
  128.             2)
  129.                 gen="IMG MP3 FLASH _message_";;
  130.             *)
  131.                 case "${COMP_WORDS[2]}" in
  132.                 IMG)
  133.                     case $COMP_CWORD in
  134.                     3)  gen="_message_";;
  135.                     4)  gen="_img_src_";;
  136.                     5)  gen="_img_link_";;
  137.                     6)  gen="_name_";;
  138.                     7)  gen="_link_";;
  139.                     8)  gen="_caption_";;
  140.                     9)  gen="_description_";;
  141.                     esac;;
  142.                 MP3)
  143.                     case $COMP_CWORD in
  144.                     3)  gen="_message_";;
  145.                     4)  gen="_mp3_src_";;
  146.                     5)  gen="_title_";;
  147.                     6)  gen="_artist_";;
  148.                     7)  gen="_album_";;
  149.                     8)  gen="_name_";;
  150.                     9)  gen="_link_";;
  151.                     10) gen="_caption_";;
  152.                     11) gen="_description_";;
  153.                     esac;;
  154.                 FLASH)
  155.                     case $COMP_CWORD in
  156.                     3)  gen="_message_";;
  157.                     4)  gen="_swf_src_";;
  158.                     5)  gen="_img_src_";;
  159.                     6)  gen="_name_";;
  160.                     7)  gen="_link_";;
  161.                     8)  gen="_caption_";;
  162.                     9)  gen="_description_";;
  163.                     esac;;
  164.                 *)
  165.                     case $COMP_CWORD in
  166.                     3)  gen="_name_";;
  167.                     4)  gen="_link_";;
  168.                     5)  gen="_caption_";;
  169.                     6)  gen="_description_";;
  170.                     esac;;
  171.                 esac;;
  172.             esac;;
  173.         RSVP)
  174.             case $COMP_CWORD in
  175.             2)
  176.                 fbcmd EVENTS | __msgbox
  177.                 ;;
  178.             3)
  179.                 gen="yes maybe no";;
  180.             esac
  181.             ;;
  182.         STREAM)
  183.             case $COMP_CWORD in
  184.             2)
  185.                 oldIFS="$IFS"
  186.                 IFS=$NL
  187.                 gen="$(fbcmd SFILTERS -csv | cut -f3 -d, | sed -ne 's/[ ]/\\\\&/g; 2,$s/^/\\\\#/p')"        # FIXME: escape `#'
  188.                 COMPREPLY=($(compgen -W "$gen" -- ${curw//\\/\\\\}))
  189.                 IFS="$oldIFS"
  190.                 ;;
  191.             3)
  192.                 gen="count new";;
  193.             esac
  194.             ;;
  195.         *)
  196.             fbcmd | awk "/^[ ]*${COMP_WORDS[1]}/,/^$/" | __msgbox
  197.             ;;
  198.         esac
  199.         if [ ."${curw::1}" = .- ]; then
  200.             gen="-afile -asave -af -csvf -cfail -efile -edf -esave -emask -debug -fmask -gid -ch -fbr -fdf -fd -snip -tid -ff -key -msave -mfile \
  201.                  -mbr -mdf -md -nfile -nbr -ndf -nsave -nd -nid -idle -of -pdf -pr -prd -paid -pd -plink -psrc -psize -pskip -pfile -ppsize -pf \
  202.                  -bl -clean -pad -csv -hdr -wrap -cut -cols -q -cnew -id -stdf -std -tag -sbr -sdf -ssave -sap -satt -scom -sd -slikes -sid -t"
  203.         fi
  204.     fi
  205.     if [ $flist -eq 1 ]; then
  206.         if expr "$curw" : ".*," 2>/dev/null >&2; then
  207.             prefix="${curw%,*},"
  208.             curw=${curw##*,}
  209.         else
  210.             prefix=
  211.         fi
  212.         #suffix=,
  213.  
  214.         case "${curw:0:1}" in
  215.         '=')    gen="\=all \=me \=bday \=online \=pages"; gen="${gen// /$NL}";;
  216.         '_')    gen="$(fbcmd SFILTERS -csv | sed -ne '2,$p' | awk -F, '{if($4=="friendlist"){print $3}}' | sed -e 's/[ ]/\\\\&/g; s/^/_/')$";;
  217.         '~')    gen="$(fbcmd FGROUPS =me -csv | awk -F, '{print $NF}' | sed -e '1d; s/[ ]/\\\\&/g; s/^/~/')";;
  218.         *)  gen="$(fbcmd FRIENDS -csv | cut -d, -f2 | sed -e '1d; s/[ ]/\\\\&/g')"$'\n=\n_\n\~';;
  219.         esac
  220.        
  221.         oldIFS="$IFS"
  222.         IFS=$NL
  223.         COMPREPLY=($(compgen -P "$prefix" -S "$suffix" -W "$gen" -- ${curw//\\/\\\\}))
  224.         IFS="$oldIFS"
  225.     elif [ -z "$COMPREPLY" ]; then
  226.         COMPREPLY=($(IFS=' ' compgen -W "$gen" -- $curw))
  227.     fi
  228.     return 0
  229. }
  230. complete -F _fbcmd  fbcmd
Add Comment
Please, Sign In to add comment