Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Select to the end of row if end of line is reached.
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
5095315
..
e2e6c57
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-679,8
+679,14
@@
selected(int x, int y) {
void
selsnap(int mode, int *x, int *y, int direction) {
void
selsnap(int mode, int *x, int *y, int direction) {
+ int i;
+
switch(mode) {
case SNAP_WORD:
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
for(;;) {
if(direction < 0 && *x <= 0) {
if(*y > 0 && term.line[*y - 1][term.col-1].mode
@@
-708,6
+714,11
@@
selsnap(int mode, int *x, int *y, int direction) {
}
break;
case SNAP_LINE:
}
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) {
*x = (direction < 0) ? 0 : term.col - 1;
if(direction < 0 && *y > 0) {
for(; *y > 0; *y += direction) {
@@
-726,6
+737,16
@@
selsnap(int mode, int *x, int *y, int direction) {
}
break;
default:
}
break;
default:
+ /*
+ * Select the whole line when the end of line is reached.
+ */
+ if(direction > 0) {
+ i = term.col;
+ while(--i > 0 && term.line[*y][i].c[0] == ' ')
+ /* nothing */;
+ if(i > 0 && i < *x)
+ *x = term.col - 1;
+ }
break;
}
}
break;
}
}
@@
-3496,8
+3517,15
@@
run(void) {
xev--;
if(!FD_ISSET(cmdfd, &rfd) && !FD_ISSET(xfd, &rfd)) {
if(blinkset) {
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;
}
} else {
tv = NULL;
}