commit 7bd3a14bde9bd349f4ac2fca9e7f3a1b56ea5d5a from: Omar Polo date: Wed Apr 13 20:39:26 2022 UTC update the "optional completion" *_select functions commit - fea02b0bf5e8d28eb46dd51dc411aa2836905b1f commit + 7bd3a14bde9bd349f4ac2fca9e7f3a1b56ea5d5a blob - db9b9cb21f66e7045e98eebe15d92d97f935db9b blob + 76e6406808ee6c1de69463c742d60c8bf595a446 --- minibuffer.c +++ minibuffer.c @@ -29,6 +29,7 @@ #define nitems(x) (sizeof(x)/sizeof(x[0])) static void *minibuffer_metadata(void); +static const char *minibuffer_compl_text(void); static void minibuffer_hist_save_entry(void); static void yornp_self_insert(void); static void yornp_abort(void); @@ -156,10 +157,23 @@ minibuffer_metadata(void) return vl->parent->data; } +static const char * +minibuffer_compl_text(void) +{ + struct vline *vl; + + vl = ministate.compl.buffer.current_line; + if (vl == NULL || vl->parent->flags & L_HIDDEN || + vl->parent->type == LINE_COMPL || vl->parent->line == NULL) + return ministate.buf; + return vl->parent->line; +} + static void minibuffer_hist_save_entry(void) { struct hist *hist; + const char *t; if (ministate.history == NULL) return; @@ -167,7 +181,8 @@ minibuffer_hist_save_entry(void) if ((hist = calloc(1, sizeof(*hist))) == NULL) abort(); - strlcpy(hist->h, ministate.buf, sizeof(hist->h)); + t = minibuffer_compl_text(); + strlcpy(hist->h, t, sizeof(hist->h)); TAILQ_INSERT_TAIL(&ministate.history->head, hist, entries); ministate.history->len++; @@ -228,25 +243,19 @@ void eecmd_select(void) { struct cmd *cmd; - struct vline *vl; const char *t; - vl = ministate.compl.buffer.current_line; - if (vl == NULL || vl->parent->flags & L_HIDDEN) - goto end; - - t = vl->parent->line; + t = minibuffer_compl_text(); for (cmd = cmds; cmd->cmd != NULL; ++cmd) { if (!strcmp(cmd->cmd, t)) { minibuffer_insert_current_candidate(); - exit_minibuffer(); minibuffer_hist_save_entry(); + exit_minibuffer(); cmd->fn(current_buffer()); return; } } -end: message("No match"); } @@ -257,13 +266,14 @@ ir_select_gemini(void) struct phos_uri uri; struct tab *tab = current_tab; - exit_minibuffer(); minibuffer_hist_save_entry(); /* a bit ugly but... */ memcpy(&uri, &tab->uri, sizeof(tab->uri)); - phos_uri_set_query(&uri, ministate.buf); + phos_uri_set_query(&uri, minibuffer_compl_text()); phos_serialize_uri(&uri, buf, sizeof(buf)); + + exit_minibuffer(); load_url_in_tab(tab, buf, NULL, LU_MODE_NOCACHE); } @@ -274,24 +284,24 @@ ir_select_reply(void) struct phos_uri uri; struct tab *tab = current_tab; - exit_minibuffer(); minibuffer_hist_save_entry(); /* a bit ugly but... */ strlcpy(buf, tab->last_input_url, sizeof(buf)); phos_parse_absolute_uri(buf, &uri); - phos_uri_set_query(&uri, ministate.buf); + phos_uri_set_query(&uri, minibuffer_compl_text()); phos_serialize_uri(&uri, buf, sizeof(buf)); + + exit_minibuffer(); load_url_in_tab(tab, buf, NULL, LU_MODE_NOCACHE); } void ir_select_gopher(void) { - exit_minibuffer(); minibuffer_hist_save_entry(); - - gopher_send_search_req(current_tab, ministate.buf); + gopher_send_search_req(current_tab, minibuffer_compl_text()); + exit_minibuffer(); } void @@ -299,10 +309,9 @@ lu_select(void) { char url[GEMINI_URL_LEN+1]; - exit_minibuffer(); minibuffer_hist_save_entry(); - - humanify_url(ministate.buf, url, sizeof(url)); + humanify_url(minibuffer_compl_text(), url, sizeof(url)); + exit_minibuffer(); load_url_in_tab(current_tab, url, NULL, LU_MODE_NOCACHE); }