@ -360,9 +360,11 @@ keypress(XKeyEvent *ev)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								                  utf8 ,  utf8 ,  win ,  CurrentTime ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							case  XK_Left :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							case  XK_KP_Left :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								movewordedge ( - 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								goto  draw ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							case  XK_Right :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							case  XK_KP_Right :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								movewordedge ( + 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								goto  draw ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							case  XK_Return :   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -400,6 +402,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								insert ( buf ,  len ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Delete :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Delete :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( text [ cursor ]  = =  ' \0 ' )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							cursor  =  nextrune ( + 1 ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -410,6 +413,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							insert ( NULL ,  nextrune ( - 1 )  -  cursor ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_End :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_End :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( text [ cursor ]  ! =  ' \0 ' )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								cursor  =  strlen ( text ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								break ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -429,6 +433,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							cleanup ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							exit ( 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Home :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Home :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( sel  = =  matches )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								cursor  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								break ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -437,6 +442,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							calcoffsets ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Left :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Left :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( cursor  >  0  & &  ( ! sel  | |  ! sel - > left  | |  lines  >  0 ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								cursor  =  nextrune ( - 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								break ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -445,18 +451,21 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							/* fallthrough */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Up :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Up :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( sel  & &  sel - > left  & &  ( sel  =  sel - > left ) - > right  = =  curr )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								curr  =  prev ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								calcoffsets ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Next :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Next :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ! next )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							sel  =  curr  =  next ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							calcoffsets ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Prior :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Prior :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ! prev )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							sel  =  curr  =  prev ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -473,6 +482,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								sel - > out  =  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Right :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Right :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( text [ cursor ]  ! =  ' \0 ' )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								cursor  =  nextrune ( + 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								break ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -481,6 +491,7 @@ insert:  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							/* fallthrough */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_Down :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  XK_KP_Down :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( sel  & &  sel - > right  & &  ( sel  =  sel - > right )  = =  next )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								curr  =  next ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								calcoffsets ( ) ;