mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-06-06 20:04:25 +00:00
performable: prefix (#4345)
closes #4328 closes #3970 makes this possible now ``` keybind = performable:ctrl+c=copy_to_clipboard # copy if theres a selection else send sigint keybind = ctrl+v=paste_from_clipboard ```
This commit is contained in:
@@ -36,6 +36,11 @@ pub const Flags = packed struct {
|
||||
/// and not just while Ghostty is focused. This may not work on all platforms.
|
||||
/// See the keybind config documentation for more information.
|
||||
global: bool = false,
|
||||
|
||||
/// True if this binding should only be triggered if the action can be
|
||||
/// performed. If the action can't be performed then the binding acts as
|
||||
/// if it doesn't exist.
|
||||
performable: bool = false,
|
||||
};
|
||||
|
||||
/// Full binding parser. The binding parser is implemented as an iterator
|
||||
@@ -90,6 +95,9 @@ pub const Parser = struct {
|
||||
} else if (std.mem.eql(u8, prefix, "unconsumed")) {
|
||||
if (!flags.consumed) return Error.InvalidFormat;
|
||||
flags.consumed = false;
|
||||
} else if (std.mem.eql(u8, prefix, "performable")) {
|
||||
if (flags.performable) return Error.InvalidFormat;
|
||||
flags.performable = true;
|
||||
} else {
|
||||
// If we don't recognize the prefix then we're done.
|
||||
// There are trigger-specific prefixes like "physical:" so
|
||||
@@ -1688,6 +1696,16 @@ test "parse: triggers" {
|
||||
.flags = .{ .consumed = false },
|
||||
}, try parseSingle("unconsumed:physical:a+shift=ignore"));
|
||||
|
||||
// performable keys
|
||||
try testing.expectEqual(Binding{
|
||||
.trigger = .{
|
||||
.mods = .{ .shift = true },
|
||||
.key = .{ .translated = .a },
|
||||
},
|
||||
.action = .{ .ignore = {} },
|
||||
.flags = .{ .performable = true },
|
||||
}, try parseSingle("performable:shift+a=ignore"));
|
||||
|
||||
// invalid key
|
||||
try testing.expectError(Error.InvalidFormat, parseSingle("foo=ignore"));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user