Merge remote-tracking branch 'suckless/master'
This commit is contained in:
		
						commit
						16ca810efe
					
				
					 9 changed files with 68 additions and 45 deletions
				
			
		
							
								
								
									
										3
									
								
								FAQ
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								FAQ
									
										
									
									
									
								
							|  | @ -248,3 +248,6 @@ fonts: | ||||||
| 
 | 
 | ||||||
| Please don't bother reporting this bug to st, but notify the upstream Xft | Please don't bother reporting this bug to st, but notify the upstream Xft | ||||||
| developers about fixing this bug. | developers about fixing this bug. | ||||||
|  | 
 | ||||||
|  | As of 2022-09-05 this now seems to be finally fixed in libXft 2.3.5: | ||||||
|  | https://gitlab.freedesktop.org/xorg/lib/libxft/-/blob/libXft-2.3.5/NEWS | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -7,13 +7,7 @@ include config.mk | ||||||
| SRC = st.c x.c | SRC = st.c x.c | ||||||
| OBJ = $(SRC:.c=.o) | OBJ = $(SRC:.c=.o) | ||||||
| 
 | 
 | ||||||
| all: options st | all: st | ||||||
| 
 |  | ||||||
| options: |  | ||||||
| 	@echo st build options: |  | ||||||
| 	@echo "CFLAGS  = $(STCFLAGS)" |  | ||||||
| 	@echo "LDFLAGS = $(STLDFLAGS)" |  | ||||||
| 	@echo "CC      = $(CC)" |  | ||||||
| 
 | 
 | ||||||
| config.h: | config.h: | ||||||
| 	cp config.def.h config.h | 	cp config.def.h config.h | ||||||
|  | @ -57,4 +51,4 @@ uninstall: | ||||||
| 	rm -f $(DESTDIR)$(APPPREFIX)/st.desktop | 	rm -f $(DESTDIR)$(APPPREFIX)/st.desktop | ||||||
| 	rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 | 	rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 | ||||||
| 
 | 
 | ||||||
| .PHONY: all options clean dist install uninstall | .PHONY: all clean dist install uninstall | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								README
									
										
									
									
									
								
							|  | @ -38,5 +38,5 @@ Applied Patches | ||||||
| https://st.suckless.org/patches/scrollback/ | https://st.suckless.org/patches/scrollback/ | ||||||
| https://st.suckless.org/patches/alpha/ | https://st.suckless.org/patches/alpha/ | ||||||
| https://st.suckless.org/patches/w3m/ | https://st.suckless.org/patches/w3m/ | ||||||
| http://st.suckless.org/patches/desktopentry/ | https://st.suckless.org/patches/desktopentry/ | ||||||
| https://st.suckless.org/patches/glyph_wide_support/ | https://st.suckless.org/patches/glyph_wide_support/ | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								config.def.h
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								config.def.h
									
										
									
									
									
								
							|  | @ -53,7 +53,7 @@ int allowwindowops = 0; | ||||||
|  * near minlatency, but it waits longer for slow updates to avoid partial draw. |  * near minlatency, but it waits longer for slow updates to avoid partial draw. | ||||||
|  * low minlatency will tear/flicker more, as it can "detect" idle too early. |  * low minlatency will tear/flicker more, as it can "detect" idle too early. | ||||||
|  */ |  */ | ||||||
| static double minlatency = 8; | static double minlatency = 2; | ||||||
| static double maxlatency = 33; | static double maxlatency = 33; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -93,9 +93,6 @@ char *termname = "st-256color"; | ||||||
|  */ |  */ | ||||||
| unsigned int tabspaces = 8; | unsigned int tabspaces = 8; | ||||||
| 
 | 
 | ||||||
| /* bg opacity */ |  | ||||||
| float alpha = 0.8; |  | ||||||
| 
 |  | ||||||
