[w3m-dev 03372] tab browser

* display.c (displayBuffer): add ny
			rootY offset by tab
			tab line
	(cursorDown): offset rootY
	(arrangeCursor): offset rootY
* etc.c (columnSkip): offset rootY
	(lineSkip): offset rootY
	(currentLineSkip): offset rootY
* file.c (HTMLlineproc2body): ATTR_TARGET
* fm.h (MapArea): add target
	(Buffer): add rootY
	(TabBuffer): added
	(Currentbuf): comment out
	(Firstbuf): comment out
	(CurrentTab): added
	(FirstTab): added
	(LastTab): added
	(open_tab_blank): added
	(close_tab_back): added
	(nTab): added
	(TabCols): added
	(N_TAB): added
	(Currentbuf): CurrentTab->currentBuffer
	(Firstbuf): CurrentTab->firstBuffer
* funcname.tab (CLOSE_TAB): added
	(NEW_TAB): added
	(NEXT_TAB): added
	(PREV_TAB): added
	(TAB_GOTO): added
	(TAB_GOTO_RELATIVE): added
	(TAB_LEFT): added
	(TAB_LINK): added
	(TAB_MENU): added
	(TAB_RIGHT): added
* html.c (ALST_AREA): add ATTR_TARGET
* image.c (showImageProgress): offset rootY
* main.c (_newT): added
	(followTab): added
	(moveTab): added
	(check_target): added
	(MAIN): init tab related values
		buf => tab
	(nscroll): offset rootY
	(pgFore): offset rootY
	(pgBack): offset rootY
	(ctrCsrV): offset rootY
	(_movD): offset rootY
	(_movU): offset rootY
	(_goLine): offset rootY
	(_mark): offset rootY
	(followA): check target
	(_followForm): offset rootY
	(drawAnchorCursor0): offset rootY
	(drawAnchorCursor): offset rootY
	(backBf): check close_tab_back
	(follow_map): rewrite for tab, check target
	(posTab): added
	(process_mouse): tab operation
			offset rootY
	(deleteFiles): for all buffers in all tabs
	(newTab): added
	(newT): added
	(numTab): added
	(deleteTab): added
	(closeT): added
	(nextT): added
	(prevT): added
	(followTab): added
	(tabA): added
	(tabURL0): added
	(tabURL): added
	(tabrURL): added
	(moveTab): added
	(tabR): added
	(tabL): added
* map.c (follow_map_menu): return MapArea
	(newMapArea): add target args
* menu.c (SelTabMenu): added
	(SelTabV): added
	(initSelTabMenu): added
	(smChTab): added
	(smDelTab): added
	(MainMenuItem): add Select Tab
				on New Tab
	(popupMenu): add initSelTabMenu()
			offset rootY
	(mainMn): offset rootY
	(selMn): offset rootY
	(initSelectMenu): offset rootY
	(tabMn): added
* proto.h (newT): added
	(closeT): added
	(nextT): added
	(prevT): added
	(tabA): added
	(tabURL): added
	(tabrURL): added
	(tabR): added
	(tabL): added
	(newTab): added
	(deleteTab): added
	(follow_map_menu): return MapArea
	(newMapArea): add target arg
	(tabMn): added
* rc.c (CMT_OPEN_TAB_BLANK): added
	(CMT_CLOSE_TAB_BACK): added
	(open_tab_blank): added
	(close_tab_back): added
* doc/README.func (CLOSE_TAB): added
	(NEW_TAB): added
	(NEXT_TAB): added
	(PREV_TAB): added
	(TAB_GOTO): added
	(TAB_GOTO_RELATIVE): added
	(TAB_LEFT): added
	(TAB_LINK): added
	(TAB_MENU): added
	(TAB_RIGHT): added
