@ -65,7 +65,6 @@  
															
														 
														
													
														
															
																 
																 
																# define REDRAW_TIMEOUT (80*1000)  /* 80 ms */  
																 
																 
																# define REDRAW_TIMEOUT (80*1000)  /* 80 ms */  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																/* macros */  
																 
																 
																/* macros */  
															
														 
														
													
														
															
																 
																 
																# define CLEANMASK(mask) (mask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))  
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																# define SERRNO strerror(errno)  
																 
																 
																# define SERRNO strerror(errno)  
															
														 
														
													
														
															
																 
																 
																# define MIN(a, b)  ((a) < (b) ? (a) : (b))  
																 
																 
																# define MIN(a, b)  ((a) < (b) ? (a) : (b))  
															
														 
														
													
														
															
																 
																 
																# define MAX(a, b)  ((a) < (b) ? (b) : (a))  
																 
																 
																# define MAX(a, b)  ((a) < (b) ? (b) : (a))  
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -329,6 +328,7 @@ static void tsetmode(bool, bool, int *, int);  
															
														 
														
													
														
															
																 
																 
																static  void  tfulldirt ( void ) ;  
																 
																 
																static  void  tfulldirt ( void ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  techo ( char  * ,  int ) ;  
																 
																 
																static  void  techo ( char  * ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																static  inline  bool  match ( uint ,  uint ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  ttynew ( void ) ;  
																 
																 
																static  void  ttynew ( void ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  ttyread ( void ) ;  
																 
																 
																static  void  ttyread ( void ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  ttyresize ( void ) ;  
																 
																 
																static  void  ttyresize ( void ) ;  
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -2696,23 +2696,29 @@ focus(XEvent *ev) {  
															
														 
														
													
														
															
																 
																 
																	}   
																 
																 
																	}   
															
														 
														
													
														
															
																 
																 
																}  
																 
																 
																}  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																inline  bool  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																match ( uint  mask ,  uint  state )  {  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	if ( mask  = =  XK_NO_MOD  & &  state )   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		return  false ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	if ( mask  ! =  XK_ANY_MOD  & &  mask  ! =  XK_NO_MOD  & &  ! state )   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		return  false ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	if ( ( state  &  mask )  ! =  state )   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		return  false ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	return  true ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																}  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																char *  
																 
																 
																char *  
															
														 
														
													
														
															
																 
																 
																kmap ( KeySym  k ,  uint  state )  {  
																 
																 
																kmap ( KeySym  k ,  uint  state )  {  
															
														 
														
													
														
															
																 
																 
																	uint  mask ;   
																 
																 
																	uint  mask ;   
															
														 
														
													
														
															
																 
																 
																	Key  * kp ;   
																 
																 
																	Key  * kp ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																	state  & =  ~ Mod2Mask ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																	for ( kp  =  key ;  kp  <  key  +  LEN ( key ) ;  kp + + )  {   
																 
																 
																	for ( kp  =  key ;  kp  <  key  +  LEN ( key ) ;  kp + + )  {   
															
														 
														
													
														
															
																 
																 
																		mask  =  kp - > mask ;   
																 
																 
																		mask  =  kp - > mask ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																		if ( kp - > k  ! =  k )   
																 
																 
																		if ( kp - > k  ! =  k )   
															
														 
														
													
														
															
																 
																 
																			continue ;   
																 
																 
																			continue ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																		if ( mask  = =  XK_NO_MOD  & &  state )   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																			continue ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																		if ( mask  ! =  XK_ANY_MOD  & &  mask  ! =  XK_NO_MOD  & &  ! state )   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																			continue ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																		if ( ( state  &  mask )  ! =  state )   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		if ( ! match ( mask ,  state ) )   
															
														 
														
													
														
															
																 
																 
																			continue ;   
																 
																 
																			continue ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																		if ( ( kp - > appkey  <  0  & &  IS_SET ( MODE_APPKEYPAD ) )  | |   
																 
																 
																		if ( ( kp - > appkey  <  0  & &  IS_SET ( MODE_APPKEYPAD ) )  | |   
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -2741,21 +2747,20 @@ kpress(XEvent *ev) {  
															
														 
														
													
														
															
																 
																 
																	XKeyEvent  * e  =  & ev - > xkey ;   
																 
																 
																	XKeyEvent  * e  =  & ev - > xkey ;   
															
														 
														
													
														
															
																 
																 
																	KeySym  ksym ;   
																 
																 
																	KeySym  ksym ;   
															
														 
														
													
														
															
																 
																 
																	char  xstr [ 31 ] ,  buf [ 32 ] ,  * customkey ,  * cp  =  buf ;   
																 
																 
																	char  xstr [ 31 ] ,  buf [ 32 ] ,  * customkey ,  * cp  =  buf ;   
															
														 
														
													
														
															
																 
																 
																	int  len ,  i ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	int  len ;   
															
														 
														
													
														
															
																 
																 
																	Status  status ;   
																 
																 
																	Status  status ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	Shortcut  * bp ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																	if  ( IS_SET ( MODE_KBDLOCK ) )   
																 
																 
																	if  ( IS_SET ( MODE_KBDLOCK ) )   
															
														 
														
													
														
															
																 
																 
																		return ;   
																 
																 
																		return ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																	len  =  XmbLookupString ( xw . xic ,  e ,  xstr ,  sizeof ( xstr ) ,  & ksym ,  & status ) ;   
																 
																 
																	len  =  XmbLookupString ( xw . xic ,  e ,  xstr ,  sizeof ( xstr ) ,  & ksym ,  & status ) ;   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	e - > state  & =  ~ Mod2Mask ;   
															
														 
														
													
														
															
																 
																 
																	/* 1. shortcuts */   
																 
																 
																	/* 1. shortcuts */   
															
														 
														
													
														
															
																 
																 
																	for ( i  =  0 ;  i  <  LEN ( shortcuts ) ;  i + + )  {   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																		if ( ( ksym  = =  shortcuts [ i ] . keysym )   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																				& &  ( CLEANMASK ( shortcuts [ i ] . mod )  = =  \   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																					CLEANMASK ( e - > state ) )   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																				& &  shortcuts [ i ] . func )  {   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																			shortcuts [ i ] . func ( & ( shortcuts [ i ] . arg ) ) ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	for ( bp  =  shortcuts ;  bp  <  shortcuts  +  LEN ( shortcuts ) ;  bp + + )  {   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		if ( ksym  = =  bp - > keysym  & &  match ( bp - > mod ,  e - > state ) )  {   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			bp - > func ( & ( bp - > arg ) ) ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			return ;   
															
														 
														
													
														
															
																 
																 
																		}   
																 
																 
																		}   
															
														 
														
													
														
															
																 
																 
																	}   
																 
																 
																	}