Skip to content

Commit e35c32c

Browse files
committed
add callback for filter_list choice change
1 parent 2e095d5 commit e35c32c

2 files changed

Lines changed: 19 additions & 5 deletions

File tree

src/inquirer/questions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,13 @@ def __init__(
192192
other=False,
193193
autocomplete=None,
194194
filter_func=None,
195+
choice_callback=None,
195196
):
196197
super().__init__(name, message, choices, default, ignore, validate, hints=hints, other=other)
197198
self.carousel = carousel
198199
self.autocomplete = autocomplete
199200
self.filter_func = filter_func
201+
self.choice_callback = choice_callback
200202

201203

202204
class Checkbox(Question):

src/inquirer/render/console/_filter_list.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,22 @@ def get_options(self):
7070
symbol = " " if choice == GLOBAL_OTHER_CHOICE else " " * len(self.theme.List.selection_cursor)
7171
yield choice, symbol, color
7272

73+
def _get_current_choice(self):
74+
return self.question.choices[self.current]
75+
7376
def process_input(self, pressed):
77+
prev_choice = self._get_current_choice()
78+
79+
self._process_control_input(pressed)
80+
81+
self._process_text_input(pressed)
82+
83+
current_choice = self._get_current_choice()
84+
if prev_choice != current_choice:
85+
if self.question.choice_callback:
86+
self.question.choice_callback(current_choice)
87+
88+
def _process_control_input(self, pressed):
7489
question = self.question
7590
if pressed == key.UP:
7691
if question.carousel and self.current == 0:
@@ -85,7 +100,7 @@ def process_input(self, pressed):
85100
self.current = min(len(self.question.choices) - 1, self.current + 1)
86101
return
87102
if pressed == key.ENTER:
88-
value = self.question.choices[self.current]
103+
value = self._get_current_choice()
89104

90105
if value == GLOBAL_OTHER_CHOICE:
91106
value = self.other_input()
@@ -99,10 +114,7 @@ def process_input(self, pressed):
99114
if pressed == key.CTRL_C:
100115
raise KeyboardInterrupt()
101116

102-
# Add text processing
103-
self._process_text(pressed)
104-
105-
def _process_text(self, pressed):
117+
def _process_text_input(self, pressed):
106118
prev_text = self.current_text
107119

108120
if pressed == key.TAB and self.question.autocomplete:

0 commit comments

Comments
 (0)