diff options
author | Russ Cox <rsc@swtch.com> | 2008-07-01 20:45:49 -0400 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2008-07-01 20:45:49 -0400 |
commit | 81a90f898bf58852ca414ae612751e6cff06566c (patch) | |
tree | 79db6a639282abe4391ecff1d89c24cdc7d26732 /src | |
parent | 8cb7983083a94e2bdedcd24ca4ba0ccbefcf61b8 (diff) | |
download | plan9port-81a90f898bf58852ca414ae612751e6cff06566c.tar.gz plan9port-81a90f898bf58852ca414ae612751e6cff06566c.tar.bz2 plan9port-81a90f898bf58852ca414ae612751e6cff06566c.zip |
devdraw: OS X alt key support
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/devdraw/osx-srv.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/cmd/devdraw/osx-srv.c b/src/cmd/devdraw/osx-srv.c index 9dded632..fc943d16 100644 --- a/src/cmd/devdraw/osx-srv.c +++ b/src/cmd/devdraw/osx-srv.c @@ -395,9 +395,9 @@ mousetrack(int x, int y, int b, int ms) matchmouse(); zunlock(); } - + void -keystroke(int c) +kputc(int c) { zlock(); kbd.r[kbd.wi++] = c; @@ -408,3 +408,39 @@ keystroke(int c) matchkbd(); zunlock(); } + +void +keystroke(int c) +{ + static Rune k[10]; + static int alting, nk; + int i; + + if(c == Kalt){ + alting = !alting; + return; + } + if(!alting){ + kputc(c); + return; + } + if(nk >= nelem(k)) // should not happen + nk = 0; + k[nk++] = c; + c = _latin1(k, nk); + if(c > 0){ + alting = 0; + kputc(c); + nk = 0; + return; + } + if(c == -1){ + alting = 0; + for(i=0; i<nk; i++) + kputc(k[i]); + nk = 0; + return; + } + // need more input + return; +} |