Compare commits
4 commits
d59dc65e6b
...
a5d7e76897
| Author | SHA1 | Date | |
|---|---|---|---|
| a5d7e76897 | |||
| 35d823d0b8 | |||
| d55b5b695b | |||
| c4301c40d9 |
4 changed files with 35 additions and 23 deletions
|
|
@ -71,6 +71,7 @@ centered_view_min_screen_width: usize = 145,
|
||||||
lsp_output: enum { quiet, verbose } = .quiet,
|
lsp_output: enum { quiet, verbose } = .quiet,
|
||||||
|
|
||||||
keybind_mode: KeybindMode = .normal,
|
keybind_mode: KeybindMode = .normal,
|
||||||
|
dropdown_keybinds: DropdownKeybindMode = .standard,
|
||||||
|
|
||||||
include_files: []const u8 = "",
|
include_files: []const u8 = "",
|
||||||
|
|
||||||
|
|
@ -158,6 +159,11 @@ pub const KeybindMode = enum {
|
||||||
ignore_alt_text_modifiers,
|
ignore_alt_text_modifiers,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const DropdownKeybindMode = enum {
|
||||||
|
standard,
|
||||||
|
noninvasive,
|
||||||
|
};
|
||||||
|
|
||||||
pub const InitialFindQuery = enum {
|
pub const InitialFindQuery = enum {
|
||||||
empty,
|
empty,
|
||||||
selection,
|
selection,
|
||||||
|
|
|
||||||
|
|
@ -375,7 +375,7 @@
|
||||||
["right_control", "palette_menu_activate_quick"]
|
["right_control", "palette_menu_activate_quick"]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"overlay/dropdown": {
|
"overlay/dropdown-noninvasive": {
|
||||||
"inherit": "normal",
|
"inherit": "normal",
|
||||||
"press": [
|
"press": [
|
||||||
["alt+f9", "dropdown_next_widget_style"],
|
["alt+f9", "dropdown_next_widget_style"],
|
||||||
|
|
@ -388,6 +388,19 @@
|
||||||
["tab", "palette_menu_complete"]
|
["tab", "palette_menu_complete"]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"overlay/dropdown": {
|
||||||
|
"inherit": "normal",
|
||||||
|
"press": [
|
||||||
|
["alt+f9", "dropdown_next_widget_style"],
|
||||||
|
["ctrl+p", "palette_menu_up"],
|
||||||
|
["ctrl+n", "palette_menu_down"],
|
||||||
|
["escape", "palette_menu_cancel"],
|
||||||
|
["up", "palette_menu_up"],
|
||||||
|
["down", "palette_menu_down"],
|
||||||
|
["enter", "palette_menu_activate"],
|
||||||
|
["tab", "palette_menu_complete"]
|
||||||
|
]
|
||||||
|
},
|
||||||
"mini/numeric": {
|
"mini/numeric": {
|
||||||
"press": [
|
"press": [
|
||||||
["ctrl+?", "toggle_keybind_hints"],
|
["ctrl+?", "toggle_keybind_hints"],
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ pub const Entry = struct {
|
||||||
pub const ValueType = struct {
|
pub const ValueType = struct {
|
||||||
start: ed.CurSel = .{},
|
start: ed.CurSel = .{},
|
||||||
cursor: ed.Cursor = .{},
|
cursor: ed.Cursor = .{},
|
||||||
|
view: ed.View = .{},
|
||||||
replace: ?Buffer.Selection = null,
|
replace: ?Buffer.Selection = null,
|
||||||
};
|
};
|
||||||
pub const defaultValue: ValueType = .{};
|
pub const defaultValue: ValueType = .{};
|
||||||
|
|
@ -88,14 +89,16 @@ pub fn handle_event(self: *Type, _: tp.pid_ref, m: tp.message) tp.result {
|
||||||
try m.match(.{ "E", "close" }))
|
try m.match(.{ "E", "close" }))
|
||||||
{
|
{
|
||||||
const editor = tui.get_active_editor() orelse return;
|
const editor = tui.get_active_editor() orelse return;
|
||||||
if (!self.value.cursor.eql(editor.get_primary().cursor))
|
if (!self.value.cursor.eql(editor.get_primary().cursor) or !self.value.view.eql(editor.view)) {
|
||||||
tp.self_pid().send(.{ "cmd", "exit_overlay_mode" }) catch |e| self.logger.err(module_name, e);
|
tp.self_pid().send(.{ "cmd", "palette_menu_cancel" }) catch |e| self.logger.err(module_name, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn initial_query(self: *Type, allocator: std.mem.Allocator) error{OutOfMemory}![]const u8 {
|
pub fn initial_query(self: *Type, allocator: std.mem.Allocator) error{OutOfMemory}![]const u8 {
|
||||||
const editor = tui.get_active_editor() orelse return allocator.dupe(u8, "");
|
const editor = tui.get_active_editor() orelse return allocator.dupe(u8, "");
|
||||||
self.value.cursor = editor.get_primary().cursor;
|
self.value.cursor = editor.get_primary().cursor;
|
||||||
|
self.value.view = editor.view;
|
||||||
return if (self.value.replace) |replace| blk: {
|
return if (self.value.replace) |replace| blk: {
|
||||||
const sel: Buffer.Selection = .{ .begin = replace.begin, .end = self.value.start.cursor };
|
const sel: Buffer.Selection = .{ .begin = replace.begin, .end = self.value.start.cursor };
|
||||||
break :blk editor.get_selection(sel, allocator) catch break :blk allocator.dupe(u8, "");
|
break :blk editor.get_selection(sel, allocator) catch break :blk allocator.dupe(u8, "");
|
||||||
|
|
@ -295,6 +298,8 @@ pub fn updated(self: *Type, button_: ?*Type.ButtonType) !void {
|
||||||
}
|
}
|
||||||
try mv.set_info_content(" ", .append); // blank line
|
try mv.set_info_content(" ", .append); // blank line
|
||||||
try mv.set_info_content(values.documentation, .append);
|
try mv.set_info_content(values.documentation, .append);
|
||||||
|
if (mv.get_active_editor()) |editor|
|
||||||
|
self.value.view = editor.view;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cancel(_: *Type) !void {
|
pub fn cancel(_: *Type) !void {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ pub const Placement = enum {
|
||||||
pub fn Create(options: type) type {
|
pub fn Create(options: type) type {
|
||||||
return struct {
|
return struct {
|
||||||
allocator: std.mem.Allocator,
|
allocator: std.mem.Allocator,
|
||||||
modal: *ModalBackground.State(*Self),
|
|
||||||
menu: *Menu.State(*Self),
|
menu: *Menu.State(*Self),
|
||||||
mode: keybind.Mode,
|
mode: keybind.Mode,
|
||||||
query: std.ArrayList(u8),
|
query: std.ArrayList(u8),
|
||||||
|
|
@ -68,17 +67,6 @@ pub fn Create(options: type) type {
|
||||||
errdefer allocator.destroy(self);
|
errdefer allocator.destroy(self);
|
||||||
self.* = .{
|
self.* = .{
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.modal = try ModalBackground.create(*Self, allocator, tui.mainview_widget(), .{
|
|
||||||
.ctx = self,
|
|
||||||
.on_click = mouse_palette_menu_cancel,
|
|
||||||
.on_render = if (@hasDecl(options, "modal_dim"))
|
|
||||||
if (options.modal_dim)
|
|
||||||
ModalBackground.Options(*Self).on_render_dim
|
|
||||||
else
|
|
||||||
ModalBackground.Options(*Self).on_render_default
|
|
||||||
else
|
|
||||||
ModalBackground.Options(*Self).on_render_dim,
|
|
||||||
}),
|
|
||||||
.menu = try Menu.create(*Self, allocator, tui.plane(), .{
|
.menu = try Menu.create(*Self, allocator, tui.plane(), .{
|
||||||
.ctx = self,
|
.ctx = self,
|
||||||
.style = widget_type,
|
.style = widget_type,
|
||||||
|
|
@ -93,7 +81,10 @@ pub fn Create(options: type) type {
|
||||||
.query = .empty,
|
.query = .empty,
|
||||||
.view_rows = get_view_rows(tui.screen()),
|
.view_rows = get_view_rows(tui.screen()),
|
||||||
.entries = .empty,
|
.entries = .empty,
|
||||||
.mode = try keybind.mode("overlay/dropdown", allocator, .{
|
.mode = try keybind.mode(switch (tui.config().dropdown_keybinds) {
|
||||||
|
.standard => "overlay/dropdown",
|
||||||
|
.noninvasive => "overlay/dropdown-noninvasive",
|
||||||
|
}, allocator, .{
|
||||||
.insert_command = "overlay_insert_bytes",
|
.insert_command = "overlay_insert_bytes",
|
||||||
}),
|
}),
|
||||||
.placement = if (@hasDecl(options, "placement")) options.placement else .top_center,
|
.placement = if (@hasDecl(options, "placement")) options.placement else .top_center,
|
||||||
|
|
@ -114,7 +105,6 @@ pub fn Create(options: type) type {
|
||||||
try self.query.appendSlice(self.allocator, initial_query);
|
try self.query.appendSlice(self.allocator, initial_query);
|
||||||
}
|
}
|
||||||
try self.start_query(0);
|
try self.start_query(0);
|
||||||
try mv.floating_views.add(self.modal.widget());
|
|
||||||
try mv.floating_views.add(self.menu.container_widget);
|
try mv.floating_views.add(self.menu.container_widget);
|
||||||
|
|
||||||
if (@hasDecl(options, "handle_event")) blk: {
|
if (@hasDecl(options, "handle_event")) blk: {
|
||||||
|
|
@ -133,10 +123,8 @@ pub fn Create(options: type) type {
|
||||||
if (@hasDecl(options, "deinit"))
|
if (@hasDecl(options, "deinit"))
|
||||||
options.deinit(self);
|
options.deinit(self);
|
||||||
self.entries.deinit(self.allocator);
|
self.entries.deinit(self.allocator);
|
||||||
if (tui.mainview()) |mv| {
|
if (tui.mainview()) |mv|
|
||||||
mv.floating_views.remove(self.menu.container_widget);
|
mv.floating_views.remove(self.menu.container_widget);
|
||||||
mv.floating_views.remove(self.modal.widget());
|
|
||||||
}
|
|
||||||
self.logger.deinit();
|
self.logger.deinit();
|
||||||
self.allocator.destroy(self);
|
self.allocator.destroy(self);
|
||||||
}
|
}
|
||||||
|
|
@ -371,7 +359,7 @@ pub fn Create(options: type) type {
|
||||||
try self.query.appendSlice(self.allocator, buf[0..bytes]);
|
try self.query.appendSlice(self.allocator, buf[0..bytes]);
|
||||||
if (@hasDecl(options, "update_query"))
|
if (@hasDecl(options, "update_query"))
|
||||||
options.update_query(self, self.query.items);
|
options.update_query(self, self.query.items);
|
||||||
std.log.debug("insert_code_point: '{s}'", .{self.query.items});
|
// std.log.debug("insert_code_point: '{s}'", .{self.query.items});
|
||||||
return self.start_query(0);
|
return self.start_query(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -379,7 +367,7 @@ pub fn Create(options: type) type {
|
||||||
try self.query.appendSlice(self.allocator, bytes);
|
try self.query.appendSlice(self.allocator, bytes);
|
||||||
if (@hasDecl(options, "update_query"))
|
if (@hasDecl(options, "update_query"))
|
||||||
options.update_query(self, self.query.items);
|
options.update_query(self, self.query.items);
|
||||||
std.log.debug("insert_bytes: '{s}'", .{self.query.items});
|
// std.log.debug("insert_bytes: '{s}'", .{self.query.items});
|
||||||
return self.start_query(0);
|
return self.start_query(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -425,7 +413,7 @@ pub fn Create(options: type) type {
|
||||||
|
|
||||||
pub fn palette_menu_down(self: *Self, _: Ctx) Result {
|
pub fn palette_menu_down(self: *Self, _: Ctx) Result {
|
||||||
if (self.menu.selected) |selected| {
|
if (self.menu.selected) |selected| {
|
||||||
if (selected == self.view_rows - 1 and
|
if (selected == self.view_rows -| 1 and
|
||||||
self.view_pos + self.view_rows < self.total_items)
|
self.view_pos + self.view_rows < self.total_items)
|
||||||
{
|
{
|
||||||
self.view_pos += 1;
|
self.view_pos += 1;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue