|
@@ -322,6 +322,7 @@ kpargv_t *ksession_parse_line(ksession_t *session, const faux_argv_t *argv,
|
|
|
klevel_t *level = NULL;
|
|
klevel_t *level = NULL;
|
|
|
size_t level_found = 0; // Level where command was found
|
|
size_t level_found = 0; // Level where command was found
|
|
|
kpath_t *path = NULL;
|
|
kpath_t *path = NULL;
|
|
|
|
|
+ bool_t dont_parse_upper;
|
|
|
|
|
|
|
|
assert(session);
|
|
assert(session);
|
|
|
if (!session)
|
|
if (!session)
|
|
@@ -332,6 +333,9 @@ kpargv_t *ksession_parse_line(ksession_t *session, const faux_argv_t *argv,
|
|
|
|
|
|
|
|
argv_iter = faux_argv_iter(argv);
|
|
argv_iter = faux_argv_iter(argv);
|
|
|
|
|
|
|
|
|
|
+ dont_parse_upper = faux_argv_len(argv) == 0 &&
|
|
|
|
|
+ (purpose == KPURPOSE_COMPLETION || purpose == KPURPOSE_HELP);
|
|
|
|
|
+
|
|
|
// Initialize kpargv_t
|
|
// Initialize kpargv_t
|
|
|
pargv = kpargv_new();
|
|
pargv = kpargv_new();
|
|
|
assert(pargv);
|
|
assert(pargv);
|
|
@@ -360,6 +364,11 @@ kpargv_t *ksession_parse_line(ksession_t *session, const faux_argv_t *argv,
|
|
|
// levels of path.
|
|
// levels of path.
|
|
|
if (kpargv_pargs_len(pargv) > 0)
|
|
if (kpargv_pargs_len(pargv) > 0)
|
|
|
break;
|
|
break;
|
|
|
|
|
+ // When the purpose is completion or help and user didn't type
|
|
|
|
|
+ // any text yet then don't show completion/help for the upper
|
|
|
|
|
+ // kpath levels but only for the current one.
|
|
|
|
|
+ if (dont_parse_upper)
|
|
|
|
|
+ break;
|
|
|
level_found--;
|
|
level_found--;
|
|
|
}
|
|
}
|
|
|
// Save last argument
|
|
// Save last argument
|