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
		Add a link
		
	
		Reference in a new issue