From 9d836514cfa67979351a641b34006a287352830a Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Tue, 15 Apr 2025 16:29:14 +0200 Subject: [PATCH] fix(key): accept both key.Text and key.String for key matches This commit fixes the key matching logic to accept both the key.Text and key.String representations of keys. This allows for more flexible key matching, especially when dealing with different keyboard layouts or input methods. Fixes: https://github.com/charmbracelet/bubbletea/issues/1390 --- key/key.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/key/key.go b/key/key.go index 0c79a7a..9cb6882 100644 --- a/key/key.go +++ b/key/key.go @@ -36,7 +36,11 @@ // to render help text for keystrokes in your views. package key -import "fmt" +import ( + "fmt" + + tea "github.com/charmbracelet/bubbletea/v2" +) // Binding describes a set of keybindings and, optionally, their associated // help text. @@ -128,10 +132,15 @@ type Help struct { // Matches checks if the given key matches the given bindings. func Matches[Key fmt.Stringer](k Key, b ...Binding) bool { + var txt string + switch v := any(k).(type) { + case tea.KeyMsg: + txt = v.Key().Text + } keys := k.String() for _, binding := range b { for _, v := range binding.keys { - if keys == v && binding.Enabled() { + if binding.Enabled() && (v == keys || (txt != "" && v == txt)) { return true } }