Commit Diff


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);