feat: add Stdin.isRaw property to query and set terminal raw mode on stdin

Add foreign static getter `isRaw` and setter `isRaw=(value)` to the Stdin class, backed by a new `isStdinRaw` boolean flag and `uv_tty_set_mode` calls. The getter returns the current raw mode state, while the setter initializes the stdin stream if needed and applies raw or normal mode only when stdin is a TTY. Also includes a test file verifying default false, reading bytes in normal mode, enabling raw mode, and reading subsequent bytes.
This commit is contained in:
Bob Nystrom
2016-05-20 22:19:18 +00:00
parent 6394e1c486
commit efa97cdccf
6 changed files with 103 additions and 19 deletions
+28
View File
@@ -0,0 +1,28 @@
import "io" for Stdin
// Defaults to false.
System.print(Stdin.isRaw) // expect: false
// stdin: abcdefgh
for (i in 1..4) {
System.print(Stdin.readByte())
}
// expect: 97
// expect: 98
// expect: 99
// expect: 100
Stdin.isRaw = true
System.print(Stdin.isRaw) // expect: true
for (i in 1..4) {
System.print(Stdin.readByte())
}
// expect: 101
// expect: 102
// expect: 103
// expect: 104
// TODO: This doesn't actually detect a visible difference between raw and
// non-raw mode. Maybe add support to the test runner for writing non-printing
// characters to stdin?