commit 529b1059afdb825cc61cc87b3921e6386e261bcb
parent 8796267c43dc7609c0a56a5b64784a7dc84d5e73
Author: René Wagner <rwagner@rw-net.de>
Date: Tue, 2 Feb 2021 17:20:22 +0100
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.
Diffstat:
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git 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) {