[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 */ if (full_path == RT_NULL) return; /* out of memory */
ptr = full_path; ptr = full_path;
if (*path != '/') if (*path != '/')
{ {
getcwd(full_path, 256); getcwd(full_path, 256);
if (full_path[rt_strlen(full_path) - 1] != '/') if (full_path[rt_strlen(full_path) - 1] != '/')
@ -336,7 +336,7 @@ void msh_auto_complete_path(char *path)
char *dest = index; char *dest = index;
/* fill the parent path */ /* fill the parent path */
ptr = full_path; ptr = full_path;
while (*ptr) ptr ++; while (*ptr) ptr ++;
for (index = path; index != dest;) for (index = path; index != dest;)
@ -361,7 +361,7 @@ void msh_auto_complete_path(char *path)
{ {
dirent = readdir(dir); dirent = readdir(dir);
if (dirent == RT_NULL) break; if (dirent == RT_NULL) break;
rt_kprintf("%s\n", dirent->d_name); rt_kprintf("%s\n", dirent->d_name);
} }
} }
@ -450,12 +450,21 @@ void msh_auto_complete(char *prefix)
msh_auto_complete_path(ptr + 1); msh_auto_complete_path(ptr + 1);
break; break;
} }
ptr --; 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 #endif
/* checks in internal command */ /* checks in internal command */
{ {
for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index)) for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))