summaryrefslogtreecommitdiff
path: root/src/KeyReader.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/KeyReader.zig')
-rw-r--r--src/KeyReader.zig8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/KeyReader.zig b/src/KeyReader.zig
index 28e6dcb..5ddef82 100644
--- a/src/KeyReader.zig
+++ b/src/KeyReader.zig
@@ -31,7 +31,7 @@ pub fn readKey(self: *KeyReader) Error!Key {
31 const reader = std.io.getStdIn().reader(); 31 const reader = std.io.getStdIn().reader();
32 const char = try readByteBlocking(reader); 32 const char = try readByteBlocking(reader);
33 if (char == '\x1b') { 33 if (char == '\x1b') {
34 return self.readMetaKey(reader); 34 return self.readMetaKey(reader, true);
35 } else if (char == '\x9b') { 35 } else if (char == '\x9b') {
36 return self.readControlSequence(reader); 36 return self.readControlSequence(reader);
37 } else { 37 } else {
@@ -186,9 +186,11 @@ fn readControlSequence(self: *KeyReader, reader: File.Reader) !Key {
186 return Key.meta('['); 186 return Key.meta('[');
187} 187}
188 188
189fn readMetaKey(self: *KeyReader, reader: File.Reader) Error!Key { 189fn readMetaKey(self: *KeyReader, reader: File.Reader, canRecurse: bool) Error!Key {
190 if (try readByte(reader)) |char| { 190 if (try readByte(reader)) |char| {
191 if (char == '[') { 191 if (char == '\x1b' and canRecurse) {
192 return Key.meta(try self.readMetaKey(reader, false));
193 } else if (char == '[') {
192 return self.readControlSequence(reader); 194 return self.readControlSequence(reader);
193 } else { 195 } else {
194 return Key.meta(char); 196 return Key.meta(char);