Repository: charmbracelet/huh (Go)

Issue:
 MultiSelect's filterable set to "false" will have no effect.
**Describe the bug**
MultiSelect's filterable set to "false" will have no effect.

**To Reproduce**
Steps to reproduce the behavior:

1. run a following code:
```go
package main

import (
	"github.com/charmbracelet/huh"
)

func main() {
	var types []string

	form := huh.NewMultiSelect[string]().
		Filterable(false).
		Options(
			huh.NewOption("Module", "Module").Selected(true),
			huh.NewOption("Constant", "Constant").Selected(true),
			huh.NewOption("Method", "Method").Selected(true),
			huh.NewOption("Attribute", "Attribute"),
			huh.NewOption("Class", "Class").Selected(true),
		).
		Title("Types").
		Value(&types)

	huh.NewForm(huh.NewGroup(form)).Run()

}

```
2. Click on "/"
3. Provide a "constant" value


**Expected behavior**
Filtering should not be possible on a MultiSelect field because `Filterable(false)` method was used.

**Desktop (please complete the following information):**
 - OS: Manjaro/Linux
 - Version github.com/charmbracelet/huh v0.4.2, go 1.22



Discussion:

Patch:
diff --git a/field_multiselect.go b/field_multiselect.go
index fe96517a..faa33ee5 100644
--- a/field_multiselect.go
+++ b/field_multiselect.go
@@ -65,6 +65,7 @@ func NewMultiSelect[T comparable]() *MultiSelect[T] {
 		title:       Eval[string]{cache: make(map[uint64]string)},
 		description: Eval[string]{cache: make(map[uint64]string)},
 		spinner:     s,
+		filterable:  true,
 	}
 }
 
@@ -225,15 +226,23 @@ func (m *MultiSelect[T]) KeyBinds() []key.Binding {
 		m.keymap.Toggle,
 		m.keymap.Up,
 		m.keymap.Down,
-		m.keymap.Filter,
-		m.keymap.SetFilter,
-		m.keymap.ClearFilter,
+	}
+	if m.filterable {
+		binds = append(
+			binds,
+			m.keymap.Filter,
+			m.keymap.SetFilter,
+			m.keymap.ClearFilter,
+		)
+	}
+	binds = append(
+		binds,
 		m.keymap.Prev,
 		m.keymap.Submit,
 		m.keymap.Next,
 		m.keymap.SelectAll,
 		m.keymap.SelectNone,
-	}
+	)
 	return binds
 }
 
@@ -705,6 +714,11 @@ func (m *MultiSelect[T]) WithTheme(theme *Theme) Field {
 // WithKeyMap sets the keymap of the multi-select field.
 func (m *MultiSelect[T]) WithKeyMap(k *KeyMap) Field {
 	m.keymap = k.MultiSelect
+	if !m.filterable {
+		m.keymap.Filter.SetEnabled(false)
+		m.keymap.ClearFilter.SetEnabled(false)
+		m.keymap.SetFilter.SetEnabled(false)
+	}
 	return m
 }
 


Test patch:
diff --git a/huh_test.go b/huh_test.go
index 7e16a15a..9819c6d4 100644
--- a/huh_test.go
+++ b/huh_test.go
@@ -543,6 +543,49 @@ func TestMultiSelect(t *testing.T) {
 	}
 }
 
+func TestMultiSelectFiltering(t *testing.T) {
+	tests := []struct {
+		name      string
+		filtering bool
+	}{
+		{"Filtering off", false},
+		{"Filtering on", true},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			field := NewMultiSelect[string]().Options(NewOptions("Foo", "Bar", "Baz")...).Title("Which one?").Filterable(tc.filtering)
+			f := NewForm(NewGroup(field))
+			f.Update(f.Init())
+			// Filter for values starting with a 'B' only.
+			f.Update(keys('/'))
+			f.Update(keys('B'))
+
+			view := ansi.Strip(f.View())
+			// When we're filtering, the list should change.
+			if tc.filtering && strings.Contains(view, "Foo") {
+				t.Log(pretty.Render(view))
+				t.Error("Foo should not in filtered list.")
+			}
+			// When we're not filtering, the list shouldn't change.
+			if !tc.filtering && !strings.Contains(view, "Foo") {
+				t.Log(pretty.Render(view))
+				t.Error("Expected list to contain Foo.")
+			}
+		})
+	}
+	t.Run("Remove filter option from help menu.", func(t *testing.T) {
+		field := NewMultiSelect[string]().Options(NewOptions("Foo", "Bar", "Baz")...).Title("Which one?").Filterable(false)
+		f := NewForm(NewGroup(field))
+		f.Update(f.Init())
+		view := ansi.Strip(f.View())
+		if strings.Contains(view, "filter") {
+			t.Log(pretty.Render(view))
+			t.Error("Expected list to hide filtering in help menu.")
+		}
+	})
+}
+
 func TestSelectPageNavigation(t *testing.T) {
 	opts := NewOptions(
 		"Qux",