Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Fix crash due to wide characters
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
ad52280
..
6a68c3c
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-947,6
+947,8
@@
getsel(void) {
lastx = (sel.ne.y == y) ? sel.ne.x : term.col-1;
}
last = &term.line[y][MIN(lastx, linelen-1)];
lastx = (sel.ne.y == y) ? sel.ne.x : term.col-1;
}
last = &term.line[y][MIN(lastx, linelen-1)];
+ while(last >= gp && last->c[0] == ' ')
+ --last;
for( ; gp <= last; ++gp) {
if(gp->mode & ATTR_WDUMMY)
for( ; gp <= last; ++gp) {
if(gp->mode & ATTR_WDUMMY)
@@
-1158,7
+1160,10
@@
execsh(void) {
die("who are you?\n");
}
die("who are you?\n");
}
- sh = (pw->pw_shell[0]) ? pw->pw_shell : shell;
+ if (!(sh = getenv("SHELL"))) {
+ sh = (pw->pw_shell[0]) ? pw->pw_shell : shell;
+ }
+
if(opt_cmd)
prog = opt_cmd[0];
else if(utmp)
if(opt_cmd)
prog = opt_cmd[0];
else if(utmp)
@@
-1187,7
+1192,7
@@
execsh(void) {
signal(SIGALRM, SIG_DFL);
execvp(prog, args);
signal(SIGALRM, SIG_DFL);
execvp(prog, args);
- exit(EXIT_FAILURE);
+
_
exit(EXIT_FAILURE);
}
void
}
void
@@
-2668,13
+2673,16
@@
tputc(char *c, int len) {
if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) {
gp->mode |= ATTR_WRAP;
tnewline(1);
if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) {
gp->mode |= ATTR_WRAP;
tnewline(1);
+ gp = &term.line[term.c.y][term.c.x];
}
if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col)
memmove(gp+1, gp, (term.col - term.c.x - 1) * sizeof(Glyph));
}
if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col)
memmove(gp+1, gp, (term.col - term.c.x - 1) * sizeof(Glyph));
- if(term.c.x+width > term.col)
+ if(term.c.x+width > term.col)
{
tnewline(1);
tnewline(1);
+ gp = &term.line[term.c.y][term.c.x];
+ }
tsetchar(c, &term.c.attr, term.c.x, term.c.y);
tsetchar(c, &term.c.attr, term.c.x, term.c.y);
@@
-3917,6
+3925,9
@@
run(void) {
TIMEDIFF(now,
lastblink)));
}
TIMEDIFF(now,
lastblink)));
}
+ drawtimeout.tv_sec = \
+ drawtimeout.tv_nsec / 1E9;
+ drawtimeout.tv_nsec %= (long)1E9;
} else {
tv = NULL;
}
} else {
tv = NULL;
}