| /* Terminal colors (16 first used in escape sequence) */ | /* Terminal colors (16 first used in escape sequence) */ | ||||||
| static const char *colorname[] = { | static const char *colorname[] = { | ||||||
| 	/* 8 normal colors */ | 	/* 8 normal colors */ | ||||||
|  | @ -125,7 +122,6 @@ static const char *colorname[] = { | ||||||
| 	"#555555", | 	"#555555", | ||||||
| 	"gray90", /* default foreground colour */ | 	"gray90", /* default foreground colour */ | ||||||
| 	"black", /* default background colour */ | 	"black", /* default background colour */ | ||||||
| 	"black", |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -136,7 +132,7 @@ static const char *colorname[] = { | ||||||
| unsigned int defaultfg = 258; | unsigned int defaultfg = 258; | ||||||
| unsigned int defaultbg = 259; | unsigned int defaultbg = 259; | ||||||
| unsigned int defaultcs = 256; | unsigned int defaultcs = 256; | ||||||
| unsigned int defaultrcs = 257; | static unsigned int defaultrcs = 257; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Default shape of cursor |  * Default shape of cursor | ||||||
|  | @ -187,12 +183,6 @@ static MouseShortcut mshortcuts[] = { | ||||||
| 	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} }, | 	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| MouseKey mkeys[] = { |  | ||||||
| 	/* button               mask            function        argument */ |  | ||||||
| 	{ Button4,              XK_NO_MOD,      kscrollup,      {.i =  1} }, |  | ||||||
| 	{ Button5,              XK_NO_MOD,      kscrolldown,    {.i =  1} }, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /* Internal keyboard shortcuts. */ | /* Internal keyboard shortcuts. */ | ||||||
| #define MODKEY Mod1Mask | #define MODKEY Mod1Mask | ||||||
| #define TERMMOD (ControlMask|ShiftMask) | #define TERMMOD (ControlMask|ShiftMask) | ||||||
|  | @ -211,8 +201,6 @@ static Shortcut shortcuts[] = { | ||||||
| 	{ TERMMOD,              XK_Y,           selpaste,       {.i =  0} }, | 	{ TERMMOD,              XK_Y,           selpaste,       {.i =  0} }, | ||||||
| 	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} }, | 	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} }, | ||||||
| 	{ TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} }, | 	{ TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} }, | ||||||
| 	{ ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} }, |  | ||||||
| 	{ ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} }, |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								config.h
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								config.h
									
										
									
									
									
								
							|  | @ -53,7 +53,7 @@ int allowwindowops = 0; | ||||||
|  * near minlatency, but it waits longer for slow updates to avoid partial draw. |  * near minlatency, but it waits longer for slow updates to avoid partial draw. | ||||||
|  * low minlatency will tear/flicker more, as it can "detect" idle too early. |  * low minlatency will tear/flicker more, as it can "detect" idle too early. | ||||||
|  */ |  */ | ||||||
| static double minlatency = 8; | static double minlatency = 2; | ||||||
| static double maxlatency = 33; | static double maxlatency = 33; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -71,7 +71,7 @@ static unsigned int cursorthickness = 2; | ||||||
|  * bell volume. It must be a value between -100 and 100. Use 0 for disabling |  * bell volume. It must be a value between -100 and 100. Use 0 for disabling | ||||||
|  * it |  * it | ||||||
|  */ |  */ | ||||||
| static int bellvolume = 100; | static int bellvolume = 0; | ||||||
| 
 | 
 | ||||||
| /* default TERM value */ | /* default TERM value */ | ||||||
| char *termname = "st-256color"; | char *termname = "st-256color"; | ||||||
|  | @ -145,7 +145,7 @@ unsigned int defaultrcs = 257; | ||||||
|  * 6: Bar ("|") |  * 6: Bar ("|") | ||||||
|  * 7: Snowman ("☃") |  * 7: Snowman ("☃") | ||||||
|  */ |  */ | ||||||
| static unsigned int cursorshape = 6; | static unsigned int cursorshape = 2; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Default columns and rows numbers |  * Default columns and rows numbers | ||||||
|  | @ -211,8 +211,6 @@ static Shortcut shortcuts[] = { | ||||||
| 	{ TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} }, | 	{ TERMMOD,              XK_Num_Lock,    numlock,        {.i =  0} }, | ||||||
| 	{ XK_ANY_MOD,		XK_Page_Up,     kscrollup,      {.i = -1} }, | 	{ XK_ANY_MOD,		XK_Page_Up,     kscrollup,      {.i = -1} }, | ||||||
| 	{ XK_ANY_MOD,		XK_Page_Down,   kscrolldown,    {.i = -1} }, | 	{ XK_ANY_MOD,		XK_Page_Down,   kscrolldown,    {.i = -1} }, | ||||||
| 	{ TERMMOD,              XK_J,           kscrolldown,	{.i =  5} }, |  | ||||||
| 	{ TERMMOD,              XK_K,           kscrollup,	{.i =  5} }, |  | ||||||
| 	{ ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} }, | 	{ ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} }, | ||||||
| 	{ ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} }, | 	{ ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} }, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| # st version
 | # st version
 | ||||||
