#include <X11/Xft/Xft.h>
#include <X11/XKBlib.h>
+static char *argv0;
#include "arg.h"
#define Glyph Glyph_
#define Font Font_
-#include "win.h"
#include "st.h"
+#include "win.h"
/* XEMBED messages */
#define XEMBED_FOCUS_IN 4
static void xclear(int, int, int, int);
static void xdrawcursor(void);
static int xgeommasktogravity(int);
+static void xinit(void);
static int xloadfont(Font *, FcPattern *);
-static void xsetsel(char *, Time);
+static void xloadfonts(char *, double);
static void xunloadfont(Font *);
+static void xunloadfonts(void);
+static void xsetenv(void);
+static void xseturgency(int);
static void expose(XEvent *);
static void visibility(XEvent *);
static void getbuttoninfo(XEvent *);
static void mousereport(XEvent *);
+static void run(void);
+static void usage(void);
+
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
[ClientMessage] = cmessage,
static Fontcache frc[16];
static int frclen = 0;
+void
+zoom(const Arg *arg)
+{
+ Arg larg;
+
+ larg.f = usedfontsize + arg->f;
+ zoomabs(&larg);
+}
+
+void
+zoomabs(const Arg *arg)
+{
+ xunloadfonts();
+ xloadfonts(usedfont, arg->f);
+ cresize(0, 0);
+ ttyresize();
+ redraw();
+ xhints();
+}
+
+void
+zoomreset(const Arg *arg)
+{
+ Arg larg;
+
+ if (defaultfontsize > 0) {
+ larg.f = defaultfontsize;
+ zoomabs(&larg);
+ }
+}
+
void
getbuttoninfo(XEvent *e)
{
frc[frclen].font = XftFontOpenPattern(xw.dpy,
fontpattern);
+ if (!frc[frclen].font)
+ die("XftFontOpenPattern failed seeking fallback font: %s\n",
+ strerror(errno));
frc[frclen].flags = frcflags;
frc[frclen].unicodep = rune;
}
}
- if (base.mode & ATTR_REVERSE) {
- temp = fg;
- fg = bg;
- bg = temp;
- }
-
if ((base.mode & ATTR_BOLD_FAINT) == ATTR_FAINT) {
colfg.red = fg->color.red / 2;
colfg.green = fg->color.green / 2;
colfg.blue = fg->color.blue / 2;
+ colfg.alpha = fg->color.alpha;
XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colfg, &revfg);
fg = &revfg;
}
+
+ if (base.mode & ATTR_REVERSE) {
+ temp = fg;
+ fg = bg;
+ bg = temp;
+ }
+
if (base.mode & ATTR_BLINK && term.mode & MODE_BLINK)
fg = bg;
xdrawglyph(og, oldx, oldy);
g.u = term.line[term.c.y][term.c.x].u;
+ g.mode |= term.line[term.c.y][term.c.x].mode &
+ (ATTR_BOLD | ATTR_ITALIC | ATTR_UNDERLINE | ATTR_STRUCK);
/*
* Select the right color for the right mode.
}
void
-xbell(int vol)
-{
- XkbBell(xw.dpy, xw.win, vol, (Atom)NULL);
-}
-
-unsigned long
-xwinid(void)
+xbell(void)
{
- return xw.win;
+ if (!(win.state & WIN_FOCUSED))
+ xseturgency(1);
+ if (bellvolume)
+ XkbBell(xw.dpy, xw.win, bellvolume, (Atom)NULL);
}
void
}
}
+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"
+ " [-T title] [-t title] [-w windowid] -l line"
+ " [stty_args ...]\n", argv0, argv0);
+}
+
int
main(int argc, char *argv[])
{
XSetLocaleModifiers("");
tnew(MAX(cols, 1), MAX(rows, 1));
xinit();
+ xsetenv();
selinit();
run();