sandy

text editor
git clone git://git.suckless.org/sandy
Log | Files | Refs | README | LICENSE

commit 1dc2cbdc25a06e5312792fa9e990cf687edd7f58
parent ba62c425f691d2aa3bf86c94633f7f7fe7bbb819
Author: Rafael Garcia <rafael.garcia.gallego@gmail.com>
Date:   Sat,  4 Jun 2011 13:54:21 +0200

Some tiny changes.
Diffstat:
sandy.c | 24+++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/sandy.c b/sandy.c @@ -108,6 +108,9 @@ enum { DefBG, CurBG, SelBG, /* Warning: BGs MUST have a matching FG */ LastB /* arg->i to use in f_extsel() */ enum { ExtDefault, ExtWord, ExtLines, ExtAll, }; +/* To use in lastaction */ +enum { LastNone, LastDelete, LastInsert, LastPipe, }; + /* Environment variables index */ enum { EnvFind, EnvPipe, EnvLine, EnvOffset, EnvFile, EnvSyntax, EnvFifo, EnvLast, }; @@ -165,6 +168,7 @@ static int textattrs[LastFG][LastBG]; /* Text attributes for each color pa static int savestep=0; /* Index to determine the need to save in undo/redo action */ static int fifofd; /* Command fifo file descriptor */ static long statusflags=S_Running; /* Status flags, very important, OR'd (see enums above) */ +static int lastaction=LastNone; /* The last action we took (see enums above) */ static int cols, lines; /* Ncurses: to use instead of COLS and LINES, wise */ static mmask_t defmmask=ALL_MOUSE_EVENTS; /* Ncurses: mouse event mask */ @@ -256,13 +260,13 @@ static Filepos m_tosel(Filepos); /* F_* FUNCTIONS Can be linked to an action or keybinding. Always return void and take const Arg* */ -void /* Make cursor line the one in the middle of the screen if possible */ +void /* Make cursor line the one in the middle of the screen if possible, refresh screen */ f_center(const Arg *arg) { int i=LINES2/2; scrline=fcur.l; while((i -= VLINES(scrline)) > 0 && scrline->prev) scrline=scrline->prev; - statusflags|=S_DirtyScr; + i_resize(); } void /* Delete text as per arg->m. Your responsibility: call only if t_rw() */ @@ -484,29 +488,29 @@ f_toggle(const Arg *arg) { void /* Undo last action if arg->i >=0, redo otherwise. Your responsibility: call only if t_undo() / t_redo() */ f_undo(const Arg *arg) { Filepos start, end; - const bool r=(arg->i < 0); + const bool isredo=(arg->i < 0); Undo *u; int n; statusflags&=~S_Selecting; - u=(r?redos:undos); + u=(isredo?redos:undos); fsel.o=u->starto, fsel.l=i_lineat(u->startl); fcur=fsel; while(u) { start.o=u->starto, start.l=i_lineat(u->startl); end.o=u->endo, end.l=i_lineat(u->endl); - if(r ^ (u->flags & UndoIns)) { + if(isredo ^ (u->flags & UndoIns)) { i_sortpos(&start, &end); i_deltext(start, end); fcur=fsel=start; } else fcur=i_addtext(u->str, fcur); - if(r) + if(isredo) redos=u->prev, u->prev=undos, undos=u; else undos=u->prev, u->prev=redos, redos=u; - if (!(u->flags & (r?RedoMore:UndoMore))) break; - u=(r?redos:undos); + if (!(u->flags & (isredo?RedoMore:UndoMore))) break; + u=(isredo?redos:undos); } for(n=0, u=undos; u; u=u->prev, n++); @@ -530,7 +534,7 @@ void /* Add undo information to the undo ring */ i_addundo(bool ins, Filepos start, Filepos end, char *s) { Undo *u; - if(redos) i_killundos(&redos); + if(redos) i_killundos(&redos); /* Once you make a change, the old redos go away */ if ((u=(Undo*)calloc(1, sizeof(Undo))) == NULL) i_die("Can't malloc.\n"); u->flags = (ins?UndoIns:0); @@ -1046,7 +1050,6 @@ i_resize(void) { result = ioctl(fd, TIOCGWINSZ, &ws); close(fd); if(result<0) return; - if(cols==ws.ws_col && lines==ws.ws_row) return; cols=ws.ws_col; lines=ws.ws_row; endwin(); @@ -1166,7 +1169,6 @@ i_sigwinch(int unused) { void /* Process SIGCONT to return after STOP */ i_sigcont(int unused) { - cols = 0; i_resize(); }