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)
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))
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', {}))
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