tranleduy2000 / javaide

Code editor, java auto complete, java compiler, aapt, dx, zipsigner for Android
GNU General Public License v3.0
472 stars 157 forks source link

App crashing on rotation at startup and whole project is deleted. #200

Open et118 opened 3 years ago

et118 commented 3 years ago

When i start the app and see the loading logo and turn my phone sideways the app crashes instantly. All my files in my project was empty when i started it again (Fortunately i had just started the project) Here is the error message: Screenshot_2020-07-13-17-23-40-294_com.miui.bugreport.jpg

Ron423c commented 3 years ago

fixed level support issue blank screen report

import @Java.Lang.support@systemOverride

Ron423c commented 3 years ago

Binwalk v2.1.1 Craig Heffner, http://www.binwalk.org

Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ...

Signature Scan Options: -B, --signature Scan target file(s) for common file signatures -R, --raw= Scan target file(s) for the specified sequence of bytes -A, --opcodes Scan target file(s) for common executable opcode signatures -m, --magic= Specify a custom magic file to use -b, --dumb Disable smart signature keywords -I, --invalid Show results marked as invalid -x, --exclude= Exclude results that match -y, --include= Only show results that match

Extraction Options: -e, --extract Automatically extract known file types -D, --dd= Extract signatures, give the files an extension of , and execute -M, --matryoshka Recursively scan extracted files -d, --depth= Limit matryoshka recursion depth (default: 8 levels deep) -C, --directory= Extract files/folders to a custom directory (default: current working directory) -j, --size= Limit the size of each extracted file -n, --count= Limit the number of extracted files -r, --rm Delete carved files after extraction -z, --carve Carve data from files, but don't execute extraction utilities

Entropy Analysis Options: -E, --entropy Calculate file entropy -F, --fast Use faster, but less detailed, entropy analysis -J, --save Save plot as a PNG -Q, --nlegend Omit the legend from the entropy plot graph -N, --nplot Do not generate an entropy plot graph -H, --high= Set the rising edge entropy trigger threshold (default: 0.95) -L, --low= Set the falling edge entropy trigger threshold (default: 0.85)

Binary Diffing Options: -W, --hexdump Perform a hexdump / diff of a file or files -G, --green Only show lines containing bytes that are the same among all files -i, --red Only show lines containing bytes that are different among all files -U, --blue Only show lines containing bytes that are different among some files -w, --terse Diff all files, but only display a hex dump of the first file

Raw Compression Options: -X, --deflate Scan for raw deflate compression streams -Z, --lzma Scan for raw LZMA compression streams -P, --partial Perform a superficial, but faster, scan -S, --stop Stop after the first result

General Options: -l, --length= Number of bytes to scan -o, --offset= Start scan at this file offset -O, --base= Add a base address to all printed offsets -K, --block= Set file block size -g, --swap= Reverse every n bytes before scanning -f, --log= Log results to file -c, --csv Log results to file in CSV format -t, --term Format output to fit the terminal window -q, --quiet Suppress output to stdout -v, --verbose Enable verbose output -h, --help Show help output -a, --finclude= Only scan files whose names match this regex -p, --fexclude= Do not scan files whose names match this regex -s, --status= Enable the status server on the specified port

     binwalk -y --include=str 

        binwalk [-e] [-D DD] [-M] [-d DEPTH] [-C DIRECTORY] [-j SIZE]
           [-n COUNT] [-r] [-z] [-l LENGTH] [-o OFFSET] [-O BASE]
           [-K BLOCK] [-g SWAP] [-f LOG] [-c] [-t] [-q] [-v] [-h]
           [-a FINCLUDE] [-p FEXCLUDE] [-s STATUS] [--string] [-W] [-G]
           [-i] [-U] [-w] [-X] [-Z] [-P] [-S] [-B] [-R RAW] [-A]
           [-m MAGIC] [-b] [-I] [-x EXCLUDE] [-y INCLUDE] [-E] [-F] [-J]
           [-Q] [-N] [-H HIGH] [-L LOW]

binwalk -Q-y/--include -@https://github.security.ronaldechapman export NNN_ARCHIVE="\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)$" echo sudo press label sector 1102334110874abc set get example meta network cloned assets echo point of break persitance quatiy service agencies google trust PW GOLDENBOY_ronaldechapmanN0722710674 ()INTERNET SECURITY TERRERISTICAL WATCH GROUPING SOFTWARE CONTRIBUTOR (SATA#system) GOOGLE PWPW GITHUB PWPW Internet security agent trusted officer\

echo sudo sudo echo level secuity agencies google        export echo sudo press label sector 1102334110874abc set get example meta network cloned assets echo point of break persitance quatiy service agencies google trust PW GOLDENBOY_ronaldechapmanN0722710674 ()INTERNET SECURITY TERRERISTICAL WATCH GROUPING SOFTWARE CONTRIBUTOR (SATA#system)               GOOGLE PWPW GITHUB PWPW Internet security agent trusted officer

 export

declare -x COLORTERM="truecolor" declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus" declare -x DESKTOP_SESSION="gnome" declare -x DISPLAY=":1" declare -x GDMSESSION="gnome" declare -x GDM_LANG="en_US.UTF-8" declare -x GJS_DEBUG_OUTPUT="stderr" declare -x GJS_DEBUG_TOPICS="JS ERROR;JS LOG" declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated" declare -x GNOME_TERMINAL_SCREEN="/org/gnome/Terminal/screen/345a171e_81c4_49ea_be2e_7a1fb683a00d" declare -x GNOME_TERMINAL_SERVICE=":1.63" declare -x GPG_AGENT_INFO="/run/user/0/gnupg/S.gpg-agent:0:1" declare -x GTK_MODULES="gail:atk-bridge" declare -x HOME="/root" declare -x LANG="en_US.UTF-8" declare -x LOGNAME="root" declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.zst=01;31:.tzst=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.wim=01;31:.swm=01;31:.dwm=01;31:.esd=01;31:.jpg=01;35:.jpeg=01;35:.mjpg=01;35:.mjpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.m4a=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.oga=00;36:.opus=00;36:.spx=00;36:.xspf=00;36:" declare -x NNN_ARCHIVE="\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)\$" declare -x OLDPWD declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" declare -x PWD="/root" declare -x QT_ACCESSIBILITY="1" declare -x SESSION_MANAGER="local/kali:@/tmp/.ICE-unix/958,unix/kali:/tmp/.ICE-unix/958" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AGENT_PID="1011" declare -x SSH_AUTH_SOCK="/run/user/0/keyring/ssh" declare -x TERM="xterm-256color" declare -x USER="root" declare -x USERNAME="root" declare -x VTE_VERSION="5202" declare -x WINDOWPATH="2" declare -x XAUTHORITY="/run/user/0/gdm/Xauthority" declare -x XDG_CURRENT_DESKTOP="GNOME" declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/" declare -x XDG_MENU_PREFIX="gnome-" declare -x XDG_RUNTIME_DIR="/run/user/0" declare -x XDG_SEAT="seat0" declare -x XDG_SESSION_DESKTOP="gnome" declare -x XDG_SESSION_ID="2" declare -x XDG_SESSION_TYPE="x11" declare -x XDG_VTNR="2" echo sudo sudo echo level secuity agencies google export declare -x COLORTERM="truecolor" declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus" declare -x DESKTOP_SESSION="gnome" declare -x DISPLAY=":1" declare -x GDMSESSION="gnome" declare -x GDM_LANG="en_US.UTF-8" declare -x GJS_DEBUG_OUTPUT="stderr" declare -x GJS_DEBUG_TOPICS="JS ERROR;JS LOG" declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated" declare -x GNOME_TERMINAL_SCREEN="/org/gnome/Terminal/screen/345a171e_81c4_49ea_be2e_7a1fb683a00d" declare -x GNOME_TERMINAL_SERVICE=":1.63" declare -x GPG_AGENT_INFO="/run/user/0/gnupg/S.gpg-agent:0:1" declare -x GTK_MODULES="gail:atk-bridge" declare -x HOME="/root" declare -x LANG="en_US.UTF-8" declare -x LOGNAME="root" declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.zst=01;31:.tzst=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.wim=01;31:.swm=01;31:.dwm=01;31:.esd=01;31:.jpg=01;35:.jpeg=01;35:.mjpg=01;35:.mjpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.m4a=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.oga=00;36:.opus=00;36:.spx=00;36:.xspf=00;36:" declare -x NNN_ARCHIVE="\.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)\$" declare -x OLDPWD declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" declare -x PWD="/root" declare -x QT_ACCESSIBILITY="1" declare -x SESSION_MANAGER="local/kali:@/tmp/.ICE-unix/958,unix/kali:/tmp/.ICE-unix/958" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AGENT_PID="1011" declare -x SSH_AUTH_SOCK="/run/user/0/keyring/ssh" declare -x TERM="xterm-256color" declare -x USER="root" declare -x USERNAME="root" declare -x VTE_VERSION="5202" declare -x WINDOWPATH="2" declare -x XAUTHORITY="/run/user/0/gdm/Xauthority" declare -x XDG_CURRENT_DESKTOP="GNOME" declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/" declare -x XDG_MENU_PREFIX="gnome-" declare -x XDG_RUNTIME_DIR="/run/user/0" declare -x XDG_SEAT="seat0" declare -x XDG_SESSION_DESKTOP="gnome" declare -x XDG_SESSION_ID="2" declare -x XDG_SESSION_TYPE="x11" declare -x XDG_VTNR="2" echo sudo sudo echo level secuity agencies google set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="8") BASH_LINENO=() BASH_REMATCH=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="4" [2]="23" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.4.23(1)-release' COLORTERM=truecolor COLUMNS=80 COMP_WORDBREAKS=$' \t\n"\'><=;|&(:' DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus DESKTOP_SESSION=gnome DIRSTACK=() DISPLAY=:1 EUID=0 GDMSESSION=gnome GDM_LANG=en_US.UTF-8 GJS_DEBUG_OUTPUT=stderr GJS_DEBUG_TOPICS='JS ERROR;JS LOG' GNOME_DESKTOP_SESSION_ID=this-is-deprecated GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/345a171e_81c4_49ea_be2e_7a1fb683a00d GNOME_TERMINAL_SERVICE=:1.63 GPG_AGENT_INFO=/run/user/0/gnupg/S.gpg-agent:0:1 GROUPS=() GTK_MODULES=gail:atk-bridge HISTCONTROL=ignoreboth HISTFILE=/root/.bash_history HISTFILESIZE=2000 HISTSIZE=1000 HOME=/root HOSTNAME=kali HOSTTYPE=x86_64 IFS=$' \t\n' LANG=en_US.UTF-8 LINES=24 LOGNAME=root LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.zst=01;31:.tzst=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.wim=01;31:.swm=01;31:.dwm=01;31:.esd=01;31:.jpg=01;35:.jpeg=01;35:.mjpg=01;35:.mjpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.m4a=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.oga=00;36:.opus=00;36:.spx=00;36:.xspf=00;36:' MACHTYPE=x86_64-pc-linux-gnu MAILCHECK=60 NNN_ARCHIVE='.(7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)$' OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PIPESTATUS=([0]="0") PPID=1758 PS1='[\e]0;\u@\h: \w\a]${debian_chroot:+($debian_chroot)}[\033[01;31m]\u@\h[\033[00m]:[\033[01;34m]\w[\033[00m]\$ ' PS2='> ' PS4='+ ' PWD=/root QT_ACCESSIBILITY=1 SESSION_MANAGER=local/kali:@/tmp/.ICE-unix/958,unix/kali:/tmp/.ICE-unix/958 SHELL=/bin/bash SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=1 SSH_AGENT_PID=1011 SSH_AUTH_SOCK=/run/user/0/keyring/ssh TERM=xterm-256color UID=0 USER=root USERNAME=root VTE_VERSION=5202 WINDOWPATH=2 XAUTHORITY=/run/user/0/gdm/Xauthority XDG_CURRENT_DESKTOP=GNOME XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/ XDG_MENU_PREFIX=gnome- XDG_RUNTIME_DIR=/run/user/0 XDG_SEAT=seat0 XDG_SESSION_DESKTOP=gnome XDG_SESSION_ID=2 XDG_SESSION_TYPE=x11 XDGVTNR=2 =export git_printf_supports_v=yes __grub_script_check_program=grub-script-check _backup_glob='@(##|@(~|.@(bak|orig|rej|swp|dpkg|rpm@(orig|new|save))))' _xspecs=([freeamp]="!.@(mp3|og[ag]|pls|m3u)" [bibtex]="!.aux" [lualatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [chromium-browser]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [tex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [zathura]="!.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)" [lrunzip]="!.lrz" [amaya]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [hbpp]="!.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lzgrep]="!.@(tlz|lzma)" [ggv]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [lzless]="!.@(tlz|lzma)" [loimpress]="!.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [kdvi]="!.@(dvi|DVI)?(.@(gz|Z|bz2))" [lobase]="!.odb" [lbzcat]="!.?(t)bz?(2)" [lilypond]="!.ly" [sxemacs]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [epdfview]="!.pdf" [localc]="!.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [texi2dvi]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [ps2pdf12]="!.@(?(e)ps|pdf)" [ee]="!.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)" [lbunzip2]="!.?(t)bz?(2)" [ps2pdf13]="!.@(?(e)ps|pdf)" [ps2pdf14]="!.@(?(e)ps|pdf)" [lzfgrep]="!.@(tlz|lzma)" [hbrun]="!.[Hh][Rr][Bb]" [kbabel]="!.po" [rview]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [kaffeine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.part)" [xv]="!.@(gif|jp?(e)g?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)" [rgvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [oodraw]="!.@(sxd|std|sda|sdd|?(f)odg|otg)" [elinks]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [playmidi]="!.@(mid?(i)|cmf)" [xine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [xpdf]="!.@(pdf|fdf)?(.@(gz|GZ|bz2|BZ2|Z))" [aviplay]="!.@(avi|asf|wmv)" [latex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lodraw]="!.@(sxd|std|sda|sdd|?(f)odg|otg)" [rvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [ogg123]="!.@(og[ag]|m3u|flac|spx)" [ps2pdfwr]="!.@(?(e)ps|pdf)" [harbour]="!.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lomath]="!.@(sxm|smf|mml|odf)" [xemacs]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [unlzma]="!.@(tlz|lzma)" [lowriter]="!.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)" [vi]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [xetex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [kid3-qt]="!.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [xanim]="!.@(mpg|mpeg|avi|mov|qt)" [portecle]="!@(.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)" [oocalc]="!.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [emacs]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [fbxine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [kpdf]="!.@(?(e)ps|pdf)" [oomath]="!.@(sxm|smf|mml|odf)" [compress]=".Z" [iceweasel]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [zcat]="!.@(Z|[gGd]z|t[ag]z)" [unzip]="!.@(zip|[egjsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz)" [modplug123]="!.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [dvipdfm]="!.dvi" [oobase]="!.odb" [zipinfo]="!.@(zip|[egjsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz)" [epiphany]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [galeon]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [bzme]="!.@(zip|z|gz|tgz)" [xfig]="!.fig" [xdvi]="!.@(dvi|DVI)?(.@(gz|Z|bz2))" [cdiff]="!.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))" [rgview]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [oowriter]="!.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)" [netscape]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [acroread]="!.[pf]df" [makeinfo]="!.texi" [kwrite]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [gview]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [qiv]="!.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)" [bzcat]="!.?(t)bz?(2)" [pdftex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [rpm2cpio]="!.[rs]pm" [view]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [unxz]="!.@(?(t)xz|tlz|lzma)" [ly2dvi]="!.ly" [mozilla]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [modplugplay]="!.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [dillo]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [aaxine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [dvipdfmx]="!.dvi" [advi]="!.dvi" [lzmore]="!.@(tlz|lzma)" [poedit]="!.po" [firefox]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [gv]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [madplay]="!.mp3" [gtranslator]="!.po" [jadetex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gpdf]="!.[pf]df" [kghostview]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [pbzcat]="!.?(t)bz?(2)" [lzcat]="!.@(tlz|lzma)" [vim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dvips]="!.dvi" [pdfunite]="!.pdf" [dvitype]="!.dvi" [realplay]="!.@(rm?(j)|ra?(m)|smi?(l))" [gqmpeg]="!.@(mp3|og[ag]|pls|m3u)" [xelatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lzegrep]="!.@(tlz|lzma)" [bunzip2]="!.?(t)bz?(2)" [znew]=".Z" [lokalize]="!.po" [kate]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dragon]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.part)" [pdflatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [mozilla-firefox]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [ooimpress]="!.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [uncompress]="!.Z" [unpigz]="!.@(Z|[gGdz]z|t[ag]z)" [luatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lynx]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [ps2pdf]="!.@(?(e)ps|pdf)" [mpg321]="!.mp3" [mpg123]="!.mp3" [pbunzip2]="!.?(t)bz?(2)" [kid3]="!.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [pdfjadetex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [dvipdf]="!.dvi" [gharbour]="!.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [texi2html]="!.texi" [gunzip]="!.@(Z|[gGd]z|t[ag]z)" [google-chrome]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [okular]="!.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2)))" [slitex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [xzcat]="!.@(?(t)xz|tlz|lzma)" [timidity]="!.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)" [dviselect]="!.dvi" ) __expand_tilde_by_ref () { if [[ ${!1} == \~* ]]; then eval $1=$(printf ~%q "${!1#\~}"); fi } get_cword_at_cursor_by_ref () { local cword words=(); reassemble_comp_words_by_ref "$1" words cword; local i cur index=$COMP_POINT lead=${COMP_LINE:0:$COMP_POINT}; if [[ $index -gt 0 && ( -n $lead && -n ${lead//[[:space:]]} ) ]]; then cur=$COMP_LINE; for ((i = 0; i <= cword; ++i )) do while [[ ${#cur} -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do cur="${cur:1}"; [[ $index -gt 0 ]] && ((index--)); done; if [[ $i -lt $cword ]]; then local old_size=${#cur}; cur="${cur#"${words[i]}"}"; local new_size=${#cur}; index=$(( index - old_size + new_size )); fi; done; [[ -n $cur && ! -n ${cur//[[:space:]]} ]] && cur=; [[ $index -lt 0 ]] && index=0; fi; local "$2" "$3" "$4" && _upvars -a${#words[@]} $2 "${words[@]}" -v $3 "$cword" -v $4 "${cur:0:$index}" } __git_eread () { test -r "$1" && IFS=' ' read "$2" < "$1" } git_ps1 () { local exit=$?; local pcmode=no; local detached=no; local ps1pc_start='\u@\h:\w '; local ps1pc_end='\$ '; local printf_format=' (%s)'; case "$#" in 2 | 3) pcmode=yes; ps1pc_start="$1"; ps1pc_end="$2"; printf_format="${3:-$printf_format}"; PS1="$ps1pc_start$ps1pc_end" ;; 0 | 1) printf_format="${1:-$printf_format}" ;; ) return $exit ;; esac; local ps1_expanded=yes; [ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no; [ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no; local repo_info rev_parse_exit_code; repo_info="$(git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD 2>/dev/null)"; rev_parse_exit_code="$?"; if [ -z "$repo_info" ]; then return $exit; fi; local short_sha=""; if [ "$rev_parse_exit_code" = "0" ]; then short_sha="${repo_info## }"; repo_info="${repo_info% }"; fi; local inside_worktree="${repo_info## }"; repo_info="${repo_info% }"; local bare_repo="${repo_info## }"; repo_info="${repo_info% }"; local inside_gitdir="${repo_info## }"; local g="${repo_info% }"; if [ "true" = "$inside_worktree" ] && [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] && [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] && git check-ignore -q .; then return $exit; fi; local r=""; local b=""; local step=""; local total=""; if [ -d "$g/rebase-merge" ]; then git_eread "$g/rebase-merge/head-name" b; __git_eread "$g/rebase-merge/msgnum" step; git_eread "$g/rebase-merge/end" total; if [ -f "$g/rebase-merge/interactive" ]; then r="|REBASE-i"; else r="|REBASE-m"; fi; else if [ -d "$g/rebase-apply" ]; then git_eread "$g/rebase-apply/next" step; __git_eread "$g/rebase-apply/last" total; if [ -f "$g/rebase-apply/rebasing" ]; then git_eread "$g/rebase-apply/head-name" b; r="|REBASE"; else if [ -f "$g/rebase-apply/applying" ]; then r="|AM"; else r="|AM/REBASE"; fi; fi; else if [ -f "$g/MERGE_HEAD" ]; then r="|MERGING"; else if [ -f "$g/CHERRY_PICK_HEAD" ]; then r="|CHERRY-PICKING"; else if [ -f "$g/REVERT_HEAD" ]; then r="|REVERTING"; else if [ -f "$g/BISECT_LOG" ]; then r="|BISECTING"; fi; fi; fi; fi; fi; if [ -n "$b" ]; then :; else if [ -h "$g/HEAD" ]; then b="$(git symbolic-ref HEAD 2>/dev/null)"; else local head=""; if ! __git_eread "$g/HEAD" head; then return $exit; fi; b="${head#ref: }"; if [ "$head" = "$b" ]; then detached=yes; b="$( case "${GIT_PS1_DESCRIBE_STYLE-}" in (contains) git describe --contains HEAD ;; (branch) git describe --contains --all HEAD ;; (tag) git describe --tags HEAD ;; (describe) git describe HEAD ;; ( | default) git describe --tags --exact-match HEAD ;; esac 2>/dev/null)" || b="$short_sha..."; b="($b)"; fi; fi; fi; fi; if [ -n "$step" ] && [ -n "$total" ]; then r="$r $step/$total"; fi; local w=""; local i=""; local s=""; local u=""; local c=""; local p=""; if [ "true" = "$inside_gitdir" ]; then if [ "true" = "$bare_repo" ]; then c="BARE:"; else b="GIT_DIR!"; fi; else if [ "true" = "$inside_worktree" ]; then if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] && [ "$(git config --bool bash.showDirtyState)" != "false" ]; then git diff --no-ext-diff --quiet || w=""; git diff --no-ext-diff --cached --quiet || i="+"; if [ -z "$short_sha" ] && [ -z "$i" ]; then i="#"; fi; fi; if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] && git rev-parse --verify --quiet refs/stash > /dev/null; then s="$"; fi; if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] && [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] && git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/' > /dev/null 2> /dev/null; then u="%${ZSH_VERSION+%}"; fi; if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then git_ps1_show_upstream; fi; fi; fi; local z="${GIT_PS1_STATESEPARATOR-" "}"; if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then git_ps1_colorize_gitstring; fi; b=${b##refs/heads/}; if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then git_ps1_branch_name=$b; b="\${git_ps1_branch_name}"; fi; local f="$w$i$s$u"; local gitstring="$c$b${f:+$z$f}$r$p"; if [ $pcmode = yes ]; then if [ "${git_printf_supports_v-}" != yes ]; then gitstring=$(printf -- "$printf_format" "$gitstring"); else printf -v gitstring -- "$printf_format" "$gitstring"; fi; PS1="$ps1pc_start$gitstring$ps1pc_end"; else printf -- "$printf_format" "$gitstring"; fi; return $exit } git_ps1_colorize_gitstring () { if [[ -n ${ZSH_VERSION-} ]]; then local c_red='%F{red}'; local c_green='%F{green}'; local c_lblue='%F{blue}'; local c_clear='%f'; else local c_red='[\e[31m]'; local c_green='[\e[32m]'; local c_lblue='[\e[1;34m]'; local c_clear='[\e[0m]'; fi; local bad_color=$c_red; local ok_color=$c_green; local flags_color="$c_lblue"; local branch_color=""; if [ $detached = no ]; then branch_color="$ok_color"; else branch_color="$bad_color"; fi; c="$branch_color$c"; z="$c_clear$z"; if [ "$w" = "" ]; then w="$bad_color$w"; fi; if [ -n "$i" ]; then i="$ok_color$i"; fi; if [ -n "$s" ]; then s="$flags_color$s"; fi; if [ -n "$u" ]; then u="$bad_color$u"; fi; r="$c_clear$r" } __git_ps1_show_upstream () { local key value; local svn_remote svn_url_pattern count n; local upstream=git legacy="" verbose="" name=""; svn_remote=(); local output="$(git config -z --get-regexp '^(svn-remote...url|bash.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"; while read -r key value; do case "$key" in bash.showupstream) GIT_PS1_SHOWUPSTREAM="$value"; if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then p=""; return; fi ;; svn-remote..url) svn_remote[$((${#svn_remote[@]} + 1))]="$value"; svn_url_pattern="$svn_url_pattern\|$value"; upstream=svn+git ;; esac; done <<< "$output"; for option in ${GIT_PS1_SHOWUPSTREAM}; do case "$option" in git | svn) upstream="$option" ;; verbose) verbose=1 ;; legacy) legacy=1 ;; name) name=1 ;; esac; done; case "$upstream" in git) upstream="@{upstream}" ;; svn) local -a svn_upstream; svn_upstream=($(git log --first-parent -1 --grep="^git-svn-id: (${svn_url_pattern#??})" 2>/dev/null)); if [[ 0 -ne ${#svn_upstream[@]} ]]; then svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}; svn_upstream=${svn_upstream%@}; local n_stop="${#svn_remote[@]}"; for ((n=1; n <= n_stop; n++)) do svn_upstream=${svn_upstream#${svn_remote[$n]}}; done; if [[ -z "$svn_upstream" ]]; then upstream=${GIT_SVN_ID:-git-svn}; else upstream=${svn_upstream#/}; fi; else if [[ "svn+git" = "$upstream" ]]; then upstream="@{upstream}"; fi; fi ;; esac; if [[ -z "$legacy" ]]; then count="$(git rev-list --count --left-right "$upstream"...HEAD 2>/dev/null)"; else local commits; if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"; then local commit behind=0 ahead=0; for commit in $commits; do case "$commit" in "<") ((behind++)) ;; ) ((ahead++)) ;; esac; done; count="$behind $ahead"; else count=""; fi; fi; if [[ -z "$verbose" ]]; then case "$count" in "") p="" ;; "0 0") p="=" ;; "0 ") p=">" ;; " 0") p="<" ;; ) p="<>" ;; esac; else case "$count" in "") p="" ;; "0 0") p=" u=" ;; "0 ") p=" u+${count#0 }" ;; " 0") p=" u-${count% 0}" ;; ) p=" u+${count# }-${count% }" ;; esac; if [[ -n "$count" && -n "$name" ]]; then git_ps1_upstream_name=$(git rev-parse --abbrev-ref "$upstream" 2>/dev/null); if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then p="$p \${git_ps1_upstream_name}"; else p="$p ${git_ps1_upstream_name}"; unset __git_ps1_upstream_name; fi; fi; fi } grub_dir () { local i c=1 boot_dir; for ((c=1; c <= ${#COMP_WORDS[@]}; c++ )) do i="${COMP_WORDS[c]}"; case "$i" in --boot-directory) c=$((++c)); i="${COMP_WORDS[c]}"; boot_dir="${i##=}"; break ;; esac; done; boot_dir=${boot_dir-/boot}; echo "${boot_dir%/}/grub" } grub_get_last_option () { local i; for ((i=$COMP_CWORD-1; i > 0; i-- )) do if [[ "${COMP_WORDS[i]}" == -* ]]; then echo "${COMP_WORDS[i]}"; break; fi; done } grub_get_options_from_help () { local prog; if [ $# -ge 1 ]; then prog="$1"; else prog="${COMP_WORDS[0]}"; fi; local i IFS=" "' '' '; for i in $(LC_ALL=C $prog --help); do case $i in --) echo "${i%=}" ;; esac; done } grub_get_options_from_usage () { local prog; if [ $# -ge 1 ]; then prog="$1"; else prog="${COMP_WORDS[0]}"; fi; local i IFS=" "' '' '; for i in $(LC_ALL=C $prog --usage); do case $i in [--]) i=${i#[}; echo ${i%%?(=)]} ;; esac; done } grub_list_menuentries () { local cur="${COMP_WORDS[COMP_CWORD]}"; local config_file=$(grub_dir)/grub.cfg; if [ -f "$config_file" ]; then local IFS=' '; COMPREPLY=($(compgen -W "$( awk -F "[\"']" '/menuentry/ { print $2 }' $config_file )" -- "$cur" )); fi } __grub_list_modules () { local grub_dir=$(grub_dir); local IFS=' '; COMPREPLY=($( compgen -f -X '!/.mod' -- "${grub_dir}/$cur" | { while read -r tmp; do [ -n $tmp ] && { tmp=${tmp##/} printf '%s\n' ${tmp%.mod} } done } )) } __grubcomp () { local cur="${COMP_WORDS[COMP_CWORD]}"; if [ $# -gt 2 ]; then cur="$3"; fi; case "$cur" in --=) COMPREPLY=() ;; ) local IFS=' '' '' '; COMPREPLY=($(compgen -P "${2-}" -W "${1-}" -S "${4-}" -- "$cur")) ;; esac } __load_completion () { local -a dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions); local OIFS=$IFS IFS=: dir cmd="${1##/}" compfile; for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share}; do dirs+=($dir/bash-completion/completions); done; IFS=$OIFS; if [[ $BASH_SOURCE == / ]]; then dirs+=("${BASHSOURCE%/*}/completions"); else dirs+=(./completions); fi; for dir in "${dirs[@]}"; do for compfile in "$cmd" "$cmd.bash" "$cmd"; do compfile="$dir/$compfile"; [[ -f "$compfile" ]] && . "$compfile" &> /dev/null && return 0; done; done; [[ -n "${_xspecs[$cmd]}" ]] && complete -F _filedir_xspec "$cmd" && return 0; return 1 } ltrim_colon_completions () { if [[ "$1" == : && "$COMP_WORDBREAKS" == : ]]; then local colon_word=${1%"${1##:}"}; local i=${#COMPREPLY[]}; while [[ $((--i)) -ge 0 ]]; do COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}; done; fi } parse_options () { local option option2 i IFS='
,/|'; option=; local -a array; read -a array <<< "$1"; for i in "${array[@]}"; do case "$i" in ---) break ;; --?) option=$i; break ;; -?) [[ -n $option ]] || option=$i ;; ) break ;; esac; done; [[ -n $option ]] || return; IFS='
'; if [[ $option =~ ([((no|dont)-?)]). ]]; then option2=${option/"${BASH_REMATCH[1]}"/}; option2=${option2%%[<{().[]}; printf '%s\n' "${option2/=/=}"; option=${option/"${BASH_REMATCH[1]}"/"${BASH_REMATCH[2]}"}; fi; option=${option%%[<{().[]}; printf '%s\n' "${option/=/=}" }
reassemble_comp_words_by_ref () { local exclude i j line ref; if [[ -n $1 ]]; then exclude="${1//[^$COMP_WORDBREAKS]}"; fi; printf -v "$3" %s "$COMP_CWORD"; if [[ -n $exclude ]]; then line=$COMP_LINE; for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)) do while [[ $i -gt 0 && ${COMP_WORDS[$i]} == +([$exclude]) ]]; do [[ $line != [[:blank:]] ]] && (( j >= 2 )) && ((j--)); ref="$2[$j]"; printf -v "$ref" %s "${!ref}${COMP_WORDS[i]}"; [[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j"; line=${line#"${COMP_WORDS[$i]}"}; [[ $line == [[:blank:]] ]] && ((j++)); (( $i < ${#COMP_WORDS[@]} - 1)) && ((i++)) || break 2; done; ref="$2[$j]"; printf -v "$ref" %s "${!ref}${COMP_WORDS[i]}"; line=${line#"${COMP_WORDS[i]}"}; [[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j"; done; [[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j"; else for i in ${!COMP_WORDS[@]}; do printf -v "$2[i]" %s "${COMP_WORDS[i]}"; done; fi } _allowed_groups () { if _complete_as_root; then local IFS=' '; COMPREPLY=($( compgen -g -- "$1" )); else local IFS=' '; COMPREPLY=($( compgen -W "$( id -Gn 2>/dev/null || groups 2>/dev/null )" -- "$1" )); fi } _allowed_users () { if _complete_as_root; then local IFS=' '; COMPREPLY=($( compgen -u -- "${1:-$cur}" )); else local IFS=' '; COMPREPLY=($( compgen -W "$( id -un 2>/dev/null || whoami 2>/dev/null )" -- "${1:-$cur}" )); fi } _available_interfaces () { local PATH=$PATH:/sbin; COMPREPLY=($( { if [[ ${1:-} == -w ]]; then iwconfig elif [[ ${1:-} == -a ]]; then ifconfig || ip link show up else ifconfig -a || ip link show fi } 2>/dev/null | awk '/^[^ \t]/ { if ($1 ~ /^[0-9]+:/) { print $2 } else { print $1 } }' )); COMPREPLY=($( compgen -W '${COMPREPLY[@]/%[[:punct:]]/}' -- "$cur" )) } _cd () { local cur prev words cword; _init_completion || return; local IFS=' ' i j k; compopt -o filenames; if [[ -z "${CDPATH:-}" || "$cur" == ?(.)?(.)/ ]]; then _filedir -d; return; fi; local -r mark_dirs=$(_rl_enabled mark-directories && echo y); local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y); for i in ${CDPATH//:/' '}; do k="${#COMPREPLY[@]}"; for j in $( compgen -d -- $i/$cur ); do if [[ ( -n $mark_symdirs && -h $j || -n $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then j+="/"; fi; COMPREPLY[k++]=${j#$i/}; done; done; _filedir -d; if [[ ${#COMPREPLY[@]} -eq 1 ]]; then i=${COMPREPLY[0]}; if [[ "$i" == "$cur" && $i != "/" ]]; then COMPREPLY[0]="${i}/"; fi; fi; return } _cd_devices () { COMPREPLY+=($( compgen -f -d -X "!/?([amrs])cd" -- "${cur:-/dev/}" )) } _command () { local offset i; offset=1; for ((i=1; i <= COMP_CWORD; i++ )) do if [[ "${COMP_WORDS[i]}" != - ]]; then offset=$i; break; fi; done; _command_offset $offset } _command_offset () { local word_offset=$1 i j; for ((i=0; i < $word_offset; i++ )) do for ((j=0; j <= ${#COMP_LINE}; j++ )) do [[ "$COMP_LINE" == "${COMP_WORDS[i]}" ]] && break; COMP_LINE=${COMP_LINE:1}; ((COMP_POINT--)); done; COMP_LINE=${COMP_LINE#"${COMP_WORDS[i]}"}; ((COMP_POINT-=${#COMP_WORDS[i]})); done; for ((i=0; i <= COMP_CWORD - $word_offset; i++ )) do COMP_WORDS[i]=${COMP_WORDS[i+$word_offset]}; done; for ((i; i <= COMP_CWORD; i++ )) do unset 'COMP_WORDS[i]'; done; ((COMP_CWORD -= $word_offset)); COMPREPLY=(); local cur; _get_comp_words_by_ref cur; if [[ $COMP_CWORD -eq 0 ]]; then local IFS=' '; compopt -o filenames; COMPREPLY=($( compgen -d -c -- "$cur" )); else local cmd=${COMP_WORDS[0]} compcmd=${COMP_WORDS[0]}; local cspec=$( complete -p $cmd 2>/dev/null ); if [[ ! -n $cspec && $cmd == / ]]; then cspec=$( complete -p ${cmd##/} 2>/dev/null ); [[ -n $cspec ]] && compcmd=${cmd##/}; fi; if [[ ! -n $cspec ]]; then compcmd=${cmd##/}; _completion_loader $compcmd; cspec=$( complete -p $compcmd 2>/dev/null ); fi; if [[ -n $cspec ]]; then if [[ ${cspec# -F } != $cspec ]]; then local func=${cspec#-F }; func=${func%% }; if [[ ${#COMP_WORDS[@]} -ge 2 ]]; then $func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}" "${COMP_WORDS[${#COMP_WORDS[@]}-2]}"; else $func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}"; fi; local opt; while [[ $cspec == " -o " ]]; do cspec=${cspec#-o }; opt=${cspec%% }; compopt -o $opt; cspec=${cspec#$opt}; done; else cspec=${cspec#complete}; cspec=${cspec%%$compcmd}; COMPREPLY=($( eval compgen "$cspec" -- '$cur' )); fi; else if [[ ${#COMPREPLY[@]} -eq 0 ]]; then _minimal; fi; fi; fi } _complete_as_root () { [[ $EUID -eq 0 || -n ${root_command:-} ]] } _completion_loader () { local cmd="${1:-EmptycmD}";
load_completion "$cmd" && return 124; complete -F _minimal -- "$cmd" && return 124 } _configured_interfaces () { if [[ -f /etc/debian_version ]]; then COMPREPLY=($( compgen -W "$( command sed -ne 's|^iface ([^ ]{1,}).$|\1|p' /etc/network/interfaces /etc/network/interfaces.d/ 2>/dev/null )" -- "$cur" )); else if [[ -f /etc/SuSE-release ]]; then COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network/ifcfg- | command sed -ne 's|.ifcfg-([^].)$|\1|p' )" -- "$cur" )); else if [[ -f /etc/pld-release ]]; then COMPREPLY=($( compgen -W "$( command ls -B /etc/sysconfig/interfaces | command sed -ne 's|.ifcfg-([^].)$|\1|p' )" -- "$cur" )); else COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network-scripts/ifcfg- | command sed -ne 's|.ifcfg-([^].)$|\1|p' )" -- "$cur" )); fi; fi; fi } _count_args () { local i cword words; __reassemble_comp_words_by_ref "$1" words cword; args=1; for i in "${words[@]:1:cword-1}"; do [[ "$i" != - ]] && args=$(($args+1)); done } _dvd_devices () { COMPREPLY+=($( compgen -f -d -X "!/?(r)dvd" -- "${cur:-/dev/}" )) } _expand () { if [[ "$cur" == \~/ ]]; then expand_tilde_by_ref cur; else if [[ "$cur" == \~ ]]; then _tilde "$cur" || eval COMPREPLY[0]=$(printf ~%q "${COMPREPLY[0]#\~}"); return ${#COMPREPLY[@]}; fi; fi } _filedir () { local IFS=' '; _tilde "$cur" || return; local -a toks; local x tmp; x=$( compgen -d -- "$cur" ) && while read -r tmp; do toks+=("$tmp"); done <<< "$x"; if [[ "$1" != -d ]]; then local quoted; _quote_readline_by_ref "$cur" quoted; local xspec=${1:+"!.@($1|${1^^})"}; x=$( compgen -f -X "$xspec" -- $quoted ) && while read -r tmp; do toks+=("$tmp"); done <<< "$x"; [[ -n ${COMP_FILEDIR_FALLBACK:-} && -n "$1" && ${#toks[@]} -lt 1 ]] && x=$( compgen -f -- $quoted ) && while read -r tmp; do toks+=("$tmp"); done <<< "$x"; fi; if [[ ${#toks[@]} -ne 0 ]]; then compopt -o filenames 2> /dev/null; COMPREPLY+=("${toks[@]}"); fi } _filedir_xspec () { local cur prev words cword; _init_completion || return; _tilde "$cur" || return; local IFS=' ' xspec=${_xspecs[${1##/}]} tmp; local -a toks; toks=($( compgen -d -- "$(quote_readline "$cur")" | { while read -r tmp; do printf '%s\n' $tmp done } )); eval xspec="${xspec}"; local matchop=!; if [[ $xspec == ! ]]; then xspec=${xspec#!}; matchop=@; fi; xspec="$matchop($xspec|${xspec^^})"; toks+=($( eval compgen -f -X "'!$xspec'" -- "\$(quote_readline "\$cur")" | { while read -r tmp; do [[ -n $tmp ]] && printf '%s\n' $tmp done } )); if [[ ${#toks[@]} -ne 0 ]]; then compopt -o filenames; COMPREPLY=("${toks[@]}"); fi } _fstypes () { local fss; if [[ -e /proc/filesystems ]]; then fss="$( cut -d' ' -f2 /proc/filesystems ) $( awk '! /*/ { print $NF }' /etc/filesystems 2>/dev/null )"; else fss="$( awk '/^[ \t][^#]/ { print $3 }' /etc/fstab 2>/dev/null ) $( awk '/^[ \t][^#]/ { print $3 }' /etc/mnttab 2>/dev/null ) $( awk '/^[ \t][^#]/ { print $4 }' /etc/vfstab 2>/dev/null ) $( awk '{ print $1 }' /etc/dfs/fstypes 2>/dev/null ) $( [[ -d /etc/fs ]] && command ls /etc/fs )"; fi; [[ -n $fss ]] && COMPREPLY+=($( compgen -W "$fss" -- "$cur" )) } _get_comp_words_by_ref () { local exclude flag i OPTIND=1; local cur cword words=(); local upargs=() upvars=() vcur vcword vprev vwords; while getopts "c:i:n:p:w:" flag "$@"; do case $flag in c) vcur=$OPTARG ;; i) vcword=$OPTARG ;; n) exclude=$OPTARG ;; p) vprev=$OPTARG ;; w) vwords=$OPTARG ;; esac; done; while [[ $# -ge $OPTIND ]]; do case ${!OPTIND} in cur) vcur=cur ;; prev) vprev=prev ;; cword) vcword=cword ;; words) vwords=words ;; ) echo "bash: $FUNCNAME(): `${!OPTIND}': unknown argument" 1>&2; return 1 ;; esac; let "OPTIND += 1"; done; get_cword_at_cursor_by_ref "$exclude" words cword cur; [[ -n $vcur ]] && { upvars+=("$vcur"); upargs+=(-v $vcur "$cur") }; [[ -n $vcword ]] && { upvars+=("$vcword"); upargs+=(-v $vcword "$cword") }; [[ -n $vprev && $cword -ge 1 ]] && { upvars+=("$vprev"); upargs+=(-v $vprev "${words[cword - 1]}") }; [[ -n $vwords ]] && { upvars+=("$vwords"); upargs+=(-a${#words[@]} $vwords "${words[@]}") }; (( ${#upvars[@]} )) && local "${upvars[@]}" && _upvars "${upargs[@]}" } _get_cword () { local LC_CTYPE=C; local cword words; reassemble_comp_words_by_ref "$1" words cword; if [[ -n ${2//[^0-9]/} ]]; then printf "%s" "${words[cword-$2]}"; else if [[ "${#words[cword]}" -eq 0 || "$COMP_POINT" == "${#COMP_LINE}" ]]; then printf "%s" "${words[cword]}"; else local i; local cur="$COMP_LINE"; local index="$COMP_POINT"; for ((i = 0; i <= cword; ++i )) do while [[ "${#cur}" -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do cur="${cur:1}"; [[ $index -gt 0 ]] && ((index--)); done; if [[ "$i" -lt "$cword" ]]; then local old_size="${#cur}"; cur="${cur#${words[i]}}"; local new_size="${#cur}"; index=$(( index - old_size + new_size )); fi; done; if [[ "${words[cword]:0:${#cur}}" != "$cur" ]]; then printf "%s" "${words[cword]}"; else printf "%s" "${cur:0:$index}"; fi; fi; fi } _get_first_arg () { local i; arg=; for ((i=1; i < COMP_CWORD; i++ )) do if [[ "${COMP_WORDS[i]}" != -* ]]; then arg=${COMP_WORDS[i]}; break; fi; done } _get_pword () { if [[ $COMP_CWORD -ge 1 ]]; then _get_cword "${@:-}" 1; fi } _gids () { if type getent &> /dev/null; then COMPREPLY=($( compgen -W '$( getent group | cut -d: -f3 )' -- "$cur" )); else if type perl &> /dev/null; then COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($gid) = (getgrent)[2]) { print $gid . "\n" }'"'"' )' -- "$cur" )); else COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/group )' -- "$cur" )); fi; fi } _grub_editenv () { local cur prev; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; case "$prev" in create | list | set | unset) COMPREPLY=(""); return ;; esac; grubcomp "$(grub_get_options_from_help) create list set unset" } _grub_install () { local cur prev last split=false; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; last=$(grub_get_last_option); _split_longopt && split=true; case "$prev" in --boot-directory) _filedir -d; return ;; --disk-module) grubcomp "biosdisk ata"; return ;; esac; $split && return 0; if [[ "$cur" == -* ]]; then grubcomp "$(grub_get_options_from_help)"; else case "$last" in --modules) grub_list_modules; return ;; esac; _filedir; fi } _grub_mkconfig () { local cur prev; COMPREPLY=(); cur=_get_cword; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_mkfont () { local cur; COMPREPLY=(); cur=_get_cword; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_mkimage () { local cur prev split=false; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; _split_longopt && split=true; case "$prev" in -d | --directory | -p | --prefix) _filedir -d; return ;; -O | --format) local prog=${COMP_WORDS[0]}; grubcomp "$(LC_ALL=C $prog --help | awk -F ":" '/available formats/ { print $2 }' | sed 's/, / /g')"; return ;; esac; $split && return 0; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_mkpasswd_pbkdf2 () { local cur; COMPREPLY=(); cur=_get_cword; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_mkrescue () { local cur prev last; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; last=$(grub_get_last_option); if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else case "$last" in --modules) grub_list_modules; return ;; esac; _filedir; fi } _grub_probe () { local cur prev split=false; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; _split_longopt && split=true; case "$prev" in -t | --target) local prog=${COMP_WORDS[0]}; grubcomp "$(LC_ALL=C $prog --help | awk -F "[()]" '/--target=/ { print $2 }' | sed 's/|/ /g')"; return ;; esac; $split && return 0; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_script_check () { local cur; COMPREPLY=(); cur=_get_cword; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _grub_set_entry () { local cur prev split=false; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; _split_longopt && split=true; case "$prev" in --boot-directory) _filedir -d; return ;; esac; $split && return 0; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else grub_list_menuentries; fi } _grub_setup () { local cur prev split=false; COMPREPLY=(); cur=_get_cword; prev=${COMP_WORDS[COMP_CWORD-1]}; _split_longopt && split=true; case "$prev" in -d | --directory) _filedir -d; return ;; esac; $split && return 0; if [[ "$cur" == - ]]; then grubcomp "$(grub_get_options_from_help)"; else _filedir; fi } _have () { PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type $1 &> /dev/null } _included_ssh_config_files () { [[ $# -lt 1 ]] && echo "error: $FUNCNAME: missing mandatory argument CONFIG"; local configfile i f; configfile=$1; local included=$( command sed -ne 's/^[[:blank:]][Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]{1,}([^#%])(#.){0,1}$/\1/p' "${configfile}" ); for i in ${included[@]}; do if ! [[ "$i" =~ ^\~.|^\/. ]]; then if [[ "$configfile" =~ ^\/etc\/ssh. ]]; then i="/etc/ssh/$i"; else i="$HOME/.ssh/$i"; fi; fi; __expand_tilde_by_ref i; for f in ${i}; do if [ -r $f ]; then config+=("$f"); _included_ssh_config_files $f; fi; done; done } _init_completion () { local exclude= flag outx errx inx OPTIND=1; while getopts "n:e:o:i:s" flag "$@"; do case $flag in n) exclude+=$OPTARG ;; e) errx=$OPTARG ;; o) outx=$OPTARG ;; i) inx=$OPTARG ;; s) split=false; exclude+== ;; esac; done; COMPREPLY=(); local redir="@(?([0-9])<|?([0-9&])>?(>)|>&)"; _get_comp_words_by_ref -n "$exclude<>&" cur prev words cword; _variables && return 1; if [[ $cur == $redir || $prev == $redir ]]; then local xspec; case $cur in 2'>') xspec=$errx ;; '>') xspec=$outx ;; '<') xspec=$inx ;; ) case $prev in 2'>') xspec=$errx ;; '>') xspec=$outx ;; '<') xspec=$inx ;; esac ;; esac; cur="${cur##$redir}"; _filedir $xspec; return 1; fi; local i skip; for ((i=1; i < ${#words[@]}; 1)) do if [[ ${words[i]} == $redir ]]; then [[ ${words[i]} == $redir ]] && skip=2 || skip=1; words=("${words[@]:0:i}" "${words[@]:i+skip}"); [[ $i -le $cword ]] && cword=$(( cword - skip )); else i=$(( ++i )); fi; done; [[ $cword -le 0 ]] && return 1; prev=${words[cword-1]}; [[ -n ${split-} ]] && _split_longopt && split=true; return 0 } _installed_modules () { COMPREPLY=($( compgen -W "$( PATH="$PATH:/sbin" lsmod | awk '{if (NR != 1) print $1}' )" -- "$1" )) } _ip_addresses () { local PATH=$PATH:/sbin; COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne 's/.addr:([^[:space:]])./\1/p' -ne 's|.inet[[:space:]]{1,}([^[:space:]/]).|\1|p' )" -- "$cur" )) } _kernel_versions () { COMPREPLY=($( compgen -W '$( command ls /lib/modules )' -- "$cur" )) } _known_hosts () { local cur prev words cword; _init_completion -n : || return; local options; [[ "$1" == -a || "$2" == -a ]] && options=-a; [[ "$1" == -c || "$2" == -c ]] && options+=" -c"; _known_hosts_real $options -- "$cur" } _known_hosts_real () { local configfile flag prefix; local cur curd awkcur user suffix aliases i host ipv4 ipv6; local -a kh khd config; local OPTIND=1; while getopts "ac46F:p:" flag "$@"; do case $flag in a) aliases='yes' ;; c) suffix=':' ;; F) configfile=$OPTARG ;; p) prefix=$OPTARG ;; 4) ipv4=1 ;; 6) ipv6=1 ;; esac; done; [[ $# -lt $OPTIND ]] && echo "error: $FUNCNAME: missing mandatory argument CWORD"; cur=${!OPTIND}; let "OPTIND += 1"; [[ $# -ge $OPTIND ]] && echo "error: $FUNCNAME("$@"): unprocessed arguments:" $(while [[ $# -ge $OPTIND ]]; do printf '%s\n' ${!OPTIND}; shift; done); [[ $cur == @ ]] && user=${cur%@}@ && cur=${cur#@}; kh=(); if [[ -n $configfile ]]; then [[ -r $configfile ]] && config+=("$configfile"); else for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config; do [[ -r $i ]] && config+=("$i"); done; fi; for i in "${config[@]}"; do _included_ssh_config_files "$i"; done; if [[ ${#config[@]} -gt 0 ]]; then local OIFS=$IFS IFS=' ' j; local -a tmpkh; tmpkh=($( awk 'sub("^[ \t]([Gg][Ll][Oo][Bb][Aa][Ll]|[Uu][Ss][Ee][Rr])[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee][ \t]+", "") { print $0 }' "${config[@]}" | sort -u )); IFS=$OIFS; for i in "${tmpkh[@]}"; do while [[ $i =~ ^([^\"])\"([^\"])\"(.)$ ]]; do i=${BASH_REMATCH[1]}${BASH_REMATCH[3]}; j=${BASH_REMATCH[2]}; expand_tilde_by_ref j; [[ -r $j ]] && kh+=("$j"); done; for j in $i; do __expand_tilde_by_ref j; [[ -r $j ]] && kh+=("$j"); done; done; fi; if [[ -z $configfile ]]; then for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2; do [[ -r $i ]] && kh+=("$i"); done; for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys; do [[ -d $i ]] && khd+=("$i"/pub); done; fi; if [[ ${#kh[@]} -gt 0 || ${#khd[@]} -gt 0 ]]; then awkcur=${cur//\//\\/}; awkcur=${awkcur//./\.}; curd=$awkcur; if [[ "$awkcur" == [0-9][.:] ]]; then awkcur="^$awkcur[.:]"; else if [[ "$awkcur" == [0-9] ]]; then awkcur="^$awkcur.[.:]"; else if [[ -z $awkcur ]]; then awkcur="[a-z.:]"; else awkcur="^$awkcur"; fi; fi; fi; if [[ ${#kh[@]} -gt 0 ]]; then COMPREPLY+=($( awk 'BEGIN {FS=","} /^\s[^|#]/ { sub("^@[^ ]+ +", ""); \ sub(" .$", ""); \ for (i=1; i<=NF; ++i) { \ sub("^\", "", $i); sub("\?$", "", $i); \ if ($i !~ /[?]/ && $i ~ /'"$awkcur"'/) {print $i} \ }}' "${kh[@]}" 2>/dev/null )); fi; if [[ ${#khd[@]} -gt 0 ]]; then for i in "${khd[@]}"; do if [[ "$i" == key22$curd.pub && -r "$i" ]]; then host=${i/#key22/}; host=${host/%.pub/}; COMPREPLY+=($host); fi; done; fi; for ((i=0; i < ${#COMPREPLY[@]}; i++ )) do COMPREPLY[i]=$prefix$user${COMPREPLY[i]}$suffix; done; fi; if [[ ${#config[@]} -gt 0 && -n "$aliases" ]]; then local hosts=$( command sed -ne 's/^[[:blank:]][Hh][Oo][Ss][Tt][[:blank:]]{1,}([^#?%])(#.){0,1}$/\1/p' "${config[@]}" ); COMPREPLY+=($( compgen -P "$prefix$user" -S "$suffix" -W "$hosts" -- "$cur" )); fi; COMPREPLY+=($( compgen -W "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )" -- "$cur" )); if [[ -n ${COMP_KNOWN_HOSTS_WITH_HOSTFILE-1} ]]; then COMPREPLY+=($( compgen -A hostname -P "$prefix$user" -S "$suffix" -- "$cur" )); fi; if [[ -n $ipv4 ]]; then COMPREPLY=("${COMPREPLY[@]/:$suffix/}"); fi; if [[ -n $ipv6 ]]; then COMPREPLY=("${COMPREPLY[@]/+([0-9]).+([0-9]).+([0-9]).+([0-9])$suffix/}"); fi; if [[ -n $ipv4 || -n $ipv6 ]]; then for i in ${!COMPREPLY[@]}; do [[ -n ${COMPREPLY[i]} ]] || unset -v COMPREPLY[i]; done; fi; ltrim_colon_completions "$prefix$user$cur" } _longopt () { local cur prev words cword split; _init_completion -s || return; case "${prev,,}" in --help | --usage | --version) return ;; --dir) _filedir -d; return ;; --file | --path) filedir; return ;; --+([-a-z0-9])) local argtype=$( LCALL=C $1 --help 2>&1 | command sed -ne "s|.*$prev[{0,1}=[<[]{0,1}([-A-Za-z0-9]{1,}).|\1|p" ); case ${argtype,,} in dir) _filedir -d; return ;; file | path) _filedir; return ;; esac ;; esac; $split && return; if [[ "$cur" == - ]]; then COMPREPLY=($( compgen -W "$( LC_ALL=C $1 --help 2>&1 | command sed -ne 's/.(--[-A-Za-z0-9]{1,}={0,1})./\1/p' | sort -u )" -- "$cur" )); [[ $COMPREPLY == = ]] && compopt -o nospace; else if [[ "$1" == @(rmdir|chroot) ]]; then _filedir -d; else [[ "$1" == mkdir ]] && compopt -o nospace; _filedir; fi; fi } _mac_addresses () { local re='([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}'; local PATH="$PATH:/sbin:/usr/sbin"; COMPREPLY+=($( { LC_ALL=C ifconfig -a || ip link show; } 2>/dev/null | command sed -ne "s/.[[:space:]]HWaddr[[:space:]]{1,}($re)[[:space:]]./\1/p" -ne "s/.[[:space:]]HWaddr[[:space:]]{1,}($re)[[:space:]]$/\1/p" -ne "s|.[[:space:]](link/){0,1}ether[[:space:]]{1,}($re)[[:space:]].|\2|p" -ne "s|.[[:space:]](link/){0,1}ether[[:space:]]{1,}($re)[[:space:]]$|\2|p" )); COMPREPLY+=($( { arp -an || ip neigh show; } 2>/dev/null | command sed -ne "s/.[[:space:]]($re)[[:space:]]./\1/p" -ne "s/.[[:space:]]($re)[[:space:]]$/\1/p" )); COMPREPLY+=($( command sed -ne "s/^[[:space:]]($re)[[:space:]].*/\1/p" /etc/ethers 2>/dev/null )); COMPREPLY=($( compgen -W '${COMPREPLY[@]}' -- "$cur" )); ltrim_colon_completions "$cur" } _make () { local cur prev words cword split; _init_completion -s || return; local file makef makef_dir=("-C" ".") makef_inc i; case $prev in -f | --file | --makefile | -o | --old-file | --assume-old | -W | --what-if | --new-file | --assume-new) _filedir; return ;; -I | --include-dir | -C | --directory | -m) _filedir -d; return ;; -E) COMPREPLY=($( compgen -v -- "$cur" )); return ;; --eval | -D | -V | -x) return ;; --jobs | -j) COMPREPLY=($( compgen -W "{1..$(( $(_ncpus)2 ))}" -- "$cur" )); return ;; esac; $split && return; if [[ "$cur" == - ]]; then local opts="$( _parse_help "$1" )"; [[ -n $opts ]] || opts="$( _parse_usage "$1" )"; COMPREPLY=($( compgen -W "$opts" -- "$cur" )); [[ $COMPREPLY == = ]] && compopt -o nospace; else if [[ $cur == = ]]; then prev=${cur%%=}; cur=${cur#=}; local diropt; [[ ${prev,,} == dir?(ectory) ]] && diropt=-d; _filedir $diropt; else for ((i=0; i < ${#words[@]}; i++ )) do if [[ ${words[i]} == -@(C|-directory) ]]; then eval makef_dir=(-C "${words[i+1]}"); break; fi; done; for ((i=0; i < ${#words[@]}; i++ )) do if [[ ${words[i]} == -@(f|-?(make)file) ]]; then eval makef=(-f "${words[i+1]}"); break; fi; done; local mode=--; if (( COMP_TYPE != 9 )); then mode=-d; fi; local IFS='
' script=$( _make_target_extract_script $mode "$cur" ); COMPREPLY=($( LC_ALL=C $1 -npq BASH_MAKE_COMPLETION=1 "${makef[@]}" "${makef_dir[@]}" .DEFAULT 2>/dev/null | command sed -ne "$script" )); if [[ $mode != -d ]]; then [[ $COMPREPLY == / ]] && compopt -o nospace; fi; fi; fi } _make_target_extract_script () { local mode="$1"; shift; local prefix="$1"; local prefix_pat=$( command sed 's/[][\,.^$(){}?+|/]/\&/g' <<<"$prefix" ); local basename=${prefix##/}; local dirname_len=$(( ${#prefix} - ${#basename} )); if [[ $mode == -d ]]; then local output="\2"; else local output="\1\2"; fi; cat <<EOF 1,/^# Make data base/ d; # skip any makefile output /^# Finished Make data base/,/^# Make data base/{ d; # skip any makefile output } /^# Variables/,/^# Files/ d; # skip until files section /^# * Not a target/,/^$/ d; # skip not target blocks /^${prefix_pat}/,/^$/! d; # skip anything user dont want

# The stuff above here describes lines that are not
#  explicit targets or not targets other than special ones
# The stuff below here decides whether an explicit target
#  should be output.

/^# * File is an intermediate prerequisite/ {
  s/^.*$//;x;                               # unhold target
  d;                                        # delete line
}

/^$/ {                                      # end of target block
  x;                                        # unhold target
  /^$/d;                                    # dont print blanks
  s|^\(.\{${dirname_len}\}\)\(.\{${#basename}\}[^:/]*/\{0,1\}\)[^:]*:.*$|${output}|p;
  d;                                        # hide any bugs
}

# This pattern includes a literal tab character as \t is not a portable
# representation and fails with BSD sed
/^[^#   :%]\{1,\}:/ {         # found target block
  /^\.PHONY:/                 d;            # special target
  /^\.SUFFIXES:/              d;            # special target
  /^\.DEFAULT:/               d;            # special target
  /^\.PRECIOUS:/              d;            # special target
  /^\.INTERMEDIATE:/          d;            # special target
  /^\.SECONDARY:/             d;            # special target
  /^\.SECONDEXPANSION:/       d;            # special target
  /^\.DELETE_ON_ERROR:/       d;            # special target
  /^\.IGNORE:/                d;            # special target
  /^\.LOW_RESOLUTION_TIME:/   d;            # special target
  /^\.SILENT:/                d;            # special target
  /^\.EXPORT_ALL_VARIABLES:/  d;            # special target
  /^\.NOTPARALLEL:/           d;            # special target
  /^\.ONESHELL:/              d;            # special target
  /^\.POSIX:/                 d;            # special target
  /^\.NOEXPORT:/              d;            # special target
  /^\.MAKE:/                  d;            # special target

EOF

if [[ -z "${prefix_pat}" || "${prefix_pat}" = */ ]]; then
    cat  <<EOF
  /^${prefix_pat}[^a-zA-Z0-9]/d;            # convention for hidden tgt

EOF

fi
cat  <<EOF
  h;                                        # hold target
  d;                                        # delete line
}

EOF

} _minimal () { local cur prev words cword split; _init_completion -s || return; $split && return; _filedir } _modules () { local modpath; modpath=/lib/modules/$1; COMPREPLY=($( compgen -W "$( command ls -RL $modpath 2>/dev/null | command sed -ne 's/^(.).k{0,1}o(.[gx]z){0,1}$/\1/p' )" -- "$cur" )) } _ncpus () { local var=NPROCESSORS_ONLN; [[ $OSTYPE == linux ]] && var=_$var; local n=$( getconf $var 2>/dev/null ); printf %s ${n:-1} } _parse_help () { eval local cmd=$( quote "$1" ); local line; { case $cmd in -) cat ;; ) LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1 ;; esac } | while read -r line; do [[ $line == ([[:blank:]])- ]] || continue; while [[ $line =~ ((^|[^-])-[A-Za-z0-9?][[:space:]]+)[?[A-Z0-9]+]? ]]; do line=${line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"}; done; parse_options "${line// or /, }"; done } _parse_usage () { eval local cmd=$( quote "$1" ); local line match option i char; { case $cmd in -) cat ;; ) LC_ALL=C "$( dequote "$cmd" )" ${2:---usage} 2>&1 ;; esac } | while read -r line; do while [[ $line =~ [[[:space:]](-[^]]+)[[:space:]]] ]]; do match=${BASH_REMATCH[0]}; option=${BASH_REMATCH[1]}; case $option in -?([)+([a-zA-Z0-9?])) for ((i=1; i < ${#option}; i++ )) do char=${option:i:1}; [[ $char != '[' ]] && printf '%s\n' -$char; done ;; ) parse_options "$option" ;; esac; line=${line#"$match"}; done; done } _pci_ids () { COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lspci -n | awk '{print $3}')" -- "$cur" )) } _pgids () { COMPREPLY=($( compgen -W '$( command ps axo pgid= )' -- "$cur" )) } _pids () { COMPREPLY=($( compgen -W '$( command ps axo pid= )' -- "$cur" )) } _pnames () { if [[ "$1" == -s ]]; then COMPREPLY=($( compgen -X '' -W '$( command ps axo comm | command sed -e 1d )' -- "$cur" )); else COMPREPLY=($( compgen -X '' -W '$( command ps axo command= | command sed -e \ "s/ .//" -e \ "s:./::" -e \ "s/:$//" -e \ "s/^[[(-]//" -e \ "s/[])]$//" | sort -u )' -- "$cur" )); fi } _quote_readline_by_ref () { if [ -z "$1" ]; then printf -v $2 %s "$1"; else if [[ $1 == \' ]]; then printf -v $2 %s "${1:1}"; else if [[ $1 == ~ ]]; then printf -v $2 ~%q "${1:1}"; else printf -v $2 %q "$1"; fi; fi; fi; [[ ${!2} == \ ]] && printf -v $2 %s "${1//\\/\}"; [[ ${!2} == \$ ]] && eval $2=${!2} } _realcommand () { type -P "$1" > /dev/null && { if type -p realpath > /dev/null; then realpath "$(type -P "$1")"; else if type -p greadlink > /dev/null; then greadlink -f "$(type -P "$1")"; else if type -p readlink > /dev/null; then readlink -f "$(type -P "$1")"; else type -P "$1"; fi; fi; fi } } _rl_enabled () { [[ "$( bind -v )" == $1+([[:space:]])on ]] } _root_command () { local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin; local root_command=$1; _command } _service () { local cur prev words cword; _init_completion || return; [[ $cword -gt 2 ]] && return; if [[ $cword -eq 1 && $prev == ?(/)service ]]; then _services; [[ -e /etc/mandrake-release ]] && _xinetd_services; else local sysvdirs; _sysvdirs; COMPREPLY=($( compgen -W '`command sed -e "y/|/ /" \ -ne "s/^.(U|msg_u)sage.{(.)}.$/\2/p" \ ${sysvdirs[0]}/${prev##/} 2>/dev/nullstart stop' -- "$cur" )); fi } _services () { local sysvdirs; _sysvdirs; local IFS=' ' reset=$(shopt -p nullglob); shopt -s nullglob; COMPREPLY=($( printf '%s\n' ${sysvdirs[0]}/!($_backup_glob|functions|README) )); $reset; COMPREPLY+=($( systemctl list-units --full --all 2>/dev/null | awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' )); if [[ -x /sbin/upstart-udev-bridge ]]; then COMPREPLY+=($( initctl list 2>/dev/null | cut -d' ' -f1 )); fi; COMPREPLY=($( compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- "$cur" )) } _shells () { local shell rest; while read -r shell rest; do [[ $shell == /* && $shell == "$cur"* ]] && COMPREPLY+=($shell); done 2> /dev/null < /etc/shells } _signals () { local -a sigs=($( compgen -P "$1" -A signal "SIG${cur#$1}" )); COMPREPLY+=("${sigs[@]/#${1}SIG/${1}}") } _split_longopt () { if [[ "$cur" == --?*=* ]]; then prev="${cur%%?(\\)=*}"; cur="${cur#*=}"; return 0; fi; return 1 } _sudo () { local cur prev words cword; _init_completion || return; local i mode=normal; [[ $1 == *sudoedit ]] && mode=edit; [[ $mode == normal ]] && for ((i=1; i <= COMP_CWORD; i++ )) do if [[ ${COMP_WORDS[i]} != -* ]]; then local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin; local root_command=${COMP_WORDS[i]}; _command_offset $i; return; fi; if [[ ${COMP_WORDS[i]} == -e ]]; then mode=edit; break; fi; [[ ${COMP_WORDS[i]} == -[uUgCp] ]] && ((i++)); done; case "$prev" in -u | -U) COMPREPLY=($( compgen -u -- "$cur" )); return ;; -g) COMPREPLY=($( compgen -g -- "$cur" )); return ;; -C | -p) return ;; esac; if [[ "$cur" == -* ]]; then COMPREPLY=($( compgen -W '-A -b -C -E -e -g -H -h -i -K -k -L -l -ll -n -P -p -S -s -U -u -V -v' -- "$cur" )); return; fi; if [[ $mode == edit ]]; then _filedir; fi } _sysvdirs () { sysvdirs=(); [[ -d /etc/rc.d/init.d ]] && sysvdirs+=(/etc/rc.d/init.d); [[ -d /etc/init.d ]] && sysvdirs+=(/etc/init.d); [[ -f /etc/slackware-version ]] && sysvdirs=(/etc/rc.d) } _terms () { COMPREPLY+=($( compgen -W "$( command sed -ne 's/^\([^[:space:]#|]\{2,\}\)|.*/\1/p' /etc/termcap 2>/dev/null )" -- "$cur" )); COMPREPLY+=($( compgen -W "$( { toe -a 2>/dev/null || toe 2>/dev/null; } | awk '{ print $1 }' | sort -u )" -- "$cur" )) } _tilde () { local result=0; if [[ $1 == \~* && $1 != */* ]]; then COMPREPLY=($( compgen -P '~' -u -- "${1#\~}" )); result=${#COMPREPLY[@]}; [[ $result -gt 0 ]] && compopt -o filenames 2> /dev/null; fi; return $result } _uids () { if type getent &> /dev/null; then COMPREPLY=($( compgen -W '$( getent passwd | cut -d: -f3 )' -- "$cur" )); else if type perl &> /dev/null; then COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($uid) = (getpwent)[2]) { print $uid . "\n" }'"'"' )' -- "$cur" )); else COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/passwd )' -- "$cur" )); fi; fi } _upvar () { if unset -v "$1"; then if (( $# == 2 )); then eval $1=\"\$2\"; else eval $1=\(\"\${@:2}\"\); fi; fi } _upvars () { if ! (( $# )); then echo "${FUNCNAME[0]}: usage: ${FUNCNAME[0]} [-v varname" "value] | [-aN varname [value ...]] ..." 1>&2; return 2; fi; while (( $# )); do case $1 in -a*) [[ -n ${1#-a} ]] || { echo "bash: ${FUNCNAME[0]}: \$1': missing" "number specifier" 1>&2; return 1 }; printf %d "${1#-a}" &> /dev/null || { echo "bash:" "${FUNCNAME[0]}: `$1': invalid number specifier" 1>&2; return 1 }; [[ -n "$2" ]] && unset -v "$2" && eval $2=(\"\${@:3:${1#-a}}\") && shift $((${1#-a} + 2)) || { echo "bash: ${FUNCNAME[0]}:" "`$1${2+ }$2': missing argument(s)" 1>&2; return 1 } ;; -v) [[ -n "$2" ]] && unset -v "$2" && eval $2=\"\$3\" && shift 3 || { echo "bash: ${FUNCNAME[0]}: $1: missing" "argument(s)" 1>&2; return 1 } ;; ) echo "bash: ${FUNCNAME[0]}: $1: invalid option" 1>&2; return 1 ;; esac; done } _usb_ids () { COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lsusb | awk '{print $6}' )" -- "$cur" )) } _user_at_host () { local cur prev words cword; _init_completion -n : || return; if [[ $cur == @ ]]; then _known_hosts_real "$cur"; else COMPREPLY=($( compgen -u -S @ -- "$cur" )); compopt -o nospace; fi } _usergroup () { if [[ $cur == \\ || $cur == :: ]]; then return; else if [[ $cur == \: ]]; then local prefix; prefix=${cur%%([^:])}; prefix=${prefix//\}; local mycur="${cur#[:]}"; if [[ $1 == -u ]]; then _allowed_groups "$mycur"; else local IFS=' '; COMPREPLY=($( compgen -g -- "$mycur" )); fi; COMPREPLY=($( compgen -P "$prefix" -W "${COMPREPLY[@]}" )); else if [[ $cur == : ]]; then local mycur="${cur#:}"; if [[ $1 == -u ]]; then _allowed_groups "$mycur"; else local IFS=' '; COMPREPLY=($( compgen -g -- "$mycur" )); fi; else if [[ $1 == -u ]]; then _allowed_users "$cur"; else local IFS=' '; COMPREPLY=($( compgen -u -- "$cur" )); fi; fi; fi; fi } _userland () { local userland=$( uname -s ); [[ $userland == @(Linux|GNU/) ]] && userland=GNU; [[ $userland == $1 ]] } variables () { if [[ $cur =~ ^(\$({[!#]?)?)([A-Za-z0-9])$ ]]; then if [[ $cur == \${ ]]; then local arrs vars; vars=($( compgen -A variable -P ${BASH_REMATCH[1]} -S '}' -- ${BASH_REMATCH[3]} )) && arrs=($( compgen -A arrayvar -P ${BASH_REMATCH[1]} -S '[' -- ${BASH_REMATCH[3]} )); if [[ ${#vars[@]} -eq 1 && -n $arrs ]]; then compopt -o nospace; COMPREPLY+=(${arrs[]}); else COMPREPLY+=(${vars[]}); fi; else COMPREPLY+=($( compgen -A variable -P '$' -- "${BASHREMATCH[3]}" )); fi; return 0; else if [[ $cur =~ ^(\${[#!]?)([A-Za-z0-9])[([^]])$ ]]; then local IFS=' '; COMPREPLY+=($( compgen -W '$(printf %s\n "${!'${BASH_REMATCH[2]}'[@]}")' -P "${BASH_REMATCH[1]}${BASH_REMATCH[2]}[" -S ']}' -- "${BASH_REMATCH[3]}" )); if [[ ${BASH_REMATCH[3]} == [@] ]]; then COMPREPLY+=("${BASH_REMATCH[1]}${BASH_REMATCH[2]}[${BASH_REMATCH[3]}]}"); fi; __ltrim_coloncompletions "$cur"; return 0; else if [[ $cur =~ ^\${[#!]?[A-Za-z0-9][.]$ ]]; then COMPREPLY+=("$cur}"); __ltrim_colon_completions "$cur"; return 0; else case $prev in TZ) cur=/usr/share/zoneinfo/$cur; _filedir; for i in ${!COMPREPLY[@]}; do if [[ ${COMPREPLY[i]} == .tab ]]; then unset 'COMPREPLY[i]'; continue; else if [[ -d ${COMPREPLY[i]} ]]; then COMPREPLY[i]+=/; compopt -o nospace; fi; fi; COMPREPLY[i]=${COMPREPLY[i]#/usr/share/zoneinfo/}; done; return 0 ;; esac; fi; fi; fi; return 1 } _xfunc () { set -- "$@"; local srcfile=$1; shift; declare -F $1 &> /dev/null || { __load_completion "$srcfile" }; "$@" } _xinetd_services () { local xinetddir=/etc/xinetd.d; if [[ -d $xinetddir ]]; then local IFS='
' reset=$(shopt -p nullglob); shopt -s nullglob; local -a svcs=($( printf '%s\n' $xinetddir/!($_backup_glob) )); $reset; COMPREPLY+=($( compgen -W '${svcs[@]#$xinetddir/}' -- "$cur" )); fi } dequote () { eval printf %s "$1" 2> /dev/null } quote () { local quoted=${1//\'/\'\\'\'}; printf "'%s'" "$quoted" } quote_readline () { local quoted; _quote_readline_by_ref "$1" ret; printf %s "$ret" }

# #

*

@override public void onRewardedVideoAdClosed() { // Load the next rewarded video ad. loadRewardedVideoAd(); }* Adding multi langauge soft files for a complete conversoion tool experiance** image