* doc-jp/README.func: ditto doc/README.func
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
Fumitoshi UKAI
2002-11-05 17:10:04 +00:00
parent 98d6d29e7b
commit a772c51a16
15 changed files with 911 additions and 81 deletions
+124 -1
View File
@@ -1,3 +1,126 @@
2002-11-06 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
* [w3m-dev 03372] tab browser
* display.c (displayBuffer): add ny
rootY offset by tab
tab line
(cursorDown): offset rootY
(arrangeCursor): offset rootY
* etc.c (columnSkip): offset rootY
(lineSkip): offset rootY
(currentLineSkip): offset rootY
* file.c (HTMLlineproc2body): ATTR_TARGET
* fm.h (MapArea): add target
(Buffer): add rootY
(TabBuffer): added
(Currentbuf): comment out
(Firstbuf): comment out
(CurrentTab): added
(FirstTab): added
(LastTab): added
(open_tab_blank): added
(close_tab_back): added
(nTab): added
(TabCols): added
(N_TAB): added
(Currentbuf): CurrentTab->currentBuffer
(Firstbuf): CurrentTab->firstBuffer
* funcname.tab (CLOSE_TAB): added
(NEW_TAB): added
(NEXT_TAB): added
(PREV_TAB): added
(TAB_GOTO): added
(TAB_GOTO_RELATIVE): added
(TAB_LEFT): added
(TAB_LINK): added
(TAB_MENU): added
(TAB_RIGHT): added
* html.c (ALST_AREA): add ATTR_TARGET
* image.c (showImageProgress): offset rootY
* main.c (_newT): added
(followTab): added
(moveTab): added
(check_target): added
(MAIN): init tab related values
buf => tab
(nscroll): offset rootY
(pgFore): offset rootY
(pgBack): offset rootY
(ctrCsrV): offset rootY
(_movD): offset rootY
(_movU): offset rootY
(_goLine): offset rootY
(_mark): offset rootY
(followA): check target
(_followForm): offset rootY
(drawAnchorCursor0): offset rootY
(drawAnchorCursor): offset rootY
(backBf): check close_tab_back
(follow_map): rewrite for tab, check target
(posTab): added
(process_mouse): tab operation
offset rootY
(deleteFiles): for all buffers in all tabs
(newTab): added
(newT): added
(numTab): added
(deleteTab): added
(closeT): added
(nextT): added
(prevT): added
(followTab): added
(tabA): added
(tabURL0): added
(tabURL): added
(tabrURL): added
(moveTab): added
(tabR): added
(tabL): added
* map.c (follow_map_menu): return MapArea
(newMapArea): add target args
* menu.c (SelTabMenu): added
(SelTabV): added
(initSelTabMenu): added
(smChTab): added
(smDelTab): added
(MainMenuItem): add Select Tab
on New Tab
(popupMenu): add initSelTabMenu()
offset rootY
(mainMn): offset rootY
(selMn): offset rootY
(initSelectMenu): offset rootY
(tabMn): added
* proto.h (newT): added
(closeT): added
(nextT): added
(prevT): added
(tabA): added
(tabURL): added
(tabrURL): added
(tabR): added
(tabL): added
(newTab): added
(deleteTab): added
(follow_map_menu): return MapArea
(newMapArea): add target arg
(tabMn): added
* rc.c (CMT_OPEN_TAB_BLANK): added
(CMT_CLOSE_TAB_BACK): added
(open_tab_blank): added
(close_tab_back): added
* doc/README.func (CLOSE_TAB): added
(NEW_TAB): added
(NEXT_TAB): added
(PREV_TAB): added
(TAB_GOTO): added
(TAB_GOTO_RELATIVE): added
(TAB_LEFT): added
(TAB_LINK): added
(TAB_MENU): added
(TAB_RIGHT): added
* doc-jp/README.func: ditto doc/README.func
2002-11-06 Fumitoshi UKAI <ukai@debian.or.jp>
* doc-jp/README.pre_form: added [w3m-dev 03373]
@@ -4159,4 +4282,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1
* import w3m-0.2.1
$Id: ChangeLog,v 1.472 2002/11/05 16:37:36 ukai Exp $
$Id: ChangeLog,v 1.473 2002/11/05 17:10:04 ukai Exp $
+53 -10
View File
@@ -1,4 +1,4 @@
/* $Id: display.c,v 1.25 2002/10/29 16:19:41 ukai Exp $ */
/* $Id: display.c,v 1.26 2002/11/05 17:10:05 ukai Exp $ */
#include <signal.h>
#include "fm.h"
@@ -227,6 +227,7 @@ displayBuffer(Buffer *buf, int mode)
{
Str msg;
Anchor *aa = NULL;
int ny = 0;
if (buf->topLine == NULL && readBufferCache(buf) == 0) { /* clear_buffer */
mode = B_FORCE_REDRAW;
@@ -253,6 +254,12 @@ displayBuffer(Buffer *buf, int mode)
else
buf->rootX = 0;
buf->COLS = COLS - buf->rootX;
if (nTab > 1)
ny = (nTab - 1) / N_TAB + 2;
if (buf->rootY != ny) {
buf->rootY = ny;
arrangeCursor(buf);
}
if (mode == B_FORCE_REDRAW || mode == B_SCROLL ||
#ifdef USE_IMAGE
mode == B_REDRAW_IMAGE ||
@@ -388,7 +395,7 @@ displayBuffer(Buffer *buf, int mode)
refresh();
}
standout();
message(msg->ptr, buf->cursorX + buf->rootX, buf->cursorY);
message(msg->ptr, buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
standend();
term_title(buf->buffername);
refresh();
@@ -428,8 +435,41 @@ redrawNLine(Buffer *buf, int n)
#endif /* USE_BG_COLOR */
}
#endif /* USE_COLOR */
for (i = 0, l = buf->topLine; i < LASTLINE; i++) {
if (i >= LASTLINE - n || i < -n)
if (nTab > 1) {
TabBuffer *t;
int nx = N_TAB, col = COLS - 2, x, l;
move(0, 0);
for (t = FirstTab, i = 0; t; t = t->nextTab, i++) {
x = col * (i % nx) / nx;
move(i / nx, x);
if (t == CurrentTab)
bold();
addch('[');
l = strlen(t->currentBuffer->buffername);
if (col / nx - 2 > l)
addnstr_sup(" ", (col / nx - 2 - l) / 2);
if (t == CurrentTab)
EFFECT_ACTIVE_START;
addstr(t->currentBuffer->buffername);
if (t == CurrentTab)
EFFECT_ACTIVE_END;
clrtoeol();
x = col * (i % nx + 1) / nx - 1;
move(i / nx, x);
addch(']');
if (t == CurrentTab)
boldend();
clrtoeol();
}
move(0, col);
addstr(" x");
move((nTab - 1) / nx + 1, 0);
for (i = 0; i < COLS; i++)
addch('~');
}
for (i = buf->rootY, l = buf->topLine; i < LASTLINE; i++) {
if (i >= LASTLINE - n || (i - buf->rootY) < -n)
l0 = redrawLine(buf, l, i);
else {
l0 = (l) ? l->next : NULL;
@@ -444,7 +484,7 @@ redrawNLine(Buffer *buf, int n)
#ifdef USE_IMAGE
if (!(activeImage && displayImage && buf->img))
return;
move(buf->cursorY, buf->cursorX);
move(buf->cursorY + buf->rootY, buf->cursorX + buf->rootX);
for (i = 0, l = buf->topLine; i < LASTLINE; i++) {
if (i >= LASTLINE - n || i < -n)
l0 = redrawLineImage(buf, l, i);
@@ -666,7 +706,7 @@ redrawLineImage(Buffer *buf, Line *l, int i)
buf->need_reshape = TRUE;
}
x = (int)((rcol - column + buf->rootX) * pixel_per_char);
y = (int)(i * pixel_per_line);
y = (int)((i + buf->rootY) * pixel_per_line);
sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char);
sy = (int)((l->linenumber - image->y) * pixel_per_line);
if (sx == 0 && x + image->xoffset >= 0)
@@ -1009,7 +1049,7 @@ disp_message_nsec(char *s, int redraw_current, int sec, int purge, int mouse)
}
if (Currentbuf != NULL)
message(s, Currentbuf->cursorX + Currentbuf->rootX,
Currentbuf->cursorY);
Currentbuf->cursorY + Currentbuf->rootY);
else
message(s, LASTLINE, 0);
refresh();
@@ -1065,7 +1105,7 @@ cursorDown(Buffer *buf, int n)
{
if (buf->firstLine == NULL)
return;
if (buf->cursorY < LASTLINE - 1)
if (buf->cursorY + buf->rootY < LASTLINE - 1)
cursorUpDown(buf, 1);
else {
buf->topLine = lineSkip(buf, buf->topLine, n, FALSE);
@@ -1180,9 +1220,12 @@ arrangeCursor(Buffer *buf)
if (buf == NULL || buf->currentLine == NULL)
return;
/* Arrange line */
if (buf->currentLine->linenumber - buf->topLine->linenumber >= LASTLINE ||
buf->currentLine->linenumber < buf->topLine->linenumber) {
if (buf->currentLine->linenumber - buf->topLine->linenumber >= LASTLINE -
buf->rootY || buf->currentLine->linenumber < buf->topLine->linenumber) {
/*
buf->topLine = buf->currentLine;
*/
buf->topLine = lineSkip(buf, buf->currentLine, 0, FALSE);
}
/* Arrange column */
if (buf->currentLine->len == 0)
+10
View File
@@ -6,6 +6,7 @@ BEGIN ʸ
BOOKMARK ブックマークを読み込みます
CENTER_H カーソルのある位置を行の中央に移動します
CENTER_V カーソルのある行を画面の中央に移動します
CLOSE_TAB 現在のタブを閉じます
COMMAND w3mのコマンドを実行します
COOKIE クッキー一覧を表示します
DEFINE_KEY キー入力とコマンドの対応を定義します
@@ -57,6 +58,7 @@ MOVE_RIGHT1
MOVE_UP カーソルを上に移動します(改ページ時には半ページスクロール)
MOVE_UP1 カーソルを上に移動します(改ページ時には1行スクロール)
MSGS エラーメッセージの一覧の表示
NEW_TAB 新しいタブを開きます
NEXT_DOWN カーソルの下側にあるリンクに移動します
NEXT_LEFT カーソルの左側にあるリンクに移動します
NEXT_LEFT_UP カーソルの左側(無ければ前の行以前)にあるリンクに移動します
@@ -65,6 +67,7 @@ NEXT_MARK
NEXT_PAGE 次のページを表示します
NEXT_RIGHT カーソルの右側にあるリンクに移動します
NEXT_RIGHT_DOWN カーソルの右側(無ければ次行以降)にあるリンクに移動します
NEXT_TAB 次のタブに移動します
NEXT_UP カーソルの上側にあるリンクに移動します
NEXT_WORD 次の単語に移動します
NOTHING 何もしません
@@ -78,6 +81,7 @@ PIPE_SHELL
PREV_LINK 前のリンクに移動します
PREV_MARK 一つ前のマークに移動します
PREV_PAGE 前のページを表示します
PREV_TAB 前のタブに移動します
PREV_WORD 前の単語に移動します
PRINT バッファの表示内容をファイルに保存します
QUIT w3mを終了します
@@ -106,6 +110,12 @@ SOURCE HTML
STOP_IMAGE 画像の読込/表示を停止します
SUBMIT フォームにサブミットします
SUSPEND サスペンド
TAB_GOTO URLを指定して新しいタブで開きます
TAB_GOTO_RELATIVE 相対URLを指定して新しいタブで開きます
TAB_LEFT 現在のタブを左に移動します
TAB_LINK リンクが指す先の文書を新しいタブで開きます
TAB_MENU タブ選択メニューを立ち上げます
TAB_RIGHT 現在のタブを右に移動します
UP 画面を1行上にスクロールします
VERSION w3m のバージョンを表示します
VIEW HTMLのソースを表示します
+10
View File
@@ -6,6 +6,7 @@ BEGIN Go to the first line
BOOKMARK Read bookmark
CENTER_H Move to the center line
CENTER_V Move to the center column
CLOSE_TAB Close current tab
COMMAND Execute w3m command(s)
COOKIE View cookie list
DEFINE_KEY Define a binding between a key stroke and a user command
@@ -57,6 +58,7 @@ MOVE_RIGHT1 Move cursor right (1 columns shift at the right edge)
MOVE_UP Move cursor up (a half screen scroll at the top of screen)
MOVE_UP1 Move cursor up (1 line scrol at the top of screen)
MSGS Display error messages
NEW_TAB Open new tab
NEXT_DOWN Move to next downward link
NEXT_LEFT Move to next left link
NEXT_LEFT_UP Move to next left (or upward) link
@@ -65,6 +67,7 @@ NEXT_MARK Move to next word
NEXT_PAGE Move to next page
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_WORD Move to next word
NOTHING Do nothing
@@ -78,6 +81,7 @@ PIPE_SHELL Execute shell command and browse
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_WORD Move to previous word
PRINT Save buffer to file
QUIT Quit w3m
@@ -106,6 +110,12 @@ SOURCE View HTML source
STOP_IMAGE Stop loading and drawing of images
SUBMIT Submit form
SUSPEND Stop loading document
TAB_GOTO Open URL on new tab
TAB_GOTO_RELATIVE Open relative URL on new tab
TAB_LEFT Move current tab left
TAB_LINK Open current link on new tab
TAB_MENU Popup tab selection menu
TAB_RIGHT Move current tab right
UP Scroll up one line
VERSION Display version of w3m
VIEW View HTML source
+5 -5
View File
@@ -1,4 +1,4 @@
/* $Id: etc.c,v 1.30 2002/11/05 16:03:13 ukai Exp $ */
/* $Id: etc.c,v 1.31 2002/11/05 17:10:05 ukai Exp $ */
#include "fm.h"
#include <pwd.h>
#include "myctype.h"
@@ -42,7 +42,7 @@ columnSkip(Buffer *buf, int offset)
{
int i, maxColumn;
int column = buf->currentColumn + offset;
int nlines = LASTLINE + 1;
int nlines = LASTLINE + 1 - buf->rootY;
Line *l;
maxColumn = 0;
@@ -91,8 +91,8 @@ lineSkip(Buffer *buf, Line *line, int offset, int last)
#ifdef NEXTPAGE_TOPLINE
if (!nextpage_topline)
#endif
for (i = (LASTLINE - 1) - (buf->lastLine->linenumber - l->linenumber);
i > 0 && l->prev != NULL; i--, l = l->prev) ;
for (i = (LASTLINE - 1 - buf->rootY) - (buf->lastLine->linenumber
- l->linenumber); i > 0 && l->prev != NULL; i--, l = l->prev) ;
return l;
}
@@ -103,7 +103,7 @@ currentLineSkip(Buffer *buf, Line *line, int offset, int last)
Line *l = line;
if (buf->pagerSource && !(buf->bufferprop & BP_CLOSE)) {
n = line->linenumber + offset + LASTLINE;
n = line->linenumber + offset + LASTLINE - buf->rootY;
if (buf->lastLine->linenumber < n)
getNextPage(buf, n - buf->lastLine->linenumber);
while ((last || (buf->lastLine->linenumber < n)) &&
+5 -3
View File
@@ -1,4 +1,4 @@
/* $Id: file.c,v 1.110 2002/11/05 15:56:13 ukai Exp $ */
/* $Id: file.c,v 1.111 2002/11/05 17:10:05 ukai Exp $ */
#include "fm.h"
#include <sys/types.h>
#include "myctype.h"
@@ -4730,7 +4730,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
{
Anchor *a_href = NULL, *a_img = NULL, *a_form = NULL;
char outc[LINELEN];
char *p, *q, *r, *s, *str;
char *p, *q, *r, *s, *t, *str;
Lineprop outp[LINELEN], mode, effect;
int pos;
int nlines;
@@ -5081,6 +5081,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
MapArea *a;
p = remove_space(p);
p = url_quote_conv(p, buf->document_code);
t = NULL;
parsedtag_get_value(tag, ATTR_TARGET, &t);
q = "";
parsedtag_get_value(tag, ATTR_ALT, &q);
r = NULL;
@@ -5089,7 +5091,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
parsedtag_get_value(tag, ATTR_SHAPE, &r);
parsedtag_get_value(tag, ATTR_COORDS, &s);
#endif
a = newMapArea(p, q, r, s);
a = newMapArea(p, t, q, r, s);
pushValue(buf->maplist->area, (void *)a);
}
break;
+23 -2
View File
@@ -1,4 +1,4 @@
/* $Id: fm.h,v 1.68 2002/11/05 15:56:13 ukai Exp $ */
/* $Id: fm.h,v 1.69 2002/11/05 17:10:05 ukai Exp $ */
/*
* w3m: WWW wo Miru utility
*
@@ -285,6 +285,7 @@ typedef unsigned char Linecolor;
typedef struct _MapArea {
char *url;
char *target;
char *alt;
#ifdef MENU_MAP
#ifdef USE_IMAGE
@@ -401,6 +402,7 @@ typedef struct _Buffer {
short pos;
short visualpos;
short rootX;
short rootY;
short COLS;
InputStream pagerSource;
AnchorList *href;
@@ -441,6 +443,12 @@ typedef struct _Buffer {
Anchor *submit;
} Buffer;
typedef struct _TabBuffer {
struct _TabBuffer *nextTab;
struct _TabBuffer *prevTab;
Buffer *currentBuffer;
Buffer *firstBuffer;
} TabBuffer;
#define COPY_BUFPOSITION(dstbuf, srcbuf) {\
(dstbuf)->topLine = (srcbuf)->topLine; \
@@ -466,7 +474,7 @@ typedef struct _Buffer {
#define FONTSTAT_SIZE 4
#define INIT_BUFFER_WIDTH (COLS-1)
#define INIT_BUFFER_WIDTH (COLS - 1)
typedef struct {
int pos;
@@ -763,8 +771,21 @@ global char *cgi_bin init(NULL);
global char *index_file init(NULL);
global char *CurrentDir;
/*
global Buffer *Currentbuf;
global Buffer *Firstbuf;
*/
global TabBuffer *CurrentTab;
global TabBuffer *FirstTab;
global TabBuffer *LastTab;
global int open_tab_blank init(FALSE);
global int close_tab_back init(FALSE);
global int nTab;
global int TabCols init(10);
#define N_TAB ((COLS - 2 > TabCols * nTab) ? nTab \
: (nTab - 1) / ((nTab * TabCols - 1) / (COLS - 2) + 1) + 1)
#define Currentbuf (CurrentTab->currentBuffer)
#define Firstbuf (CurrentTab->firstBuffer)
global int CurrentKey;
global char *CurrentKeyData;
global char *CurrentCmdData;
+11 -1
View File
@@ -1,4 +1,4 @@
# $Id: funcname.tab,v 1.11 2002/09/05 15:43:21 ukai Exp $
# $Id: funcname.tab,v 1.12 2002/11/05 17:10:05 ukai Exp $
# macro name function name
#----------------------------
@@@ nulcmd
@@ -10,6 +10,7 @@ BEGIN goLineF
BOOKMARK ldBmark
CENTER_H ctrCsrH
CENTER_V ctrCsrV
CLOSE_TAB closeT
COMMAND execCmd
COOKIE cooLst
DEFINE_KEY defKey
@@ -63,6 +64,7 @@ MOVE_RIGHT1 movR1
MOVE_UP movU
MOVE_UP1 movU1
MSGS msgs
NEW_TAB newT
NEXT_DOWN nextD
NEXT_LEFT nextL
NEXT_LEFT_UP nextLU
@@ -71,6 +73,7 @@ NEXT_MARK nextMk
NEXT_PAGE pgFore
NEXT_RIGHT nextR
NEXT_RIGHT_DOWN nextRD
NEXT_TAB nextT
NEXT_UP nextU
NEXT_WORD movRW
NOTHING nulcmd
@@ -85,6 +88,7 @@ PIPE_SHELL pipesh
PREV_LINK prevA
PREV_MARK prevMk
PREV_PAGE pgBack
PREV_TAB prevT
PREV_WORD movLW
PRINT svBuf
QUIT qquitfm
@@ -114,6 +118,12 @@ SOURCE vwSrc
STOP_IMAGE stopI
SUBMIT submitForm
SUSPEND susp
TAB_GOTO tabURL
TAB_GOTO_RELATIVE tabrURL
TAB_LEFT tabL
TAB_LINK tabA
TAB_MENU tabMn
TAB_RIGHT tabR
UP lup1
VERSION dispVer
VIEW vwSrc
+3 -3
View File
@@ -1,4 +1,4 @@
/* $Id: html.c,v 1.14 2002/10/16 18:11:15 ukai Exp $ */
/* $Id: html.c,v 1.15 2002/11/05 17:10:05 ukai Exp $ */
#include "html.h"
/* Define HTML Tag Infomation Table */
@@ -64,8 +64,8 @@ unsigned char ALST_ISINDEX[] = { ATTR_ACTION, ATTR_PROMPT, ATTR_CORE };
unsigned char ALST_MAP[] = { ATTR_NAME, ATTR_CORE };
#define MAXA_MAP MAXA_CORE + 1
unsigned char ALST_AREA[] =
{ ATTR_HREF, ATTR_ALT, ATTR_SHAPE, ATTR_COORDS, ATTR_CORE };
#define MAXA_AREA MAXA_CORE + 4
{ ATTR_HREF, ATTR_TARGET, ATTR_ALT, ATTR_SHAPE, ATTR_COORDS, ATTR_CORE };
#define MAXA_AREA MAXA_CORE + 5
unsigned char ALST_BASE[] = { ATTR_HREF, ATTR_TARGET, ATTR_CORE };
#define MAXA_BASE MAXA_CORE + 2
unsigned char ALST_BODY[] = { ATTR_BACKGROUND, ATTR_CORE };
+2 -2
View File
@@ -1,4 +1,4 @@
/* $Id: image.c,v 1.11 2002/07/29 15:25:37 ukai Exp $ */
/* $Id: image.c,v 1.12 2002/11/05 17:10:05 ukai Exp $ */
#include "fm.h"
#include <sys/types.h>
@@ -358,7 +358,7 @@ showImageProgress(Buffer *buf)
}
if (n) {
message(Sprintf("%d/%d images loaded", l, n)->ptr,
buf->cursorX + buf->rootX, buf->cursorY);
buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
refresh();
}
}
+477 -39
View File
@@ -1,4 +1,4 @@
/* $Id: main.c,v 1.117 2002/11/05 15:56:13 ukai Exp $ */
/* $Id: main.c,v 1.118 2002/11/05 17:10:06 ukai Exp $ */
#define MAINPROGRAM
#include "fm.h"
#include <signal.h>
@@ -90,6 +90,10 @@ void set_buffer_environ(Buffer *);
static void _followForm(int);
static void _goLine(char *);
static void _newT(void);
static void followTab(TabBuffer *tab);
static void moveTab(TabBuffer *t, TabBuffer *t2, int right);
static int check_target = TRUE;
#define PREC_NUM (prec_num ? prec_num : 1)
#define PREC_LIMIT 10000
static int searchKeyNum(void);
@@ -707,8 +711,10 @@ MAIN(int argc, char **argv, char **envp)
sock_init();
#endif
Firstbuf = NULL;
Currentbuf = NULL;
FirstTab = NULL;
LastTab = NULL;
nTab = 0;
CurrentTab = NULL;
CurrentKey = -1;
if (BookmarkFile == NULL)
BookmarkFile = rcFile(BOOKMARK);
@@ -879,8 +885,11 @@ MAIN(int argc, char **argv, char **envp)
else if (newbuf == NO_BUFFER)
continue;
newbuf->search_header = search_header;
if (Currentbuf == NULL)
if (CurrentTab == NULL) {
FirstTab = LastTab = CurrentTab = newTab();
nTab = 1;
Firstbuf = Currentbuf = newbuf;
}
else {
Currentbuf->nextBuffer = newbuf;
Currentbuf = newbuf;
@@ -914,7 +923,7 @@ MAIN(int argc, char **argv, char **envp)
w3m_exit(0);
}
if (!Firstbuf || Firstbuf == NO_BUFFER) {
if (!FirstTab || !Firstbuf || Firstbuf == NO_BUFFER) {
if (newbuf == NO_BUFFER) {
if (fmInitialized)
inputChar("Hit any key to quit w3m:");
@@ -1313,7 +1322,8 @@ nscroll(int n, int mode)
}
else {
tlnum = Currentbuf->topLine->linenumber;
llnum = Currentbuf->topLine->linenumber + LASTLINE - 1;
llnum = Currentbuf->topLine->linenumber + LASTLINE - Currentbuf->rootY
- 1;
#ifdef NEXTPAGE_TOPLINE
if (nextpage_topline)
diff_n = 0;
@@ -1336,10 +1346,11 @@ pgFore(void)
{
#ifdef VI_PREC_NUM
if (vi_prec_num)
nscroll(searchKeyNum() * (LASTLINE - 1), B_NORMAL);
nscroll(searchKeyNum() * (LASTLINE - Currentbuf->rootY - 1), B_NORMAL);
else
#endif
nscroll(prec_num ? searchKeyNum() : searchKeyNum() * (LASTLINE - 1),
nscroll(prec_num ? searchKeyNum() : searchKeyNum()
* (LASTLINE - Currentbuf->rootY - 1),
prec_num ? B_SCROLL : B_NORMAL);
}
@@ -1349,10 +1360,11 @@ pgBack(void)
{
#ifdef VI_PREC_NUM
if (vi_prec_num)
nscroll(-searchKeyNum() * (LASTLINE - 1), B_NORMAL);
nscroll(-searchKeyNum() * (LASTLINE - Currentbuf->rootY - 1), B_NORMAL);
else
#endif
nscroll(-(prec_num ? searchKeyNum() : searchKeyNum() * (LASTLINE - 1)),
nscroll(-(prec_num ? searchKeyNum() : searchKeyNum()
* (LASTLINE - Currentbuf->rootY - 1)),
prec_num ? B_SCROLL : B_NORMAL);
}
@@ -1377,7 +1389,7 @@ ctrCsrV(void)
int offsety;
if (Currentbuf->firstLine == NULL)
return;
offsety = LASTLINE / 2 - Currentbuf->cursorY;
offsety = (LASTLINE - Currentbuf->rootY) / 2 - Currentbuf->cursorY;
if (offsety != 0) {
#if 0
Currentbuf->currentLine = lineSkip(Currentbuf,
@@ -1971,7 +1983,7 @@ _movD(int n)
void
movD(void)
{
_movD((LASTLINE + 1) / 2);
_movD((LASTLINE - Currentbuf->rootY + 1) / 2);
}
void
@@ -1995,7 +2007,7 @@ _movU(int n)
void
movU(void)
{
_movU((LASTLINE + 1) / 2);
_movU((LASTLINE - Currentbuf->rootY + 1) / 2);
}
void
@@ -2285,8 +2297,8 @@ _goLine(char *l)
}
else if (*l == '$') {
Currentbuf->topLine =
lineSkip(Currentbuf, Currentbuf->lastLine, -(LASTLINE + 1) / 2,
TRUE);
lineSkip(Currentbuf, Currentbuf->lastLine,
-(LASTLINE - Currentbuf->rootY + 1) / 2, TRUE);
Currentbuf->currentLine = Currentbuf->lastLine;
}
else
@@ -2441,7 +2453,8 @@ _mark(void)
return;
l = Currentbuf->currentLine;
l->propBuf[Currentbuf->pos] ^= PE_MARK;
redrawLine(Currentbuf, l, l->linenumber - Currentbuf->topLine->linenumber);
redrawLine(Currentbuf, l, l->linenumber - Currentbuf->topLine->linenumber
+ Currentbuf->rootY);
}
/* Go to next mark */
@@ -2766,6 +2779,21 @@ followA(void)
if (map)
url = Sprintf("%s?%d,%d", a->url, x, y)->ptr;
#endif
if (check_target && open_tab_blank && a->target &&
(!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) {
Buffer *buf;
_newT();
buf = Currentbuf;
loadLink(url, a->target, a->referer, NULL);
if (buf != Currentbuf)
delBuffer(buf);
else
deleteTab(CurrentTab);
displayBuffer(Currentbuf, B_NORMAL);
return;
}
loadLink(url, a->target, a->referer, NULL);
displayBuffer(Currentbuf, B_NORMAL);
}
@@ -3123,7 +3151,7 @@ _followForm(int submit)
if (!formChooseOptionByMenu(fi,
Currentbuf->cursorX - Currentbuf->pos +
a->start.pos + Currentbuf->rootX,
Currentbuf->cursorY))
Currentbuf->cursorY + Currentbuf->rootY))
break;
formUpdateBuffer(a, Currentbuf, fi);
if (fi->parent->nitems == 1)
@@ -3241,12 +3269,12 @@ drawAnchorCursor0(Buffer *buf, int hseq, int prevhseq, int tline, int eline,
}
}
if (active)
redrawLineRegion(buf, l, l->linenumber - tline,
redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
an->start.pos, an->end.pos);
}
else if (prevhseq >= 0 && an->hseq == prevhseq) {
if (active)
redrawLineRegion(buf, l, l->linenumber - tline,
redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
an->start.pos, an->end.pos);
}
}
@@ -3271,7 +3299,7 @@ drawAnchorCursor(Buffer *buf)
else
hseq = -1;
tline = buf->topLine->linenumber;
eline = tline + LASTLINE;
eline = tline + LASTLINE - buf->rootY;
prevhseq = buf->hmarklist->prevhseq;
drawAnchorCursor0(buf, hseq, prevhseq, tline, eline, 1);
@@ -3652,7 +3680,12 @@ backBf(void)
Buffer *buf = Currentbuf->linkBuffer[LB_N_FRAME];
if (!checkBackBuffer(Currentbuf)) {
disp_message("Can't back...", TRUE);
if (close_tab_back && nTab >= 1) {
deleteTab(CurrentTab);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
else
disp_message("Can't back...", TRUE);
return;
}
@@ -3938,23 +3971,39 @@ void
follow_map(struct parsed_tagarg *arg)
{
#ifdef MENU_MAP
Anchor *a;
char *url;
int x;
Anchor *an;
MapArea *a;
int x, y;
ParsedURL p_url;
a = retrieveCurrentImg(Currentbuf);
an = retrieveCurrentImg(Currentbuf);
x = Currentbuf->cursorX + Currentbuf->rootX;
url = follow_map_menu(Currentbuf, arg, a, x, Currentbuf->cursorY);
if (url == NULL || *url == '\0')
y = Currentbuf->cursorY + Currentbuf->rootY;
a = follow_map_menu(Currentbuf, arg, an, x, y);
if (a == NULL || a->url == NULL || *(a->url) == '\0')
return;
if (*url == '#') {
gotoLabel(url + 1);
if (*(a->url) == '#') {
gotoLabel(a->url + 1);
return;
}
parseURL2(url, &p_url, baseURL(Currentbuf));
parseURL2(a->url, &p_url, baseURL(Currentbuf));
pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
cmd_loadURL(url, baseURL(Currentbuf),
if (check_target && open_tab_blank && a->target &&
(!strcasecmp(a->target, "_new") || !strcasecmp(a->target, "_blank"))) {
Buffer *buf;
_newT();
buf = Currentbuf;
cmd_loadURL(a->url, baseURL(Currentbuf),
parsedURL2Str(&Currentbuf->currentURL)->ptr);
if (buf != Currentbuf)
delBuffer(buf);
else
deleteTab(CurrentTab);
displayBuffer(Currentbuf, B_NORMAL);
return;
}
cmd_loadURL(a->url, baseURL(Currentbuf),
parsedURL2Str(&Currentbuf->currentURL)->ptr);
#else
Buffer *buf;
@@ -4629,15 +4678,76 @@ stopI(void)
#ifdef USE_MOUSE
static TabBuffer *
posTab(int x, int y)
{
TabBuffer *t;
int i, n, col = COLS - 2;
if (col <= 0)
return NULL;
n = x * N_TAB / col + y * N_TAB;
for (t = FirstTab, i = 0; t && i < n; t = t->nextTab, i++)
;
return t;
}
static void
process_mouse(int btn, int x, int y)
{
int delta_x, delta_y, i;
static int press_btn = MOUSE_BTN_RESET, press_x, press_y;
TabBuffer *t;
int ny = 0;
if (nTab > 1)
ny = (nTab - 1) / N_TAB + 1;
if (btn == MOUSE_BTN_UP) {
switch (press_btn) {
case MOUSE_BTN1_DOWN:
if (nTab > 1 && y < ny) {
if (press_y == y && press_x == x) {
if (y == 0 && x >= COLS - 2) {
deleteTab(CurrentTab);
displayBuffer(Currentbuf, B_NORMAL);
}
t = posTab(x, y);
if (t)
CurrentTab = t;
displayBuffer(Currentbuf, B_FORCE_REDRAW);
return;
}
else if (press_y < ny) {
moveTab(posTab(press_x, press_y), posTab(x, y),
(press_y == y) ? (press_x < x) : (press_y < y));
return;
}
else if (press_x >= Currentbuf->rootX) {
Buffer *buf = Currentbuf;
int cx = Currentbuf->cursorX, cy = Currentbuf->cursorY;
t = posTab(x, y);
if (t == NULL)
return;
cursorXY(Currentbuf, press_x - Currentbuf->rootX,
press_y - Currentbuf->rootY);
if (Currentbuf->cursorY == press_y - Currentbuf->rootY &&
(Currentbuf->cursorX == press_x - Currentbuf->rootX
#ifdef JP_CHARSET
|| (Currentbuf->currentLine != NULL &&
(Currentbuf->currentLine->propBuf[Currentbuf->pos]
& PC_KANJI1) && Currentbuf->cursorX == press_x
- Currentbuf->rootX - 1)
#endif
)) {
onA();
followTab(t);
}
if (buf == Currentbuf)
cursorXY(Currentbuf, cx, cy);
}
return;
}
if (press_x != x || press_y != y) {
delta_x = x - press_x;
delta_y = y - press_y;
@@ -4685,7 +4795,7 @@ process_mouse(int btn, int x, int y)
}
return;
}
if (y == Currentbuf->cursorY &&
if (y == Currentbuf->cursorY + Currentbuf->rootY &&
(x == Currentbuf->cursorX + Currentbuf->rootX
#ifdef JP_CHARSET
|| (Currentbuf->currentLine != NULL &&
@@ -4698,18 +4808,30 @@ process_mouse(int btn, int x, int y)
return;
}
if (x >= Currentbuf->rootX)
cursorXY(Currentbuf, x - Currentbuf->rootX, y);
cursorXY(Currentbuf, x - Currentbuf->rootX,
y - Currentbuf->rootY);
displayBuffer(Currentbuf, B_NORMAL);
}
break;
case MOUSE_BTN2_DOWN:
if (nTab > 1 && y < ny) {
if (press_y == y && press_x == x) {
t = posTab(x, y);
if (t) {
deleteTab(t);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
}
return;
}
backBf();
break;
case MOUSE_BTN3_DOWN:
#ifdef USE_MENU
if (x >= Currentbuf->rootX)
cursorXY(Currentbuf, x - Currentbuf->rootX, y);
if (x >= Currentbuf->rootX && y > ny)
cursorXY(Currentbuf, x - Currentbuf->rootX,
y - Currentbuf->rootY);
onA();
mainMenu(x, y);
#endif /* USE_MENU */
@@ -5023,10 +5145,13 @@ deleteFiles()
{
Buffer *buf;
char *f;
while (Firstbuf && Firstbuf != NO_BUFFER) {
buf = Firstbuf->nextBuffer;
discardBuffer(Firstbuf);
Firstbuf = buf;
for (CurrentTab = FirstTab; CurrentTab; CurrentTab = CurrentTab->nextTab) {
while (Firstbuf && Firstbuf != NO_BUFFER) {
buf = Firstbuf->nextBuffer;
discardBuffer(Firstbuf);
Firstbuf = buf;
}
}
while ((f = popText(fileToDelete)) != NULL)
unlink(f);
@@ -5257,3 +5382,316 @@ defKey(void)
setKeymap(allocStr(data, -1), -1, TRUE);
displayBuffer(Currentbuf, B_NORMAL);
}
TabBuffer *
newTab(void)
{
TabBuffer *n;
n = New(TabBuffer);
if (n == NULL)
return NULL;
n->nextTab = NULL;
n->currentBuffer = NULL;
n->firstBuffer = NULL;
return n;
}
static void
_newT(void)
{
TabBuffer *tag;
Buffer *buf;
int i;
tag = newTab();
if (! tag)
return;
buf = newBuffer(Currentbuf->width);
copyBuffer(buf, Currentbuf);
buf->nextBuffer = NULL;
for (i = 0; i < MAX_LB; i++)
buf->linkBuffer[i] = NULL;
(*buf->clone)++;
tag->firstBuffer = tag->currentBuffer = buf;
tag->nextTab = CurrentTab->nextTab;
tag->prevTab = CurrentTab;
if (CurrentTab->nextTab)
CurrentTab->nextTab->prevTab = tag;
else
LastTab = tag;
CurrentTab->nextTab = tag;
CurrentTab = tag;
nTab++;
}
void
newT(void)
{
_newT();
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
TabBuffer *
numTab(int n)
{
TabBuffer *tab;
int i;
if (n == 0)
return CurrentTab;
if (n == 1)
return FirstTab;
if (nTab <= 1)
return NULL;
for (tab = FirstTab, i = 1; tab && i < n; tab = tab->nextTab, i++)
;
return tab;
}
TabBuffer *
deleteTab(TabBuffer *tab)
{
Buffer *buf, *next;
if (nTab <= 1)
return FirstTab;
if (tab->prevTab) {
if (tab->nextTab)
tab->nextTab->prevTab = tab->prevTab;
else
LastTab = tab->prevTab;
tab->prevTab->nextTab = tab->nextTab;
if (tab == CurrentTab)
CurrentTab = tab->prevTab;
}
else { /* tab == FirstTab */
tab->nextTab->prevTab = NULL;
FirstTab = tab->nextTab;
if (tab == CurrentTab)
CurrentTab = tab->nextTab;
}
nTab--;
buf = tab->firstBuffer;
while (buf && buf != NO_BUFFER) {
next = buf->nextBuffer;
discardBuffer(buf);
buf = next;
}
return FirstTab;
}
void
closeT(void)
{
TabBuffer *tab;
if (nTab <= 1)
return;
if (prec_num)
tab = numTab(PREC_NUM);
else
tab = CurrentTab;
if (tab)
deleteTab(tab);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
nextT(void)
{
int i;
if (nTab <= 1)
return;
for (i = 0; i < PREC_NUM; i++) {
if (CurrentTab->nextTab)
CurrentTab = CurrentTab->nextTab;
else
CurrentTab = FirstTab;
}
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
prevT(void)
{
int i;
if (nTab <= 1)
return;
for (i = 0; i < PREC_NUM; i++) {
if (CurrentTab->prevTab)
CurrentTab = CurrentTab->prevTab;
else
CurrentTab = LastTab;
}
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
followTab(TabBuffer *tab)
{
Buffer *buf;
Anchor *a;
#ifdef USE_IMAGE
a = retrieveCurrentImg(Currentbuf);
if (! (a && a->image && a->image->map))
#endif
a = retrieveCurrentAnchor(Currentbuf);
if (a == NULL)
return;
if (tab == CurrentTab) {
check_target = FALSE;
followA();
check_target = TRUE;
return;
}
_newT();
buf = Currentbuf;
check_target = FALSE;
followA();
check_target = TRUE;
if (tab == NULL) {
if (buf != Currentbuf)
delBuffer(buf);
else
deleteTab(CurrentTab);
}
else if (buf != Currentbuf) {
/* buf <- p <- ... <- Currentbuf = c */
Buffer *c, *p;
c = Currentbuf;
p = prevBuffer(c, buf);
p->nextBuffer = NULL;
Firstbuf = buf;
deleteTab(CurrentTab);
CurrentTab = tab;
for (buf = p; buf; buf = p) {
p = prevBuffer(c, buf);
pushBuffer(buf);
}
}
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
tabA(void)
{
followTab(prec_num ? numTab(PREC_NUM) : NULL);
}
static void
tabURL0(TabBuffer *tab, char *prompt, int relative)
{
Buffer *buf;
if (tab == CurrentTab) {
goURL0(prompt, relative);
return;
}
_newT();
buf = Currentbuf;
goURL0(prompt, relative);
if (tab == NULL) {
if (buf != Currentbuf)
delBuffer(buf);
else
deleteTab(CurrentTab);
}
else if (buf != Currentbuf) {
/* buf <- p <- ... <- Currentbuf = c */
Buffer *c, *p;
c = Currentbuf;
p = prevBuffer(c, buf);
p->nextBuffer = NULL;
Firstbuf = buf;
deleteTab(CurrentTab);
CurrentTab = tab;
for (buf = p; buf; buf = p) {
p = prevBuffer(c, buf);
pushBuffer(buf);
}
}
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
tabURL(void)
{
tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
"Goto URL on new tab: ", FALSE);
}
void
tabrURL(void)
{
tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
"Goto relative URL on new tab: ", TRUE);
}
void
moveTab(TabBuffer *t, TabBuffer *t2, int right)
{
if (!t || !t2 || t == t2)
return;
if (t->prevTab) {
if (t->nextTab)
t->nextTab->prevTab = t->prevTab;
else
LastTab = t->prevTab;
t->prevTab->nextTab = t->nextTab;
}
else {
t->nextTab->prevTab = NULL;
FirstTab = t->nextTab;
}
if (right) {
t->nextTab = t2->nextTab;
t->prevTab = t2;
if (t2->nextTab)
t2->nextTab->prevTab = t;
else
LastTab = t;
t2->nextTab = t;
}
else {
t->prevTab = t2->prevTab;
t->nextTab = t2;
if (t2->prevTab)
t2->prevTab->nextTab = t;
else
FirstTab = t;
t2->prevTab = t;
}
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
void
tabR(void)
{
TabBuffer *tab;
int i;
for (tab = CurrentTab, i = 0; tab && i < PREC_NUM; tab = tab->nextTab, i++)
;
moveTab(CurrentTab, tab ? tab : LastTab, TRUE);
}
void
tabL(void)
{
TabBuffer *tab;
int i;
for (tab = CurrentTab, i = 0; tab && i < PREC_NUM; tab = tab->prevTab, i++)
;
moveTab(CurrentTab, tab ? tab : FirstTab, FALSE);
}
+5 -4
View File
@@ -1,4 +1,4 @@
/* $Id: map.c,v 1.8 2002/03/15 18:48:55 ukai Exp $ */
/* $Id: map.c,v 1.9 2002/11/05 17:10:07 ukai Exp $ */
/*
* client-side image maps
*/
@@ -59,7 +59,7 @@ inMapArea(MapArea * a, int x, int y)
}
#endif
char *
MapArea *
follow_map_menu(Buffer *buf, struct parsed_tagarg *arg, Anchor *a_img, int x,
int y)
{
@@ -122,7 +122,7 @@ follow_map_menu(Buffer *buf, struct parsed_tagarg *arg, Anchor *a_img, int x,
if (selected >= 0) {
for (i = 0, al = ml->area->first; al != NULL; i++, al = al->next) {
if (al->ptr && i == selected)
return ((MapArea *) al->ptr)->url;
return (MapArea *) al->ptr;
}
}
return NULL;
@@ -193,7 +193,7 @@ getMapXY(Buffer *buf, Anchor *a, int *x, int *y)
#endif
MapArea *
newMapArea(char *url, char *alt, char *shape, char *coords)
newMapArea(char *url, char *target, char *alt, char *shape, char *coords)
{
MapArea *a = New(MapArea);
#ifdef MENU_MAP
@@ -204,6 +204,7 @@ newMapArea(char *url, char *alt, char *shape, char *coords)
#endif
a->url = url;
a->target = target;
a->alt = alt ? alt : "";
#ifdef MENU_MAP
#ifdef USE_IMAGE
+156 -6
View File
@@ -1,4 +1,4 @@
/* $Id: menu.c,v 1.15 2002/03/19 16:06:52 ukai Exp $ */
/* $Id: menu.c,v 1.16 2002/11/05 17:10:07 ukai Exp $ */
/*
* w3m menu.c
*/
@@ -276,6 +276,16 @@ static int smDelBuf(char c);
/* --- SelectMenu (END) --- */
/* --- SelTabMenu --- */
static Menu SelTabMenu;
static int SelTabV = 0;
static void initSelTabMenu(void);
static void smChTab(void);
static int smDelTab(char c);
/* --- SelTabMenu (END) --- */
/* --- MainMenu --- */
static Menu MainMenu;
@@ -284,12 +294,14 @@ static MenuItem MainMenuItem[] = {
/* type label variabel value func popup keys data */
{MENU_FUNC, "戻る (b)", NULL, 0, backBf, NULL, "b", NULL},
{MENU_POPUP, "バッファ選択 (s)", NULL, 0, NULL, &SelectMenu, "s", NULL},
{MENU_POPUP, "¥¿¥ÖÁªÂò (t)", NULL, 0, NULL, &SelTabMenu, "tT", NULL},
{MENU_FUNC, "ソースを表示 (v)", NULL, 0, vwSrc, NULL, "vV", NULL},
{MENU_FUNC, "ソースを編集 (e)", NULL, 0, editBf, NULL, "eE", NULL},
{MENU_FUNC, "ソースを保存 (S)", NULL, 0, svSrc, NULL, "S", NULL},
{MENU_FUNC, "再読み込み (r)", NULL, 0, reload, NULL, "rR", NULL},
{MENU_NOP, "────────", NULL, 0, nulcmd, NULL, "", NULL},
{MENU_FUNC, "リンクを表示 (a)", NULL, 0, followA, NULL, "a", NULL},
{MENU_FUNC, "¿·¥¿¥Ö¤Çɽ¼¨ (n)", NULL, 0, tabA, NULL, "nN", NULL},
{MENU_FUNC, "リンクを保存 (A)", NULL, 0, svA, NULL, "A", NULL},
{MENU_FUNC, "画像を表示 (i)", NULL, 0, followI, NULL, "i", NULL},
{MENU_FUNC, "画像を保存 (I)", NULL, 0, svI, NULL, "I", NULL},
@@ -307,12 +319,14 @@ static MenuItem MainMenuItem[] = {
/* type label variable value func popup keys data */
{MENU_FUNC, " Back (b) ", NULL, 0, backBf, NULL, "b", NULL},
{MENU_POPUP, " Select Buffer(s) ", NULL, 0, NULL, &SelectMenu, "s", NULL},
{MENU_POPUP, " Select Tab (t) ", NULL, 0, NULL, &SelTabMenu, "tT", NULL},
{MENU_FUNC, " View Source (v) ", NULL, 0, vwSrc, NULL, "vV", NULL},
{MENU_FUNC, " Edit Source (e) ", NULL, 0, editBf, NULL, "eE", NULL},
{MENU_FUNC, " Save Source (S) ", NULL, 0, svSrc, NULL, "S", NULL},
{MENU_FUNC, " Reload (r) ", NULL, 0, reload, NULL, "rR", NULL},
{MENU_NOP, " ---------------- ", NULL, 0, nulcmd, NULL, "", NULL},
{MENU_FUNC, " Go Link (a) ", NULL, 0, followA, NULL, "a", NULL},
{MENU_FUNC, " on New Tab (n) ", NULL, 0, tabA, NULL, "nN", NULL},
{MENU_FUNC, " Save Link (A) ", NULL, 0, svA, NULL, "A", NULL},
{MENU_FUNC, " View Image (i) ", NULL, 0, followI, NULL, "i", NULL},
{MENU_FUNC, " Save Image (I) ", NULL, 0, svI, NULL, "I", NULL},
@@ -1209,9 +1223,10 @@ void
popupMenu(int x, int y, Menu *menu)
{
initSelectMenu();
initSelTabMenu();
menu->cursorX = Currentbuf->cursorX + Currentbuf->rootX;
menu->cursorY = Currentbuf->cursorY;
menu->cursorY = Currentbuf->cursorY + Currentbuf->rootY;
menu->x = x + FRAME_WIDTH + 1;
menu->y = y + 2;
@@ -1238,8 +1253,8 @@ mainMn(void)
return;
menu = w3mMenuList[n].menu;
}
popupMenu(Currentbuf->cursorX + Currentbuf->rootX, Currentbuf->cursorY,
menu);
popupMenu(Currentbuf->cursorX + Currentbuf->rootX,
Currentbuf->cursorY + Currentbuf->rootY, menu);
}
/* --- MainMenu (END) --- */
@@ -1249,7 +1264,8 @@ mainMn(void)
void
selMn(void)
{
popupMenu(Currentbuf->cursorX, Currentbuf->cursorY, &SelectMenu);
popupMenu(Currentbuf->cursorX + Currentbuf->rootX,
Currentbuf->cursorY + Currentbuf->rootY, &SelectMenu);
}
static void
@@ -1312,7 +1328,7 @@ initSelectMenu(void)
new_option_menu(&SelectMenu, label, &SelectV, smChBuf);
SelectMenu.initial = SelectV;
SelectMenu.cursorX = Currentbuf->cursorX + Currentbuf->rootX;
SelectMenu.cursorY = Currentbuf->cursorY;
SelectMenu.cursorY = Currentbuf->cursorY + Currentbuf->rootY;
SelectMenu.keymap['D'] = smDelBuf;
SelectMenu.item[nitem].type = MENU_NOP;
}
@@ -1380,6 +1396,140 @@ smDelBuf(char c)
/* --- SelectMenu (END) --- */
/* --- SelTabMenu --- */
void
tabMn(void)
{
popupMenu(Currentbuf->cursorX + Currentbuf->rootX,
Currentbuf->cursorY + Currentbuf->rootY, &SelTabMenu);
}
static void
initSelTabMenu(void)
{
int i, nitem, len = 0, l;
TabBuffer *tab;
Buffer *buf;
Str str;
char **label;
static char *comment = " SPC for select / D for delete tab ";
SelTabV = -1;
for (i = 0, tab = LastTab; tab != NULL; i++, tab = tab->prevTab) {
if (tab == CurrentTab)
SelTabV = i;
}
nitem = i;
label = New_N(char *, nitem + 2);
for (i = 0, tab = LastTab; i < nitem; i++, tab = tab->prevTab) {
buf = tab->currentBuffer;
str = Sprintf("<%s>", buf->buffername);
if (buf->filename != NULL) {
switch (buf->currentURL.scheme) {
case SCM_LOCAL:
case SCM_LOCAL_CGI:
if (strcmp(buf->currentURL.file, "-")) {
Strcat_char(str, ' ');
Strcat_charp(str,
conv_from_system(buf->currentURL.real_file));
}
break;
/* case SCM_UNKNOWN: */
case SCM_MISSING:
break;
default:
Strcat_char(str, ' ');
Strcat(str, parsedURL2Str(&buf->currentURL));
break;
}
}
label[i] = str->ptr;
if (len < str->length)
len = str->length;
}
l = strlen(comment);
if (len < l + 4)
len = l + 4;
if (len > COLS - 2 * FRAME_WIDTH)
len = COLS - 2 * FRAME_WIDTH;
len = (len > 1) ? ((len - l + 1) / 2) : 0;
str = Strnew();
for (i = 0; i < len; i++)
Strcat_char(str, '-');
Strcat_charp(str, comment);
for (i = 0; i < len; i++)
Strcat_char(str, '-');
label[nitem] = str->ptr;
label[nitem + 1] = NULL;
new_option_menu(&SelTabMenu, label, &SelTabV, smChTab);
SelTabMenu.initial = SelTabV;
SelTabMenu.cursorX = Currentbuf->cursorX + Currentbuf->rootX;
SelTabMenu.cursorY = Currentbuf->cursorY + Currentbuf->rootY;
SelTabMenu.keymap['D'] = smDelTab;
SelTabMenu.item[nitem].type = MENU_NOP;
}
static void
smChTab(void)
{
int i;
TabBuffer *tab;
Buffer *buf;
if (SelTabV < 0 || SelTabV >= SelTabMenu.nitem)
return;
for (i = 0, tab = LastTab; i < SelTabV && tab != NULL;
i++, tab = tab->prevTab) ;
CurrentTab = tab;
for (tab = LastTab; tab != NULL; tab = tab->prevTab) {
if (tab == CurrentTab)
continue;
buf = tab->currentBuffer;
#ifdef USE_IMAGE
deleteImage(buf);
#endif
if (clear_buffer)
tmpClearBuffer(buf);
}
}
static int
smDelTab(char c)
{
int i, x, y, mselect;
TabBuffer *tab;
if (CurrentMenu->select < 0 || CurrentMenu->select >= SelTabMenu.nitem)
return (MENU_NOTHING);
for (i = 0, tab = LastTab; i < CurrentMenu->select && tab != NULL;
i++, tab = tab->prevTab) ;
deleteTab(tab);
x = CurrentMenu->x;
y = CurrentMenu->y;
mselect = CurrentMenu->select;
initSelTabMenu();
CurrentMenu->x = x;
CurrentMenu->y = y;
geom_menu(CurrentMenu, x, y, 0);
CurrentMenu->select = (mselect <= CurrentMenu->nitem - 2) ? mselect
: (CurrentMenu->nitem - 2);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
draw_all_menu(CurrentMenu);
select_menu(CurrentMenu, CurrentMenu->select);
return (MENU_NOTHING);
}
/* --- SelectMenu (END) --- */
/* --- OptionMenu --- */
void
+18 -4
View File
@@ -1,4 +1,4 @@
/* $Id: proto.h,v 1.50 2002/11/05 16:03:14 ukai Exp $ */
/* $Id: proto.h,v 1.51 2002/11/05 17:10:07 ukai Exp $ */
/*
* This file was automatically generated by version 1.7 of cextract.
* Manual editing not recommended.
@@ -119,6 +119,16 @@ extern void setAlarmEvent(int sec, short status, int cmd, void *data);
#endif
extern void reinit(void);
extern void defKey(void);
extern void newT(void);
extern void closeT(void);
extern void nextT(void);
extern void prevT(void);
extern void tabA(void);
extern void tabURL(void);
extern void tabrURL(void);
extern void tabR(void);
extern void tabL(void);
extern int currentLn(Buffer *buf);
extern void tmpClearBuffer(Buffer *buf);
extern char *filename_extension(char *patch, int is_url);
@@ -209,6 +219,8 @@ extern char *inputAnswer(char *prompt);
extern int matchattr(char *p, char *attr, int len, Str *value);
extern void readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu);
extern char *checkHeader(Buffer *buf, char *field);
extern TabBuffer *newTab(void);
extern TabBuffer *deleteTab(TabBuffer *tab);
extern Buffer *newBuffer(int width);
extern Buffer *nullBuffer(void);
extern void clearBuffer(Buffer *buf);
@@ -340,15 +352,16 @@ extern void form_write_from_file(FILE * f, char *boundary, char *name,
char *filename, char *file);
extern void follow_map(struct parsed_tagarg *arg);
#ifdef MENU_MAP
extern char *follow_map_menu(Buffer *buf, struct parsed_tagarg *arg,
Anchor *a_img, int x, int y);
extern MapArea *follow_map_menu(Buffer *buf, struct parsed_tagarg *arg,
Anchor *a_img, int x, int y);
#else
extern Buffer *follow_map_panel(Buffer *buf, struct parsed_tagarg *arg);
#endif
#ifdef USE_IMAGE
extern int getMapXY(Buffer *buf, Anchor *a, int *x, int *y);
#endif
extern MapArea *newMapArea(char *url, char *alt, char *shape, char *coords);
extern MapArea *newMapArea(char *url, char *target, char *alt, char *shape,
char *coords);
extern Buffer *page_info_panel(Buffer *buf);
extern struct frame_body *newFrame(struct parsed_tag *tag, Buffer *buf);
extern struct frameset *newFrameSet(struct parsed_tag *tag);
@@ -624,6 +637,7 @@ extern void popupMenu(int x, int y, Menu *menu);
extern void mainMenu(int x, int y);
extern void mainMn(void);
extern void selMn(void);
extern void tabMn(void);
extern void optionMenu(int x, int y, char **label, int *variable, int initial,
void (*func) ());
extern void initMenu(void);
+9 -1
View File
@@ -1,4 +1,4 @@
/* $Id: rc.c,v 1.55 2002/11/05 15:56:14 ukai Exp $ */
/* $Id: rc.c,v 1.56 2002/11/05 17:10:07 ukai Exp $ */
/*
* Initialization file etc.
*/
@@ -65,6 +65,7 @@ static char *config_file = NULL;
#define CMT_FRAME "フレームの自動表示"
#define CMT_ARGV_IS_URL "scheme のない引数も URL とみなす"
#define CMT_TSELF "targetが未指定の場合に_selfを使用する"
#define CMT_OPEN_TAB_BLANK "targetが_blankか_newの場合は新しいタブで開く"
#define CMT_DISPLINK "リンク先の自動表示"
#define CMT_DISPLINEINFO "現在の行番号の表示"
#define CMT_DISP_IMAGE "インライン画像を表示"
@@ -102,6 +103,7 @@ static char *config_file = NULL;
#define CMT_PDROOT "/~user で表されるディレクトリ"
#define CMT_CGIBIN "/cgi-bin で表されるディレクトリ"
#define CMT_CONFIRM_QQ "q での終了時に確認する"
#define CMT_CLOSE_TAB_BACK "戻る時にバッファが最後ならタブを閉じる"
#ifdef USE_MARK
#define CMT_USE_MARK "マーク機能を有効にする"
#endif
@@ -207,6 +209,7 @@ static char *config_file = NULL;
#define CMT_FRAME "Render frames automatically"
#define CMT_ARGV_IS_URL "Treat argument without scheme as URL"
#define CMT_TSELF "Use _self as default target"
#define CMT_OPEN_TAB_BLANK "Open link on new tab if target is _blank or _new"
#define CMT_DISPLINK "Display link URL automatically"
#define CMT_DISPLINEINFO "Display current line number"
#define CMT_DISP_IMAGE "Display inline images"
@@ -244,6 +247,7 @@ static char *config_file = NULL;
#define CMT_PDROOT "Directory corresponding to /~user"
#define CMT_CGIBIN "Directory corresponding to /cgi-bin"
#define CMT_CONFIRM_QQ "Confirm when quitting with q"
#define CMT_CLOSE_TAB_BACK "Close tab if buffer is last when back"
#ifdef USE_MARK
#define CMT_USE_MARK "Enable mark operations"
#endif
@@ -463,6 +467,8 @@ struct param_ptr params1[] = {
#endif /* JP_CHARSET */
{"frame", P_CHARINT, PI_ONOFF, (void *)&RenderFrame, CMT_FRAME, NULL},
{"target_self", P_CHARINT, PI_ONOFF, (void *)&TargetSelf, CMT_TSELF, NULL},
{"open_tab_blank", P_INT, PI_ONOFF, (void *)&open_tab_blank,
CMT_OPEN_TAB_BLANK, NULL},
{"display_link", P_INT, PI_ONOFF, (void *)&displayLink, CMT_DISPLINK,
NULL},
{"display_lineinfo", P_INT, PI_ONOFF, (void *)&displayLineInfo,
@@ -551,6 +557,8 @@ struct param_ptr params3[] = {
#endif /* USE_HISTORY */
{"confirm_qq", P_INT, PI_ONOFF, (void *)&confirm_on_quit, CMT_CONFIRM_QQ,
NULL},
{"close_tab_back", P_INT, PI_ONOFF, (void *)&close_tab_back,
CMT_CLOSE_TAB_BACK, NULL},
#ifdef USE_MARK
{"mark", P_INT, PI_ONOFF, (void *)&use_mark, CMT_USE_MARK, NULL},
#endif