commit 0fceedb5fedbf154222ba2e675ee20bd5651008f from: Omar Polo date: Fri Jun 07 17:57:55 2024 UTC minibuffer: pass the string to the donefn() This avoids the callback to have to use the (private) minibuffer_compl_text() to get the string. It'll simplifies a follow-up changes, too. commit - 0435884036536a032d2bbe734abf32642de7988d commit + 0fceedb5fedbf154222ba2e675ee20bd5651008f blob - 57d01ea586adb3381066c9342720bcb3642f4165 blob + b2d69256bdb2e6b0a75dff773828e3988045022f --- cmd.c +++ cmd.c @@ -800,8 +800,7 @@ cmd_mini_complete_and_exit(struct buffer *buffer) } } - minibuffer_taint_hist(); - ministate.donefn(); + minibuffer_confirm(); } void blob - d9d93d8cd1dd71a0264ce9b35878ceff67b93cd9 blob + b4fbe8a2f8d2663be3688240e15f9aa32568198c --- minibuffer.c +++ minibuffer.c @@ -48,7 +48,7 @@ static void yornp_self_insert(void); static void yornp_abort(void); static void read_self_insert(void); static void read_abort(void); -static void read_select(void); +static void read_select(const char *); static void handle_clear_echoarea(int, int, void *); static unsigned long clechotimer; @@ -226,6 +226,16 @@ minibuffer_taint_hist(void) strlcpy(ministate.buf, hist_cur(ministate.hist), sizeof(ministate.buf)); ministate.buffer.current_line->parent->line = ministate.buf; +} + +void +minibuffer_confirm(void) +{ + if (!in_minibuffer || ministate.donefn == NULL) + return; + + minibuffer_taint_hist(); + ministate.donefn(minibuffer_compl_text()); } void @@ -265,12 +275,10 @@ sensible_self_insert(void) } void -eecmd_select(void) +eecmd_select(const char *t) { struct cmd *cmd; - const char *t; - t = minibuffer_compl_text(); for (cmd = cmds; cmd->cmd != NULL; ++cmd) { if (!strcmp(cmd->cmd, t)) { minibuffer_hist_save_entry(); @@ -284,7 +292,7 @@ eecmd_select(void) } void -ir_select_gemini(void) +ir_select_gemini(const char *text) { static struct iri iri; char buf[1025]; @@ -294,7 +302,7 @@ ir_select_gemini(void) if (iri_parse(NULL, hist_cur(tab->hist), &iri) == -1) goto err; - if (iri_setquery(&iri, minibuffer_compl_text()) == -1) + if (iri_setquery(&iri, text) == -1) goto err; if (iri_unparse(&iri, buf, sizeof(buf)) == -1) goto err; @@ -308,7 +316,7 @@ ir_select_gemini(void) } void -ir_select_reply(void) +ir_select_reply(const char *text) { static struct iri iri; char buf[1025] = {0}; @@ -318,7 +326,7 @@ ir_select_reply(void) /* a bit ugly but... */ iri_parse(NULL, tab->last_input_url, &iri); - iri_setquery(&iri, minibuffer_compl_text()); + iri_setquery(&iri, text); iri_unparse(&iri, buf, sizeof(buf)); exit_minibuffer(); @@ -326,32 +334,28 @@ ir_select_reply(void) } void -ir_select_gopher(void) +ir_select_gopher(const char *text) { minibuffer_hist_save_entry(); - gopher_send_search_req(current_tab, minibuffer_compl_text()); + gopher_send_search_req(current_tab, text); exit_minibuffer(); } void -lu_select(void) +lu_select(const char *text) { char url[GEMINI_URL_LEN+1]; minibuffer_hist_save_entry(); - humanify_url(minibuffer_compl_text(), hist_cur(current_tab->hist), - url, sizeof(url)); + humanify_url(text, hist_cur(current_tab->hist), url, sizeof(url)); exit_minibuffer(); load_url_in_tab(current_tab, url, NULL, LU_MODE_NOCACHE); } void -bp_select(void) +bp_select(const char *url) { - const char *url; - - url = minibuffer_compl_text(); if (*url != '\0') { if (bookmark_page(url) == -1) message("failed to bookmark page: %s", @@ -364,7 +368,7 @@ bp_select(void) } void -ts_select(void) +ts_select(const char *text) { struct tab *tab; @@ -378,7 +382,7 @@ ts_select(void) } void -ls_select(void) +ls_select(const char *text) { struct line *l; @@ -414,7 +418,7 @@ jump_to_line(struct line *l) } void -swiper_select(void) +swiper_select(const char *text) { struct line *l; @@ -428,7 +432,7 @@ swiper_select(void) } void -toc_select(void) +toc_select(const char *text) { struct line *l; @@ -448,11 +452,8 @@ save_cert_for_site_cb(int r, struct tab *tab) } void -uc_select(void) +uc_select(const char *name) { - const char *name; - - name = minibuffer_compl_text(); if ((current_tab->client_cert = ccert(name)) == NULL) { message("Certificate %s not found", name); return; @@ -465,7 +466,7 @@ uc_select(void) } void -search_select(void) +search_select(const char *text) { static struct iri iri; static char buf[1025]; @@ -476,7 +477,7 @@ search_select(void) exit_minibuffer(); return; } - iri_setquery(&iri, minibuffer_compl_text()); + iri_setquery(&iri, text); iri_unparse(&iri, buf, sizeof(buf)); exit_minibuffer(); @@ -521,11 +522,11 @@ read_abort(void) } static void -read_select(void) +read_select(const char *text) { exit_minibuffer(); minibuffer_hist_save_entry(); - read_cb(ministate.buf, read_data); + read_cb(text, read_data); } /* @@ -567,7 +568,7 @@ populate_compl_buffer(complfn *fn, void *data) } void -enter_minibuffer(void (*self_insert_fn)(void), void (*donefn)(void), +enter_minibuffer(void (*self_insert_fn)(void), void (*donefn)(const char *), void (*abortfn)(void), struct hist *hist, complfn *complfn, void *compldata, int must_select) { @@ -626,7 +627,7 @@ yornp(const char *prompt, void (*fn)(int, struct tab*) yornp_cb = fn; yornp_data = data; - enter_minibuffer(yornp_self_insert, yornp_self_insert, + enter_minibuffer(yornp_self_insert, NULL, yornp_abort, NULL, NULL, NULL, 0); len = sizeof(ministate.prompt); blob - 88d01cf11bf190385a692572ceadad2f6c8eec88 blob + 536bafdb2a728a29982b0cf5e758b2343ebd53db --- minibuffer.h +++ minibuffer.h @@ -46,7 +46,7 @@ struct ministate { char *curmesg; char prompt[64]; - void (*donefn)(void); + void (*donefn)(const char *); void (*abortfn)(void); char buf[1025]; @@ -72,22 +72,23 @@ extern int in_minibuffer; void recompute_completions(int); int minibuffer_insert_current_candidate(void); void minibuffer_taint_hist(void); +void minibuffer_confirm(void); void minibuffer_self_insert(void); void sensible_self_insert(void); -void eecmd_select(void); -void ir_select_gemini(void); -void ir_select_reply(void); -void ir_select_gopher(void); -void lu_select(void); -void bp_select(void); -void ts_select(void); -void ls_select(void); -void swiper_select(void); -void toc_select(void); -void uc_select(void); -void search_select(void); +void eecmd_select(const char *); +void ir_select_gemini(const char *); +void ir_select_reply(const char *); +void ir_select_gopher(const char *); +void lu_select(const char *); +void bp_select(const char *); +void ts_select(const char *); +void ls_select(const char *); +void swiper_select(const char *); +void toc_select(const char *); +void uc_select(const char *); +void search_select(const char *); -void enter_minibuffer(void(*)(void), void(*)(void), void(*)(void), +void enter_minibuffer(void(*)(void), void(*)(const char *), void(*)(void), struct hist *, complfn *, void *, int); void exit_minibuffer(void); blob - 544bdc943f403061887766c3145a424ba3a818d2 blob + 519753fc89a5c9e6738d0786725f9815c5668644 --- ui.c +++ ui.c @@ -1301,7 +1301,7 @@ ui_schedule_redraw(void) } void -ui_require_input(struct tab *tab, int hide, void (*fn)(void)) +ui_require_input(struct tab *tab, int hide, void (*fn)(const char *)) { /* TODO: hard-switching to another tab is ugly */ switch_to_tab(tab); blob - 912098a047c9ce38fd2047bfc3de08577b33b6f3 blob + faa3c3ec05175a95c64bbbe4cf3be10c56e78e86 --- ui.h +++ ui.h @@ -152,7 +152,7 @@ void ui_toggle_side_window(int); void ui_show_downloads_pane(void); void ui_schedule_redraw(void); void ui_after_message_hook(void); -void ui_require_input(struct tab *, int, void (*)(void)); +void ui_require_input(struct tab *, int, void (*)(const char *)); void ui_yornp(const char *, void (*)(int, struct tab *), struct tab *); void ui_read(const char *, void (*)(const char *, struct tab *), struct tab *, const char *); void ui_other_window(void);