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;
|
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)
|
if (event == input.event.release)
|
||||||
return self.process_key_release_event(key_event);
|
return self.process_key_release_event(key_event);
|
||||||
|
|
||||||
|
@ -600,14 +594,14 @@ const BindingSet = struct {
|
||||||
}
|
}
|
||||||
globals.last_key_event_timestamp_ms = timestamp;
|
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;
|
return null;
|
||||||
|
|
||||||
try globals.current_sequence.append(globals_allocator, key_event);
|
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;
|
var buf: [6]u8 = undefined;
|
||||||
const bytes = if (text.len > 0) text else text: {
|
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];
|
break :text buf[0..bytes];
|
||||||
};
|
};
|
||||||
try globals.current_sequence_egc.appendSlice(globals_allocator, 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_);
|
const event = std.mem.bytesAsValue(vaxis.Event, input_);
|
||||||
switch (event.*) {
|
switch (event.*) {
|
||||||
.key_press => |key__| {
|
.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);
|
try self.sync_mod_state(key_.codepoint, key_.mods);
|
||||||
const cbor_msg = try self.fmtmsg(.{
|
const cbor_msg = try self.fmtmsg(.{
|
||||||
"I",
|
"I",
|
||||||
input.event.press,
|
input.event.press,
|
||||||
key_.codepoint,
|
key_.base_layout_codepoint orelse key_.codepoint,
|
||||||
key_.shifted_codepoint orelse key_.codepoint,
|
key_.shifted_codepoint orelse key_.codepoint,
|
||||||
text orelse "",
|
text orelse "",
|
||||||
@as(u8, @bitCast(key_.mods)),
|
@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);
|
} else if (self.dispatch_input) |f| f(self.handler_ctx, cbor_msg);
|
||||||
},
|
},
|
||||||
.key_release => |key__| {
|
.key_release => |key__| {
|
||||||
const key_ = filter_mods(key__);
|
const key_ = filter_mods(normalize_shifted_alphas(key__));
|
||||||
const cbor_msg = try self.fmtmsg(.{
|
const cbor_msg = try self.fmtmsg(.{
|
||||||
"I",
|
"I",
|
||||||
input.event.release,
|
input.event.release,
|
||||||
key_.codepoint,
|
key_.base_layout_codepoint orelse key_.codepoint,
|
||||||
key_.shifted_codepoint orelse key_.codepoint,
|
key_.shifted_codepoint orelse key_.codepoint,
|
||||||
text orelse "",
|
text orelse "",
|
||||||
@as(u8, @bitCast(key_.mods)),
|
@as(u8, @bitCast(key_.mods)),
|
||||||
|
@ -460,6 +460,16 @@ fn filter_mods(key_: vaxis.Key) vaxis.Key {
|
||||||
return 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 {
|
const Loop = struct {
|
||||||
tty: *vaxis.Tty,
|
tty: *vaxis.Tty,
|
||||||
vaxis: *vaxis.Vaxis,
|
vaxis: *vaxis.Vaxis,
|
||||||
|
|
Loading…
Add table
Reference in a new issue