From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pavel Mihaylov To: 9fans@cse.psu.edu Content-Type: multipart/mixed; boundary="=-oZIG8Mgt93fsx/IEXYcN" Message-Id: <1024959597.1282.29.camel@dator> Mime-Version: 1.0 Subject: [9fans] keyboard driver dynamic maps Date: Tue, 25 Jun 2002 01:59:56 +0300 Topicbox-Message-UUID: b7884a48-eaca-11e9-9e20-41e7f4b1d025 --=-oZIG8Mgt93fsx/IEXYcN Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I've finally done this to some fairly usable state - in short it allows one to have dynamic keymap loading in Plan 9. It's built on top of Nemo's multiple static maps (preserving the idea of N maps defined at compile time) so you will need it to compile this. I've also attached several maps converted from the C files, together with the perl script used for conversion (written for perl 5.6.x, not tested on Plan 9's perl). The sketchy README contains more info on usage. Comments, fixes and suggestions are welcome. Pavel --=-oZIG8Mgt93fsx/IEXYcN Content-Type: multipart/mixed; boundary="upas-rbgdrzoyojhuojritbgqprniqs" Content-Disposition: inline This is a multi-part message in MIME format. --upas-rbgdrzoyojhuojritbgqprniqs Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit The following attachment had content that we can't prove to be harmless. To avoid possible automatic execution, we changed the content headers. The original header was: Content-Disposition: attachment; filename=kbdnew.tgz Content-Type: application/x-gzip; name=kbdnew.tgz Content-Transfer-Encoding: base64 --upas-rbgdrzoyojhuojritbgqprniqs Content-Type: application/octet-stream Content-Disposition: attachment; filename="kbdnew.tgz.suspect" Content-Transfer-Encoding: base64 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 --upas-rbgdrzoyojhuojritbgqprniqs-- --=-oZIG8Mgt93fsx/IEXYcN--