diff --git a/src/gmnlm.c b/src/gmnlm.c

index e80b38b6521ef0eccd5629a1f0b16d2406d8cac1..129324718d13f8311f38cc3c80b7f0f3ccb3bd09 100644

--- a/src/gmnlm.c

+++ b/src/gmnlm.c

@@ -82,37 +82,45 @@

static enum prompt_result

do_prompts(const char *prompt, struct browser *browser)

{

+ enum prompt_result result;

fprintf(browser->tty, "%s", prompt);

size_t l = 0;

char *in = NULL;

ssize_t n = getline(&in, &l, browser->tty);

if (n == -1 && feof(browser->tty)) {

- return PROMPT_QUIT;

+ result = PROMPT_QUIT;

+ goto exit;

}

if (strcmp(in, "\n") == 0) {

- return PROMPT_MORE;

+ result = PROMPT_MORE;

+ goto exit;

}

if (strcmp(in, "q\n") == 0) {

- return PROMPT_QUIT;

+ result = PROMPT_QUIT;

+ goto exit;

}

if (strcmp(in, "b\n") == 0) {

if (!browser->history->prev) {

fprintf(stderr, "At beginning of history\n");

- return PROMPT_AGAIN;

+ result = PROMPT_AGAIN;

+ goto exit;

}

browser->history = browser->history->prev;

set_url(browser, browser->history->url, NULL);

- return PROMPT_ANSWERED;

+ result = PROMPT_ANSWERED;

+ goto exit;

}

if (strcmp(in, "f\n") == 0) {

if (!browser->history->next) {

fprintf(stderr, "At end of history\n");

- return PROMPT_AGAIN;

+ result = PROMPT_AGAIN;

+ goto exit;

}

browser->history = browser->history->next;

set_url(browser, browser->history->url, NULL);

- return PROMPT_ANSWERED;

+ result = PROMPT_ANSWERED;

+ goto exit;

}

struct link *link = browser->links;

@@ -128,12 +136,17 @@ if (!link) {

fprintf(stderr, "Error: no such link.\n");

} else {

set_url(browser, link->url, &browser->history);

- return PROMPT_ANSWERED;

+ result = PROMPT_ANSWERED;

+ goto exit;

}

}

+

+ in[n - 1] = 0; // Remove LF

+ set_url(browser, in, &browser->history);

+ result = PROMPT_ANSWERED;

+exit:

free(in);

-

- return PROMPT_AGAIN;

+ return result;

}

static char *

@@ -278,7 +291,7 @@

if (browser->pagination && row >= ws.ws_row - 4) {

char prompt[4096];

snprintf(prompt, sizeof(prompt), "\n%s at %s\n"

- "[Enter]: read more; [N]: follow Nth link; %s%s[q]uit\n"

+ "[Enter]: read more; [N]: follow Nth link; %s%s[q]uit; or type a URL\n"

"(more) => ", resp->meta, browser->plain_url,

browser->history->prev ? "[b]ack; " : "",

browser->history->next ? "[f]orward; " : "");

@@ -487,7 +500,7 @@ goto next;

}

snprintf(prompt, sizeof(prompt), "\n%s at %s\n"

- "[N]: follow Nth link; %s%s[q]uit\n"

+ "[N]: follow Nth link; %s%s[q]uit; or type a URL\n"

"=> ",

resp.status == GEMINI_STATUS_SUCCESS ? resp.meta : "",

browser.plain_url,