Get rid of bash_completion self-parsing from _filedir_xspec (RedHat: #479936).
My tests show a ~5% (cached) load time improvement with this, it'll make _filedir_xspec somewhat faster too, and it's generally less ugly. I suppose we'll rewrite this stuff again in the near future when we start to take advantage of dynamic completion loading, but until then I'll take the small improvement.master
parent
f1d5758c76
commit
d74e169935
160
bash_completion
160
bash_completion
|
@ -62,68 +62,6 @@ shopt -s extglob progcomp
|
|||
# Make directory commands see only directories
|
||||
complete -d pushd
|
||||
|
||||
# The following section lists completions that are redefined later
|
||||
# Do NOT break these over multiple lines.
|
||||
#
|
||||
# START exclude -- do NOT remove this line
|
||||
# bzcmp, bzdiff, bz*grep, bzless, bzmore intentionally not here, see Debian: #455510
|
||||
complete -f -X '!*.?(t)bz?(2)' bunzip2 bzcat pbunzip2 pbzcat lbunzip2 lbzcat
|
||||
complete -f -X '!*.@(zip|[ejw]ar|exe|pk3|wsz|zargo|xpi|sxw|o[tx]t|od[fgpst]|epub|apk)' unzip zipinfo
|
||||
complete -f -X '*.Z' compress znew
|
||||
# zcmp, zdiff, z*grep, zless, zmore intentionally not here, see Debian: #455510
|
||||
complete -f -X '!*.@(Z|[gGd]z|t[ag]z)' gunzip zcat unpigz
|
||||
complete -f -X '!*.Z' uncompress
|
||||
# lzcmp, lzdiff intentionally not here, see Debian: #455510
|
||||
complete -f -X '!*.@(tlz|lzma)' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma
|
||||
complete -f -X '!*.@(?(t)xz|tlz|lzma)' unxz xzcat
|
||||
complete -f -X '!*.lrz' lrunzip
|
||||
complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
|
||||
complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm)' xv qiv
|
||||
complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
|
||||
complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi kdvi
|
||||
complete -f -X '!*.dvi' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx
|
||||
complete -f -X '!*.[pf]df' acroread gpdf xpdf
|
||||
complete -f -X '!*.@(?(e)ps|pdf)' kpdf
|
||||
complete -f -X '!*.@(@(?(e)ps|?(E)PS|[pf]df|[PF]DF|dvi|DVI)?(.gz|.GZ|.bz2|.BZ2)|cb[rz]|djv?(u)|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|fdf)' evince
|
||||
complete -f -X '!*.@(okular|@(?(e|x)ps|?(E|X)PS|pdf|PDF|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|fdf|FDF)?(.?(gz|GZ|bz2|BZ2)))' okular
|
||||
complete -f -X '!*.@(?(e)ps|pdf)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr
|
||||
complete -f -X '!*.texi*' makeinfo texi2html
|
||||
complete -f -X '!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi
|
||||
complete -f -X '!*.mp3' mpg123 mpg321 madplay
|
||||
complete -f -X '!*@(.@(mp?(e)g|MP?(E)G|wma|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|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|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)' xine aaxine fbxine
|
||||
complete -f -X '!*@(.@(mp?(e)g|MP?(E)G|wma|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|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|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)' kaffeine dragon
|
||||
complete -f -X '!*.@(avi|asf|wmv)' aviplay
|
||||
complete -f -X '!*.@(rm?(j)|ra?(m)|smi?(l))' realplay
|
||||
complete -f -X '!*.@(mpg|mpeg|avi|mov|qt)' xanim
|
||||
complete -f -X '!*.@(ogg|m3u|flac|spx)' ogg123
|
||||
complete -f -X '!*.@(mp3|ogg|pls|m3u)' gqmpeg freeamp
|
||||
complete -f -X '!*.fig' xfig
|
||||
complete -f -X '!*.@(mid?(i)|cmf)' playmidi
|
||||
complete -f -X '!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' timidity
|
||||
complete -f -X '!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|okta|p[st]m|s[3t]m|ult|umx|wav|xm)' modplugplay modplug123
|
||||
complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
|
||||
complete -f -X '!*.@([eE][xX][eE]?(.[sS][oO])|[cC][oO][mM]|[sS][cC][rR])' wine
|
||||
complete -f -X '!*.@(zip|z|gz|tgz)' bzme
|
||||
# konqueror not here on purpose, it's more than a web/html browser
|
||||
complete -f -X '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera galeon dillo elinks amaya firefox mozilla-firefox iceweasel google-chrome chromium-browser epiphany
|
||||
complete -f -X '!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm)' oowriter
|
||||
complete -f -X '!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)' ooimpress
|
||||
complete -f -X '!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)' oocalc
|
||||
complete -f -X '!*.@(sxd|std|sda|sdd|?(f)odg|otg)' oodraw
|
||||
complete -f -X '!*.@(sxm|smf|mml|odf)' oomath
|
||||
complete -f -X '!*.odb' oobase
|
||||
complete -f -X '!*.[rs]pm' rpm2cpio
|
||||
complete -f -X '!*.aux' bibtex
|
||||
complete -f -X '!*.po' poedit gtranslator kbabel lokalize
|
||||
complete -f -X '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp
|
||||
complete -f -X '!*.[Hh][Rr][Bb]' hbrun
|
||||
complete -f -X '!*.ly' lilypond ly2dvi
|
||||
complete -f -X '!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cdiff
|
||||
complete -f -X '!*.lyx' lyx
|
||||
complete -f -X '!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' portecle
|
||||
complete -f -X '!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' kid3 kid3-qt
|
||||
# FINISH exclude -- do not remove this line
|
||||
|
||||
# start of section containing compspecs that can be handled within bash
|
||||
|
||||
# user commands see only users
|
||||
|
@ -1750,6 +1688,7 @@ for i in a2ps awk bash bc bison cat colordiff cp csplit \
|
|||
done
|
||||
unset i
|
||||
|
||||
declare -A _xspecs
|
||||
_filedir_xspec()
|
||||
{
|
||||
local cur prev words cword
|
||||
|
@ -1757,16 +1696,8 @@ _filedir_xspec()
|
|||
|
||||
_expand || return 0
|
||||
|
||||
local IFS=$'\n' xspec
|
||||
# get first exclusion compspec that matches this command
|
||||
xspec=$( awk "/^complete[ \t]+.*[ \t]${1##*/}([ \t]|\$)/ { print \$0; exit }" \
|
||||
"${BASH_SOURCE[0]}" )
|
||||
# prune to leave nothing but the -X spec
|
||||
xspec=${xspec#*-X }
|
||||
xspec=${xspec%% *}
|
||||
|
||||
local IFS=$'\n' xspec=${_xspecs[${1##*/}]} tmp
|
||||
local -a toks
|
||||
local tmp
|
||||
|
||||
toks=( $(
|
||||
compgen -d -- "$(quote_readline "$cur")" | {
|
||||
|
@ -1798,28 +1729,73 @@ _filedir_xspec()
|
|||
[ ${#toks[@]} -ne 0 ] && compopt -o filenames
|
||||
COMPREPLY=( "${toks[@]}" )
|
||||
}
|
||||
list=( $( sed -ne '/^# START exclude/,/^# FINISH exclude/p' "${BASH_SOURCE[0]}" | \
|
||||
# read exclusion compspecs
|
||||
(
|
||||
while read line
|
||||
do
|
||||
# ignore compspecs that are commented out
|
||||
if [ "${line#\#}" != "$line" ]; then continue; fi
|
||||
line=${line%# START exclude*}
|
||||
line=${line%# FINISH exclude*}
|
||||
line=${line##*\'}
|
||||
list+=( $line )
|
||||
|
||||
_install_xspec()
|
||||
{
|
||||
local xspec=$1 cmd
|
||||
shift
|
||||
for cmd in $@; do
|
||||
_xspecs[$cmd]=$xspec
|
||||
done
|
||||
printf '%s ' "${list[@]}"
|
||||
)
|
||||
) )
|
||||
# remove previous compspecs
|
||||
if [ ${#list[@]} -gt 0 ]; then
|
||||
eval complete -r ${list[@]}
|
||||
# install new compspecs
|
||||
eval complete -F _filedir_xspec "${list[@]}"
|
||||
fi
|
||||
unset list
|
||||
complete -F _filedir_xspec $@
|
||||
}
|
||||
# bzcmp, bzdiff, bz*grep, bzless, bzmore intentionally not here, see Debian: #455510
|
||||
_install_xspec '!*.?(t)bz?(2)' bunzip2 bzcat pbunzip2 pbzcat lbunzip2 lbzcat
|
||||
_install_xspec '!*.@(zip|[ejw]ar|exe|pk3|wsz|zargo|xpi|sxw|o[tx]t|od[fgpst]|epub|apk)' unzip zipinfo
|
||||
_install_xspec '*.Z' compress znew
|
||||
# zcmp, zdiff, z*grep, zless, zmore intentionally not here, see Debian: #455510
|
||||
_install_xspec '!*.@(Z|[gGd]z|t[ag]z)' gunzip zcat unpigz
|
||||
_install_xspec '!*.Z' uncompress
|
||||
# lzcmp, lzdiff intentionally not here, see Debian: #455510
|
||||
_install_xspec '!*.@(tlz|lzma)' lzcat lzegrep lzfgrep lzgrep lzless lzmore unlzma
|
||||
_install_xspec '!*.@(?(t)xz|tlz|lzma)' unxz xzcat
|
||||
_install_xspec '!*.lrz' lrunzip
|
||||
_install_xspec '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
|
||||
_install_xspec '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm)' xv qiv
|
||||
_install_xspec '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
|
||||
_install_xspec '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi kdvi
|
||||
_install_xspec '!*.dvi' dvips dviselect dvitype dvipdf advi dvipdfm dvipdfmx
|
||||
_install_xspec '!*.[pf]df' acroread gpdf xpdf
|
||||
_install_xspec '!*.@(?(e)ps|pdf)' kpdf
|
||||
_install_xspec '!*.@(@(?(e)ps|?(E)PS|[pf]df|[PF]DF|dvi|DVI)?(.gz|.GZ|.bz2|.BZ2)|cb[rz]|djv?(u)|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|fdf)' evince
|
||||
_install_xspec '!*.@(okular|@(?(e|x)ps|?(E|X)PS|pdf|PDF|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|fdf|FDF)?(.?(gz|GZ|bz2|BZ2)))' okular
|
||||
_install_xspec '!*.@(?(e)ps|pdf)' ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr
|
||||
_install_xspec '!*.texi*' makeinfo texi2html
|
||||
_install_xspec '!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi
|
||||
_install_xspec '!*.mp3' mpg123 mpg321 madplay
|
||||
_install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wma|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|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|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)' xine aaxine fbxine
|
||||
_install_xspec '!*@(.@(mp?(e)g|MP?(E)G|wma|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|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|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)' kaffeine dragon
|
||||
_install_xspec '!*.@(avi|asf|wmv)' aviplay
|
||||
_install_xspec '!*.@(rm?(j)|ra?(m)|smi?(l))' realplay
|
||||
_install_xspec '!*.@(mpg|mpeg|avi|mov|qt)' xanim
|
||||
_install_xspec '!*.@(ogg|m3u|flac|spx)' ogg123
|
||||
_install_xspec '!*.@(mp3|ogg|pls|m3u)' gqmpeg freeamp
|
||||
_install_xspec '!*.fig' xfig
|
||||
_install_xspec '!*.@(mid?(i)|cmf)' playmidi
|
||||
_install_xspec '!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)' timidity
|
||||
_install_xspec '!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|okta|p[st]m|s[3t]m|ult|umx|wav|xm)' modplugplay modplug123
|
||||
_install_xspec '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
|
||||
_install_xspec '!*.@([eE][xX][eE]?(.[sS][oO])|[cC][oO][mM]|[sS][cC][rR])' wine
|
||||
_install_xspec '!*.@(zip|z|gz|tgz)' bzme
|
||||
# konqueror not here on purpose, it's more than a web/html browser
|
||||
_install_xspec '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera galeon dillo elinks amaya firefox mozilla-firefox iceweasel google-chrome chromium-browser epiphany
|
||||
_install_xspec '!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm)' oowriter
|
||||
_install_xspec '!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)' ooimpress
|
||||
_install_xspec '!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)' oocalc
|
||||
_install_xspec '!*.@(sxd|std|sda|sdd|?(f)odg|otg)' oodraw
|
||||
_install_xspec '!*.@(sxm|smf|mml|odf)' oomath
|
||||
_install_xspec '!*.odb' oobase
|
||||
_install_xspec '!*.[rs]pm' rpm2cpio
|
||||
_install_xspec '!*.aux' bibtex
|
||||
_install_xspec '!*.po' poedit gtranslator kbabel lokalize
|
||||
_install_xspec '!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])' harbour gharbour hbpp
|
||||
_install_xspec '!*.[Hh][Rr][Bb]' hbrun
|
||||
_install_xspec '!*.ly' lilypond ly2dvi
|
||||
_install_xspec '!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))' cdiff
|
||||
_install_xspec '!*.lyx' lyx
|
||||
_install_xspec '!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)' portecle
|
||||
_install_xspec '!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)' kid3 kid3-qt
|
||||
unset -f _install_xspec
|
||||
|
||||
# source completion directory definitions
|
||||
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
|
||||
|
|
Loading…
Reference in New Issue