[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:
parent
de16b800a4
commit
f9659283c0
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue