From 529b1059afdb825cc61cc87b3921e6386e261bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Wagner?= Date: Tue, 2 Feb 2021 17:20:22 +0100 Subject: [PATCH] jump more than one entry back or forth in history by giving an optional number to b & f commands. The default behaviour of b & f commands has not been changed. --- src/gmnlm.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/gmnlm.c b/src/gmnlm.c index 27a57dd..91e86f0 100644 --- a/src/gmnlm.c +++ b/src/gmnlm.c @@ -73,8 +73,8 @@ const char *help_msg = "q\tQuit\n" "N\tFollow Nth link (where N is a number)\n" "p[N]\tShow URL of Nth link (where N is a number)\n" - "b\tBack (in the page history)\n" - "f\tForward (in the page history)\n" + "b[N]\tJump back N entries in history, N is optional, default 1\n" + "f[N]\tJump forward N entries in history, N is optional, default 1\n" "H\tView all page history\n" "m\tSave bookmark\n" "M\tBrowse bookmarks\n" @@ -500,7 +500,9 @@ do_prompts(const char *prompt, struct browser *browser) goto exit; } in[n - 1] = 0; // Remove LF + char *endptr; + int historyhops = 1; int r; switch (in[0]) { case '\0': @@ -511,25 +513,28 @@ do_prompts(const char *prompt, struct browser *browser) result = PROMPT_QUIT; goto exit; case 'b': - if (in[1]) break; - if (!browser->history->prev) { - fprintf(stderr, "At beginning of history\n"); - result = PROMPT_AGAIN; - goto exit; + if (in[1]) { + historyhops =(int)strtol(in+1, &endptr, 10); + } + while (historyhops > 0) { + if (browser->history->prev) { + browser->history = browser->history->prev; + } + historyhops--; } - if (in[1]) break; - browser->history = browser->history->prev; set_url(browser, browser->history->url, NULL); result = PROMPT_ANSWERED; goto exit; case 'f': - if (in[1]) break; - if (!browser->history->next) { - fprintf(stderr, "At end of history\n"); - result = PROMPT_AGAIN; - goto exit; + if (in[1]) { + historyhops =(int)strtol(in+1, &endptr, 10); + } + while (historyhops > 0) { + if (browser->history->next) { + browser->history = browser->history->next; + } + historyhops--; } - browser->history = browser->history->next; set_url(browser, browser->history->url, NULL); result = PROMPT_ANSWERED; goto exit; @@ -585,7 +590,6 @@ do_prompts(const char *prompt, struct browser *browser) case 'p': if (!in[1]) break; struct link *link = browser->links; - char *endptr; int linksel = (int)strtol(in+1, &endptr, 10); if (!endptr[0] && linksel >= 0) { while (linksel > 0 && link) { @@ -655,7 +659,6 @@ do_prompts(const char *prompt, struct browser *browser) } struct link *link = browser->links; - char *endptr; int linksel = (int)strtol(in, &endptr, 10); if ((endptr[0] == '\0' || endptr[0] == '|') && linksel >= 0) { while (linksel > 0 && link) {