| VERSION = 0.8.5 | VERSION = 0.9.2 | ||||||
| 
 | 
 | ||||||
| # Customize below to fit your system
 | # Customize below to fit your system
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										36
									
								
								st.c
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								st.c
									
										
									
									
									
								
							|  | @ -1164,7 +1164,7 @@ tscrollup(int orig, int n, int copyhist) | ||||||
| void | void | ||||||
| selscroll(int orig, int n) | selscroll(int orig, int n) | ||||||
| { | { | ||||||
| 	if (sel.ob.x == -1) | 	if (sel.ob.x == -1 || sel.alt != IS_SET(MODE_ALTSCREEN)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if (BETWEEN(sel.nb.y, orig, term.bot) != BETWEEN(sel.ne.y, orig, term.bot)) { | 	if (BETWEEN(sel.nb.y, orig, term.bot) != BETWEEN(sel.ne.y, orig, term.bot)) { | ||||||
|  | @ -1199,6 +1199,7 @@ csiparse(void) | ||||||
| { | { | ||||||
| 	char *p = csiescseq.buf, *np; | 	char *p = csiescseq.buf, *np; | ||||||
| 	long int v; | 	long int v; | ||||||
|  | 	int sep = ';'; /* colon or semi-colon, but not both */ | ||||||
| 
 | 
 | ||||||
| 	csiescseq.narg = 0; | 	csiescseq.narg = 0; | ||||||
| 	if (*p == '?') { | 	if (*p == '?') { | ||||||
|  | @ -1216,7 +1217,9 @@ csiparse(void) | ||||||
| 			v = -1; | 			v = -1; | ||||||
| 		csiescseq.arg[csiescseq.narg++] = v; | 		csiescseq.arg[csiescseq.narg++] = v; | ||||||
| 		p = np; | 		p = np; | ||||||
| 		if (*p != ';' || csiescseq.narg == ESC_ARG_SIZ) | 		if (sep == ';' && *p == ':') | ||||||
|  | 			sep = ':'; /* allow override to colon once */ | ||||||
|  | 		if (*p != sep || csiescseq.narg == ESC_ARG_SIZ) | ||||||
| 			break; | 			break; | ||||||
| 		p++; | 		p++; | ||||||
| 	} | 	} | ||||||
|  | @ -1710,7 +1713,7 @@ csihandle(void) | ||||||
| 			ttywrite(vtiden, strlen(vtiden), 0); | 			ttywrite(vtiden, strlen(vtiden), 0); | ||||||
| 		break; | 		break; | ||||||
| 	case 'b': /* REP -- if last char is printable print it <n> more times */ | 	case 'b': /* REP -- if last char is printable print it <n> more times */ | ||||||
| 		DEFAULT(csiescseq.arg[0], 1); | 		LIMIT(csiescseq.arg[0], 1, 65535); | ||||||
| 		if (term.lastc) | 		if (term.lastc) | ||||||
| 			while (csiescseq.arg[0]-- > 0) | 			while (csiescseq.arg[0]-- > 0) | ||||||
| 				tputc(term.lastc); | 				tputc(term.lastc); | ||||||
|  | @ -1795,6 +1798,7 @@ csihandle(void) | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case 'S': /* SU -- Scroll <n> line up */ | 	case 'S': /* SU -- Scroll <n> line up */ | ||||||
|  | 		if (csiescseq.priv) break; | ||||||
| 		DEFAULT(csiescseq.arg[0], 1); | 		DEFAULT(csiescseq.arg[0], 1); | ||||||
| 		tscrollup(term.top, csiescseq.arg[0], 0); | 		tscrollup(term.top, csiescseq.arg[0], 0); | ||||||
| 		break; | 		break; | ||||||
|  | @ -1836,11 +1840,18 @@ csihandle(void) | ||||||
| 	case 'm': /* SGR -- Terminal attribute (color) */ | 	case 'm': /* SGR -- Terminal attribute (color) */ | ||||||
| 		tsetattr(csiescseq.arg, csiescseq.narg); | 		tsetattr(csiescseq.arg, csiescseq.narg); | ||||||
| 		break; | 		break; | ||||||
| 	case 'n': /* DSR – Device Status Report (cursor position) */ | 	case 'n': /* DSR -- Device Status Report */ | ||||||
| 		if (csiescseq.arg[0] == 6) { | 		switch (csiescseq.arg[0]) { | ||||||
|  | 		case 5: /* Status Report "OK" `0n` */ | ||||||
|  | 			ttywrite("\033[0n", sizeof("\033[0n") - 1, 0); | ||||||
|  | 			break; | ||||||
|  | 		case 6: /* Report Cursor Position (CPR) "<row>;<column>R" */ | ||||||
| 			len = snprintf(buf, sizeof(buf), "\033[%i;%iR", | 			len = snprintf(buf, sizeof(buf), "\033[%i;%iR", | ||||||
| 			               term.c.y+1, term.c.x+1); | 			               term.c.y+1, term.c.x+1); | ||||||
| 			ttywrite(buf, len, 0); | 			ttywrite(buf, len, 0); | ||||||
|  | 			break; | ||||||
|  | 		default: | ||||||
|  | 			goto unknown; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case 'r': /* DECSTBM -- Set Scrolling Region */ | 	case 'r': /* DECSTBM -- Set Scrolling Region */ | ||||||
|  | @ -1999,8 +2010,10 @@ strhandle(void) | ||||||
| 			if (p && !strcmp(p, "?")) { | 			if (p && !strcmp(p, "?")) { | ||||||
| 				osc_color_response(j, 0, 1); | 				osc_color_response(j, 0, 1); | ||||||
| 			} else if (xsetcolorname(j, p)) { | 			} else if (xsetcolorname(j, p)) { | ||||||
| 				if (par == 104 && narg <= 1) | 				if (par == 104 && narg <= 1) { | ||||||
|  | 					xloadcols(); | ||||||
| 					return; /* color reset without parameter */ | 					return; /* color reset without parameter */ | ||||||
|  | 				} | ||||||
| 				fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", | 				fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", | ||||||
| 				        j, p ? p : "(null)"); | 				        j, p ? p : "(null)"); | ||||||
| 			} else { | 			} else { | ||||||
|  | @ -2388,6 +2401,7 @@ eschandle(uchar ascii) | ||||||
| 		treset(); | 		treset(); | ||||||
| 		resettitle(); | 		resettitle(); | ||||||
| 		xloadcols(); | 		xloadcols(); | ||||||
|  | 		xsetmode(0, MODE_HIDE); | ||||||
| 		break; | 		break; | ||||||
| 	case '=': /* DECPAM -- Application keypad */ | 	case '=': /* DECPAM -- Application keypad */ | ||||||
| 		xsetmode(1, MODE_APPKEYPAD); | 		xsetmode(1, MODE_APPKEYPAD); | ||||||
|  | @ -2480,6 +2494,9 @@ check_control_code: | ||||||
| 	 * they must not cause conflicts with sequences. | 	 * they must not cause conflicts with sequences. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (control) { | 	if (control) { | ||||||
|  | 		/* in UTF-8 mode ignore handling C1 control characters */ | ||||||
|  | 		if (IS_SET(MODE_UTF8) && ISCONTROLC1(u)) | ||||||
|  | 			return; | ||||||
| 		tcontrolcode(u); | 		tcontrolcode(u); | ||||||
| 		/*
 | 		/*
 | ||||||
| 		 * control codes are not shown ever | 		 * control codes are not shown ever | ||||||
|  | @ -2526,11 +2543,16 @@ check_control_code: | ||||||
| 		gp = &term.line[term.c.y][term.c.x]; | 		gp = &term.line[term.c.y][term.c.x]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) | 	if (IS_SET(MODE_INSERT) && term.c.x+width < term.col) { | ||||||
| 		memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); | 		memmove(gp+width, gp, (term.col - term.c.x - width) * sizeof(Glyph)); | ||||||
|  | 		gp->mode &= ~ATTR_WIDE; | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	if (term.c.x+width > term.col) { | 	if (term.c.x+width > term.col) { | ||||||
|  | 		if (IS_SET(MODE_WRAP)) | ||||||
| 			tnewline(1); | 			tnewline(1); | ||||||
|  | 		else | ||||||
|  | 			tmoveto(term.col - width, term.c.y); | ||||||
| 		gp = &term.line[term.c.y][term.c.x]; | 		gp = &term.line[term.c.y][term.c.x]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								st.info
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								st.info
									
										
									
									
									
								
							|  | @ -184,6 +184,10 @@ st-mono| simpleterm monocolor, | ||||||
| # XTerm extensions | # XTerm extensions | ||||||
| 	rmxx=\E[29m, | 	rmxx=\E[29m, | ||||||
| 	smxx=\E[9m, | 	smxx=\E[9m, | ||||||
|  | 	BE=\E[?2004h, | ||||||
|  | 	BD=\E[?2004l, | ||||||
|  | 	PS=\E[200~, | ||||||
|  | 	PE=\E[201~, | ||||||
| # disabled rep for now: causes some issues with older ncurses versions. | # disabled rep for now: causes some issues with older ncurses versions. | ||||||
| #	rep=%p1%c\E[%p2%{1}%-%db, | #	rep=%p1%c\E[%p2%{1}%-%db, | ||||||
| # tmux extensions, see TERMINFO EXTENSIONS in tmux(1) | # tmux extensions, see TERMINFO EXTENSIONS in tmux(1) | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								x.c
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								x.c
									
										
									
									
									
								
							|  | @ -838,7 +838,7 @@ xloadcols(void) | ||||||
| int | int | ||||||
| xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b) | xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b) | ||||||
| { | { | ||||||
| 	if (!BETWEEN(x, 0, dc.collen)) | 	if (!BETWEEN(x, 0, dc.collen - 1)) | ||||||
| 		return 1; | 		return 1; | ||||||
| 
 | 
 | ||||||
| 	*r = dc.col[x].color.red >> 8; | 	*r = dc.col[x].color.red >> 8; | ||||||
|  | @ -853,7 +853,7 @@ xsetcolorname(int x, const char *name) | ||||||
| { | { | ||||||
| 	Color ncolor; | 	Color ncolor; | ||||||
| 
 | 
 | ||||||
| 	if (!BETWEEN(x, 0, dc.collen)) | 	if (!BETWEEN(x, 0, dc.collen - 1)) | ||||||
| 		return 1; | 		return 1; | ||||||
| 
 | 
 | ||||||
| 	if (!xloadcolor(x, name, &ncolor)) | 	if (!xloadcolor(x, name, &ncolor)) | ||||||
|  | @ -1151,7 +1151,7 @@ xinit(int cols, int rows) | ||||||
| { | { | ||||||
| 	XGCValues gcvalues; | 	XGCValues gcvalues; | ||||||
| 	Cursor cursor; | 	Cursor cursor; | ||||||
| 	Window parent; | 	Window parent, root; | ||||||
| 	pid_t thispid = getpid(); | 	pid_t thispid = getpid(); | ||||||
| 	XColor xmousefg, xmousebg; | 	XColor xmousefg, xmousebg; | ||||||
| 	XWindowAttributes attr; | 	XWindowAttributes attr; | ||||||
|  | @ -1200,10 +1200,15 @@ xinit(int cols, int rows) | ||||||
| 		| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; | 		| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; | ||||||
| 	xw.attrs.colormap = xw.cmap; | 	xw.attrs.colormap = xw.cmap; | ||||||
| 
 | 
 | ||||||
| 	xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t, | 	root = XRootWindow(xw.dpy, xw.scr); | ||||||
|  | 	if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) | ||||||
|  | 		parent = root; | ||||||
|  | 	xw.win = XCreateWindow(xw.dpy, root, xw.l, xw.t, | ||||||
| 			win.w, win.h, 0, xw.depth, InputOutput, | 			win.w, win.h, 0, xw.depth, InputOutput, | ||||||
| 			xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity | 			xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity | ||||||
| 			| CWEventMask | CWColormap, &xw.attrs); | 			| CWEventMask | CWColormap, &xw.attrs); | ||||||
|  | 	if (parent != root) | ||||||
|  | 		XReparentWindow(xw.dpy, xw.win, parent, xw.l, xw.t); | ||||||
| 
 | 
 | ||||||
| 	memset(&gcvalues, 0, sizeof(gcvalues)); | 	memset(&gcvalues, 0, sizeof(gcvalues)); | ||||||
| 	gcvalues.graphics_exposures = False; | 	gcvalues.graphics_exposures = False; | ||||||
|  | @ -1638,6 +1643,9 @@ xseticontitle(char *p) | ||||||
| 	XTextProperty prop; | 	XTextProperty prop; | ||||||
| 	DEFAULT(p, opt_title); | 	DEFAULT(p, opt_title); | ||||||
| 
 | 
 | ||||||
|  | 	if (p[0] == '\0') | ||||||
|  | 		p = opt_title; | ||||||
|  | 
 | ||||||
| 	if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, | 	if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, | ||||||
| 	                                &prop) != Success) | 	                                &prop) != Success) | ||||||
| 		return; | 		return; | ||||||
|  | @ -1652,6 +1660,9 @@ xsettitle(char *p) | ||||||
| 	XTextProperty prop; | 	XTextProperty prop; | ||||||
| 	DEFAULT(p, opt_title); | 	DEFAULT(p, opt_title); | ||||||
| 
 | 
 | ||||||
|  | 	if (p[0] == '\0') | ||||||
|  | 		p = opt_title; | ||||||
|  | 
 | ||||||
| 	if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, | 	if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, | ||||||
| 	                                &prop) != Success) | 	                                &prop) != Success) | ||||||
| 		return; | 		return; | ||||||
|  | @ -1863,7 +1874,7 @@ void | ||||||
| kpress(XEvent *ev) | kpress(XEvent *ev) | ||||||
| { | { | ||||||
| 	XKeyEvent *e = &ev->xkey; | 	XKeyEvent *e = &ev->xkey; | ||||||
| 	KeySym ksym; | 	KeySym ksym = NoSymbol; | ||||||
| 	char buf[64], *customkey; | 	char buf[64], *customkey; | ||||||
| 	int len; | 	int len; | ||||||
| 	Rune c; | 	Rune c; | ||||||
|  | @ -1873,10 +1884,13 @@ kpress(XEvent *ev) | ||||||
| 	if (IS_SET(MODE_KBDLOCK)) | 	if (IS_SET(MODE_KBDLOCK)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if (xw.ime.xic) | 	if (xw.ime.xic) { | ||||||
| 		len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status); | 		len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status); | ||||||
| 	else | 		if (status == XBufferOverflow) | ||||||
|  | 			return; | ||||||
|  | 	} else { | ||||||
| 		len = XLookupString(e, buf, sizeof buf, &ksym, NULL); | 		len = XLookupString(e, buf, sizeof buf, &ksym, NULL); | ||||||
|  | 	} | ||||||
| 	/* 1. shortcuts */ | 	/* 1. shortcuts */ | ||||||
| 	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { | 	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { | ||||||
| 		if (ksym == bp->keysym && match(bp->mod, e->state)) { | 		if (ksym == bp->keysym && match(bp->mod, e->state)) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue