From 31f4ae99c877bd87abbe093ad65c923510f54e5d Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Tue, 22 Jul 2003 17:24:49 +0000 Subject: [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 --- ChangeLog | 20 +++++++++++- NEWS | 1 + doc-jp/README.func | 2 ++ doc/README.func | 2 ++ funcname.tab | 4 ++- main.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++----- proto.h | 4 ++- 7 files changed, 115 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 387952c..c1ad337 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2003-07-23 Yoshinobu Sakane + + * [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 * [w3m-dev 03938] clear region margin @@ -7933,4 +7951,4 @@ a * [w3m-dev 03276] compile error on EWS4800 * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.852 2003/07/13 16:19:09 ukai Exp $ +$Id: ChangeLog,v 1.853 2003/07/22 17:24:49 ukai Exp $ diff --git a/NEWS b/NEWS index f9c9db7..74b77f8 100644 --- 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 index e5fbfa8..ea46ba9 100644 --- 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 index e48cabf..28d84f4 100644 --- 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 index d5b4589..2434069 100644 --- a/funcname.tab +++ b/funcname.tab @@ -1,4 +1,4 @@ -# $Id: funcname.tab,v 1.20 2003/01/23 18:37:21 ukai Exp $ +# $Id: funcname.tab,v 1.21 2003/07/22 17:24:49 ukai Exp $ # macro name function name #---------------------------- @@@ nulcmd @@ -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 index 0c7df14..6eb5a40 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.226 2003/05/12 16:34:12 ukai Exp $ */ +/* $Id: main.c,v 1.227 2003/07/22 17:24:49 ukai Exp $ */ #define MAINPROGRAM #include "fm.h" #include @@ -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 @@ -3450,11 +3452,40 @@ lastA(void) /* go to the next anchor */ 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 index 6c51ed5..644b6e8 100644 --- a/proto.h +++ b/proto.h @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.92 2003/04/08 16:01:40 ukai Exp $ */ +/* $Id: proto.h,v 1.93 2003/07/22 17:24:49 ukai Exp $ */ /* * This file was automatically generated by version 1.7 of cextract. * Manual editing not recommended. @@ -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); -- cgit v1.2.3