input: add link highlight always/hover w/ mods

This commit is contained in:
Mitchell Hashimoto
2024-01-27 19:07:49 -08:00
parent ae11cc9042
commit 3efe88c85c
5 changed files with 16 additions and 7 deletions

View File

@ -2289,7 +2289,7 @@ fn linkAtPos(
for (self.config.links) |link| {
switch (link.highlight) {
.always, .hover => {},
.mods => |v| if (!v.equal(self.mouse.mods)) continue,
.always_mods, .hover_mods => |v| if (!v.equal(self.mouse.mods)) continue,
}
var it = strmap.searchIterator(link.regex);

View File

@ -1437,7 +1437,7 @@ pub fn default(alloc_gpa: Allocator) Allocator.Error!Config {
try result.link.links.append(alloc, .{
.regex = url.regex,
.action = .{ .open = {} },
.highlight = .{ .mods = inputpkg.ctrlOrSuper(.{}) },
.highlight = .{ .hover_mods = inputpkg.ctrlOrSuper(.{}) },
});
return result;

View File

@ -32,9 +32,12 @@ pub const Highlight = union(enum) {
/// Only highlight the link when the mouse is hovering over it.
hover: void,
/// Highlight anytime the given mods are pressed, regardless of
/// hover state.
mods: Mods,
/// Highlight anytime the given mods are pressed, either when
/// hovering or always. For always, all links will be highlighted
/// when the mods are pressed regardless of if the mouse is hovering
/// over them.
always_mods: Mods,
hover_mods: Mods,
};
/// Returns a new oni.Regex that can be used to match the link.

View File

@ -991,6 +991,7 @@ pub fn rebuildCells(
arena_alloc,
screen,
mouse.point orelse .{},
mouse.mods,
);
// Determine our x/y range for preedit. We don't want to render anything

View File

@ -96,8 +96,13 @@ pub const Set = struct {
// error if any other conditions are added.
switch (link.highlight) {
.always => {},
.hover => if (!line.selection().contains(mouse_pt)) continue,
.mods => |v| if (!mouse_mods.equal(v)) continue,
.always_mods => |v| if (!mouse_mods.equal(v)) continue,
inline .hover, .hover_mods => |v, tag| {
if (!line.selection().contains(mouse_pt)) continue;
if (comptime tag == .hover_mods) {
if (!mouse_mods.equal(v)) continue;
}
},
}
var it = strmap.searchIterator(link.regex);