Improve keyboard handling (closes #982)

Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
AnErrupTion
2026-05-10 13:55:19 +02:00
parent b3830d5bb6
commit 9ff4ddd129

View File

@@ -171,6 +171,7 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
const code = if (tb_event.ch == 0 and tb_event.key < 128) tb_event.key else tb_event.ch; const code = if (tb_event.ch == 0 and tb_event.key < 128) tb_event.key else tb_event.ch;
switch (code) { switch (code) {
// Non-standard control codes
0 => { 0 => {
key.ctrl = true; key.ctrl = true;
key.@"2" = true; key.@"2" = true;
@@ -342,7 +343,9 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key._ = true; key._ = true;
}, },
// Standard ASCII characters
32 => { 32 => {
key = std.mem.zeroes(Key);
key.@" " = true; key.@" " = true;
}, },
33 => { 33 => {
@@ -370,6 +373,7 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key.@"&" = true; key.@"&" = true;
}, },
39 => { 39 => {
key = std.mem.zeroes(Key);
key.@"'" = true; key.@"'" = true;
}, },
40 => { 40 => {
@@ -389,74 +393,86 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key.@"+" = true; key.@"+" = true;
}, },
44 => { 44 => {
key = std.mem.zeroes(Key);
key.@"," = true; key.@"," = true;
}, },
45 => { 45 => {
key = std.mem.zeroes(Key);
key.@"-" = true; key.@"-" = true;
}, },
46 => { 46 => {
key = std.mem.zeroes(Key);
key.@"." = true; key.@"." = true;
}, },
47 => { 47 => {
key = std.mem.zeroes(Key);
key.@"/" = true; key.@"/" = true;
}, },
48 => { 48 => {
key = std.mem.zeroes(Key);
key.@"0" = true; key.@"0" = true;
}, },
49 => { 49 => {
key = std.mem.zeroes(Key);
key.@"1" = true; key.@"1" = true;
}, },
50 => { 50 => {
key = std.mem.zeroes(Key);
key.@"2" = true; key.@"2" = true;
}, },
51 => { 51 => {
key = std.mem.zeroes(Key);
key.@"3" = true; key.@"3" = true;
}, },
52 => { 52 => {
key = std.mem.zeroes(Key);
key.@"4" = true; key.@"4" = true;
}, },
53 => { 53 => {
key = std.mem.zeroes(Key);
key.@"5" = true; key.@"5" = true;
}, },
54 => { 54 => {
key = std.mem.zeroes(Key);
key.@"6" = true; key.@"6" = true;
}, },
55 => { 55 => {
key = std.mem.zeroes(Key);
key.@"7" = true; key.@"7" = true;
}, },
56 => { 56 => {
key = std.mem.zeroes(Key);
key.@"8" = true; key.@"8" = true;
}, },
57 => { 57 => {
key = std.mem.zeroes(Key);
key.@"9" = true; key.@"9" = true;
}, },
58 => { 58 => {
key.shift = true; key = std.mem.zeroes(Key);
key.@":" = true; key.@":" = true;
}, },
59 => { 59 => {
key = std.mem.zeroes(Key);
key.@";" = true; key.@";" = true;
}, },
60 => { 60 => {
key.shift = true; key = std.mem.zeroes(Key);
key.@"<" = true; key.@"<" = true;
}, },
61 => { 61 => {
key = std.mem.zeroes(Key);
key.@"=" = true; key.@"=" = true;
}, },
62 => { 62 => {
key.shift = true; key = std.mem.zeroes(Key);
key.@">" = true; key.@">" = true;
}, },
63 => { 63 => {
key.shift = true; key = std.mem.zeroes(Key);
key.@"?" = true; key.@"?" = true;
}, },
64 => { 64 => {
key.shift = true;
key.@"2" = true;
try keys.append(allocator, key);
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key.@"@" = true; key.@"@" = true;
}, },
@@ -565,12 +581,15 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key.z = true; key.z = true;
}, },
91 => { 91 => {
key = std.mem.zeroes(Key);
key.@"[" = true; key.@"[" = true;
}, },
92 => { 92 => {
key = std.mem.zeroes(Key);
key.@"\\" = true; key.@"\\" = true;
}, },
93 => { 93 => {
key = std.mem.zeroes(Key);
key.@"]" = true; key.@"]" = true;
}, },
94 => { 94 => {
@@ -578,14 +597,11 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key.@"^" = true; key.@"^" = true;
}, },
95 => { 95 => {
key.shift = true;
key.@"-" = true;
try keys.append(allocator, key);
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key._ = true; key._ = true;
}, },
96 => { 96 => {
key = std.mem.zeroes(Key);
key.@"`" = true; key.@"`" = true;
}, },
97 => { 97 => {
@@ -667,34 +683,21 @@ pub fn getKeyList(allocator: Allocator, tb_event: termbox.tb_event) !KeyList {
key.z = true; key.z = true;
}, },
123 => { 123 => {
key.shift = true;
key.@"{" = true; key.@"{" = true;
}, },
124 => { 124 => {
key.shift = true;
key.@"\\" = true;
try keys.append(allocator, key);
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key.@"|" = true; key.@"|" = true;
}, },
125 => { 125 => {
key.shift = true; key = std.mem.zeroes(Key);
key.@"}" = true; key.@"}" = true;
}, },
126 => { 126 => {
key.shift = true;
key.@"`" = true;
try keys.append(allocator, key);
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key.@"~" = true; key.@"~" = true;
}, },
127 => { 127 => {
key.ctrl = true;
key.@"8" = true;
try keys.append(allocator, key);
key = std.mem.zeroes(Key); key = std.mem.zeroes(Key);
key.backspace = true; key.backspace = true;
}, },