diff -u ../w3m-0.1.10/funcname.tab ./funcname.tab --- ../w3m-0.1.10/funcname.tab Mon Jun 5 18:41:41 2000 +++ ./funcname.tab Tue Jun 13 22:27:21 2000 @@ -27,6 +27,7 @@ GOTO goURL GOTO_LINE goLine GOTO_LINK followA +HEAD headreq HELP ldhelp HISTORY ldHist INFO pginfo diff -u ../w3m-0.1.10/keybind.c ./keybind.c --- ../w3m-0.1.10/keybind.c Tue Jun 6 14:39:13 2000 +++ ./keybind.c Tue Jun 13 22:27:21 2000 @@ -56,7 +56,7 @@ /* 0 1 2 3 4 5 6 7 */ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, /* 8 9 : ; < = > ? */ - nulcmd, nulcmd, chkNMID, nulcmd, goLineF, nulcmd, goLineL, nulcmd, + nulcmd, nulcmd, chkNMID, nulcmd, goLineF, headreq, goLineL, nulcmd, /* @ A B C D E F G */ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, /* H I J K L M N O */ diff -u ../w3m-0.1.10/keybind_lynx.c ./keybind_lynx.c --- ../w3m-0.1.10/keybind_lynx.c Mon Jun 5 20:17:04 2000 +++ ./keybind_lynx.c Tue Jun 13 22:27:21 2000 @@ -66,7 +66,7 @@ /* 0 1 2 3 4 5 6 7 */ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, /* 8 9 : ; < = > ? */ - nulcmd, nulcmd, chkNMID, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, + nulcmd, nulcmd, chkNMID, nulcmd, nulcmd, headreq, nulcmd, nulcmd, /* @ A B C D E F G */ nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, /* H I J K L M N O */ diff -u ../w3m-0.1.10/main.c ./main.c --- ../w3m-0.1.10/main.c Tue Jun 6 14:56:48 2000 +++ ./main.c Tue Jun 13 22:41:18 2000 @@ -1941,6 +1941,42 @@ return buf; } +/* send HEAD request */ +void +headreq(void) +{ + Anchor *a; + Buffer *buf; + FormList *request; + + if (Currentbuf->firstLine == NULL) + return; + a = retrieveCurrentAnchor(Currentbuf); + if (a == NULL) + a = retrieveCurrentImg(Currentbuf); + if (a == NULL) + return; + if (*a->url == '#') + return; + + message(Sprintf("Sending HEAD %s\n", a->url)->ptr, 0, 0); + refresh(); + + request = New(FormList); + request->method = FORM_METHOD_HEAD; + buf = loadGeneralFile(a->url, baseURL(Currentbuf), a->referer, 0, request); + + if (buf == NULL) { + disp_message(Sprintf("Can't send %s\n", a->url)->ptr, FALSE); + } else if (buf != NO_BUFFER) { + Buffer *infobuf; + infobuf = head_info_panel(buf); + pushBuffer(infobuf); + discardBuffer(buf); + } + displayBuffer(Currentbuf, B_NORMAL); +} + /* follow HREF link */ void followA(void) diff -u ../w3m-0.1.10/map.c ./map.c --- ../w3m-0.1.10/map.c Mon Jun 5 20:17:04 2000 +++ ./map.c Tue Jun 13 22:27:21 2000 @@ -167,3 +167,36 @@ Strcat_charp(tmp, ""); return loadHTMLString(tmp->ptr); } + +/* + * Reponse of HEAD Request + */ +Buffer * +head_info_panel(Buffer * buf) +{ + Str tmp = Strnew_size(256); + TextListItem *ti; + char *p; + + Strcat_charp(tmp, "HEAD Request"); + if (buf == NULL) + goto end; + p = htmlquote_str(parsedURL2Str(&buf->currentURL)->ptr); + Strcat_charp(tmp, "

Request URL

"); + Strcat_charp(tmp, p); + Strcat_charp(tmp, ""); + + if (buf->document_header != NULL) { + Strcat_charp(tmp, "
\n"); + Strcat_charp(tmp, "

Header infomation

\n"); + for (ti = buf->document_header->first; ti != NULL; ti = ti->next) { + Strcat_charp(tmp, htmlquote_str(ti->ptr)); + Strcat_charp(tmp, "
"); + } + } +end: + Strcat_charp(tmp, ""); + return loadHTMLString(tmp->ptr); +} diff -u ../w3m-0.1.10/proto.h ./proto.h --- ../w3m-0.1.10/proto.h Tue Jun 6 14:56:25 2000 +++ ./proto.h Tue Jun 13 22:31:39 2000 @@ -49,6 +49,7 @@ extern void editScr(void); extern void followA(void); extern void bufferA(void); +extern void headreq(void); extern void followI(void); extern void followForm(void); extern void topA(void); @@ -249,6 +250,7 @@ extern void follow_map(struct parsed_tagarg *arg); extern Buffer *follow_map_panel(Buffer * buf, struct parsed_tagarg *arg); extern Buffer *page_info_panel(Buffer * buf); +extern Buffer *head_info_panel(Buffer * buf); extern struct frame_body *newFrame(struct parsed_tagarg *arg, ParsedURL * baseURL); extern struct frameset *newFrameSet(struct parsed_tagarg *arg); extern void addFrameSetElement(struct frameset *f, union frameset_element element); diff -u ../w3m-0.1.10/file.c ./file.c --- ../w3m-0.1.10/file.c Sun Jun 25 10:28:29 2000 +++ ./file.c Wed Jun 28 23:07:13 2000 @@ -844,6 +844,12 @@ if (t_buf == NULL) t_buf = newBuffer(INIT_BUFFER_WIDTH); readHeader(&f, t_buf, FALSE, &pu); + if (request && request->method == FORM_METHOD_HEAD) { + UFclose(&f); + copyParsedURL(&t_buf->currentURL, &pu); + signal(SIGINT, prevtrap); + return t_buf; + } t = checkContentType(t_buf); if (t == NULL) t = "text/plain";