#define LEN(a) (sizeof(a) / sizeof(a)[0])
#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
+#define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
#define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177')
#define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f))
#define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c))
static void xsetpointermotion(int);
static void xseturgency(int);
static void xsetsel(char *, Time);
-static void xtermclear(int, int, int, int);
static void xunloadfont(Font *);
static void xunloadfonts(void);
static void xresize(int, int);
if (openpty(&m, &s, NULL, NULL, &w) < 0)
die("openpty failed: %s\n", strerror(errno));
- ttyresize();
-
switch (pid = fork()) {
case -1:
die("fork failed\n");
return 0;
}
-void
-xtermclear(int col1, int row1, int col2, int row2)
-{
- XftDrawRect(xw.draw,
- &dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defaultbg],
- borderpx + col1 * xw.cw,
- borderpx + row1 * xw.ch,
- (col2-col1+1) * xw.cw,
- (row2-row1+1) * xw.ch);
-}
-
/*
* Absolute coordinates.
*/
{
FcPattern *match;
FcResult result;
+ XGlyphInfo extents;
match = FcFontMatch(NULL, pattern, &result);
if (!match)
return 1;
}
+ XftTextExtentsUtf8(xw.dpy, f->match,
+ (const FcChar8 *) ascii_printable,
+ LEN(ascii_printable), &extents);
+
f->set = NULL;
f->pattern = FcPatternDuplicate(pattern);
f->rbearing = f->match->max_advance_width;
f->height = f->ascent + f->descent;
- f->width = f->lbearing + f->rbearing;
+ f->width = DIVCEIL(extents.xOff, LEN(ascii_printable));
return 0;
}
xunloadfonts();
xloadfonts(usedfont, arg->f);
cresize(0, 0);
+ ttyresize();
redraw();
xhints();
}
if (!term.dirty[y])
continue;
- xtermclear(0, y, term.col, y);
term.dirty[y] = 0;
specs = term.specbuf;
tresize(col, row);
xresize(col, row);
- ttyresize();
}
void
return;
cresize(e->xconfigure.width, e->xconfigure.height);
+ ttyresize();
}
void
}
} while (ev.type != MapNotify);
- ttynew();
cresize(w, h);
+ ttynew();
+ ttyresize();
clock_gettime(CLOCK_MONOTONIC, &last);
lastblink = last;
void
usage(void)
{
- die("usage: %s "
- "[-aiv] [-c class] [-f font] [-g geometry] [-n name] [-o file]\n "
- " [-T title] [-t title] [-w windowid] [[-e] command [args ...]\n "
- " %s [-aiv] [-c class] [-f font] [-g geometry] [-n name] [-o file]\n "
- " [-o file] [-T title] [-t title] [-w windowid] -l line"
- " [stty_args ...]\n", argv0, argv0);
+ die("usage: %s [-aiv] [-c class] [-f font] [-g geometry]"
+ " [-n name] [-o file]\n"
+ " [-T title] [-t title] [-w windowid]"
+ " [[-e] command [args ...]]\n"
+ " %s [-aiv] [-c class] [-f font] [-g geometry]"
+ " [-n name] [-o file]\n"
+ " [-T title] [-t title] [-w windowid] -l line"
+ " [stty_args ...]\n", argv0, argv0);
}
int