Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
# ============================================================================
|
|
# FILE: __init__.py
|
|
# AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
|
|
# License: MIT license
|
|
# ============================================================================
|
|
|
|
from enum import auto, IntFlag
|
|
import typing
|
|
|
|
from defx.context import Context
|
|
from defx.defx import Defx
|
|
from defx.view import View
|
|
|
|
|
|
class ActionAttr(IntFlag):
|
|
REDRAW = auto()
|
|
MARK = auto()
|
|
NO_TAGETS = auto()
|
|
CURSOR_TARGET = auto()
|
|
TREE = auto()
|
|
NONE = 0
|
|
|
|
|
|
class ActionTable(typing.NamedTuple):
|
|
func: typing.Callable[[View, Defx, Context], None]
|
|
attr: ActionAttr = ActionAttr.NONE
|
|
|
|
|
|
def do_action(view: View, defx: Defx,
|
|
action_name: str, context: Context) -> bool:
|
|
"""
|
|
Do "action_name" action.
|
|
"""
|
|
if not defx._source:
|
|
return True
|
|
|
|
actions: typing.Dict[str, ActionTable] = defx._source.kind.get_actions()
|
|
|
|
if action_name not in actions:
|
|
return True
|
|
|
|
action = actions[action_name]
|
|
|
|
selected_candidates = [x for x in view._candidates if x['is_selected']]
|
|
if (selected_candidates and
|
|
ActionAttr.NO_TAGETS not in action.attr and
|
|
ActionAttr.TREE not in action.attr):
|
|
# Clear marks
|
|
for candidate in selected_candidates:
|
|
candidate['is_selected'] = False
|
|
view.redraw()
|
|
|
|
if ActionAttr.CURSOR_TARGET in action.attr:
|
|
# Use cursor candidate only
|
|
cursor_candidate = view.get_cursor_candidate(context.cursor)
|
|
if not cursor_candidate:
|
|
return True
|
|
context = context._replace(
|
|
targets=[cursor_candidate],
|
|
)
|
|
|
|
action.func(view, defx, context)
|
|
|
|
if action_name != 'repeat':
|
|
view._prev_action = action_name
|
|
|
|
if ActionAttr.MARK in action.attr:
|
|
# Update marks
|
|
view.update_candidates()
|
|
view.redraw()
|
|
elif ActionAttr.TREE in action.attr:
|
|
view.update_candidates()
|
|
view.redraw()
|
|
elif ActionAttr.REDRAW in action.attr:
|
|
# Redraw
|
|
view.redraw(True)
|
|
return False
|