cea-hpc / modules

Environment Modules: provides dynamic modification of a user's environment
http://modules.sourceforge.net/
GNU General Public License v2.0
695 stars 109 forks source link

Complete existing filenames when pattern starts with `/` on Tcsh completion #523

Closed dilipzt closed 7 months ago

dilipzt commented 7 months ago

Describe the bug

Auto command completion in tcsh shell on RHEL8 and RHEL9 does not working and throwing an error which is given below. but same thing is working on BASH shell and on RHEL7 for BASH and TCSH as well

module add /_module_not_yet_loaded: Command not found. _module_not_yet_loaded: Command not found.

To Reproduce

Loging to any RHEL9 or RHEL8 host

Switch to tcsh and execute

module add /AND PRESS HERE TAB

$ tcsh
$ module add /TAB KEY for auto command completion
...

Location and content of any modulerc or modulefile involved:

$ cat path/to/modulepath/module/version

 module --version
Modules Release 5.0.1 (2021-10-16)

$ cat path/to/modulepath/module/.modulerc
$ cat path/to/modulepath/.modulerc
...

Expected behavior

when pressing two times TAB key after forward slash then it must be give expected output as below

$module add /TAB_KEY-2Times .autorelabel boot/ home/ media/ proc/ sbin/ usr/

Error and debugging information

$ module --debug <command1> <arguments>
$ module --debug <command2> <arguments>
...

Modules version and configuration

$ module --version
$ module config --dump-state

Additional context

xdelaruelle commented 7 months ago

Hello @dilipzt,

More information is needed to correctly understand your issue.

For each kind of RHEL host you access (7, 8 and 9), please run the following commands under the tcsh shell and provide the output on this ticket:

module --version
$MODULES_CMD tcsh autoinit
rpm -qi environment-modules
rpm -ql environment-modules
ls -l /usr/share/Modules/init/
dilipzt commented 7 months ago

RHEL7_RequiredCommandOutput.txt RHEL8_RequiredCommandOutput.txt RHEL9_RequiredCommandOutput.txt

Hi @xdelaruelle

Please find required command output file.

Many thanks! to working on this.

xdelaruelle commented 7 months ago

Hi @dilipzt

Thanks for these outputs but they are not complete. I am missing the result of the following commands:

module --version
$MODULES_CMD tcsh autoinit

I would also like to see the output of the alias command to see if the completion alias are correctly defined.

From what I understand, you would like to perform a path completion with module add command rather doing a completion against available modules.

xdelaruelle commented 7 months ago

I can confirm that with current Tcsh completion definition, word pattern is only completed against available modules and command options.

I cannot explain why you observe it working on RHEL 7, unless if no completion is defined for module command.

From what I have tested right now, it seems feasible update the completion script to complete against existing files if current word to complete matches /*, ./*, ../ or ~/ glob patterns. This change should not break completion against available modules or options if current word does not match these patterns.

dilipzt commented 7 months ago

Hey @xdelaruelle,

Please find snapshot of required command.

//Dilip K. RHEL7_Error_output RHEL9_Error_output

xdelaruelle commented 7 months ago

@dilipzt The update of tcsh_completion script I have just pushed should address your request.

dilipzt commented 7 months ago

@xdelaruelle So, Do I need to patch any particular file or go for complete installation of latest version. May I have the steps to address this problem - Please.

xdelaruelle commented 7 months ago

You need to update the init/tcsh_completion file as I did in 9ae9c401.

You should find this file in ???/modulestcl/5.0.1/init/tcsh_completion (replace ??? with the path you have obfuscated in your input).

Please note you seem using some custom wrapper over modulecmd (as modulecmd reports Modules Wrapper for vbuild toolsetup 0.2 in the provided output).

Once you have patched tcsh_completion file, restart a tcsh shell session. Completion should then work as expected.

If not, please provide the output of the following commads:

alias | grep module
complete module