fix: attempt to gracefully recover if we get stuck in a bracketed paste
This commit is contained in:
parent
0c1815a946
commit
7f506a160e
1 changed files with 15 additions and 7 deletions
|
@ -636,8 +636,11 @@ fn send_mouse_drag(self: *Self, from: tp.pid_ref, m: tp.message) error{Exit}!boo
|
||||||
|
|
||||||
fn send_input(self: *Self, from: tp.pid_ref, m: tp.message) void {
|
fn send_input(self: *Self, from: tp.pid_ref, m: tp.message) void {
|
||||||
tp.trace(tp.channel.input, m);
|
tp.trace(tp.channel.input, m);
|
||||||
if (self.bracketed_paste) {
|
if (self.bracketed_paste and self.handle_bracketed_paste_input(m) catch |e| {
|
||||||
self.handle_bracketed_paste_input(m) catch |e| self.logger.err("bracketed paste input handler", e);
|
self.bracketed_paste_buffer.clearAndFree();
|
||||||
|
self.bracketed_paste = false;
|
||||||
|
return self.logger.err("bracketed paste input handler", e);
|
||||||
|
}) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.input_listeners.send(from, m) catch {};
|
self.input_listeners.send(from, m) catch {};
|
||||||
|
@ -961,19 +964,24 @@ fn handle_bracketed_paste_begin(self: *Self) tp.result {
|
||||||
self.bracketed_paste = true;
|
self.bracketed_paste = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_bracketed_paste_input(self: *Self, m: tp.message) tp.result {
|
fn handle_bracketed_paste_input(self: *Self, m: tp.message) !bool {
|
||||||
var keypress: u32 = undefined;
|
var keypress: u32 = undefined;
|
||||||
var egc: u32 = undefined;
|
var egc: u32 = undefined;
|
||||||
if (try m.match(.{ "I", tp.number, tp.extract(&keypress), tp.extract(&egc), tp.string, tp.number })) {
|
if (try m.match(.{ "I", tp.number, tp.extract(&keypress), tp.extract(&egc), tp.string, 0 })) {
|
||||||
switch (keypress) {
|
switch (keypress) {
|
||||||
nc.key.ENTER => self.bracketed_paste_buffer.appendSlice("\n") catch |e| return tp.exit_error(e),
|
nc.key.ENTER => try self.bracketed_paste_buffer.appendSlice("\n"),
|
||||||
else => if (!nc.key.synthesized_p(keypress)) {
|
else => if (!nc.key.synthesized_p(keypress)) {
|
||||||
var buf: [6]u8 = undefined;
|
var buf: [6]u8 = undefined;
|
||||||
const bytes = nc.ucs32_to_utf8(&[_]u32{egc}, &buf) catch |e| return tp.exit_error(e);
|
const bytes = try nc.ucs32_to_utf8(&[_]u32{egc}, &buf);
|
||||||
self.bracketed_paste_buffer.appendSlice(buf[0..bytes]) catch |e| return tp.exit_error(e);
|
try self.bracketed_paste_buffer.appendSlice(buf[0..bytes]);
|
||||||
|
} else {
|
||||||
|
try self.handle_bracketed_paste_end();
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_bracketed_paste_end(self: *Self) tp.result {
|
fn handle_bracketed_paste_end(self: *Self) tp.result {
|
||||||
|
|
Loading…
Add table
Reference in a new issue