diff --git a/prompt_toolkit/shortcuts/dialogs.py b/prompt_toolkit/shortcuts/dialogs.py index a91bb3142..bfb29b984 100644 --- a/prompt_toolkit/shortcuts/dialogs.py +++ b/prompt_toolkit/shortcuts/dialogs.py @@ -175,6 +175,7 @@ def radiolist_dialog( ok_text: str = "Ok", cancel_text: str = "Cancel", values: Optional[List[Tuple[_T, AnyFormattedText]]] = None, + default_values: List[_T] = [], style: Optional[BaseStyle] = None, ) -> Application[_T]: """ @@ -189,7 +190,7 @@ def radiolist_dialog( def ok_handler() -> None: get_app().exit(result=radio_list.current_value) - radio_list = RadioList(values) + radio_list = RadioList(values=values, default_values=default_values) dialog = Dialog( title=title, @@ -213,6 +214,7 @@ def checkboxlist_dialog( ok_text: str = "Ok", cancel_text: str = "Cancel", values: Optional[List[Tuple[_T, AnyFormattedText]]] = None, + default_values: List[_T] = [], style: Optional[BaseStyle] = None, ) -> Application[List[_T]]: """ @@ -227,7 +229,7 @@ def checkboxlist_dialog( def ok_handler() -> None: get_app().exit(result=cb_list.current_values) - cb_list = CheckboxList(values) + cb_list = CheckboxList(values=values, default_values=default_values) dialog = Dialog( title=title, diff --git a/prompt_toolkit/widgets/base.py b/prompt_toolkit/widgets/base.py index 728190b54..7b5ffec36 100644 --- a/prompt_toolkit/widgets/base.py +++ b/prompt_toolkit/widgets/base.py @@ -686,14 +686,25 @@ class _DialogList(Generic[_T]): multiple_selection: bool = False show_scrollbar: bool = True - def __init__(self, values: Sequence[Tuple[_T, AnyFormattedText]]) -> None: + def __init__( + self, values: Sequence[Tuple[_T, AnyFormattedText]], default_values: List[_T] + ) -> None: assert len(values) > 0 self.values = values # current_values will be used in multiple_selection, # current_value will be used otherwise. - self.current_values: List[_T] = [] - self.current_value: _T = values[0][0] + candidate: List[_T] = [value for (value, _) in values] + self.current_values: List[_T] = [ + default_value + for default_value in default_values + if (default_value in candidate) + ] + self.current_value: _T = ( + default_values[0] + if len(default_values) and default_values[0] in candidate + else values[0][0] + ) self._selected_index = 0 # Key bindings. @@ -859,7 +870,8 @@ class Checkbox(CheckboxList[str]): def __init__(self, text: AnyFormattedText = "", checked: bool = False) -> None: values = [("value", text)] - CheckboxList.__init__(self, values) + default_values = ["value"] + CheckboxList.__init__(self, values=values, default_values=default_values) self.checked = checked @property