|
@ -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; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
goto draw; |
|
|
case XK_Right: |
|
|
case XK_Right: |
|
|
movewordedge(+1); |
|
|
movewordedge(+1); |
|
|
ksym = NoSymbol; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
goto draw; |
|
|
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; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
goto draw; |
|
|
case XK_f: |
|
|
case XK_f: |
|
|
movewordedge(+1); |
|
|
movewordedge(+1); |
|
|
ksym = NoSymbol; |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
goto draw; |
|
|
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(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|