Книга: Программирование на языке Ruby

10.1.20. Ввод символов с клавиатуры

10.1.20. Ввод символов с клавиатуры

В данном случае мы имеем в виду небуферизованный ввод, когда символ обрабатывается сразу после нажатия клавиши, не дожидаясь, пока будет введена вся строка.

Это можно сделать и в UNIX, и в Windows, но, к сожалению, совершенно по-разному.

Версия для UNIX прямолинейна. Мы переводим терминал в режим прямого ввода (raw mode) и обычно одновременно отключаем эхо-контроль.

def getchar
 system("stty raw -echo") # Прямой ввод без эхо-контроля.
 char = STDIN.getc
 system("stty -raw echo") # Восстановить режим терминала.
 char
end

На платформе Windows придется написать расширение на С. Пока что альтернативой является использование одной из функций в библиотеке Win32API.

require 'Win32API'
def getchar
 char = Win32API.new("crtdll", "_getch", [], 'L').Call
end

Поведение в обоих случаях идентично.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.866. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз