#
# Tcsh commandline completion
#

alias _module_avail '\\
    /usr/bin/tclsh /usr/lib64/Modules//modulecmd.tcl tcsh avail -t |& sed '"'"'\\
        /^-\+/d; /^\s*$/d; \\
        /->.*$/d; \\
        /:$/d; \\
        /:ERROR:/d; \\
        s#^\(.*\)/\(.\+\)(.*default.*)#\1\n\1\/\2#; \\
        s#(.*)$##g; \\
        s#\s*$##g; \\
        s#/*$##g; '"'"

alias _module_loaded '\\
    /usr/bin/tclsh /usr/lib64/Modules//modulecmd.tcl tcsh list -t |& sed '"'"'\\
        /^-\+/d; /^\s*$/d; \\
        /->.*$/d; \\
        /:$/d; \\
        /:ERROR:/d; \\
        s#^\(.*\)/\(.\+\)(.*default.*)#\1\n\1\/\2#; \\
        s#(.*)$##g; \\
        s#/*$##g; '"'"

alias _module_savelist '\\
    /usr/bin/tclsh /usr/lib64/Modules//modulecmd.tcl tcsh savelist -t |& sed '"'"'\\
        /Named collection list$/d; \\
        /:$/d; \\
        /:ERROR:/d; '"'"

alias _module_not_yet_loaded '\\
        mkfifo /tmp/modules_tcsh_completion.$$.p1 /tmp/modules_tcsh_completion.$$.p2 && \\
        ( _module_avail | sort > /tmp/modules_tcsh_completion.$$.p1 & ); \\
        ( _module_loaded | sort > /tmp/modules_tcsh_completion.$$.p2 & ); \\
        comm -23 /tmp/modules_tcsh_completion.$$.p1 /tmp/modules_tcsh_completion.$$.p2; \\
        rm /tmp/modules_tcsh_completion.$$.p1 /tmp/modules_tcsh_completion.$$.p2'

alias _module_modulepath 'echo ${MODULEPATH} | sed '"'"'s/:/\n/g;'"'"' '

set module_cmds = "add apropos aliases avail append-path display help initadd initclear initlist initprepend initrm is-loaded is-saved is-used is-avail info-loaded keyword list load path paths purge prepend-path refresh reload restore rm remove-path save savelist saveshow saverm search show source swap switch test unload unuse use whatis"

set module_opts = "-D -h -V --debug --help --version"
set module_list_opts = "-l -t --long --terse"
set module_avail_opts = "-d -L -l -t --default --latest --long --terse"
set module_path_opts = "-d --delim --duplicates"
set module_rm_path_opts = "-d --delim --index"

complete module 'n/help/`_module_avail`/' \
        'n/add/`_module_not_yet_loaded`/' \
        'n/load/`_module_not_yet_loaded`/' \
        'n/rm/`_module_loaded`/' \
        'n/remove/`_module_loaded`/' \
        'n/unload/`_module_loaded`/' \
        'n/swap/`_module_loaded`/' \
        'N/swap/`_module_not_yet_loaded`/' \
        'n/switch/`_module_loaded`/' \
        'N/switch/`_module_not_yet_loaded`/' \
        'n/show/`_module_avail`/' \
        'n/display/`_module_avail`/' \
        'n/test/`_module_avail`/' \
        "n/list/(${module_list_opts})/" \
        'n/avail/`_module_avail; echo ${module_avail_opts}`/' \
        'n/is-avail/`_module_avail`/' \
        'n/is-loaded/`_module_avail`/' \
        'n/info-loaded/`_module_avail`/' \
        'n/restore/`_module_savelist`/' \
        "n/savelist/(${module_list_opts})/" \
        'n/saveshow/`_module_savelist`/' \
        'n/saverm/`_module_savelist`/' \
        'n/save/`_module_savelist`/' \
        'n/is-saved/`_module_savelist`/' \
        'n/aliases/n/' \
        'n/use/d/' \
        'N/use/d/' \
        'n/unuse/`_module_modulepath`/' \
        'n/is-used/`_module_modulepath`/' \
        'n/purge/n/' \
        'n/refresh/n/' \
        'n/reload/n/' \
        'n/whatis/`_module_avail`/' \
        'n/apropos/n/' \
        'n/search/n/' \
        'n/keyword/n/' \
        'n/source/n/' \
        'n/initadd/n/' \
        'n/initprepend/n/' \
        'n/initrm/n/' \
        'n/initlist/n/' \
        'n/initclear/n/' \
        "n/append-path/(${module_path_opts})/" \
        "n/prepend-path/(${module_path_opts})/" \
        "n/remove-path/(${module_rm_path_opts})/" \
        'n/-h/n/' \
        'n/--help/n/' \
        'n/-V/n/' \
        'n/--version/n/' \
        'C/sw*/(switch)/' \
        "p/1/(${module_cmds} ${module_opts})/" \
        "n/-*/(${module_cmds})/" 

