from prompt_toolkit.key_binding.vi_state import InputMode from prompt_toolkit.application import get_app from prompt_toolkit.enums import EditingMode from .packages import special def create_toolbar_tokens_func(mycli, show_fish_help): """Return a function that generates the toolbar tokens.""" def get_toolbar_tokens(): result = [('class:bottom-toolbar', ' ')] if mycli.multi_line: delimiter = special.get_current_delimiter() result.append( ( 'class:bottom-toolbar', ' ({} [{}] will end the line) '.format( 'Semi-colon' if delimiter == ';' else 'Delimiter', delimiter) )) if mycli.multi_line: result.append(('class:bottom-toolbar.on', '[F3] Multiline: ON ')) else: result.append(('class:bottom-toolbar.off', '[F3] Multiline: OFF ')) if mycli.prompt_app.editing_mode == EditingMode.VI: result.append(( 'class:bottom-toolbar.on', 'Vi-mode ({})'.format(_get_vi_mode()) )) if mycli.toolbar_error_message: result.append( ('class:bottom-toolbar', ' ' + mycli.toolbar_error_message)) mycli.toolbar_error_message = None if show_fish_help(): result.append( ('class:bottom-toolbar', ' Right-arrow to complete suggestion')) if mycli.completion_refresher.is_refreshing(): result.append( ('class:bottom-toolbar', ' Refreshing completions...')) return result return get_toolbar_tokens def _get_vi_mode(): """Get the current vi mode for display.""" return { InputMode.INSERT: 'I', InputMode.NAVIGATION: 'N', InputMode.REPLACE: 'R', InputMode.REPLACE_SINGLE: 'R', InputMode.INSERT_MULTIPLE: 'M', }[get_app().vi_state.input_mode]