[msh] try to complete module path

Msh can execute module directly. So try to auto-complete the path when
user press TAB. There is a chance that the path is a module.
This commit is contained in:
Grissiom 2014-03-27 15:09:53 +08:00
parent de16b800a4
commit f9659283c0
1 changed files with 14 additions and 5 deletions

View File

@ -316,7 +316,7 @@ void msh_auto_complete_path(char *path)
if (full_path == RT_NULL) return; /* out of memory */
ptr = full_path;
if (*path != '/')
if (*path != '/')
{
getcwd(full_path, 256);
if (full_path[rt_strlen(full_path) - 1] != '/')
@ -336,7 +336,7 @@ void msh_auto_complete_path(char *path)
char *dest = index;
/* fill the parent path */
ptr = full_path;
ptr = full_path;
while (*ptr) ptr ++;
for (index = path; index != dest;)
@ -361,7 +361,7 @@ void msh_auto_complete_path(char *path)
{
dirent = readdir(dir);
if (dirent == RT_NULL) break;
rt_kprintf("%s\n", dirent->d_name);
}
}
@ -450,12 +450,21 @@ void msh_auto_complete(char *prefix)
msh_auto_complete_path(ptr + 1);
break;
}
ptr --;
}
#ifdef RT_USING_MODULE
/* There is a chance that the user want to run the module directly. So
* try to complete the file names. If the completed path is not a
* module, the system won't crash anyway. */
if (ptr == prefix)
{
msh_auto_complete_path(ptr);
}
#endif
}
#endif
/* checks in internal command */
{
for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))