summaryrefslogtreecommitdiffstats
path: root/mycli/clitoolbar.py
blob: 52b6ee45750a0f12b3bf55ec9b8968127685099e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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]