예제 #1
0
def close_view(params: dict, view, rpc_channel: mp.Queue) -> None:
    view_id = params['view_id']
    if view.views[view_id].lines.has_selection:
        rpc_channel.edit('collapse_selections', {}, view_id)
        view.views[view_id].undo_stack.append(('close_view', {'view_id': view_id}))  # <-- re-add this action
    else:
        view.close_view(view_id)
예제 #2
0
def paste(params: dict, view, rpc_channel: mp.Queue) -> None:
    text = view.app.clipboard.get_data()
    view_id = params.get('view_id') or view.current_view.view_id
    if text.type == 'CHARACTERS':
        rpc_channel.edit('paste', {'chars': text.text}, view_id)
    else:
        logging.warning('[ACTION] Cant paste {}'.format(text.type))
예제 #3
0
def multicursor(params: dict, view, rpc_channel: mp.Queue) -> None:
    sview = view.current_view
    if not sview.lines.has_selection:
        sview.config['modify_selection'] = 'add'
        for (line, col) in sview.lines.cursors:
            rpc_channel.edit(
                'gesture', {
                    'line': line,
                    'col': col,
                    'ty': {
                        'select': {
                            'granularity': 'word',
                            'multi': True
                        }
                    }
                })
        rpc_channel.edit('selection_for_find', {
            'case_sensitive': False,
        })
        # Remove any old multicursor_cancel, if they are left:
        while ('multicursor_cancel', {}) in sview.undo_stack:
            sview.undo_stack.remove(('multicursor_cancel', {}))
        sview.undo_stack.append(('multicursor_cancel', {}))
    else:
        rpc_channel.edit(
            'find_next', {
                'wrap_around': True,
                'allow_same': True,
                'modify_selection': sview.config.get('modify_selection',
                                                     'add'),
            })
        sview.config['modify_selection'] = 'add'
        # Add
        if ('multicursor_cancel', {}) not in sview.undo_stack:
            sview.undo_stack.append(('multicursor_cancel', {}))
예제 #4
0
def multicursor_cancel(params: dict, view, rpc_channel: mp.Queue) -> bool:
    if len(list(view.current_view.lines.cursors)) > 1:
        rpc_channel.edit('collapse_selections')
    else:
        # multicursors has already been cancel/removed, so do next "Esc operation"
        return False