Пример #1
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if parts[-1].startswith('-'):
        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=['s', 'l', 'r', 'a'],
            longs=['show', 'last', 'recent', 'available', 'forget']
        )

    if len(parts) == 1:
        value = parts[0]

        if value.startswith('@examples:'):
            path_segment = value.split(':', 1)[-1]
            return autocompletion.match_path(
                segment,
                environ.paths.package('resources', 'examples', path_segment),
                include_files=False
            )

        if value.startswith('@home:'):
            path_segment = value.split(':', 1)[-1]
            return autocompletion.match_path(
                segment,
                environ.paths.clean(
                    os.path.join('~', 'cauldron', path_segment)
                ),
                include_files=False
            )

        environ.configs.load()
        aliases = environ.configs.fetch('folder_aliases', {})
        matches = ['@{}:'.format(x) for x in aliases.keys()]

        for m in matches:
            if value.startswith(m):
                return autocompletion.match_path(
                    segment,
                    environ.paths.clean(os.path.join(
                        aliases[m[1:-1]]['path'],
                        value[-1].split(':', 1)[-1]
                    )),
                    include_files=False
                )

        matches.append('@examples:')
        matches.append('@home:')

        if value.startswith('@'):
            return autocompletion.matches(segment, value, matches)

        return autocompletion.match_path(segment, value)
Пример #2
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if parts[-1].startswith('-'):
        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=['s', 'l', 'r', 'a'],
            longs=['show', 'last', 'recent', 'available', 'forget'])

    if len(parts) == 1:
        value = parts[0]

        if value.startswith('@examples:'):
            path_segment = value.split(':', 1)[-1]
            return autocompletion.match_path(segment,
                                             environ.paths.package(
                                                 'resources', 'examples',
                                                 path_segment),
                                             include_files=False)

        if value.startswith('@home:'):
            path_segment = value.split(':', 1)[-1]
            return autocompletion.match_path(
                segment,
                environ.paths.clean(os.path.join('~', 'cauldron',
                                                 path_segment)),
                include_files=False)

        environ.configs.load()
        aliases = environ.configs.fetch('folder_aliases', {})
        matches = ['@{}:'.format(x) for x in aliases.keys()]

        for m in matches:
            if value.startswith(m):
                return autocompletion.match_path(
                    segment,
                    environ.paths.clean(
                        os.path.join(aliases[m[1:-1]]['path'],
                                     value[-1].split(':', 1)[-1])),
                    include_files=False)

        matches.append('@examples:')
        matches.append('@home:')

        if value.startswith('@'):
            return autocompletion.matches(segment, value, matches)

        return autocompletion.match_path(segment, value)
Пример #3
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if len(parts) < 2:
        return autocompletion.matches(
            segment, parts[0],
            ['add', 'list', 'remove', 'modify', 'unmute', 'mute'])

    action = parts[0]
    if action == 'list':
        return []

    project = cauldron.project.internal_project

    if len(parts) < 3 or parts[-1].startswith(('--position=', '-p ')):
        prefix = parts[-1]
        for remove in ['--position=', '-p ']:
            if prefix.startswith(remove):
                prefix = prefix[len(remove):]
                break
        prefix = prefix.strip().strip('"')

        step_names = [x.definition.name for x in project.steps]
        return autocompletion.match_in_path_list(segment, prefix, step_names)

    if parts[-1].startswith('-'):
        if action == 'list':
            return []

        shorts = []
        longs = []

        if action == 'remove':
            shorts.append('k')
            longs.append('keep')
        else:
            shorts += ['p', 't']
            longs += ['position=', 'title=']

        if action == 'modify':
            shorts.append('n')
            longs.append('name=')

        return autocompletion.match_flags(segment=segment,
                                          value=parts[-1],
                                          shorts=shorts,
                                          longs=longs)

    return []
Пример #4
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if parts[-1].startswith('-'):
        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=['f', 'a', 'd'],
            longs=['force', 'append', 'directory']
        )

    if len(parts) == 1:
        return autocompletion.match_path(segment, parts[0])

    return []
Пример #5
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if len(parts) < 1:
        return []

    if parts[-1].startswith('-'):
        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=['f', 'c', 's', 'l'],
            longs=['force', 'continue', 'step', 'limit'])

    value = parts[-1]
    project = cauldron.project.internal_project
    step_names = [x.definition.name for x in project.steps]
    return autocompletion.match_in_path_list(segment, value, step_names)
Пример #6
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if len(parts) < 1:
        return []

    if parts[-1].startswith('-'):
        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=['f', 'c', 's', 'l'],
            longs=['force', 'continue', 'step', 'limit', 'skip-reload']
        )

    value = parts[-1]
    project = cauldron.project.internal_project
    step_names = [x.definition.name for x in project.steps]
    return autocompletion.match_in_path_list(segment, value, step_names)
Пример #7
0
def autocomplete(segment: str, line: str, parts: typing.List[str]):
    """

    :param segment:
    :param line:
    :param parts:
    :return:
    """

    if len(parts) < 2:
        return autocompletion.matches(
            segment,
            parts[0],
            ['add', 'list', 'remove', 'modify', 'unmute', 'mute']
        )

    action = parts[0]
    if action == 'list':
        return []

    project = cauldron.project.internal_project

    if len(parts) < 3 or parts[-1].startswith(('--position=', '-p ')):
        prefix = parts[-1]
        for remove in ['--position=', '-p ']:
            if prefix.startswith(remove):
                prefix = prefix[len(remove):]
                break
        prefix = prefix.strip().strip('"')

        step_names = [x.definition.name for x in project.steps]
        return autocompletion.match_in_path_list(
            segment,
            prefix,
            step_names
        )

    if parts[-1].startswith('-'):
        if action == 'list':
            return []

        shorts = []
        longs = []

        if action == 'remove':
            shorts.append('k')
            longs.append('keep')
        else:
            shorts += ['p', 't']
            longs += ['position=', 'title=']

        if action == 'modify':
            shorts.append('n')
            longs.append('name=')

        return autocompletion.match_flags(
            segment=segment,
            value=parts[-1],
            shorts=shorts,
            longs=longs
        )

    return []