| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -37,6 +37,10 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"st-" VERSION ", (c) 2010-2011 st engineers\n" \ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"usage: st [-t title] [-c class] [-w windowid] [-v] [-e command...]\n" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* XEMBED messages */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define XEMBED_FOCUS_IN  4 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define XEMBED_FOCUS_OUT 5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Arbitrary sizes */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define ESC_TITLE_SIZ 256 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define ESC_BUF_SIZ   256 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -217,6 +221,7 @@ static void visibility(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void unmap(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char* kmap(KeySym, unsigned int state); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void kpress(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void cmessage(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void resize(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void focus(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void brelease(XEvent *); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -237,12 +242,11 @@ static int isfullutf8(char *, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void (*handler[LASTEvent])(XEvent *) = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[KeyPress] = kpress, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[ClientMessage] = cmessage, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[ConfigureNotify] = resize, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[VisibilityNotify] = visibility, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[UnmapNotify] = unmap, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[Expose] = expose, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[EnterNotify] = focus, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[LeaveNotify] = focus, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[FocusIn] = focus, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[FocusOut] = focus, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						[MotionNotify] = bmotion, | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -264,6 +268,7 @@ static char **opt_cmd  = NULL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char *opt_title = NULL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char *opt_embed = NULL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char *opt_class = NULL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static Atom xembedatom; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					utf8decode(char *s, long *u) { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1666,6 +1671,8 @@ xinit(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							&(XColor){.red = 0xffff, .green = 0xffff, .blue = 0xffff}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							&(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xembedatom = XInternAtom(xw.dpy, "_XEMBED", False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XMapWindow(xw.dpy, xw.win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xhints(); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1822,7 +1829,7 @@ xseturgency(int add) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					focus(XEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(ev->type == FocusIn || ev->type == EnterNotify) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(ev->type == FocusIn) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							xw.state |= WIN_FOCUSED; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							xseturgency(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1889,6 +1896,19 @@ kpress(XEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					cmessage(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if (e->xclient.message_type == xembedatom && e->xclient.format == 32) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if (e->xclient.data.l[1] == XEMBED_FOCUS_IN) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								xw.state |= WIN_FOCUSED; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								xseturgency(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} else if (e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								xw.state &= ~WIN_FOCUSED; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							draw(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					resize(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int col, row; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |