diff options
author | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-09-05 15:43:21 +0000 |
---|---|---|
committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-09-05 15:43:21 +0000 |
commit | 970ac43a935eda207af179e6d64c3d5f08197ffc (patch) | |
tree | 9547228a6dc3d6908c16261adfdcdb282729f0bb | |
parent | * [w3m-dev 03291] parsetagx.c:toNumber() (diff) | |
download | w3m-970ac43a935eda207af179e6d64c3d5f08197ffc.tar.gz w3m-970ac43a935eda207af179e6d64c3d5f08197ffc.zip |
[w3m-dev 03292] Re: load file at cursor
* anchor.c (reAnchorPos): added
(reAnchorWord): added
(reAnchorAny): rewrite to use reAnchorPos()
* funcname.tab (MARK_WORD): added
* keybind.c (;) MARK_WORD
* main.c (getCurWord): added
(chkWORD): added
(is_wordchar): added
(getCurWord): added
(GetWord): rewrite to use getCurWord()
* proto.h (chkWORD): added
(reAnchorWord): added
* doc/README.func: add MARK_WORD
* doc/keymap.default: add MARK_WORD
* doc-jp/README.func: add MARK_WORD
* doc-jp/keymap.default: add MARK_WORD
* NEWS: add MARK_WORD
From: Fumitoshi UKAI <ukai@debian.or.jp>
Diffstat (limited to '')
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | anchor.c | 50 | ||||
-rw-r--r-- | doc-jp/README.func | 1 | ||||
-rw-r--r-- | doc-jp/keymap.default | 1 | ||||
-rw-r--r-- | doc/README.func | 1 | ||||
-rw-r--r-- | doc/keymap.default | 1 | ||||
-rw-r--r-- | funcname.tab | 3 | ||||
-rw-r--r-- | keybind.c | 4 | ||||
-rw-r--r-- | main.c | 58 | ||||
-rw-r--r-- | proto.h | 4 |
11 files changed, 114 insertions, 33 deletions
@@ -1,3 +1,24 @@ +2002-09-06 Fumitoshi UKAI <ukai@debian.or.jp> + + * [w3m-dev 03292] Re: load file at cursor + * anchor.c (reAnchorPos): added + (reAnchorWord): added + (reAnchorAny): rewrite to use reAnchorPos() + * funcname.tab (MARK_WORD): added + * keybind.c (;) MARK_WORD + * main.c (getCurWord): added + (chkWORD): added + (is_wordchar): added + (getCurWord): added + (GetWord): rewrite to use getCurWord() + * proto.h (chkWORD): added + (reAnchorWord): added + * doc/README.func: add MARK_WORD + * doc/keymap.default: add MARK_WORD + * doc-jp/README.func: add MARK_WORD + * doc-jp/keymap.default: add MARK_WORD + * NEWS: add MARK_WORD + 2002-08-28 Kiyokazu SUTO <suto@ks-and-ks.ne.jp> * [w3m-dev 03291] parsetagx.c:toNumber() @@ -3721,4 +3742,4 @@ * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.418 2002/08/27 16:39:40 ukai Exp $ +$Id: ChangeLog,v 1.419 2002/09/05 15:43:21 ukai Exp $ @@ -1,5 +1,6 @@ w3m 0.4? +* func: MARK_WORD * rc: imgsize: obsoleted * w3m-img for framebuffer merged @@ -1,4 +1,4 @@ -/* $Id: anchor.c,v 1.10 2002/03/29 16:39:37 ukai Exp $ */ +/* $Id: anchor.c,v 1.11 2002/09/05 15:43:21 ukai Exp $ */ #include "fm.h" #include "myctype.h" #include "regex.h" @@ -277,6 +277,36 @@ reseq_anchor(Buffer *buf) reseq_anchor0(buf->formitem, seqmap); } +static char * +reAnchorPos(Buffer *buf, Line *l, char *p1, char *p2, + Anchor *(*anchorproc) (Buffer *, char *, char *, int, int)) +{ + Anchor *a; + int spos, epos; + int i; + + spos = p1 - l->lineBuf; + epos = p2 - l->lineBuf; + for (i = spos; i < epos; i++) { + if (l->propBuf[i] & (PE_ANCHOR | PE_FORM)) + return p2; + } + a = anchorproc(buf, p1, p2, l->linenumber, p1 - l->lineBuf); + a->end.line = l->linenumber; + a->end.pos = epos; + a->hseq = -2; + for (i = a->start.pos; i < a->end.pos; i++) + l->propBuf[i] |= PE_ANCHOR; + return p2; +} + +void +reAnchorWord(Buffer *buf, Line *l, int spos, int epos) +{ + reAnchorPos(buf, l, &l->lineBuf[spos], &l->lineBuf[epos], _put_anchor_all); + reseq_anchor(buf); +} + /* search regexp and register them as anchors */ /* returns error message if any */ static char * @@ -285,9 +315,6 @@ reAnchorAny(Buffer *buf, char *re, { Line *l; char *p, *p1, *p2; - Anchor *a; - int i; - int spos, epos; if (re == NULL || *re == '\0') { return NULL; @@ -302,20 +329,7 @@ reAnchorAny(Buffer *buf, char *re, for (;;) { if (regexMatch(p, &l->lineBuf[l->len] - p, p == l->lineBuf) == 1) { matchedPosition(&p1, &p2); - spos = p1 - l->lineBuf; - epos = p2 - l->lineBuf; - for (i = spos; i < epos; i++) { - if (l->propBuf[i] & (PE_ANCHOR | PE_FORM)) - goto _next; - } - a = anchorproc(buf, p1, p2, l->linenumber, p1 - l->lineBuf); - a->end.line = l->linenumber; - a->end.pos = epos; - a->hseq = -2; - for (i = a->start.pos; i < a->end.pos; i++) - l->propBuf[i] |= PE_ANCHOR; - _next: - p = p2; + p = reAnchorPos(buf, l, p1, p2, anchorproc); } else break; diff --git a/doc-jp/README.func b/doc-jp/README.func index ae6de37..515409b 100644 --- a/doc-jp/README.func +++ b/doc-jp/README.func @@ -45,6 +45,7 @@ MAIN_MENU メニューを立ち上げます MARK マークを設定/解除します MARK_MID Message-ID風の文字列を,news:のリンクにします MARK_URL URL風の文字列をリンクにします +MARK_WORD カーソルのある語をリンクにします MENU メニューを立ち上げます MOUSE_TOGGLE マウスの有効/無効をトグルする MOVE_DOWN カーソルを下に移動します(改ページ時には半ページスクロール) diff --git a/doc-jp/keymap.default b/doc-jp/keymap.default index 2e6c54a..7acbb47 100644 --- a/doc-jp/keymap.default +++ b/doc-jp/keymap.default @@ -40,6 +40,7 @@ keymap , LEFT keymap . RIGHT keymap / SEARCH keymap : MARK_URL +keymap ; MARK_WORD keymap < SHIFT_LEFT keymap = INFO keymap > SHIFT_RIGHT diff --git a/doc/README.func b/doc/README.func index ac8949e..7647f9d 100644 --- a/doc/README.func +++ b/doc/README.func @@ -45,6 +45,7 @@ MAIN_MENU Popup menu MARK Set/unset mark MARK_MID Mark Message-ID-like strings as anchors MARK_URL Mark URL-like strings as anchors +MARK_WORD Mark current word as anchor MENU Popup menu MOUSE_TOGGLE Toggle activity of mouse MOVE_DOWN Move cursor down (a half screen scroll at the end of screen) diff --git a/doc/keymap.default b/doc/keymap.default index 2e6c54a..17ce41a 100644 --- a/doc/keymap.default +++ b/doc/keymap.default @@ -40,6 +40,7 @@ keymap , LEFT keymap . RIGHT keymap / SEARCH keymap : MARK_URL +keymap ; MARK_WORD keymap < SHIFT_LEFT keymap = INFO keymap > SHIFT_RIGHT diff --git a/funcname.tab b/funcname.tab index e0f21b8..1bc1b2c 100644 --- a/funcname.tab +++ b/funcname.tab @@ -1,4 +1,4 @@ -# $Id: funcname.tab,v 1.10 2002/06/01 17:09:05 ukai Exp $ +# $Id: funcname.tab,v 1.11 2002/09/05 15:43:21 ukai Exp $ # macro name function name #---------------------------- @@@ nulcmd @@ -50,6 +50,7 @@ MAIN_MENU mainMn MARK _mark MARK_MID chkNMID MARK_URL chkURL +MARK_WORD chkWORD MENU mainMn MOUSE mouse MOUSE_TOGGLE msToggle @@ -1,4 +1,4 @@ -/* $Id: keybind.c,v 1.6 2002/01/23 17:19:47 ukai Exp $ */ +/* $Id: keybind.c,v 1.7 2002/09/05 15:43:21 ukai Exp $ */ #include "funcname2.h" char GlobalKeymap[128] = { @@ -21,7 +21,7 @@ char GlobalKeymap[128] = { /* 0 1 2 3 4 5 6 7 */ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, /* 8 9 : ; < = > ? */ - nulcmd, nulcmd, chkURL, nulcmd, shiftl, pginfo, shiftr, srchbak, + nulcmd, nulcmd, chkURL, chkWORD, shiftl, pginfo, shiftr, srchbak, /* @ A B C D E F G */ readsh, nulcmd, backBf, nulcmd, nulcmd, editBf, rFrame, goLineL, /* H I J K L M N O */ @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.110 2002/07/17 16:07:37 ukai Exp $ */ +/* $Id: main.c,v 1.111 2002/09/05 15:43:21 ukai Exp $ */ #define MAINPROGRAM #include "fm.h" #include <signal.h> @@ -75,6 +75,8 @@ static void keyPressEventProc(int c); int show_params_p = 0; void show_params(FILE * fp); +static char *getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars); + static int display_ok = FALSE; static void dump_source(Buffer *); static void dump_head(Buffer *); @@ -4381,6 +4383,18 @@ chkURL(void) displayBuffer(Currentbuf, B_FORCE_REDRAW); } +void +chkWORD(void) +{ + char *p; + int spos, epos; + p = getCurWord(Currentbuf, &spos, &epos, ":\"\'`<>"); + if (p == NULL) + return; + reAnchorWord(Currentbuf, Currentbuf->currentLine, spos, epos); + displayBuffer(Currentbuf, B_FORCE_REDRAW); +} + #ifdef USE_NNTP /* mark Message-ID-like patterns as NEWS anchors */ void @@ -4802,28 +4816,52 @@ wrapToggle(void) } } +static int +is_wordchar(int c, const char *badchars) +{ + if (badchars) + return !(IS_SPACE(c) || strchr(badchars, c)); + else + return IS_ALPHA(c); +} + static char * -GetWord(Buffer *buf) +getCurWord(Buffer *buf, int *spos, int *epos, const char *badchars) { + char *p; Line *l = buf->currentLine; - char *lb; int b, e; + *spos = 0; + *epos = 0; if (l == NULL) return NULL; - lb = l->lineBuf; - + p = l->lineBuf; e = buf->pos; - while (e > 0 && !IS_ALPHA(lb[e])) + while (e > 0 && !is_wordchar(p[e], badchars)) e--; - if (!IS_ALPHA(lb[e])) + if (!is_wordchar(p[e], badchars)) return NULL; b = e; - while (b > 0 && IS_ALPHA(lb[b - 1])) + while (b > 0 && is_wordchar(p[b-1], badchars)) b--; - while (e < l->len && IS_ALPHA(lb[e])) + while (e < l->len && is_wordchar(p[e], badchars)) e++; - return Strnew_charp_n(&lb[b], e - b)->ptr; + *spos = b; + *epos = e; + return &p[b]; +} + +static char * +GetWord(Buffer *buf) +{ + int b, e; + char *p; + + if ((p = getCurWord(buf, &b, &e, 0)) != NULL) { + return Strnew_charp_n(p, e - b)->ptr; + } + return NULL; } #ifdef USE_DICT @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.45 2002/08/20 17:49:39 ukai Exp $ */ +/* $Id: proto.h,v 1.46 2002/09/05 15:43:22 ukai Exp $ */ /* * This file was automatically generated by version 1.7 of cextract. * Manual editing not recommended. @@ -92,6 +92,7 @@ extern void vwSrc(void); extern void reload(void); extern void chkURL(void); extern void chkURLBuffer(Buffer *buf); +extern void chkWORD(void); #ifdef USE_NNTP extern void chkNMID(void); extern void chkNMIDBuffer(Buffer *buf); @@ -486,6 +487,7 @@ extern Anchor *retrieveCurrentImg(Buffer *buf); extern Anchor *retrieveCurrentForm(Buffer *buf); extern Anchor *searchAnchor(AnchorList *al, char *str); extern Anchor *searchURLLabel(Buffer *buf, char *url); +extern void reAnchorWord(Buffer *buf, Line *l, int spos, int epos); extern char *reAnchor(Buffer *buf, char *re); #ifdef USE_NNTP extern char *reAnchorNews(Buffer *buf, char *re); |