Browse Source

klish: Add key for help. Not working yet

Serj Kalichev 1 year ago
parent
commit
74aa0d1602
3 changed files with 27 additions and 0 deletions
  1. 16 0
      bin/klish/interactive.c
  2. 10 0
      klish/ktp/ktp_session.c
  3. 1 0
      klish/ktp_session.h

+ 16 - 0
bin/klish/interactive.c

@@ -31,6 +31,7 @@ static bool_t stdin_cb(faux_eloop_t *eloop, faux_eloop_type_e type,
 // Keys
 static bool_t tinyrl_key_enter(tinyrl_t *tinyrl, unsigned char key);
 static bool_t tinyrl_key_tab(tinyrl_t *tinyrl, unsigned char key);
+static bool_t tinyrl_key_help(tinyrl_t *tinyrl, unsigned char key);
 
 
 int klish_interactive_shell(ktp_session_t *ktp, struct options *opts)
@@ -57,6 +58,7 @@ int klish_interactive_shell(ktp_session_t *ktp, struct options *opts)
 	tinyrl_bind_key(tinyrl, '\n', tinyrl_key_enter);
 	tinyrl_bind_key(tinyrl, '\r', tinyrl_key_enter);
 	tinyrl_bind_key(tinyrl, '\t', tinyrl_key_tab);
+	tinyrl_bind_key(tinyrl, '?', tinyrl_key_help);
 	tinyrl_redisplay(tinyrl);
 
 	ctx.ktp = ktp;
@@ -162,6 +164,20 @@ static bool_t tinyrl_key_tab(tinyrl_t *tinyrl, unsigned char key)
 }
 
 
+static bool_t tinyrl_key_help(tinyrl_t *tinyrl, unsigned char key)
+{
+	const char *line = NULL;
+	ctx_t *ctx = (ctx_t *)tinyrl_udata(tinyrl);
+
+	line = tinyrl_line(tinyrl);
+	ktp_session_help(ctx->ktp, line);
+
+	tinyrl_set_busy(tinyrl, BOOL_TRUE);
+
+	return BOOL_TRUE;
+}
+
+
 static void display_completions(const tinyrl_t *tinyrl, faux_list_t *completions,
 	const char *prefix, size_t max)
 {

+ 10 - 0
klish/ktp/ktp_session.c

@@ -579,6 +579,16 @@ bool_t ktp_session_completion(ktp_session_t *ktp, const char *line, bool_t dry_r
 }
 
 
+bool_t ktp_session_help(ktp_session_t *ktp, const char *line)
+{
+	if (!ktp_session_req(ktp, KTP_HELP, line, NULL, BOOL_TRUE))
+		return BOOL_FALSE;
+	ktp->state = KTP_SESSION_STATE_WAIT_FOR_HELP;
+
+	return BOOL_TRUE;
+}
+
+
 bool_t ktp_session_retcode(ktp_session_t *ktp, int *retcode)
 {
 	if (!ktp)

+ 1 - 0
klish/ktp_session.h

@@ -79,6 +79,7 @@ bool_t ktp_session_cmd(ktp_session_t *ktp, const char *line,
 	faux_error_t *error, bool_t dry_run);
 bool_t ktp_session_completion(ktp_session_t *ktp, const char *line,
 	bool_t dry_run);
+bool_t ktp_session_help(ktp_session_t *ktp, const char *line);
 bool_t ktp_session_retcode(ktp_session_t *ktp, int *retcode);