diff options
Diffstat (limited to '')
| -rw-r--r-- | ChangeLog | 65 | ||||
| -rw-r--r-- | anchor.c | 77 | ||||
| -rw-r--r-- | display.c | 13 | ||||
| -rw-r--r-- | doc-jp/README.func | 2 | ||||
| -rw-r--r-- | doc/README.func | 2 | ||||
| -rw-r--r-- | file.c | 118 | ||||
| -rw-r--r-- | fm.h | 13 | ||||
| -rw-r--r-- | funcname.tab | 4 | ||||
| -rw-r--r-- | html.c | 53 | ||||
| -rw-r--r-- | html.h | 35 | ||||
| -rw-r--r-- | main.c | 43 | ||||
| -rw-r--r-- | menu.c | 205 | ||||
| -rw-r--r-- | proto.h | 21 | ||||
| -rw-r--r-- | scripts/w3mhelp.cgi.in | 4 | 
14 files changed, 461 insertions, 194 deletions
| @@ -1,5 +1,68 @@  2002-12-06  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +	* [w3m-dev 03529] Support of title, accesskey of anchor +	* anchor.c (putAnchor): arg title, key  +				initialize slave +		(registerHref): arg title, key +		(registerName): title = NULL, key = '\0' +		(registerForm): title = NULL, key = '\0' +		(_put_anchor_news): title = NULL, key = '\0' +		(_put_anchor_all): title = NULL, key = '\0' +		(addMultirowsImg): register title, accesskey +		(addMultirowsForm): title = NULL, key = '\0' +		(getAnchorText): added +	* display.c (displayBuffer): show title if any +	* file.c (set_breakpoint): use bcopy +		(back_to_breakpoint): use bcopy +		(flushline): s/anchor/anchor.url/ +			     s/anchor_hseq/anchor.hseq/ +			     s/anchor_target/anchor.target/ +			     add anchor.* +		(close_effect0): s/anchor/anchor.url/ +				s/anchor_hseq/anchor.hseq/ +		(close_anchor): use bzero +		(process_img): ATTR_TITLE,  +		(HTMLtagproc1): s/anchor/anchor.url/ +				target, referer, title, accesskey, hseq +		(HTMLlineproc2body): ATTR_TITLE, ATTR_ACCESSKEY +		(init_henv): use bzero +	* fm.h (Anchor): add title, accesskey, slave +		(Breakpoint): use Anchor +		(struct readbuffer): use Anchor +	* funcname.tab (ACCESSKEY): added +		(LINK_MENU): added +	* html.c (ALST_A): add ATTR_TITLE, ATTR_ACCESSKEY +		(ALST_IMG): add ATTR_TITLE +		(ALST_IMG_ALT): add ATTR_TITLE +		(AttrMAP): add accesskey, renum +	* html.h (ATTR_ACCESSKEY): added +		(ATTR_*): renum 50->60 +	* main.c (linkMn): added +		(accessKey): added +	* menu.c (LinkMenu): deleted +		(LinkV): deleted +		(initLinkMenu): deleted +		(lmGoURL): deleted +		(popupMenu): delete initLinkMenu() +		(initMenu): delete Link +		(link_menu): added +		(accesskey_menu): added +	* proto.h (linkMn): added +		(link_menu): added +		(accessKey): added +		(accesskey_menu): added +		(putAnchor): arg title, key +		(registerHref): arg title, key +		(registerImg): arg title +		(getAnchorText): added +	* doc/README.func (ACCESSKEY): added +			(LINK_MENU): added +	* doc-jp/README.func (ACCESSKEY): added +			(LINK_MENU): added +	* scripts/w3mhelp.cgi.in (Hyperlink operation): add linkMn accessKey + +2002-12-06  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +  	* [w3m-dev 03528] area without alt  	* map.c (getCurrentMapLabel): when a->alt is empty  @@ -5470,4 +5533,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.592 2002/12/05 16:08:34 ukai Exp $ +$Id: ChangeLog,v 1.593 2002/12/05 16:29:02 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: anchor.c,v 1.11 2002/09/05 15:43:21 ukai Exp $ */ +/* $Id: anchor.c,v 1.12 2002/12/05 16:29:04 ukai Exp $ */  #include "fm.h"  #include "myctype.h"  #include "regex.h" @@ -7,7 +7,7 @@  AnchorList *  putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return, -	  char *referer, int line, int pos) +	  char *referer, char *title, unsigned char key, int line, int pos)  {      int n, i, j;      Anchor *a; @@ -44,6 +44,9 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,      a->url = url;      a->target = target;      a->referer = referer; +    a->title = title; +    a->accesskey = key; +    a->slave = FALSE;      a->start = bp;      a->end = bp;      al->nanchor++; @@ -54,11 +57,12 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,  Anchor * -registerHref(Buffer *buf, char *url, char *target, char *referer, int line, -	     int pos) +registerHref(Buffer *buf, char *url, char *target, char *referer, char *title, +	     unsigned char key, int line, int pos)  {      Anchor *a; -    buf->href = putAnchor(buf->href, url, target, &a, referer, line, pos); +    buf->href = putAnchor(buf->href, url, target, &a, referer, title, key, +			  line, pos);      return a;  } @@ -66,15 +70,17 @@ Anchor *  registerName(Buffer *buf, char *url, int line, int pos)  {      Anchor *a; -    buf->name = putAnchor(buf->name, url, NULL, &a, NULL, line, pos); +    buf->name = putAnchor(buf->name, url, NULL, &a, NULL, NULL, '\0', line, +			  pos);      return a;  }  Anchor * -registerImg(Buffer *buf, char *url, int line, int pos) +registerImg(Buffer *buf, char *url, char *title, int line, int pos)  {      Anchor *a; -    buf->img = putAnchor(buf->img, url, NULL, &a, NULL, line, pos); +    buf->img = putAnchor(buf->img, url, NULL, &a, NULL, title, '\0', line, +			 pos);      return a;  } @@ -88,8 +94,8 @@ registerForm(Buffer *buf, FormList *flist, struct parsed_tag *tag, int line,      fi = formList_addInput(flist, tag);      if (fi == NULL)  	return NULL; -    buf->formitem = putAnchor(buf->formitem, -			      (char *)fi, flist->target, &a, NULL, line, pos); +    buf->formitem = putAnchor(buf->formitem, (char *)fi, flist->target, &a, +			      NULL, NULL, '\0', line, pos);      return a;  } @@ -193,15 +199,16 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)      tmp = Strnew_size(sizeof("news:") - 1 + (p2 - p1));      Strcat_charp_n(tmp, "news:", sizeof("news:") - 1);      Strcat_charp_n(tmp, p1, p2 - p1); -    return registerHref(buf, tmp->ptr, NULL, NO_REFERER, line, pos); +    return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line, +			pos);  }  #endif				/* USE_NNTP */  static Anchor *  _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)  { -    return registerHref(buf, allocStr(p1, p2 - p1), NULL, NO_REFERER, line, -			pos); +    return registerHref(buf, allocStr(p1, p2 - p1), NULL, NO_REFERER, NULL, +			'\0', line, pos);  }  static void @@ -471,7 +478,7 @@ addMultirowsImg(Buffer *buf, AnchorList *al)  	    if (a_img.start.line == l->linenumber)  		continue;  	    pos = columnPos(l, col); -	    a = registerImg(buf, a_img.url, l->linenumber, pos); +	    a = registerImg(buf, a_img.url, a_img.title, l->linenumber, pos);  	    a->hseq = -a_img.hseq;  	    a->image = img;  	    a->end.pos = pos + ecol - col; @@ -479,15 +486,17 @@ addMultirowsImg(Buffer *buf, AnchorList *al)  		l->propBuf[k] |= PE_IMAGE;  	    if (a_href.url) {  		a = registerHref(buf, a_href.url, a_href.target, -				 a_href.referer, l->linenumber, pos); +				 a_href.referer, a_href.title, +				 a_href.accesskey, l->linenumber, pos);  		a->hseq = a_href.hseq; +		a->slave = TRUE;  		a->end.pos = pos + ecol - col;  		for (k = pos; k < a->end.pos; k++)  		    l->propBuf[k] |= PE_ANCHOR;  	    }  	    if (a_form.url) {  		buf->formitem = putAnchor(buf->formitem, a_form.url, -					  a_form.target, &a, NULL, +					  a_form.target, &a, NULL, NULL, '\0',  					  l->linenumber, pos);  		a->hseq = a_form.hseq;  		a->end.pos = pos + ecol - col; @@ -542,8 +551,8 @@ addMultirowsForm(Buffer *buf, AnchorList *al)  	    if (a_form.start.line == l->linenumber)  		continue;  	    buf->formitem = putAnchor(buf->formitem, a_form.url, -				      a_form.target, &a, NULL, l->linenumber, -				      pos); +				      a_form.target, &a, NULL, NULL, '\0', +				      l->linenumber, pos);  	    a->hseq = a_form.hseq;  	    a->y = a_form.y;  	    a->end.pos = pos + ecol - col; @@ -554,3 +563,35 @@ addMultirowsForm(Buffer *buf, AnchorList *al)  	}      }  } + +char * +getAnchorText(Buffer *buf, Anchor *a) +{ +    AnchorList *al = buf->href; +    int hseq, i; +    Line *l; +    Str tmp = NULL; + +    if (!a || a->hseq < 0) +	return NULL; +    hseq = a->hseq; +    l = buf->firstLine; +    for (i = 0; i < al->nanchor; i++) { +	a = &al->anchors[i]; +	if (a->hseq != hseq) +	    continue; +	for (; l; l = l->next) { +	    if (l->linenumber == a->start.line) +		break; +	} +	if (!l) +	    break; +	if (!tmp) +	    tmp = Strnew_size(a->end.pos - a->start.pos); +	else +	    Strcat_char(tmp, ' '); +	Strcat_charp_n(tmp, &l->lineBuf[a->start.pos], +		       a->end.pos - a->start.pos); +    } +    return tmp ? tmp->ptr : NULL; +} @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.43 2002/12/04 16:45:41 ukai Exp $ */ +/* $Id: display.c,v 1.44 2002/12/05 16:29:04 ukai Exp $ */  #include <signal.h>  #include "fm.h" @@ -348,10 +348,19 @@ displayBuffer(Buffer *buf, int mode)  #endif  	{  	    Anchor *a = retrieveCurrentAnchor(buf); +	    if (a && a->title && *a->title) +		s = Sprintf("[%s] ", a->title); +	    else { +		Anchor *a_img = retrieveCurrentImg(buf); +		if (a_img && a_img->title && *a_img->title) +		    s = Sprintf("[%s]%s", a_img->title, a ? " " : ""); +	    }  	    if (a) {  		ParsedURL pu;  		parseURL2(a->url, &pu, baseURL(buf)); -		s = parsedURL2Str(&pu); +		if (!s) +		    s = Strnew(); +		Strcat(s, parsedURL2Str(&pu));  	    }  	}      } diff --git a/doc-jp/README.func b/doc-jp/README.func index 78bac1a..a9383ac 100644 --- a/doc-jp/README.func +++ b/doc-jp/README.func @@ -1,4 +1,5 @@  ABORT		確認せずにw3mを終了します +ACCESSKEY	Accesskey メニューを立ち上げます  ALARM		アラームを設定します  ADD_BOOKMARK	現在見ているページをブックマークに追加します  BACK		一つ前のバッファを表示します @@ -43,6 +44,7 @@ LINE_END	行末に移動します  LINE_INFO	ページ中での現在位置を表示します  LINK_BEGIN     最初のリンクに移動します  LINK_END       最後のリンクに移動します +LINK_MENU	Link メニューを立ち上げます  LOAD		ローカルファイルを指定して開きます  MAIN_MENU	メニューを立ち上げます  MARK		マークを設定/解除します diff --git a/doc/README.func b/doc/README.func index f3130d5..d5a17fb 100644 --- a/doc/README.func +++ b/doc/README.func @@ -1,4 +1,5 @@  ABORT		Quit w3m without confirmation +ACCESSSKEY	Popup acceskey menu  ADD_BOOKMARK	Add current page to bookmark  ALARM		Set alarm  BACK		Back to previous buffer @@ -43,6 +44,7 @@ LINE_END	Go to the end of line  LINE_INFO	Show current line number  LINK_BEGIN     Go to the first link  LINK_END       Go to the last link +LINK_MENU	Popup link element menu  LOAD		Load local file  MAIN_MENU	Popup menu  MARK		Set/unset mark @@ -1,4 +1,4 @@ -/* $Id: file.c,v 1.145 2002/12/04 17:00:48 ukai Exp $ */ +/* $Id: file.c,v 1.146 2002/12/05 16:29:05 ukai Exp $ */  #include "fm.h"  #include <sys/types.h>  #include "myctype.h" @@ -2243,9 +2243,8 @@ set_breakpoint(struct readbuffer *obuf, int tag_length)      if (!obuf->bp.init_flag)  	return; -    obuf->bp.anchor = obuf->anchor; -    obuf->bp.anchor_target = obuf->anchor_target; -    obuf->bp.anchor_hseq = obuf->anchor_hseq; +    bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor, +	  sizeof(obuf->anchor));      obuf->bp.img_alt = obuf->img_alt;      obuf->bp.in_bold = obuf->in_bold;      obuf->bp.in_under = obuf->in_under; @@ -2258,9 +2257,8 @@ static void  back_to_breakpoint(struct readbuffer *obuf)  {      obuf->flag = obuf->bp.flag; -    obuf->anchor = obuf->bp.anchor; -    obuf->anchor_target = obuf->bp.anchor_target; -    obuf->anchor_hseq = obuf->bp.anchor_hseq; +    bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor, +	  sizeof(obuf->anchor));      obuf->img_alt = obuf->bp.img_alt;      obuf->in_bold = obuf->bp.in_bold;      obuf->in_under = obuf->bp.in_under; @@ -2529,7 +2527,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,      append_tags(obuf); -    if (obuf->anchor) +    if (obuf->anchor.url)  	hidden = hidden_anchor = has_hidden_link(obuf, HTML_A);      if (obuf->img_alt) {  	if ((hidden_img = has_hidden_link(obuf, HTML_IMG_ALT)) != NULL) { @@ -2566,7 +2564,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,  	}      } -    if (obuf->anchor && !hidden_anchor) +    if (obuf->anchor.url && !hidden_anchor)  	Strcat_charp(line, "</a>");      if (obuf->img_alt && !hidden_img)  	Strcat_charp(line, "</img_alt>"); @@ -2739,15 +2737,31 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,      fillline(obuf, indent);      if (pass)  	passthrough(obuf, pass->ptr, 0); -    if (!hidden_anchor && obuf->anchor) { +    if (!hidden_anchor && obuf->anchor.url) {  	Str tmp; -	if (obuf->anchor_hseq > 0) -	    obuf->anchor_hseq = -obuf->anchor_hseq; -	tmp = Sprintf("<A HSEQ=\"%d\" HREF=\"", obuf->anchor_hseq); -	Strcat_charp(tmp, html_quote(obuf->anchor->ptr)); -	if (obuf->anchor_target) { +	if (obuf->anchor.hseq > 0) +	    obuf->anchor.hseq = -obuf->anchor.hseq; +	tmp = Sprintf("<A HSEQ=\"%d\" HREF=\"", obuf->anchor.hseq); +	Strcat_charp(tmp, html_quote(obuf->anchor.url)); +	if (obuf->anchor.target) {  	    Strcat_charp(tmp, "\" TARGET=\""); -	    Strcat_charp(tmp, html_quote(obuf->anchor_target->ptr)); +	    Strcat_charp(tmp, html_quote(obuf->anchor.target)); +	} +	if (obuf->anchor.referer) { +	    Strcat_charp(tmp, "\" REFERER=\""); +	    Strcat_charp(tmp, html_quote(obuf->anchor.referer)); +	} +	if (obuf->anchor.title) { +	    Strcat_charp(tmp, "\" TITLE=\""); +	    Strcat_charp(tmp, html_quote(obuf->anchor.title)); +	} +	if (obuf->anchor.accesskey) { +	    char *c = html_quote_char(obuf->anchor.accesskey); +	    Strcat_charp(tmp, "\" ACCESSKEY=\""); +	    if (c) +	        Strcat_charp(tmp, c); +	    else +	        Strcat_char(tmp, obuf->anchor.accesskey);  	}  	Strcat_charp(tmp, "\">");  	push_tag(obuf, tmp->ptr, HTML_A); @@ -2832,7 +2846,7 @@ close_effect0(struct readbuffer *obuf, int cmd)  static void  close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf)  { -    if (obuf->anchor) { +    if (obuf->anchor.url) {  	int i;  	char *p = NULL;  	int is_erased = 0; @@ -2841,14 +2855,14 @@ close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf)  	    if (obuf->tag_stack[i]->cmd == HTML_A)  		break;  	} -	if (i < 0 && obuf->anchor_hseq > 0 && Strlastchar(obuf->line) == ' ') { +	if (i < 0 && obuf->anchor.hseq > 0 && Strlastchar(obuf->line) == ' ') {  	    Strshrink(obuf->line, 1);  	    obuf->pos--;  	    is_erased = 1;  	}  	if (i >= 0 || (p = has_hidden_link(obuf, HTML_A))) { -	    if (obuf->anchor_hseq > 0) { +	    if (obuf->anchor.hseq > 0) {  		HTMLlineproc1(ANSP, h_env);  		obuf->prevchar = ' ';  	    } @@ -2861,8 +2875,7 @@ close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf)  		else {  		    passthrough(obuf, p, 1);  		} -		obuf->anchor = NULL; -		obuf->anchor_target = NULL; +		bzero((void *)&obuf->anchor, sizeof(obuf->anchor));  		return;  	    }  	    is_erased = 0; @@ -2873,9 +2886,8 @@ close_anchor(struct html_feed_environ *h_env, struct readbuffer *obuf)  	}  	push_tag(obuf, "</a>", HTML_N_A); -	obuf->anchor = NULL;      } -    obuf->anchor_target = NULL; +    bzero((void *)&obuf->anchor, sizeof(obuf->anchor));  }  void @@ -2909,7 +2921,7 @@ restore_fonteffect(struct html_feed_environ *h_env, struct readbuffer *obuf)  Str  process_img(struct parsed_tag *tag, int width)  { -    char *p, *q, *r, *r2 = NULL, *s; +    char *p, *q, *r, *r2 = NULL, *s, *t;  #ifdef USE_IMAGE      int w, i, nw, ni = 1, n, w0 = -1, i0 = -1;      int align, xoffset, yoffset, top, bottom, ismap = 0; @@ -2925,6 +2937,8 @@ process_img(struct parsed_tag *tag, int width)      p = remove_space(p);      q = NULL;      parsedtag_get_value(tag, ATTR_ALT, &q); +    t = q; +    parsedtag_get_value(tag, ATTR_TITLE, &t);      w = -1;      if (parsedtag_get_value(tag, ATTR_WIDTH, &w)) {  	if (w < 0) { @@ -3053,6 +3067,11 @@ process_img(struct parsed_tag *tag, int width)      }      Strcat_charp(tmp, html_quote(p));      Strcat_charp(tmp, "\""); +    if (t) { +	Strcat_charp(tmp, " title=\""); +	Strcat_charp(tmp, html_quote(t)); +	Strcat_charp(tmp, "\""); +    }  #ifdef USE_IMAGE      if (use_image) {  	if (w0 >= 0) @@ -4441,20 +4460,26 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)  	obuf->end_tag = 0;  	return 1;      case HTML_A: -	if (obuf->anchor) +	if (obuf->anchor.url)  	    close_anchor(h_env, obuf);  	hseq = 0;  	if (parsedtag_get_value(tag, ATTR_HREF, &p)) -	    obuf->anchor = Strnew_charp(p); +	    obuf->anchor.url = Strnew_charp(p)->ptr;  	if (parsedtag_get_value(tag, ATTR_TARGET, &p)) -	    obuf->anchor_target = Strnew_charp(p); +	    obuf->anchor.target = Strnew_charp(p)->ptr; +	if (parsedtag_get_value(tag, ATTR_REFERER, &p)) +	    obuf->anchor.referer = Strnew_charp(p)->ptr; +	if (parsedtag_get_value(tag, ATTR_TITLE, &p)) +	    obuf->anchor.title = Strnew_charp(p)->ptr; +	if (parsedtag_get_value(tag, ATTR_ACCESSKEY, &p)) +	    obuf->anchor.accesskey = (unsigned char)*p;  	if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) -	    obuf->anchor_hseq = hseq; +	    obuf->anchor.hseq = hseq; -	if (hseq == 0 && obuf->anchor) { -	    obuf->anchor_hseq = cur_hseq; +	if (hseq == 0 && obuf->anchor.url) { +	    obuf->anchor.hseq = cur_hseq;  	    tmp = process_anchor(tag, h_env->tagbuf->ptr);  	    push_tag(obuf, tmp->ptr, HTML_A);  	    return 1; @@ -4951,8 +4976,9 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)  				idFrame = NULL;  			}  		    } -		    p = r = NULL; +		    p = r = s = NULL;  		    q = buf->baseTarget; +		    t = "";  		    hseq = 0;  		    id = NULL;  		    if (parsedtag_get_value(tag, ATTR_NAME, &id)) { @@ -4967,6 +4993,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)  			q = url_quote_conv(q, buf->document_code);  		    if (parsedtag_get_value(tag, ATTR_REFERER, &r))  			r = url_quote_conv(r, buf->document_code); +		    parsedtag_get_value(tag, ATTR_TITLE, &s); +		    parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);  		    parsedtag_get_value(tag, ATTR_HSEQ, &hseq);  		    if (hseq > 0)  			buf->hmarklist = @@ -4974,16 +5002,15 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)  				       pos, hseq - 1);  		    if (id && idFrame)  			idFrame->body->nameList = -			    putAnchor(idFrame->body->nameList, -				      id, -				      NULL, -				      (Anchor **)NULL, -				      NULL, currentLn(buf), pos); +			    putAnchor(idFrame->body->nameList, id, NULL, +				      (Anchor **)NULL, NULL, NULL, '\0', +				      currentLn(buf), pos);  		    if (p) {  			effect |= PE_ANCHOR; -			a_href = registerHref(buf, remove_space(p), q, -					      r, currentLn(buf), pos); +			a_href = registerHref(buf, remove_space(p), q, r, s, +					      *t, currentLn(buf), pos);  			a_href->hseq = ((hseq > 0) ? hseq : -hseq) - 1; +			a_href->slave = (hseq > 0) ? FALSE : TRUE;  		    }  		    break;  		case HTML_N_A: @@ -5024,9 +5051,11 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)  							iseq - 1);  			}  #endif +			s = NULL; +			parsedtag_get_value(tag, ATTR_TITLE, &s);  			p = remove_space(p);  			p = url_quote_conv(p, buf->document_code); -			a_img = registerImg(buf, p, currentLn(buf), pos); +			a_img = registerImg(buf, p, s, currentLn(buf), pos);  #ifdef USE_IMAGE  			a_img->hseq = iseq;  			a_img->image = NULL; @@ -5330,10 +5359,9 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)  		}  		if (id && idFrame)  		    idFrame->body->nameList = -			putAnchor(idFrame->body->nameList, -				  id, -				  NULL, -				  (Anchor **)NULL, NULL, currentLn(buf), pos); +			putAnchor(idFrame->body->nameList, id, NULL, +				  (Anchor **)NULL, NULL, NULL, '\0', +				  currentLn(buf), pos);  #endif				/* ID_EXT */  	    }  	} @@ -6069,9 +6097,7 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf,      obuf->status = R_ST_NORMAL;      obuf->table_level = -1;      obuf->nobr_level = 0; -    obuf->anchor = 0; -    obuf->anchor_target = 0; -    obuf->anchor_hseq = 0; +    bzero((void *)&obuf->anchor, sizeof(obuf->anchor));      obuf->img_alt = 0;      obuf->in_bold = 0;      obuf->in_under = 0; @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.92 2002/12/04 17:00:50 ukai Exp $ */ +/* $Id: fm.h,v 1.93 2002/12/05 16:29:06 ukai Exp $ */  /*    * w3m: WWW wo Miru utility   *  @@ -358,9 +358,12 @@ typedef struct _anchor {      char *url;      char *target;      char *referer; +    char *title; +    unsigned char accesskey;      BufferPoint start;      BufferPoint end;      int hseq; +    char slave;      short y;      short rows;  #ifdef USE_IMAGE @@ -513,9 +516,7 @@ typedef struct {      int len;      int tlen;      long flag; -    Str anchor; -    Str anchor_target; -    short anchor_hseq; +    Anchor anchor;      Str img_alt;      char fontstat[FONTSTAT_SIZE];      short nobr_level; @@ -537,9 +538,7 @@ struct readbuffer {      unsigned char end_tag;      short table_level;      short nobr_level; -    Str anchor; -    Str anchor_target; -    short anchor_hseq; +    Anchor anchor;      Str img_alt;      char fontstat[FONTSTAT_SIZE];      char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE]; diff --git a/funcname.tab b/funcname.tab index 61de0da..f0b3139 100644 --- a/funcname.tab +++ b/funcname.tab @@ -1,8 +1,9 @@ -# $Id: funcname.tab,v 1.16 2002/12/03 16:01:35 ukai Exp $ +# $Id: funcname.tab,v 1.17 2002/12/05 16:29:07 ukai Exp $  # macro name	function name  #----------------------------  @@@		nulcmd  ABORT		quitfm +ACCESSKEY	accessKey  ADD_BOOKMARK	adBmark  ALARM        setAlarm  BACK		backBf @@ -48,6 +49,7 @@ LINE_END	linend  LINE_INFO	curlno  LINK_BEGIN	topA  LINK_END	lastA +LINK_MENU	linkMn  LOAD		ldfile  MAIN_MENU	mainMn  MARK		_mark @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.18 2002/12/03 15:35:10 ukai Exp $ */ +/* $Id: html.c,v 1.19 2002/12/05 16:29:07 ukai Exp $ */  #include "html.h"  /* Define HTML Tag Infomation Table */ @@ -7,9 +7,9 @@  #define MAXA_CORE	1  unsigned char ALST_A[] = {      ATTR_NAME, ATTR_HREF, ATTR_TARGET, ATTR_HSEQ, ATTR_REFERER, -    ATTR_FRAMENAME, ATTR_CORE +    ATTR_FRAMENAME, ATTR_TITLE, ATTR_ACCESSKEY, ATTR_CORE  }; -#define MAXA_A		MAXA_CORE + 6 +#define MAXA_A		MAXA_CORE + 8  unsigned char ALST_P[] = { ATTR_ALIGN, ATTR_CORE };  #define MAXA_P		MAXA_CORE + 1  unsigned char ALST_UL[] = { ATTR_START, ATTR_TYPE, ATTR_CORE }; @@ -28,9 +28,9 @@ unsigned char ALST_PRE[] = { ATTR_FOR_TABLE, ATTR_CORE };  #define MAXA_PRE	MAXA_CORE + 1  unsigned char ALST_IMG[] =      { ATTR_SRC, ATTR_ALT, ATTR_WIDTH, ATTR_HEIGHT, ATTR_ALIGN, ATTR_USEMAP, -    ATTR_ISMAP, ATTR_CORE +    ATTR_ISMAP, ATTR_TITLE, ATTR_CORE  }; -#define MAXA_IMG	MAXA_CORE + 7 +#define MAXA_IMG	MAXA_CORE + 8  unsigned char ALST_TABLE[] =      { ATTR_BORDER, ATTR_WIDTH, ATTR_HBORDER, ATTR_CELLSPACING,      ATTR_CELLPADDING, ATTR_VSPACE, ATTR_CORE @@ -112,9 +112,10 @@ unsigned char ALST_INPUT_ALT[] =  #define MAXA_INPUT_ALT  16  unsigned char ALST_IMG_ALT[] =      { ATTR_SRC, ATTR_WIDTH, ATTR_HEIGHT, ATTR_USEMAP, ATTR_ISMAP, ATTR_HSEQ, -    ATTR_XOFFSET, ATTR_YOFFSET, ATTR_TOP_MARGIN, ATTR_BOTTOM_MARGIN +    ATTR_XOFFSET, ATTR_YOFFSET, ATTR_TOP_MARGIN, ATTR_BOTTOM_MARGIN, +    ATTR_TITLE  }; -#define MAXA_IMG_ALT  10 +#define MAXA_IMG_ALT  11  unsigned char ALST_NOP[] = { ATTR_CORE };  #define MAXA_NOP	MAXA_CORE @@ -304,20 +305,30 @@ TagAttrInfo AttrMAP[MAX_TAGATTR] = {      {"rel", VTYPE_STR, 0},	/* 47 ATTR_REL            */      {"rev", VTYPE_STR, 0},	/* 48 ATTR_REV            */      {"title", VTYPE_STR, 0},	/* 49 ATTR_TITLE          */ +    {"accesskey", VTYPE_STR, 0},	/* 50 ATTR_ACCESSKEY          */ +    {NULL, VTYPE_NONE, 0},	/* 51 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 52 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 53 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 54 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 55 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 56 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 57 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 58 Undefined           */ +    {NULL, VTYPE_NONE, 0},	/* 59 Undefined           */      /* Internal attribute */ -    {"xoffset", VTYPE_NUMBER, AFLG_INT},	/* 50 ATTR_XOFFSET        */ -    {"yoffset", VTYPE_NUMBER, AFLG_INT},	/* 51 ATTR_YOFFSET        */ -    {"top_margin", VTYPE_NUMBER, AFLG_INT},	/* 52 ATTR_TOP_MARGIN,    */ -    {"bottom_margin", VTYPE_NUMBER, AFLG_INT},	/* 53 ATTR_BOTTOM_MARGIN, */ -    {"tid", VTYPE_NUMBER, AFLG_INT},	/* 54 ATTR_TID            */ -    {"fid", VTYPE_NUMBER, AFLG_INT},	/* 55 ATTR_FID            */ -    {"for_table", VTYPE_NONE, AFLG_INT},	/* 56 ATTR_FOR_TABLE      */ -    {"framename", VTYPE_STR, AFLG_INT},	/* 57 ATTR_FRAMENAME      */ -    {"hborder", VTYPE_NONE, 0},	/* 58 ATTR_HBORDER        */ -    {"hseq", VTYPE_NUMBER, AFLG_INT},	/* 59 ATTR_HSEQ           */ -    {"no_effect", VTYPE_NONE, AFLG_INT},	/* 60 ATTR_NO_EFFECT      */ -    {"referer", VTYPE_STR, AFLG_INT},	/* 61 ATTR_REFERER        */ -    {"selectnumber", VTYPE_NUMBER, AFLG_INT},	/* 62 ATTR_SELECTNUMBER   */ -    {"textareanumber", VTYPE_NUMBER, AFLG_INT},	/* 63 ATTR_TEXTAREANUMBER */ +    {"xoffset", VTYPE_NUMBER, AFLG_INT},	/* 60 ATTR_XOFFSET        */ +    {"yoffset", VTYPE_NUMBER, AFLG_INT},	/* 61 ATTR_YOFFSET        */ +    {"top_margin", VTYPE_NUMBER, AFLG_INT},	/* 62 ATTR_TOP_MARGIN,    */ +    {"bottom_margin", VTYPE_NUMBER, AFLG_INT},	/* 63 ATTR_BOTTOM_MARGIN, */ +    {"tid", VTYPE_NUMBER, AFLG_INT},	/* 64 ATTR_TID            */ +    {"fid", VTYPE_NUMBER, AFLG_INT},	/* 65 ATTR_FID            */ +    {"for_table", VTYPE_NONE, AFLG_INT},	/* 66 ATTR_FOR_TABLE      */ +    {"framename", VTYPE_STR, AFLG_INT},	/* 67 ATTR_FRAMENAME      */ +    {"hborder", VTYPE_NONE, 0},	/* 68 ATTR_HBORDER        */ +    {"hseq", VTYPE_NUMBER, AFLG_INT},	/* 69 ATTR_HSEQ           */ +    {"no_effect", VTYPE_NONE, AFLG_INT},	/* 70 ATTR_NO_EFFECT      */ +    {"referer", VTYPE_STR, AFLG_INT},	/* 71 ATTR_REFERER        */ +    {"selectnumber", VTYPE_NUMBER, AFLG_INT},	/* 72 ATTR_SELECTNUMBER   */ +    {"textareanumber", VTYPE_NUMBER, AFLG_INT},	/* 73 ATTR_TEXTAREANUMBER */  }; @@ -1,4 +1,4 @@ -/* $Id: html.h,v 1.12 2002/12/03 15:35:11 ukai Exp $ */ +/* $Id: html.h,v 1.13 2002/12/05 16:29:08 ukai Exp $ */  #ifndef _HTML_H  #define _HTML_H  #ifdef USE_SSL @@ -271,24 +271,25 @@ typedef struct {  #define ATTR_REL		47  #define ATTR_REV		48  #define ATTR_TITLE		49 +#define ATTR_ACCESSKEY		50  /* Internal attribute */ -#define ATTR_XOFFSET		50 -#define ATTR_YOFFSET		51 -#define ATTR_TOP_MARGIN		52 -#define ATTR_BOTTOM_MARGIN	53 -#define ATTR_TID		54 -#define ATTR_FID		55 -#define ATTR_FOR_TABLE		56 -#define ATTR_FRAMENAME		57 -#define ATTR_HBORDER		58 -#define ATTR_HSEQ		59 -#define ATTR_NO_EFFECT		60 -#define ATTR_REFERER		61 -#define ATTR_SELECTNUMBER	62 -#define ATTR_TEXTAREANUMBER	63 - -#define MAX_TAGATTR		64 +#define ATTR_XOFFSET		60 +#define ATTR_YOFFSET		61 +#define ATTR_TOP_MARGIN		62 +#define ATTR_BOTTOM_MARGIN	63 +#define ATTR_TID		64 +#define ATTR_FID		65 +#define ATTR_FOR_TABLE		66 +#define ATTR_FRAMENAME		67 +#define ATTR_HBORDER		68 +#define ATTR_HSEQ		69 +#define ATTR_NO_EFFECT		70 +#define ATTR_REFERER		71 +#define ATTR_SELECTNUMBER	72 +#define ATTR_TEXTAREANUMBER	73 + +#define MAX_TAGATTR		74  /* HTML Tag Information Table */ @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.159 2002/12/04 16:45:41 ukai Exp $ */ +/* $Id: main.c,v 1.160 2002/12/05 16:29:08 ukai Exp $ */  #define MAINPROGRAM  #include "fm.h"  #include <signal.h> @@ -4153,6 +4153,47 @@ follow_map(struct parsed_tagarg *arg)  #endif  } +#ifdef USE_MENU +/* link menu */ +void +linkMn(void) +{ +    LinkList *l = link_menu(Currentbuf); +    ParsedURL p_url; + +    if (!l || !l->url) +	return; +    if (*(l->url) == '#') { +	gotoLabel(l->url + 1); +	return; +    } +    parseURL2(l->url, &p_url, baseURL(Currentbuf)); +    pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr); +    cmd_loadURL(l->url, baseURL(Currentbuf), +		parsedURL2Str(&Currentbuf->currentURL)->ptr); +} + +/* accesskey */ +void +accessKey(void) +{ +    Anchor *a; +    BufferPoint *po; + +    if (!Currentbuf->href || !Currentbuf->hmarklist) +	return; +    a = accesskey_menu(Currentbuf); +    if (!a || a->hseq < 0) +	return; +    po = &Currentbuf->hmarklist->marks[a->hseq]; +    gotoLine(Currentbuf, po->line); +    Currentbuf->pos = po->pos; +    arrangeCursor(Currentbuf); +    onA(); +    followA(); +} +#endif +  #ifdef USE_COOKIE  /* cookie list */  void @@ -1,4 +1,4 @@ -/* $Id: menu.c,v 1.24 2002/12/02 17:39:16 ukai Exp $ */ +/* $Id: menu.c,v 1.25 2002/12/05 16:29:10 ukai Exp $ */  /*    * w3m menu.c   */ @@ -288,11 +288,6 @@ static int smDelTab(char c);  /* --- SelTabMenu (END) --- */ -static Menu LinkMenu; -static int LinkV = 0; -static void initLinkMenu(void); -static void lmGoURL(void); -  /* --- MainMenu --- */  static Menu MainMenu; @@ -1318,7 +1313,6 @@ popupMenu(int x, int y, Menu *menu)  {      initSelectMenu();      initSelTabMenu(); -    initLinkMenu();      menu->cursorX = Currentbuf->cursorX + Currentbuf->rootX;      menu->cursorY = Currentbuf->cursorY + Currentbuf->rootY; @@ -1648,68 +1642,6 @@ smDelTab(char c)  /* --- SelectMenu (END) --- */ -/* --- LinkMenu --- */ - -static void -initLinkMenu(void) -{ -    LinkList *l; -    int i, nitem, len = 0; -    char **label; -    Str str; - -    if (!Currentbuf->linklist) { -	LinkMenu.item = NULL; -	LinkMenu.nitem = 0; -	return; -    } -    for (i = 0, l = Currentbuf->linklist; l; i++, l = l->next) ; -    nitem = i; - -    label = New_N(char *, nitem + 1); -    for (i = 0, l = Currentbuf->linklist; l; i++, l = l->next) { -	str = Strnew_charp(l->title ? l->title : "(empty)"); -	if (l->type == LINK_TYPE_REL) -	    Strcat_charp(str, " [Rel] "); -	else if (l->type == LINK_TYPE_REV) -	    Strcat_charp(str, " [Rev] "); -	else -	    Strcat_charp(str, " "); -	Strcat_charp(str, l->url ? l->url : ""); -	label[i] = str->ptr; -	if (len < str->length) -	    len = str->length; -    } -    label[nitem + 1] = NULL; -    LinkV = 0; - -    new_option_menu(&LinkMenu, label, &LinkV, lmGoURL); -    LinkMenu.initial = LinkV; -    LinkMenu.cursorX = Currentbuf->cursorX + Currentbuf->rootX; -    LinkMenu.cursorY = Currentbuf->cursorY + Currentbuf->rootY; -} - -static void -lmGoURL(void) -{ -    LinkList *l; -    int i; - -    for (i = 0, l = Currentbuf->linklist; l; i++, l = l->next) { -	if (i == LinkV) -	    break; -    } -    if (l == NULL || l->url == NULL) -	return; -    CurrentKey = -1; -    CurrentKeyData = NULL; -    CurrentCmdData = l->url; -    gorURL(); -    CurrentCmdData = NULL; -} - -/* --- LinkMenu (END) --- */ -  /* --- OptionMenu --- */  void @@ -1742,7 +1674,7 @@ initMenu(void)      MenuItem *item = NULL;      MenuList *list; -    w3mMenuList = New_N(MenuList, 4); +    w3mMenuList = New_N(MenuList, 3);      w3mMenuList[0].id = "Main";      w3mMenuList[0].menu = &MainMenu;      w3mMenuList[0].item = MainMenuItem; @@ -1752,10 +1684,7 @@ initMenu(void)      w3mMenuList[2].id = "SelectTab";      w3mMenuList[2].menu = &SelTabMenu;      w3mMenuList[2].item = NULL; -    w3mMenuList[3].id = "Link"; -    w3mMenuList[3].menu = &LinkMenu; -    w3mMenuList[3].item = NULL; -    w3mMenuList[4].id = NULL; +    w3mMenuList[3].id = NULL;      if ((mf = fopen(rcFile(MENU_FILE), "rt")) == NULL)  	goto create_menu; @@ -1890,4 +1819,132 @@ getMenuN(MenuList *list, char *id)  /* --- InitMenu (END) --- */ +LinkList * +link_menu(Buffer *buf) +{ +    Menu menu; +    LinkList *l; +    int i, nitem, len = 0, linkV = -1; +    char **label; +    Str str; + +    if (!buf->linklist) +	return NULL; + +    for (i = 0, l = buf->linklist; l; i++, l = l->next) ; +    nitem = i; + +    label = New_N(char *, nitem + 1); +    for (i = 0, l = buf->linklist; l; i++, l = l->next) { +	str = Strnew_charp(l->title ? l->title : "(empty)"); +	if (l->type == LINK_TYPE_REL) +	    Strcat_charp(str, " [Rel] "); +	else if (l->type == LINK_TYPE_REV) +	    Strcat_charp(str, " [Rev] "); +	else +	    Strcat_charp(str, " "); +	Strcat_charp(str, l->url ? l->url : ""); +	label[i] = str->ptr; +	if (len < str->length) +	    len = str->length; +    } +    label[nitem] = NULL; + +    new_option_menu(&menu, label, &linkV, NULL); + +    menu.initial = 0; +    menu.cursorX = buf->cursorX + buf->rootX; +    menu.cursorY = buf->cursorY + buf->rootY; +    menu.x = menu.cursorX + FRAME_WIDTH + 1; +    menu.y = menu.cursorY + 2; + +    popup_menu(NULL, &menu); + +    if (linkV < 0) +	return NULL; +    for (i = 0, l = buf->linklist; l; i++, l = l->next) { +	if (i == linkV) +	    return l; +    } +    return NULL; +} + +/* --- LinkMenu (END) --- */ + +Anchor * +accesskey_menu(Buffer *buf) +{ +    Menu menu; +    AnchorList *al = buf->href; +    Anchor *a; +    Anchor **ap; +    int i, n, nitem = 0, key = -1; +    char **label; +    char *t; +    unsigned char c; + +    if (!al) +	return NULL; +    for (i = 0; i < al->nanchor; i++) { +	a = &al->anchors[i]; +	if (!a->slave && a->accesskey && IS_ASCII(a->accesskey)) +	    nitem++; +    } +    if (!nitem) +	return NULL; + +    label = New_N(char *, nitem + 1); +    ap = New_N(Anchor *, nitem); +    for (i = 0, n = 0; i < al->nanchor; i++) { +	a = &al->anchors[i]; +	if (!a->slave && a->accesskey && IS_ASCII(a->accesskey)) { +	    t = getAnchorText(buf, a); +	    label[n] = Sprintf("%c: %s", a->accesskey, t ? t : "")->ptr; +	    ap[n] = a; +	    n++; +	} +    } +    label[nitem] = NULL; + +    new_option_menu(&menu, label, &key, NULL); + +    menu.initial = 0; +    menu.cursorX = buf->cursorX + buf->rootX; +    menu.cursorY = buf->cursorY + buf->rootY; +    menu.x = menu.cursorX + FRAME_WIDTH + 1; +    menu.y = menu.cursorY + 2; +    for (i = 0; i < 128; i++) +	menu.keyselect[i] = -1; +    for (i = 0; i < nitem; i++) { +	c = ap[i]->accesskey; +	menu.keymap[(int)c] = mSelect; +	menu.keyselect[(int)c] = i; +    } +    for (i = 0; i < nitem; i++) { +	c = ap[i]->accesskey; +	if (!IS_ALPHA(c) || menu.keyselect[n] >= 0) +	    continue; +	c = tolower(c); +	menu.keymap[(int)c] = mSelect; +	menu.keyselect[(int)c] = i; +	c = toupper(c); +	menu.keymap[(int)c] = mSelect; +	menu.keyselect[(int)c] = i; +    } + +    a = retrieveCurrentAnchor(buf); +    if (a && a->accesskey && IS_ASCII(a->accesskey)) { +        for (i = 0; i < nitem; i++) { +	    if (a == ap[i]) { +		menu.initial = i; +		break; +	    } +	} +    } + +    popup_menu(NULL, &menu); + +    return (key >= 0) ? ap[key] : NULL; +} +  #endif				/* USE_MENU */ @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.65 2002/12/04 16:45:41 ukai Exp $ */ +/* $Id: proto.h,v 1.66 2002/12/05 16:29:10 ukai Exp $ */  /*    *   This file was automatically generated by version 1.7 of cextract.   *   Manual editing not recommended. @@ -131,6 +131,15 @@ extern void tabrURL(void);  extern void tabR(void);  extern void tabL(void);  extern void ldDL(void); +#ifdef USE_MENU +extern void linkMn(void); +extern LinkList *link_menu(Buffer *buf); +extern void accessKey(void); +extern Anchor *accesskey_menu(Buffer *buf); +#else +#define linkMn nulcmd +#define accessKey nulcmd +#endif  extern int currentLn(Buffer *buf);  extern void tmpClearBuffer(Buffer *buf); @@ -500,12 +509,15 @@ extern Str readFTPDir(ParsedURL *pu);  extern void closeFTP(FILE * f);  extern int Ftpfclose(FILE * f);  extern AnchorList *putAnchor(AnchorList *al, char *url, char *target, -			     Anchor **anchor_return, char *referer, int line, +			     Anchor **anchor_return, char *referer, +			     char *title, unsigned char key, int line,  			     int pos);  extern Anchor *registerHref(Buffer *buf, char *url, char *target, -			    char *referer, int line, int pos); +			    char *referer, char *title, unsigned char key, +			    int line, int pos);  extern Anchor *registerName(Buffer *buf, char *url, int line, int pos); -extern Anchor *registerImg(Buffer *buf, char *url, int line, int pos); +extern Anchor *registerImg(Buffer *buf, char *url, char *title, int line, +			   int pos);  extern Anchor *registerForm(Buffer *buf, FormList *flist,  			    struct parsed_tag *tag, int line, int pos);  extern int onAnchor(Anchor *a, int line, int pos); @@ -527,6 +539,7 @@ extern Anchor *closest_prev_anchor(AnchorList *a, Anchor *an, int x, int y);  void addMultirowsImg(Buffer *buf, AnchorList *al);  #endif  extern HmarkerList *putHmarker(HmarkerList *ml, int line, int pos, int seq); +extern char *getAnchorText(Buffer *buf, Anchor *a);  extern Str decodeB(char **ww);  extern Str decodeQ(char **ww);  extern Str decodeQP(char **ww); diff --git a/scripts/w3mhelp.cgi.in b/scripts/w3mhelp.cgi.in index 36d4915..a646d1a 100644 --- a/scripts/w3mhelp.cgi.in +++ b/scripts/w3mhelp.cgi.in @@ -1,5 +1,5 @@  #!@PERL@ -# $Id: w3mhelp.cgi.in,v 1.19 2002/12/05 16:02:00 ukai Exp $ +# $Id: w3mhelp.cgi.in,v 1.20 2002/12/05 16:29:17 ukai Exp $  if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {    $CYGPATH = 1; @@ -140,7 +140,7 @@ for $otherlang (@docdirs) {  &show_keymap("Hyperlink operation",  	     split(" ", "followA tabA svA followI svI submitForm  		curURL peekURL peekIMG pginfo curlno chkURL chkWORD chkNMID -		rFrame extbrz linkbrz")); +		rFrame extbrz linkbrz linkMn accessKey"));  &show_keymap("File/Stream operation",  	     split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh | 
