sandy

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

commit e30efa5b51e928bd4c4e841942bd1292c04fb758
parent 9f866a0318605e4a46efbec767ba77436058461b
Author: Rafael Garcia <rafael.garcia.gallego@gmail.com>
Date:   Sun,  5 Jun 2011 20:18:24 +0200

Fix m_(next|prev)line issue reported by cls, it now determines position in the next/previous line with scren size rather than bit size. Vline still pending.
Diffstat:
config.mk | 8++++----
sandy.c | 18++++++++++++++----
2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/config.mk b/config.mk @@ -13,10 +13,10 @@ LIBS = -L/usr/lib -lc -lncurses # flags CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} -LDFLAGS = -s ${LIBS} -#CFLAGS = -ggdb -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS} -#LDFLAGS = ${LIBS} +#CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} +#LDFLAGS = -s ${LIBS} +CFLAGS = -ggdb -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS} +LDFLAGS = ${LIBS} # Solaris #CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" diff --git a/sandy.c b/sandy.c @@ -1565,9 +1565,14 @@ m_prevword(Filepos pos) { Filepos /* Advance one line, or to eol if at last line */ m_nextline(Filepos pos) { + int ivchar, ichar; + + for(ivchar=ichar=0; ichar < pos.o;ichar++) + ivchar+=VLEN(pos.l->c[ichar], (ivchar%(cols-1))); + if(pos.l->next){ - pos.l=pos.l->next; - if(pos.o>pos.l->len) pos.o=pos.l->len; + for(pos.l=pos.l->next, pos.o=ichar=0; ichar<ivchar && pos.o < pos.l->len; pos.o++) + ichar+=VLEN(pos.l->c[pos.o], ichar); FIXNEXT(pos); } else pos.o=pos.l->len; return pos; @@ -1575,9 +1580,14 @@ m_nextline(Filepos pos) { Filepos /* Backup one line, or to bol if at first line */ m_prevline(Filepos pos) { + int ivchar, ichar; + + for(ivchar=ichar=0; ichar < pos.o;ichar++) + ivchar+=VLEN(pos.l->c[ichar], (ivchar%(cols-1))); + if(pos.l->prev){ - pos.l=pos.l->prev; - if(pos.o>pos.l->len) pos.o=pos.l->len; + for(pos.l=pos.l->prev, pos.o=ichar=0; ichar<ivchar && pos.o < pos.l->len; pos.o++) + ichar+=VLEN(pos.l->c[pos.o], ichar); FIXNEXT(pos); } else pos.o=0; return pos;