#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xft/Xft.h>
+#include <X11/XKBlib.h>
#include <fontconfig/fontconfig.h>
#include <wchar.h>
static void numlock(const Arg *);
static void selpaste(const Arg *);
static void xzoom(const Arg *);
+static void xzoomabs(const Arg *);
+static void xzoomreset(const Arg *);
static void printsel(const Arg *);
static void printscreen(const Arg *) ;
static void toggleprinter(const Arg *);
static char *usedfont = NULL;
static double usedfontsize = 0;
+static double defaultfontsize = 0;
static uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
if(!(xw.state & WIN_FOCUSED))
xseturgency(1);
if (bellvolume)
- XBell(xw.dpy, bellvolume);
+ XkbBell(xw.dpy, xw.win, bellvolume, (Atom)NULL);
}
break;
case '\033': /* ESC */
term.esc &= ~(ESC_CSI|ESC_ALTCHARSET|ESC_TEST);
term.esc |= ESC_START;
return;
- case '\016': /* SO */
- term.charset = 0;
- return;
- case '\017': /* SI */
- term.charset = 1;
+ case '\016': /* SO (LS1 -- Locking shift 1) */
+ case '\017': /* SI (LS0 -- Locking shift 0) */
+ term.charset = 1 - (ascii - '\016');
return;
case '\032': /* SUB */
tsetchar(question, &term.c.attr, term.c.x, term.c.y);
case 'k': /* old title set compatibility */
tstrsequence(ascii);
return 0;
- case '(': /* set primary charset G0 */
- case ')': /* set secondary charset G1 */
- case '*': /* set tertiary charset G2 */
- case '+': /* set quaternary charset G3 */
+ case 'n': /* LS2 -- Locking shift 2 */
+ case 'o': /* LS3 -- Locking shift 3 */
+ term.charset = 2 + (ascii - 'n');
+ break;
+ case '(': /* GZD4 -- set primary charset G0 */
+ case ')': /* G1D4 -- set secondary charset G1 */
+ case '*': /* G2D4 -- set tertiary charset G2 */
+ case '+': /* G3D4 -- set quaternary charset G3 */
term.icharset = ascii - '(';
term.esc |= ESC_ALTCHARSET;
return 0;
FcPatternAddDouble(pattern, FC_PIXEL_SIZE, 12);
usedfontsize = 12;
}
+ defaultfontsize = usedfontsize;
}
FcConfigSubstitute(0, pattern, FcMatchPattern);
FcPatternGetDouble(dc.font.match->pattern,
FC_PIXEL_SIZE, 0, &fontval);
usedfontsize = fontval;
+ if(fontsize == 0)
+ defaultfontsize = fontval;
}
/* Setting character width and height. */
void
xzoom(const Arg *arg) {
+ Arg larg;
+
+ larg.i = usedfontsize + arg->i;
+ xzoomabs(&larg);
+}
+
+void
+xzoomabs(const Arg *arg) {
xunloadfonts();
- xloadfonts(usedfont, usedfontsize + arg->i);
+ xloadfonts(usedfont, arg->i);
cresize(0, 0);
redraw(0);
xhints();
}
+void
+xzoomreset(const Arg *arg) {
+ Arg larg;
+
+ if(defaultfontsize > 0) {
+ larg.i = defaultfontsize;
+ xzoomabs(&larg);
+ }
+}
+
void
xinit(void) {
XGCValues gcvalues;