/** @file nav.c * @brief Navigation * * Example: * * pop * push /view_name * * * Possible navigation commands: * * push - Push "view_name" view to new level of path and change * current path to it. * * pop [num] - Pop up path levels. Optional "num" argument specifies number * of levels to pop. Default is 1. * * top - Pop up to first path level. * * exit - Exit klish. */ #include #include #include #include #include #include #include #include #include #include int klish_nav(kcontext_t *context) { kparg_t *parg = NULL; const kentry_t *entry = NULL; const char *value = NULL; const char *command_name = NULL; // Navigation is suitable only for command actions but not for // PTYPEs, CONDitions i.e. SERVICE_ACTIONS. assert(kcontext_type(context) == KCONTEXT_ACTION); parg = kcontext_candidate_parg(context); entry = kparg_entry(parg); value = kparg_value(parg); command_name = kentry_value(entry); if (!command_name) command_name = kentry_name(entry); if (!command_name) return -1; return faux_str_casecmp(value, command_name); }