0
私は
chars()
メソッドを使用できるように
Read
特色に
ReadConsoleInputW
Windowsコンソールメソッドをラップしたいが、私は、キー修飾子が適用されているかを知ることも必要
(制御、ALT/メタ)。 (Unixのコンソールによって使用されるものなど)ReadConsoleInputWラッパーと所有権
一つの解決策は、制御文字またはANSIエスケープコードにキーイベントを符号化することです。
struct InputBuffer {
handle: winapi::HANDLE,
ctrl: bool,
meta: bool,
}
impl Read for InputBuffer {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
let mut rec: winapi::INPUT_RECORD = unsafe { mem::zeroed() };
// kernel32::ReadConsoleInputW(self.0, &mut rec, 1 as winapi::DWORD, &mut count);
// ...
if rec.EventType != winapi::KEY_EVENT {
continue;
}
let key_event = unsafe { rec.KeyEvent() };
// ...
self.ctrl = key_event.dwControlKeyState &
(winapi::LEFT_CTRL_PRESSED | winapi::RIGHT_CTRL_PRESSED) ==
(winapi::LEFT_CTRL_PRESSED | winapi::RIGHT_CTRL_PRESSED);
self.meta = ...;
let utf16 = key_event.UnicodeChar;
// ...
let (bytes, len) = try!(InputBuffer::wide_char_to_multi_byte(utf16));
return (&bytes[..len]).read(buf);
}
}
fn main() {
let handle = try!(get_std_handle(STDIN_FILENO));
let mut stdin = InputBuffer(handle);
let mut chars = stdin.chars(); // stdin moved here
loop {
let c = chars.next().unwrap();
let mut ch = try!(c);
if stdin.ctrl { // use of moved value
//...
}
// ...
}
}
ルーストにこれを実行する方法:?chars()
方法は、入力を移動/消費ので
別の解決策は、周りの修飾キーを保つことが、私はそれを動作させることができないだろうか