1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 09:30:04 +08:00
SpaceVim/bundle/defx.nvim/rplugin/python3/denite/source/defx/session.py
2020-06-13 14:06:35 +08:00

59 lines
1.9 KiB
Python

# ============================================================================
# FILE: defx/session.py
# AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
# License: MIT license
# ============================================================================
from defx.util import Nvim, UserContext, Candidates
from denite.kind.command import Kind as Command
from denite.source.base import Base
class Source(Base):
def __init__(self, vim: Nvim) -> None:
super().__init__(vim)
self.name = 'defx/session'
self.kind = Kind(vim)
def on_init(self, context: UserContext) -> None:
self._winid = self.vim.call('win_getid')
self._bufnr = self.vim.call('bufnr', '%')
def gather_candidates(self, context: UserContext) -> Candidates:
sessions = self.vim.call(
'getbufvar', self._bufnr, 'defx#_sessions', [])
if not sessions:
return []
max_name = max([self.vim.call('strwidth', x['name'])
for x in sessions])
word_format = '{0:<' + str(max_name) + '} - {1}'
return [{
'word': word_format.format(x['name'], x['path']),
'action__command': "call defx#call_action('cd', '{}')".format(
x['path']),
'action__path': x['path'],
'source__winid': self._winid,
} for x in sessions]
class Kind(Command):
def __init__(self, vim: Nvim) -> None:
super().__init__(vim)
self.name = 'defx/session'
self.persist_actions += ['delete']
self.redraw_actions += ['delete']
def action_delete(self, context: UserContext) -> Candidates:
winid = self.vim.call('win_getid')
for candidate in context['targets']:
self.vim.call('win_gotoid', candidate['source__winid'])
self.vim.call('defx#call_action', 'delete_session',
candidate['action__path'])
self.vim.call('win_gotoid', winid)