w3m

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/w3m.git/
Log | Files | Refs | README

commit 3850b59d2950fa741a7ee02aa03a0919d557b9f5
parent 247e55b8e4119d4aff88c5e97659ac78f4527763
Author: ukai <ukai>
Date:   Tue, 22 Jul 2003 17:24:49 +0000

[w3m-dev 03939] next/prev visited link
* funcname.tab (NEXT_VISITED): added
	(PREV_VISITED): added
* main.c (_nextA): added
	(_prevA): added
	(nextVA): added
	(prevVA): added
* proto.h (nextVA): added
	(prevVA): added
* doc/README.func (NEXT_VISITED): added
	(PREV_VISITED): added
* doc-jp/README.func (NEXT_VISITED): added
	(PREV_VISITED): added
* NEWS: func: NEXT_VISITED, PREV_VISITED
From: Yoshinobu Sakane <sakane@d4.bsd.nes.nec.co.jp>

Diffstat:
MChangeLog | 18++++++++++++++++++
MNEWS | 1+
Mdoc-jp/README.func | 2++
Mdoc/README.func | 2++
Mfuncname.tab | 2++
Mmain.c | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
Mproto.h | 2++
7 files changed, 111 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,21 @@ +2003-07-23 Yoshinobu Sakane <sakane@d4.bsd.nes.nec.co.jp> + + * [w3m-dev 03939] next/prev visited link + * funcname.tab (NEXT_VISITED): added + (PREV_VISITED): added + * main.c (_nextA): added + (_prevA): added + (nextVA): added + (prevVA): added + * proto.h (nextVA): added + (prevVA): added + * doc/README.func (NEXT_VISITED): added + (PREV_VISITED): added + * doc-jp/README.func (NEXT_VISITED): added + (PREV_VISITED): added + * NEWS: func: NEXT_VISITED, PREV_VISITED + + 2003-07-14 Hiroyuki Ito <hito@crl.go.jp> * [w3m-dev 03938] clear region margin diff --git a/NEWS b/NEWS @@ -1,5 +1,6 @@ w3m 0.5 or 1.0? +* func: NEXT_VISITED, PREV_VISITED * autoconfiscate * rc: use_history diff --git a/doc-jp/README.func b/doc-jp/README.func @@ -79,6 +79,7 @@ NEXT_RIGHT NEXT_RIGHT_DOWN カーソルの右側(無ければ次行以降)にあるリンクに移動します NEXT_TAB 次のタブに移動します NEXT_UP カーソルの上側にあるリンクに移動します +NEXT_VISITED 次の訪れたことのあるリンクに移動します NEXT_WORD 次の単語に移動します NOTHING 何もしません NULL 何もしません @@ -93,6 +94,7 @@ PREV_LINK 前 PREV_MARK 一つ前のマークに移動します PREV_PAGE 前のページを表示します PREV_TAB 前のタブに移動します +PREV_VISITED 前の訪れたことのあるリンクに移動します PREV_WORD 前の単語に移動します PRINT バッファの表示内容をファイルに保存します QUIT w3mを終了します diff --git a/doc/README.func b/doc/README.func @@ -79,6 +79,7 @@ NEXT_RIGHT Move to next right link NEXT_RIGHT_DOWN Move to next right (or downward) link NEXT_TAB Move to next tab NEXT_UP Move to next upward link +NEXT_VISITED Move to next visited link NEXT_WORD Move to next word NOTHING Do nothing NULL Do nothing @@ -93,6 +94,7 @@ PREV_LINK Move to previous link PREV_MARK Move to previous mark PREV_PAGE Move to previous page PREV_TAB Move to previous tab +PREV_VISITED Move to previous visited link PREV_WORD Move to previous word PRINT Save buffer to file QUIT Quit w3m diff --git a/funcname.tab b/funcname.tab @@ -147,3 +147,5 @@ VIEW_BOOKMARK ldBmark VIEW_IMAGE followI WHEREIS srchfor WRAP_TOGGLE wrapToggle +NEXT_VISITED nextVA +PREV_VISITED prevVA diff --git a/main.c b/main.c @@ -94,6 +94,8 @@ static void _goLine(char *); static void _newT(void); static void followTab(TabBuffer * tab); static void moveTab(TabBuffer * t, TabBuffer * t2, int right); +static void _nextA(int); +static void _prevA(int); static int check_target = TRUE; #define PREC_NUM (prec_num ? prec_num : 1) #define PREC_LIMIT 10000 @@ -3451,10 +3453,39 @@ lastA(void) void nextA(void) { + _nextA(FALSE); +} + +/* go to the previous anchor */ +void +prevA(void) +{ + _prevA(FALSE); +} + +/* go to the next visited anchor */ +void +nextVA(void) +{ + _nextA(TRUE); +} + +/* go to the previous visited anchor */ +void +prevVA(void) +{ + _prevA(TRUE); +} + +/* go to the next [visited] anchor */ +static void +_nextA(int visited) +{ HmarkerList *hl = Currentbuf->hmarklist; BufferPoint *po; Anchor *an, *pan; int i, x, y, n = searchKeyNum(); + ParsedURL url; if (Currentbuf->firstLine == NULL) return; @@ -3462,40 +3493,63 @@ nextA(void) return; an = retrieveCurrentAnchor(Currentbuf); - if (an == NULL) + if (visited != TRUE && an == NULL) an = retrieveCurrentForm(Currentbuf); y = Currentbuf->currentLine->linenumber; x = Currentbuf->pos; + if (visited == TRUE) { + n = hl->nmark; + } + for (i = 0; i < n; i++) { pan = an; if (an && an->hseq >= 0) { int hseq = an->hseq + 1; do { if (hseq >= hl->nmark) { + if (visited == TRUE) + return; an = pan; goto _end; } po = &hl->marks[hseq]; an = retrieveAnchor(Currentbuf->href, po->line, po->pos); - if (an == NULL) + if (visited != TRUE && an == NULL) an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); hseq++; + if (visited == TRUE && an) { + parseURL2(an->url, &url, baseURL(Currentbuf)); + if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { + goto _end; + } + } } while (an == NULL || an == pan); } else { an = closest_next_anchor(Currentbuf->href, NULL, x, y); + if (visited != TRUE) an = closest_next_anchor(Currentbuf->formitem, an, x, y); if (an == NULL) { + if (visited == TRUE) + return; an = pan; break; } x = an->start.pos; y = an->start.line; + if (visited == TRUE) { + parseURL2(an->url, &url, baseURL(Currentbuf)); + if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { + goto _end; + } + } } } + if (visited == TRUE) + return; _end: if (an == NULL || an->hseq < 0) @@ -3508,13 +3562,14 @@ nextA(void) } /* go to the previous anchor */ -void -prevA(void) +static void +_prevA(int visited) { HmarkerList *hl = Currentbuf->hmarklist; BufferPoint *po; Anchor *an, *pan; int i, x, y, n = searchKeyNum(); + ParsedURL url; if (Currentbuf->firstLine == NULL) return; @@ -3522,40 +3577,63 @@ prevA(void) return; an = retrieveCurrentAnchor(Currentbuf); - if (an == NULL) + if (visited != TRUE && an == NULL) an = retrieveCurrentForm(Currentbuf); y = Currentbuf->currentLine->linenumber; x = Currentbuf->pos; + if (visited == TRUE) { + n = hl->nmark; + } + for (i = 0; i < n; i++) { pan = an; if (an && an->hseq >= 0) { int hseq = an->hseq - 1; do { if (hseq < 0) { + if (visited == TRUE) + return; an = pan; goto _end; } po = hl->marks + hseq; an = retrieveAnchor(Currentbuf->href, po->line, po->pos); - if (an == NULL) + if (visited != TRUE && an == NULL) an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos); hseq--; + if (visited == TRUE && an) { + parseURL2(an->url, &url, baseURL(Currentbuf)); + if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { + goto _end; + } + } } while (an == NULL || an == pan); } else { an = closest_prev_anchor(Currentbuf->href, NULL, x, y); + if (visited != TRUE) an = closest_prev_anchor(Currentbuf->formitem, an, x, y); if (an == NULL) { + if (visited == TRUE) + return; an = pan; break; } x = an->start.pos; y = an->start.line; + if (visited == TRUE && an) { + parseURL2(an->url, &url, baseURL(Currentbuf)); + if (getHashHist(URLHist, parsedURL2Str(&url)->ptr)) { + goto _end; + } } } + } + if (visited == TRUE) + return; _end: if (an == NULL || an->hseq < 0) diff --git a/proto.h b/proto.h @@ -65,6 +65,8 @@ extern void onA(void); extern void nextA(void); extern void prevA(void); +extern void nextVA(void); +extern void prevVA(void); extern void nextL(void); extern void nextLU(void); extern void nextR(void);