summaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authorMark Edgar <medgar123@gmail.com>2013-08-26 00:10:47 +0200
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2013-09-04 18:33:02 +0200
commit4245ba0d12a330b3e54c6498e88024d90956ae34 (patch)
tree843d42fca2260a2e2426715a15c9928f85ce6f93 /st.c
parentf3d438b1015a031bc543bb2d65c81cc2329787d4 (diff)
Correctly initialize altscreen when defaultbg is not 0.
The alternate screen is not properly initialized when st starts. To see this, set defaultbg in config.h to anything other than 0 (for example, swap defaultfg and defaultbg), and run: ./st -e sh -c 'tput smcup; read' You should see that the top-left 80x24 rectangle is black (or whatever colorname[0] is), while the rest of the screen (if any) has the desired colorname[defaultbg] color. The attached patch fixes this by initializing term.c.attr in tnew() before calling tresize(). It also removes the unnecessary xcalloc() calls, which misled me on this bug hunt since it is really tclearregion() which initializes term.lines and term.alt in tresize().
Diffstat (limited to 'st.c')
-rw-r--r--st.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/st.c b/st.c
index c751aa1..0fa0c86 100644
--- a/st.c
+++ b/st.c
@@ -420,7 +420,6 @@ static int isfullutf8(char *, int);
static ssize_t xwrite(int, char *, size_t);
static void *xmalloc(size_t);
static void *xrealloc(void *, size_t);
-static void *xcalloc(size_t, size_t);
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
@@ -509,16 +508,6 @@ xrealloc(void *p, size_t len) {
return p;
}
-void *
-xcalloc(size_t nmemb, size_t size) {
- void *p = calloc(nmemb, size);
-
- if(!p)
- die("Out of memory\n");
-
- return p;
-}
-
int
utf8decode(char *s, long *u) {
uchar c;
@@ -1370,7 +1359,7 @@ treset(void) {
void
tnew(int col, int row) {
- memset(&term, 0, sizeof(Term));
+ term = (Term){ .c = { .attr = { .fg = defaultfg, .bg = defaultbg } } };
tresize(col, row);
term.numlock = 1;
@@ -2536,8 +2525,8 @@ tresize(int col, int row) {
/* allocate any new rows */
for(/* i == minrow */; i < row; i++) {
term.dirty[i] = 1;
- term.line[i] = xcalloc(col, sizeof(Glyph));
- term.alt [i] = xcalloc(col, sizeof(Glyph));
+ term.line[i] = xmalloc(col * sizeof(Glyph));
+ term.alt[i] = xmalloc(col * sizeof(Glyph));
}
if(col > term.col) {
bp = term.tabs + term.col;