diff options
| author | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-12-10 15:51:14 +0000 | 
|---|---|---|
| committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-12-10 15:51:14 +0000 | 
| commit | 4eb0a6fe3d36a162666f7ca5e6275a07f3f6affb (patch) | |
| tree | c21477e45fd1b81032d792a2ab93a98a9e5f352f | |
| parent | [w3m-dev 03552] Re: link list (diff) | |
| download | w3m-4eb0a6fe3d36a162666f7ca5e6275a07f3f6affb.tar.gz w3m-4eb0a6fe3d36a162666f7ca5e6275a07f3f6affb.zip | |
[w3m-dev 03553] Undo/Redo
* fm.h (Buffer): add undo
	(BufferPos): added
* funcname.tab (REDO): added
		(UNDO): added
* main.c (save_buffer_position): added
	(main): save_buffer_position
	(resetPos): added
	(undoPos): added
	(redoPos): added
* proto.h (undoPos): added
	(redoPos): added
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
Diffstat (limited to '')
| -rw-r--r-- | ChangeLog | 17 | ||||
| -rw-r--r-- | fm.h | 12 | ||||
| -rw-r--r-- | funcname.tab | 4 | ||||
| -rw-r--r-- | main.c | 73 | ||||
| -rw-r--r-- | proto.h | 4 | 
5 files changed, 105 insertions, 5 deletions
| @@ -1,5 +1,20 @@  2002-12-11  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +	* [w3m-dev 03553] Undo/Redo +	* fm.h (Buffer): add undo +		(BufferPos): added +	* funcname.tab (REDO): added +			(UNDO): added +	* main.c (save_buffer_position): added +		(main): save_buffer_position +		(resetPos): added +		(undoPos): added +		(redoPos): added +	* proto.h (undoPos): added +		(redoPos): added + +2002-12-11  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +  	* [w3m-dev 03552] Re: link list  	* menu.c (accesskey_menu): check hseq  		(list_menu): check hseq @@ -5687,4 +5702,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.608 2002/12/10 15:41:31 ukai Exp $ +$Id: ChangeLog,v 1.609 2002/12/10 15:51:14 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.94 2002/12/06 16:50:13 ukai Exp $ */ +/* $Id: fm.h,v 1.95 2002/12/10 15:51:14 ukai Exp $ */  /*    * w3m: WWW wo Miru utility   *  @@ -460,8 +460,18 @@ typedef struct _Buffer {      char image_flag;      char need_reshape;      Anchor *submit; +    struct _BufferPos *undo;  } Buffer; +typedef struct _BufferPos { +    long top_linenumber; +    long cur_linenumber; +    short currentColumn; +    short pos; +    struct _BufferPos *next; +    struct _BufferPos *prev; +} BufferPos; +  typedef struct _TabBuffer {      struct _TabBuffer *nextTab;      struct _TabBuffer *prevTab; diff --git a/funcname.tab b/funcname.tab index a33766f..c238ce1 100644 --- a/funcname.tab +++ b/funcname.tab @@ -1,4 +1,4 @@ -# $Id: funcname.tab,v 1.18 2002/12/09 15:51:08 ukai Exp $ +# $Id: funcname.tab,v 1.19 2002/12/10 15:51:14 ukai Exp $  # macro name	function name  #----------------------------  @@@		nulcmd @@ -105,6 +105,7 @@ PREV_WORD	movLW  PRINT		svBuf  QUIT		qquitfm  READ_SHELL	readsh +REDO		redoPos  REDRAW		rdrwSc  REG_MARK	reMark  REINIT		reinit @@ -137,6 +138,7 @@ TAB_LINK	tabA  TAB_MENU	tabMn  TAB_MOUSE	tabMs  TAB_RIGHT	tabR +UNDO		undoPos  UP		lup1  VERSION dispVer  VIEW		vwSrc @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.164 2002/12/10 15:36:11 ukai Exp $ */ +/* $Id: main.c,v 1.165 2002/12/10 15:51:15 ukai Exp $ */  #define MAINPROGRAM  #include "fm.h"  #include <signal.h> @@ -98,6 +98,7 @@ int on_target = 1;  static int add_download_list = FALSE;  void set_buffer_environ(Buffer *); +static void save_buffer_position(Buffer *buf);  static void _followForm(int);  static void _goLine(char *); @@ -1066,6 +1067,7 @@ main(int argc, char **argv, char **envp)  	    }  	    else {  		set_buffer_environ(Currentbuf); +		save_buffer_position(Currentbuf);  		keyPressEventProc((int)c);  		prec_num = 0;  		if (add_download_list) { @@ -6367,3 +6369,72 @@ ldDL(void)      }  #endif  } + +static void +save_buffer_position(Buffer *buf) +{ +    BufferPos *b = buf->undo; + +    if (!buf->firstLine) +	return; +    if (b && b->top_linenumber == TOP_LINENUMBER(buf) && +	     b->cur_linenumber == CUR_LINENUMBER(buf) && +	     b->currentColumn == buf->currentColumn && +	     b->pos == buf->pos) +	return; +    b = New(BufferPos); +    b->top_linenumber = TOP_LINENUMBER(buf); +    b->cur_linenumber = CUR_LINENUMBER(buf); +    b->currentColumn = buf->currentColumn; +    b->pos = buf->pos; +    b->next = NULL; +    b->prev = buf->undo; +    if (buf->undo) +	buf->undo->next = b; +    buf->undo = b; +} + +static void +resetPos(BufferPos *b) +{ +    Buffer buf; +    Line top, cur; + +    top.linenumber = b->top_linenumber; +    cur.linenumber = b->cur_linenumber; +    buf.topLine = ⊤ +    buf.currentLine = &cur; +    buf.pos = b->pos; +    buf.currentColumn = b->currentColumn; +    restorePosition(Currentbuf, &buf); +    Currentbuf->undo = b; +    displayBuffer(Currentbuf, B_FORCE_REDRAW); +} + +void +undoPos(void) +{ +    BufferPos *b = Currentbuf->undo; +    int i; + +    if (!Currentbuf->firstLine) +	return; +    if (!b || !b->prev) +	return; +    for (i = 0; i < PREC_NUM && b->prev; i++, b = b->prev) ; +    resetPos(b); +} + +void +redoPos(void) +{ +    BufferPos *b = Currentbuf->undo; +    int i; + +    if (!Currentbuf->firstLine) +	return; +    if (!b || !b->next) +	return; +    for (i = 0; i < PREC_NUM && b->next; i++, b = b->next) ; +    resetPos(b); +} @@ -1,4 +1,4 @@ -/* $Id: proto.h,v 1.67 2002/12/09 15:51:09 ukai Exp $ */ +/* $Id: proto.h,v 1.68 2002/12/10 15:51:15 ukai Exp $ */  /*    *   This file was automatically generated by version 1.7 of cextract.   *   Manual editing not recommended. @@ -146,6 +146,8 @@ extern Anchor *list_menu(Buffer *buf);  #define listMn nulcmd  #define movlistMn nulcmd  #endif +extern void undoPos(void); +extern void redoPos(void);  extern int currentLn(Buffer *buf);  extern void tmpClearBuffer(Buffer *buf); | 
