Use a dedicated choose() method matching confirm()
This commit is contained in:
parent
32e31a3c6b
commit
d219654387
@ -680,6 +680,22 @@ class Boss:
|
|||||||
self._run_kitten('ask', ['--type=yesno', '--message', msg, '--default', 'y' if confirm_on_accept else 'n'],
|
self._run_kitten('ask', ['--type=yesno', '--message', msg, '--default', 'y' if confirm_on_accept else 'n'],
|
||||||
window=window, custom_callback=callback_, default_data={'response': 'y' if confirm_on_cancel else 'n'})
|
window=window, custom_callback=callback_, default_data={'response': 'y' if confirm_on_cancel else 'n'})
|
||||||
|
|
||||||
|
def choose(
|
||||||
|
self, msg: str, # can contain newlines and ANSI formatting
|
||||||
|
callback: Callable[..., None], # called with the choice or empty string when aborted
|
||||||
|
*choices: str, # The choices, see the help for the ask kitten for format of a choice
|
||||||
|
window: Optional[Window] = None, # the window associated with the confirmation
|
||||||
|
default: str = '', # the default choice when the user presses Enter
|
||||||
|
) -> None:
|
||||||
|
def callback_(res: Dict[str, Any], x: int, boss: Boss) -> None:
|
||||||
|
callback(res.get('response') or '')
|
||||||
|
cmd = ['--type=choices', '--message', msg]
|
||||||
|
if default:
|
||||||
|
cmd += ['-d', default]
|
||||||
|
for c in choices:
|
||||||
|
cmd += ['-c', c]
|
||||||
|
self._run_kitten('ask', cmd, window=window, custom_callback=callback_, default_data={'response': ''})
|
||||||
|
|
||||||
def confirm_tab_close(self, tab: Tab) -> None:
|
def confirm_tab_close(self, tab: Tab) -> None:
|
||||||
x = get_options().confirm_os_window_close
|
x = get_options().confirm_os_window_close
|
||||||
num = tab.number_of_windows_with_running_programs if x < 0 else len(tab)
|
num = tab.number_of_windows_with_running_programs if x < 0 else len(tab)
|
||||||
|
|||||||
@ -649,21 +649,16 @@ class Window:
|
|||||||
url = urlunparse(purl._replace(netloc=''))
|
url = urlunparse(purl._replace(netloc=''))
|
||||||
if opts.allow_hyperlinks & 0b10:
|
if opts.allow_hyperlinks & 0b10:
|
||||||
from kittens.tui.operations import styled
|
from kittens.tui.operations import styled
|
||||||
get_boss()._run_kitten('ask', ['--type=choices', '--message', _(
|
get_boss().choose(
|
||||||
'What would you like to do with this URL:\n') +
|
'What would you like to do with this URL:\n' + styled(unquote(url), fg='yellow'),
|
||||||
styled(unquote(url), fg='yellow'),
|
partial(self.hyperlink_open_confirmed, url, cwd),
|
||||||
'--choice=o:Open', '--choice=c:Copy to clipboard', '--choice=n;red:Nothing',
|
'o:Open', 'c:Copy to clipboard', 'n;red:Nothing', default='o',
|
||||||
'--default=o'
|
|
||||||
],
|
|
||||||
window=self,
|
window=self,
|
||||||
custom_callback=partial(self.hyperlink_open_confirmed, url, cwd),
|
|
||||||
default_data={'response': ''}
|
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
get_boss().open_url(url, cwd=cwd)
|
get_boss().open_url(url, cwd=cwd)
|
||||||
|
|
||||||
def hyperlink_open_confirmed(self, url: str, cwd: Optional[str], data: Dict[str, Any], *a: Any) -> None:
|
def hyperlink_open_confirmed(self, url: str, cwd: Optional[str], q: str) -> None:
|
||||||
q = data.get('response', '')
|
|
||||||
if q == 'o':
|
if q == 'o':
|
||||||
get_boss().open_url(url, cwd=cwd)
|
get_boss().open_url(url, cwd=cwd)
|
||||||
elif q == 'c':
|
elif q == 'c':
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user