fix: move internal clipboard from buffer local to session wide
closes #287
This commit is contained in:
parent
a227eb925c
commit
5286975257
3 changed files with 21 additions and 16 deletions
|
@ -280,7 +280,6 @@ pub const Editor = struct {
|
||||||
cursels_saved: CurSel.List = .empty,
|
cursels_saved: CurSel.List = .empty,
|
||||||
selection_mode: SelectMode = .char,
|
selection_mode: SelectMode = .char,
|
||||||
selection_drag_initial: ?Selection = null,
|
selection_drag_initial: ?Selection = null,
|
||||||
clipboard: ?[]const u8 = null,
|
|
||||||
target_column: ?Cursor = null,
|
target_column: ?Cursor = null,
|
||||||
filter_: ?struct {
|
filter_: ?struct {
|
||||||
before_root: Buffer.Root,
|
before_root: Buffer.Root,
|
||||||
|
@ -385,9 +384,8 @@ pub const Editor = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_state(self: *const Self, writer: Buffer.MetaWriter) !void {
|
pub fn write_state(self: *const Self, writer: Buffer.MetaWriter) !void {
|
||||||
try cbor.writeArrayHeader(writer, 12);
|
try cbor.writeArrayHeader(writer, 11);
|
||||||
try cbor.writeValue(writer, self.file_path orelse "");
|
try cbor.writeValue(writer, self.file_path orelse "");
|
||||||
try cbor.writeValue(writer, self.clipboard orelse "");
|
|
||||||
try cbor.writeValue(writer, self.last_find_query orelse "");
|
try cbor.writeValue(writer, self.last_find_query orelse "");
|
||||||
try cbor.writeValue(writer, self.enable_format_on_save);
|
try cbor.writeValue(writer, self.enable_format_on_save);
|
||||||
try cbor.writeValue(writer, self.enable_auto_save);
|
try cbor.writeValue(writer, self.enable_auto_save);
|
||||||
|
@ -419,12 +417,10 @@ pub const Editor = struct {
|
||||||
var file_path: []const u8 = undefined;
|
var file_path: []const u8 = undefined;
|
||||||
var view_cbor: []const u8 = undefined;
|
var view_cbor: []const u8 = undefined;
|
||||||
var cursels_cbor: []const u8 = undefined;
|
var cursels_cbor: []const u8 = undefined;
|
||||||
var clipboard: []const u8 = undefined;
|
|
||||||
var last_find_query: []const u8 = undefined;
|
var last_find_query: []const u8 = undefined;
|
||||||
var find_history: []const u8 = undefined;
|
var find_history: []const u8 = undefined;
|
||||||
if (!try cbor.matchValue(iter, .{
|
if (!try cbor.matchValue(iter, .{
|
||||||
tp.extract(&file_path),
|
tp.extract(&file_path),
|
||||||
tp.extract(&clipboard),
|
|
||||||
tp.extract(&last_find_query),
|
tp.extract(&last_find_query),
|
||||||
tp.extract(&self.enable_format_on_save),
|
tp.extract(&self.enable_format_on_save),
|
||||||
tp.extract(&self.enable_auto_save),
|
tp.extract(&self.enable_auto_save),
|
||||||
|
@ -440,7 +436,6 @@ pub const Editor = struct {
|
||||||
self.refresh_tab_width();
|
self.refresh_tab_width();
|
||||||
if (op == .open_file)
|
if (op == .open_file)
|
||||||
try self.open(file_path);
|
try self.open(file_path);
|
||||||
self.clipboard = if (clipboard.len > 0) try self.allocator.dupe(u8, clipboard) else null;
|
|
||||||
self.last_find_query = if (last_find_query.len > 0) try self.allocator.dupe(u8, last_find_query) else null;
|
self.last_find_query = if (last_find_query.len > 0) try self.allocator.dupe(u8, last_find_query) else null;
|
||||||
const rows = self.view.rows;
|
const rows = self.view.rows;
|
||||||
const cols = self.view.cols;
|
const cols = self.view.cols;
|
||||||
|
@ -2605,9 +2600,7 @@ pub const Editor = struct {
|
||||||
pub const scroll_view_bottom_meta: Meta = .{};
|
pub const scroll_view_bottom_meta: Meta = .{};
|
||||||
|
|
||||||
fn set_clipboard(self: *Self, text: []const u8) void {
|
fn set_clipboard(self: *Self, text: []const u8) void {
|
||||||
if (self.clipboard) |old|
|
tui.set_clipboard(text);
|
||||||
self.allocator.free(old);
|
|
||||||
self.clipboard = text;
|
|
||||||
if (builtin.os.tag == .windows) {
|
if (builtin.os.tag == .windows) {
|
||||||
@import("renderer").copy_to_windows_clipboard(text) catch |e|
|
@import("renderer").copy_to_windows_clipboard(text) catch |e|
|
||||||
self.logger.print_err("clipboard", "failed to set clipboard: {any}", .{e});
|
self.logger.print_err("clipboard", "failed to set clipboard: {any}", .{e});
|
||||||
|
@ -2616,10 +2609,8 @@ pub const Editor = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_clipboard_internal(self: *Self, text: []const u8) void {
|
pub fn set_clipboard_internal(_: *Self, text: []const u8) void {
|
||||||
if (self.clipboard) |old|
|
tui.set_clipboard(text);
|
||||||
self.allocator.free(old);
|
|
||||||
self.clipboard = text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn copy_selection(root: Buffer.Root, sel: Selection, text_allocator: Allocator, metrics: Buffer.Metrics) ![]u8 {
|
pub fn copy_selection(root: Buffer.Root, sel: Selection, text_allocator: Allocator, metrics: Buffer.Metrics) ![]u8 {
|
||||||
|
@ -2952,7 +2943,7 @@ pub const Editor = struct {
|
||||||
pub fn paste(self: *Self, ctx: Context) Result {
|
pub fn paste(self: *Self, ctx: Context) Result {
|
||||||
var text: []const u8 = undefined;
|
var text: []const u8 = undefined;
|
||||||
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
||||||
if (self.clipboard) |text_| text = text_ else return;
|
if (tui.get_clipboard()) |text_| text = text_ else return;
|
||||||
}
|
}
|
||||||
self.logger.print("paste: {d} bytes", .{text.len});
|
self.logger.print("paste: {d} bytes", .{text.len});
|
||||||
const b = try self.buf_for_update();
|
const b = try self.buf_for_update();
|
||||||
|
@ -2987,7 +2978,7 @@ pub const Editor = struct {
|
||||||
pub fn paste_internal_vim(self: *Self, ctx: Context) Result {
|
pub fn paste_internal_vim(self: *Self, ctx: Context) Result {
|
||||||
var text: []const u8 = undefined;
|
var text: []const u8 = undefined;
|
||||||
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
||||||
if (self.clipboard) |text_| text = text_ else return;
|
if (tui.get_clipboard()) |text_| text = text_ else return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.logger.print("paste: {d} bytes", .{text.len});
|
self.logger.print("paste: {d} bytes", .{text.len});
|
||||||
|
|
|
@ -267,7 +267,7 @@ const cmds_ = struct {
|
||||||
|
|
||||||
var text: []const u8 = undefined;
|
var text: []const u8 = undefined;
|
||||||
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
if (!(ctx.args.buf.len > 0 and try ctx.args.match(.{tp.extract(&text)}))) {
|
||||||
if (ed.clipboard) |text_| text = text_ else return;
|
if (tui.get_clipboard()) |text_| text = text_ else return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ed.logger.print("paste: {d} bytes", .{text.len});
|
ed.logger.print("paste: {d} bytes", .{text.len});
|
||||||
|
|
|
@ -64,6 +64,7 @@ fontfaces_: std.ArrayListUnmanaged([]const u8) = .{},
|
||||||
enable_mouse_idle_timer: bool = false,
|
enable_mouse_idle_timer: bool = false,
|
||||||
query_cache_: *syntax.QueryCache,
|
query_cache_: *syntax.QueryCache,
|
||||||
frames_rendered_: usize = 0,
|
frames_rendered_: usize = 0,
|
||||||
|
clipboard: ?[]const u8 = null,
|
||||||
|
|
||||||
const keepalive = std.time.us_per_day * 365; // one year
|
const keepalive = std.time.us_per_day * 365; // one year
|
||||||
const idle_frames = 0;
|
const idle_frames = 0;
|
||||||
|
@ -252,6 +253,7 @@ fn deinit(self: *Self) void {
|
||||||
self.logger.deinit();
|
self.logger.deinit();
|
||||||
self.query_cache_.deinit();
|
self.query_cache_.deinit();
|
||||||
root.free_config(self.allocator, self.config_bufs);
|
root.free_config(self.allocator, self.config_bufs);
|
||||||
|
if (self.clipboard) |text| self.allocator.free(text);
|
||||||
self.allocator.destroy(self);
|
self.allocator.destroy(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1645,3 +1647,15 @@ fn widget_type_config_variable(widget_type: WidgetType) *ConfigWidgetStyle {
|
||||||
.home => &config_.home_style,
|
.home => &config_.home_style,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_clipboard() ?[]const u8 {
|
||||||
|
const self = current();
|
||||||
|
return self.clipboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_clipboard(text: []const u8) void {
|
||||||
|
const self = current();
|
||||||
|
if (self.clipboard) |old|
|
||||||
|
self.allocator.free(old);
|
||||||
|
self.clipboard = text;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue