kbdfs: ignore compose sequence if ctl was pressed
This commit is contained in:
parent
64f14cc6a4
commit
4c93f534ac
|
@ -441,13 +441,13 @@ nextrune(Channel *ch, Rune *r)
|
|||
case Kcaps:
|
||||
case Knum:
|
||||
case Kshift:
|
||||
case Kctl:
|
||||
case Kaltgr:
|
||||
/* ignore these special keys */
|
||||
/* ignore modifiers */
|
||||
continue;
|
||||
|
||||
case Kctl:
|
||||
case Kalt:
|
||||
/* latin escape! */
|
||||
/* composing escapes */
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -471,17 +471,32 @@ runeproc(void *)
|
|||
};
|
||||
Rune r, rr;
|
||||
int i, j;
|
||||
int ctl;
|
||||
|
||||
threadsetname("runeproc");
|
||||
|
||||
ctl = 0;
|
||||
while((i = nextrune(rawchan, &r)) >= 0){
|
||||
if(i == 0){
|
||||
ctl = 0;
|
||||
Forward:
|
||||
send(runechan, &r);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* latin sequence */
|
||||
if(r == Kctl){
|
||||
ctl = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* emulators like qemu and vmware use Ctrl+Alt to lock
|
||||
* keyboard input so dont confuse them for a compose
|
||||
* sequence.
|
||||
*/
|
||||
if(r != Kalt || ctl)
|
||||
continue;
|
||||
|
||||
if(nextrune(rawchan, &r))
|
||||
continue;
|
||||
|
||||
|
@ -500,7 +515,7 @@ Forward:
|
|||
else
|
||||
break;
|
||||
}
|
||||
if(i == 4 && r > 0)
|
||||
if(i == 4 && r)
|
||||
goto Forward;
|
||||
} else {
|
||||
if(nextrune(rawchan, &rr))
|
||||
|
|
Loading…
Reference in a new issue