fix: correctly read inputs from *stdin* when not using *raw mode*
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 1m6s
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 1m6s
This commit is contained in:
22
src/app.zig
22
src/app.zig
@@ -443,6 +443,7 @@ pub fn App(comptime M: type, comptime E: type) type {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (this.config.rawMode) {
|
||||||
const b = buf[0];
|
const b = buf[0];
|
||||||
const key: Key = switch (b) {
|
const key: Key = switch (b) {
|
||||||
0x00 => .{ .cp = '@', .mod = .{ .ctrl = true } },
|
0x00 => .{ .cp = '@', .mod = .{ .ctrl = true } },
|
||||||
@@ -460,12 +461,20 @@ pub fn App(comptime M: type, comptime E: type) type {
|
|||||||
var len = read_bytes;
|
var len = read_bytes;
|
||||||
while (!std.unicode.utf8ValidateSlice(buf[0..len])) len -= 1;
|
while (!std.unicode.utf8ValidateSlice(buf[0..len])) len -= 1;
|
||||||
remaining_bytes = read_bytes - len;
|
remaining_bytes = read_bytes - len;
|
||||||
|
|
||||||
if (this.config.rawMode) {
|
|
||||||
var iter: std.unicode.Utf8Iterator = .{ .bytes = buf[0..len], .i = 0 };
|
var iter: std.unicode.Utf8Iterator = .{ .bytes = buf[0..len], .i = 0 };
|
||||||
while (iter.nextCodepoint()) |cp| this.postEvent(.{ .key = .{ .cp = cp } });
|
while (iter.nextCodepoint()) |cp| this.postEvent(.{ .key = .{ .cp = cp } });
|
||||||
} else try lines.appendSlice(this.gpa, buf[0..len]);
|
if (remaining_bytes > 0) {
|
||||||
|
@memmove(buf[0..remaining_bytes], buf[len .. len + remaining_bytes]);
|
||||||
|
}
|
||||||
|
continue; // this switch block does not return a `Key` we continue with loop
|
||||||
|
},
|
||||||
|
};
|
||||||
|
this.postEvent(.{ .key = key });
|
||||||
|
} else {
|
||||||
|
var len = read_bytes;
|
||||||
|
while (!std.unicode.utf8ValidateSlice(buf[0..len])) len -= 1;
|
||||||
|
remaining_bytes = read_bytes - len;
|
||||||
|
try lines.appendSlice(this.gpa, buf[0..len]);
|
||||||
if (remaining_bytes > 0) {
|
if (remaining_bytes > 0) {
|
||||||
@memmove(buf[0..remaining_bytes], buf[len .. len + remaining_bytes]);
|
@memmove(buf[0..remaining_bytes], buf[len .. len + remaining_bytes]);
|
||||||
} else {
|
} else {
|
||||||
@@ -476,10 +485,7 @@ pub fn App(comptime M: type, comptime E: type) type {
|
|||||||
this.postEvent(.cancel);
|
this.postEvent(.cancel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue; // this switch block does not return a `Key` we continue with loop
|
}
|
||||||
},
|
|
||||||
};
|
|
||||||
this.postEvent(.{ .key = key });
|
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user