fix: normalized vaxis windows console input
This commit is contained in:
parent
0c7f19b5dd
commit
b73975328b
2 changed files with 17 additions and 13 deletions
|
@ -584,12 +584,6 @@ const BindingSet = struct {
|
|||
};
|
||||
const text = key_event.text;
|
||||
|
||||
//normalize to lowercase if modifier is set
|
||||
const key = if (mods > 0 and key_event.key >= 'A' and key_event.key <= 'Z')
|
||||
key_event.key - 'A' + 'a'
|
||||
else
|
||||
key_event.key;
|
||||
|
||||
if (event == input.event.release)
|
||||
return self.process_key_release_event(key_event);
|
||||
|
||||
|
@ -600,14 +594,14 @@ const BindingSet = struct {
|
|||
}
|
||||
globals.last_key_event_timestamp_ms = timestamp;
|
||||
|
||||
if (globals.current_sequence.items.len > 0 and input.is_modifier(key))
|
||||
if (globals.current_sequence.items.len > 0 and input.is_modifier(key_event.key))
|
||||
return null;
|
||||
|
||||
try globals.current_sequence.append(globals_allocator, key_event);
|
||||
if ((mods & ~(input.mod.shift | input.mod.caps_lock) == 0) and !input.is_non_input_key(key)) {
|
||||
if ((mods & ~(input.mod.shift | input.mod.caps_lock) == 0) and !input.is_non_input_key(key_event.key)) {
|
||||
var buf: [6]u8 = undefined;
|
||||
const bytes = if (text.len > 0) text else text: {
|
||||
const bytes = try input.ucs32_to_utf8(&[_]u32{key}, &buf);
|
||||
const bytes = try input.ucs32_to_utf8(&[_]u32{key_event.key}, &buf);
|
||||
break :text buf[0..bytes];
|
||||
};
|
||||
try globals.current_sequence_egc.appendSlice(globals_allocator, bytes);
|
||||
|
|
|
@ -151,12 +151,12 @@ pub fn process_renderer_event(self: *Self, msg: []const u8) !void {
|
|||
const event = std.mem.bytesAsValue(vaxis.Event, input_);
|
||||
switch (event.*) {
|
||||
.key_press => |key__| {
|
||||
const key_ = filter_mods(key__);
|
||||
const key_ = filter_mods(normalize_shifted_alphas(key__));
|
||||
try self.sync_mod_state(key_.codepoint, key_.mods);
|
||||
const cbor_msg = try self.fmtmsg(.{
|
||||
"I",
|
||||
input.event.press,
|
||||
key_.codepoint,
|
||||
key_.base_layout_codepoint orelse key_.codepoint,
|
||||
key_.shifted_codepoint orelse key_.codepoint,
|
||||
text orelse "",
|
||||
@as(u8, @bitCast(key_.mods)),
|
||||
|
@ -166,11 +166,11 @@ pub fn process_renderer_event(self: *Self, msg: []const u8) !void {
|
|||
} else if (self.dispatch_input) |f| f(self.handler_ctx, cbor_msg);
|
||||
},
|
||||
.key_release => |key__| {
|
||||
const key_ = filter_mods(key__);
|
||||
const key_ = filter_mods(normalize_shifted_alphas(key__));
|
||||
const cbor_msg = try self.fmtmsg(.{
|
||||
"I",
|
||||
input.event.release,
|
||||
key_.codepoint,
|
||||
key_.base_layout_codepoint orelse key_.codepoint,
|
||||
key_.shifted_codepoint orelse key_.codepoint,
|
||||
text orelse "",
|
||||
@as(u8, @bitCast(key_.mods)),
|
||||
|
@ -460,6 +460,16 @@ fn filter_mods(key_: vaxis.Key) vaxis.Key {
|
|||
return key__;
|
||||
}
|
||||
|
||||
fn normalize_shifted_alphas(key_: vaxis.Key) vaxis.Key {
|
||||
if (!key_.mods.shift) return key_;
|
||||
var key = key_;
|
||||
const shifted_codepoint = key.shifted_codepoint orelse key.codepoint;
|
||||
const base_layout_codepoint = key.base_layout_codepoint orelse key.codepoint;
|
||||
if (shifted_codepoint == base_layout_codepoint and 'a' <= shifted_codepoint and shifted_codepoint <= 'z')
|
||||
key.shifted_codepoint = shifted_codepoint - 0x20;
|
||||
return key;
|
||||
}
|
||||
|
||||
const Loop = struct {
|
||||
tty: *vaxis.Tty,
|
||||
vaxis: *vaxis.Vaxis,
|
||||
|
|
Loading…
Add table
Reference in a new issue