X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=d73aaa1e67ef2ce9b506e0317df073e2bcb9dd81;hb=5938fa9d32379815757a83076069584f29a8d276;hp=509531533f2f37769958bceb246d256e480d3129;hpb=911ba5674bc4eb53a2ed548856a50032c39ca7f2;p=st.git diff --git a/st.c b/st.c index 5095315..d73aaa1 100644 --- a/st.c +++ b/st.c @@ -681,6 +681,10 @@ void selsnap(int mode, int *x, int *y, int direction) { switch(mode) { case SNAP_WORD: + /* + * Snap around if the word wraps around at the end or + * beginning of a line. + */ for(;;) { if(direction < 0 && *x <= 0) { if(*y > 0 && term.line[*y - 1][term.col-1].mode @@ -708,6 +712,11 @@ selsnap(int mode, int *x, int *y, int direction) { } break; case SNAP_LINE: + /* + * Snap around if the the previous line or the current one + * has set ATTR_WRAP at its end. Then the whole next or + * previous line will be selected. + */ *x = (direction < 0) ? 0 : term.col - 1; if(direction < 0 && *y > 0) { for(; *y > 0; *y += direction) { @@ -3496,8 +3505,15 @@ run(void) { xev--; if(!FD_ISSET(cmdfd, &rfd) && !FD_ISSET(xfd, &rfd)) { if(blinkset) { - drawtimeout.tv_usec = 1000 * \ - blinktimeout; + if(TIMEDIFF(now, lastblink) \ + > blinktimeout) { + drawtimeout.tv_usec = 1; + } else { + drawtimeout.tv_usec = (1000 * \ + (blinktimeout - \ + TIMEDIFF(now, + lastblink))); + } } else { tv = NULL; }