1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 23:30:03 +08:00
SpaceVim/bundle/defx.nvim/rplugin/python3/defx/source/file.py
2020-06-13 14:06:35 +08:00

62 lines
1.8 KiB
Python

# ============================================================================
# FILE: file.py
# AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
# License: MIT license
# ============================================================================
from pathlib import Path
import typing
from defx.base.source import Base
from defx.context import Context
from defx.util import error, readable, safe_call, Nvim
class Source(Base):
def __init__(self, vim: Nvim) -> None:
super().__init__(vim)
self.name = 'file'
from defx.kind.file import Kind
self.kind: Kind = Kind(self.vim)
self.vars = {
'root': None,
}
def get_root_candidate(
self, context: Context, path: Path
) -> typing.Dict[str, typing.Any]:
word = self.vim.call('fnamemodify', str(path), ':~')
if self.vim.call('defx#util#is_windows'):
word = word.replace('\\', '/')
if word[-1:] != '/':
word += '/'
if self.vars['root']:
word = self.vim.call(self.vars['root'], str(path))
word = word.replace('\n', '\\n')
return {
'word': word,
'is_directory': True,
'action__path': path,
}
def gather_candidates(
self, context: Context, path: Path
) -> typing.List[typing.Dict[str, typing.Any]]:
candidates = []
if not readable(path) or not path.is_dir():
error(self.vim, f'"{path}" is not readable directory.')
return []
for entry in path.iterdir():
candidates.append({
'word': entry.name.replace('\n', '\\n') + (
'/' if safe_call(entry.is_dir, False) else ''),
'is_directory': safe_call(entry.is_dir, False),
'action__path': entry,
})
return candidates