From d1471c37bb7804a19aac397002d39e899baee2ba Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Fri, 29 Apr 2016 10:45:36 +0000 Subject: Only focus on the query input box when no manual page is displayed, that is, for the index page, for the noresult page, and for the result of an apropos(1) query with more than one page. As noted by bentley@, when a manual page is displayed, it is more important that people can quickly use the space bar for paging and Ctrl-F for searching. --- cgi.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/cgi.c b/cgi.c index 22dbe0c9..096b7ff9 100644 --- a/cgi.c +++ b/cgi.c @@ -59,6 +59,11 @@ struct req { int isquery; /* QUERY_STRING used, not PATH_INFO */ }; +enum focus { + FOCUS_NONE = 0, + FOCUS_QUERY +}; + static void html_print(const char *); static void html_putchar(char); static int http_decode(char *); @@ -79,7 +84,7 @@ static void resp_catman(const struct req *, const char *); static void resp_copy(const char *); static void resp_end_html(void); static void resp_format(const struct req *, const char *); -static void resp_searchform(const struct req *); +static void resp_searchform(const struct req *, enum focus); static void resp_show(const struct req *, const char *); static void set_query_attr(char **, char **); static int validate_filename(const char *); @@ -367,7 +372,7 @@ resp_end_html(void) } static void -resp_searchform(const struct req *req) +resp_searchform(const struct req *req, enum focus focus) { int i; @@ -382,9 +387,12 @@ resp_searchform(const struct req *req) printf( "
\n" "q.query) + if (req->q.query != NULL) html_print(req->q.query); - puts("\" size=\"40\" autofocus>"); + printf( "\" size=\"40\""); + if (focus == FOCUS_QUERY) + printf(" autofocus"); + puts(">"); /* Write submission and reset buttons. */ @@ -507,7 +515,7 @@ pg_index(const struct req *req) { resp_begin_html(200, NULL); - resp_searchform(req); + resp_searchform(req, FOCUS_QUERY); printf("

\n" "This web interface is documented in the\n" "man.cgi\n" @@ -524,7 +532,7 @@ static void pg_noresult(const struct req *req, const char *msg) { resp_begin_html(200, NULL); - resp_searchform(req); + resp_searchform(req, FOCUS_QUERY); puts("

"); puts(msg); puts("

"); @@ -588,7 +596,8 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz) } resp_begin_html(200, NULL); - resp_searchform(req); + resp_searchform(req, + req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY); if (sz > 1) { puts("
"); @@ -908,7 +917,7 @@ pg_show(struct req *req, const char *fullpath) } resp_begin_html(200, NULL); - resp_searchform(req); + resp_searchform(req, FOCUS_NONE); resp_show(req, file); resp_end_html(); } -- cgit