Added dvorak keymap (#752)

Keymaps are passed as arguments to ps2d.
To select the dvorak keymap use `ps2d dvorak`,
otherwise the kymap will default to english.
This commit is contained in:
Waylon Cude 2016-11-10 07:56:38 -08:00 committed by Jeremy Soller
parent fb739faece
commit 2d6b7b4564
2 changed files with 162 additions and 75 deletions

View file

@ -7,6 +7,7 @@ extern crate io;
extern crate orbclient;
extern crate syscall;
use std::env;
use std::fs::File;
use std::io::{Read, Write, Result};
use std::os::unix::io::AsRawFd;
@ -32,24 +33,27 @@ bitflags! {
}
}
struct Ps2d {
struct Ps2d<'a> {
input: File,
lshift: bool,
rshift: bool,
packets: [u8; 4],
packet_i: usize,
extra_packet: bool
extra_packet: bool,
//Keymap function
get_char: &'a Fn(u8,bool) -> char
}
impl Ps2d {
fn new(input: File, extra_packet: bool) -> Self {
impl<'a> Ps2d<'a> {
fn new(input: File, extra_packet: bool, keymap: &'a Fn(u8,bool) -> char) -> Self {
Ps2d {
input: input,
lshift: false,
rshift: false,
packets: [0; 4],
packet_i: 0,
extra_packet: extra_packet
extra_packet: extra_packet,
get_char: keymap
}
}
@ -68,7 +72,7 @@ impl Ps2d {
}
self.input.write(&KeyEvent {
character: keymap::get_char(scancode, self.lshift || self.rshift),
character: (self.get_char)(scancode, self.lshift || self.rshift),
scancode: scancode,
pressed: pressed
}.to_event()).expect("ps2d: failed to write key event");
@ -128,8 +132,15 @@ fn main() {
let input = File::open("display:input").expect("ps2d: failed to open display:input");
let extra_packet = controller::Ps2::new().init();
let mut ps2d = Ps2d::new(input, extra_packet);
let keymap = match env::args().skip(1).next() {
Some(k) => match k.to_lowercase().as_ref() {
"dvorak" => (keymap::dvorak::get_char),
"english" => (keymap::english::get_char),
&_ => (keymap::english::get_char)
},
None => (keymap::english::get_char)
};
let mut ps2d = Ps2d::new(input, extra_packet,&keymap);
let mut event_queue = EventQueue::<(bool, u8)>::new().expect("ps2d: failed to create event queue");