hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel/input.rv
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/input.rv')
-rw-r--r--kernel/input.rv23
1 files changed, 10 insertions, 13 deletions
diff --git a/kernel/input.rv b/kernel/input.rv
index 26ce545..ed0f4f7 100644
--- a/kernel/input.rv
+++ b/kernel/input.rv
@@ -25,11 +25,13 @@ end
# she stroke my keys till i handle
# no fr this is just a key stroke handler
-global shell = { line = "", shift = :false, extended = :false }
+global shell = { shift = :false, extended = :false, ctrl = :false }
fn decode_key(code) do
if code == 0x2a or code == 0x36 do shell.shift = :true return :nil end # shift down
if code == 0xaa or code == 0xb6 do shell.shift = :false return :nil end # shift up
+ if code == 0x1d do shell.ctrl = :true return :nil end # ctrl down
+ if code == 0x9d do shell.ctrl = :false return :nil end # ctrl up
if code >= 128 return :nil # other releases
if code == 28 return "\n" # enter
if code == 14 return "\x08" # backspace
@@ -37,7 +39,8 @@ fn decode_key(code) do
if code >= KEYMAP:len() return :nil
const character = if shell.shift KEYMAP_SHIFT[code] else KEYMAP[code]
if character == " " and code != 0x39 return :nil # blank cells = modifiers/unmapped
- character
+ if shell.ctrl return string.of_ascii(character:ascii() band 0x1f)
+ return character
end
global on_key = fn(code) do
@@ -49,21 +52,15 @@ global on_key = fn(code) do
else if code == 0x50 do final = 66 end # down
else if code == 0x4d do final = 67 end # right
else if code == 0x4b do final = 68 end # left
+ else if code == 0x47 do final = 72 end # home
+ else if code == 0x4f do final = 70 end # end
if final != 0 do
- stdin_deliver(27)
- stdin_deliver(91)
- stdin_deliver(final)
+ tty:feed(27) tty:feed(91) tty:feed(final)
end
return :nil
end
const character = decode_key(code)
if character == :nil return :nil
- if stdin_deliver(character:ascii()) return :nil
- if character == "\n" do puts("\n") run(shell.line) shell.line = "" return :nil end
- if character == "\x08" do
- if shell.line:len() > 0 do shell.line = shell.line:sub(0, shell.line:len() - 1) puts("\x08 \x08") end
- return :nil
- end
- shell.line ~= character
- puts(character)
+ tty:feed(character:ascii())
end
+