Fix handling of input strings
This commit is contained in:
		
							parent
							
								
									0d33e98f56
								
							
						
					
					
						commit
						4c8974afef
					
				@ -308,13 +308,21 @@ keypress(XKeyEvent *ev)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	char buf[32];
 | 
						char buf[32];
 | 
				
			||||||
	int len;
 | 
						int len;
 | 
				
			||||||
	KeySym ksym = NoSymbol;
 | 
						KeySym ksym;
 | 
				
			||||||
	Status status;
 | 
						Status status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
 | 
						len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
 | 
				
			||||||
	if (status == XBufferOverflow)
 | 
						switch (status) {
 | 
				
			||||||
 | 
						default: /* XLookupNone, XBufferOverflow */
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	if (ev->state & ControlMask)
 | 
						case XLookupChars:
 | 
				
			||||||
 | 
							goto insert;
 | 
				
			||||||
 | 
						case XLookupKeySym:
 | 
				
			||||||
 | 
						case XLookupBoth:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ev->state & ControlMask) {
 | 
				
			||||||
		switch(ksym) {
 | 
							switch(ksym) {
 | 
				
			||||||
		case XK_a: ksym = XK_Home;      break;
 | 
							case XK_a: ksym = XK_Home;      break;
 | 
				
			||||||
		case XK_b: ksym = XK_Left;      break;
 | 
							case XK_b: ksym = XK_Left;      break;
 | 
				
			||||||
@ -352,12 +360,10 @@ keypress(XKeyEvent *ev)
 | 
				
			|||||||
			return;
 | 
								return;
 | 
				
			||||||
		case XK_Left:
 | 
							case XK_Left:
 | 
				
			||||||
			movewordedge(-1);
 | 
								movewordedge(-1);
 | 
				
			||||||
			ksym = NoSymbol;
 | 
								goto draw;
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case XK_Right:
 | 
							case XK_Right:
 | 
				
			||||||
			movewordedge(+1);
 | 
								movewordedge(+1);
 | 
				
			||||||
			ksym = NoSymbol;
 | 
								goto draw;
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case XK_Return:
 | 
							case XK_Return:
 | 
				
			||||||
		case XK_KP_Enter:
 | 
							case XK_KP_Enter:
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
@ -367,16 +373,14 @@ keypress(XKeyEvent *ev)
 | 
				
			|||||||
		default:
 | 
							default:
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	else if (ev->state & Mod1Mask)
 | 
						} else if (ev->state & Mod1Mask) {
 | 
				
			||||||
		switch(ksym) {
 | 
							switch(ksym) {
 | 
				
			||||||
		case XK_b:
 | 
							case XK_b:
 | 
				
			||||||
			movewordedge(-1);
 | 
								movewordedge(-1);
 | 
				
			||||||
			ksym = NoSymbol;
 | 
								goto draw;
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case XK_f:
 | 
							case XK_f:
 | 
				
			||||||
			movewordedge(+1);
 | 
								movewordedge(+1);
 | 
				
			||||||
			ksym = NoSymbol;
 | 
								goto draw;
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case XK_g: ksym = XK_Home;  break;
 | 
							case XK_g: ksym = XK_Home;  break;
 | 
				
			||||||
		case XK_G: ksym = XK_End;   break;
 | 
							case XK_G: ksym = XK_End;   break;
 | 
				
			||||||
		case XK_h: ksym = XK_Up;    break;
 | 
							case XK_h: ksym = XK_Up;    break;
 | 
				
			||||||
@ -386,13 +390,14 @@ keypress(XKeyEvent *ev)
 | 
				
			|||||||
		default:
 | 
							default:
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch(ksym) {
 | 
						switch(ksym) {
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
 | 
					insert:
 | 
				
			||||||
		if (!iscntrl(*buf))
 | 
							if (!iscntrl(*buf))
 | 
				
			||||||
			insert(buf, len);
 | 
								insert(buf, len);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case NoSymbol:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case XK_Delete:
 | 
						case XK_Delete:
 | 
				
			||||||
		if (text[cursor] == '\0')
 | 
							if (text[cursor] == '\0')
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
@ -489,6 +494,8 @@ keypress(XKeyEvent *ev)
 | 
				
			|||||||
		match();
 | 
							match();
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					draw:
 | 
				
			||||||
	drawmenu();
 | 
						drawmenu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user