| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -107,6 +107,8 @@ typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Colormap cmap; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Window win; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Pixmap buf; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XIM xim; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XIC xic; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int scr; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int w;	/* window width	 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int h;	/* window height */ | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1228,6 +1230,13 @@ xinit(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								| CWColormap, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								&attrs); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* input methods */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xw.xim = XOpenIM(xw.dis, NULL, NULL, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										   | XIMStatusNothing, XNClientWindow, xw.win,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										   XNFocusWindow, xw.win, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* gc */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1411,10 +1420,11 @@ kpress(XEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int len; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int meta; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int shift; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Status status; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						meta = e->state & Mod1Mask; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						shift = e->state & ShiftMask; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						len = XLookupString(e, buf, sizeof(buf), &ksym, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						len = XmbLookupString(xw.xic, e, buf, sizeof(buf), &ksym, &status); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((customkey = kmap(ksym))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							ttywrite(customkey, strlen(customkey)); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1484,6 +1494,8 @@ run(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							while(XPending(xw.dis)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								XNextEvent(xw.dis, &ev); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if (XFilterEvent(&ev, xw.win)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(handler[ev.type]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									(handler[ev.type])(&ev); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |