UltiSnipsEdit look for non empty files in snippets directories
This commit is contained in:
parent
4c71935cba
commit
eb7240ff7d
@ -195,9 +195,14 @@ g:UltiSnipsSnippetsDir
|
|||||||
files are stored in. For example, if the variable
|
files are stored in. For example, if the variable
|
||||||
is set to "~/.vim/mydir/UltiSnips" and the current
|
is set to "~/.vim/mydir/UltiSnips" and the current
|
||||||
'filetype' is "cpp", then :UltiSnipsEdit will open
|
'filetype' is "cpp", then :UltiSnipsEdit will open
|
||||||
"~/.vim/mydir/UltiSnips/cpp.snippets". Note that
|
"~/.vim/mydir/UltiSnips/cpp.snippets" if file is
|
||||||
directories named "snippets" are reserved for
|
not empty, if it's empty :UltiSnipsEdit will see
|
||||||
snipMate snippets and cannot be used.
|
for non-empty files in directories
|
||||||
|
g:UltiSnipsSnippetDirectories, if nothing found,
|
||||||
|
:UltiSnipsEdit will open new file in
|
||||||
|
g:UltiSnipsSnippetsDir.
|
||||||
|
Note that directories named "snippets" are
|
||||||
|
reserved for snipMate snippets and cannot be used.
|
||||||
|
|
||||||
*g:UltiSnipsSnippetDirectories*
|
*g:UltiSnipsSnippetDirectories*
|
||||||
g:UltiSnipsSnippetDirectories
|
g:UltiSnipsSnippetDirectories
|
||||||
|
@ -771,7 +771,7 @@ class SnippetManager(object):
|
|||||||
return None
|
return None
|
||||||
return self._csnippets[-1]
|
return self._csnippets[-1]
|
||||||
|
|
||||||
def _file_to_edit(self, requested_ft, bang): # pylint: disable=no-self-use
|
def _file_to_edit(self, requested_ft, bang):
|
||||||
"""Returns a file to be edited for the given requested_ft.
|
"""Returns a file to be edited for the given requested_ft.
|
||||||
|
|
||||||
If 'bang' is
|
If 'bang' is
|
||||||
@ -779,22 +779,56 @@ class SnippetManager(object):
|
|||||||
otherwise all files are considered and the user gets to choose.
|
otherwise all files are considered and the user gets to choose.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# This method is not using self, but is called by UltiSnips.vim and is
|
|
||||||
# therefore in this class because it is the facade to Vim.
|
|
||||||
potentials = set()
|
|
||||||
|
|
||||||
|
snippet_dir = ''
|
||||||
if _vim.eval("exists('g:UltiSnipsSnippetsDir')") == '1':
|
if _vim.eval("exists('g:UltiSnipsSnippetsDir')") == '1':
|
||||||
snippet_dir = _vim.eval('g:UltiSnipsSnippetsDir')
|
dir = _vim.eval('g:UltiSnipsSnippetsDir')
|
||||||
else:
|
file = self._get_file_to_edit(dir, requested_ft, bang)
|
||||||
|
if file:
|
||||||
|
return file
|
||||||
|
snippet_dir = dir
|
||||||
|
|
||||||
|
if _vim.eval("exists('g:UltiSnipsSnippetDirectories')") == '1':
|
||||||
|
dirs = _vim.eval('g:UltiSnipsSnippetDirectories')
|
||||||
|
for dir in dirs:
|
||||||
|
file = self._get_file_to_edit(dir, requested_ft, bang)
|
||||||
|
if file:
|
||||||
|
return file
|
||||||
|
if not snippet_dir:
|
||||||
|
snippet_dir = dir
|
||||||
|
|
||||||
home = _vim.eval('$HOME')
|
home = _vim.eval('$HOME')
|
||||||
if platform.system() == 'Windows':
|
if platform.system() == 'Windows':
|
||||||
snippet_dir = os.path.join(home, 'vimfiles', 'UltiSnips')
|
dir = os.path.join(home, 'vimfiles', 'UltiSnips')
|
||||||
elif _vim.eval("has('nvim')") == '1':
|
file = self._get_file_to_edit(dir, requested_ft, bang)
|
||||||
xdg_home_config = _vim.eval('$XDG_CONFIG_HOME') or os.path.join(home, ".config")
|
if file:
|
||||||
snippet_dir = os.path.join(xdg_home_config, 'nvim', 'UltiSnips')
|
return file
|
||||||
else:
|
if not snippet_dir:
|
||||||
snippet_dir = os.path.join(home, '.vim', 'UltiSnips')
|
snippet_dir = dir
|
||||||
|
|
||||||
|
if _vim.eval("has('nvim')") == '1':
|
||||||
|
xdg_home_config = _vim.eval('$XDG_CONFIG_HOME') or os.path.join(home, ".config")
|
||||||
|
dir = os.path.join(xdg_home_config, 'nvim', 'UltiSnips')
|
||||||
|
file = self._get_file_to_edit(dir, requested_ft, bang)
|
||||||
|
if file:
|
||||||
|
return file
|
||||||
|
if not snippet_dir:
|
||||||
|
snippet_dir = dir
|
||||||
|
|
||||||
|
dir = os.path.join(home, '.vim', 'UltiSnips')
|
||||||
|
file = self._get_file_to_edit(dir, requested_ft, bang)
|
||||||
|
if file:
|
||||||
|
return file
|
||||||
|
if not snippet_dir:
|
||||||
|
snippet_dir = dir
|
||||||
|
|
||||||
|
return self._get_file_to_edit(
|
||||||
|
snippet_dir, requested_ft, bang, True
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_file_to_edit(self, snippet_dir, requested_ft, bang,
|
||||||
|
allow_empty=False): # pylint: disable=no-self-use
|
||||||
|
potentials = set()
|
||||||
filetypes = []
|
filetypes = []
|
||||||
if requested_ft:
|
if requested_ft:
|
||||||
filetypes.append(requested_ft)
|
filetypes.append(requested_ft)
|
||||||
@ -824,9 +858,13 @@ class SnippetManager(object):
|
|||||||
else:
|
else:
|
||||||
file_to_edit = potentials.pop()
|
file_to_edit = potentials.pop()
|
||||||
|
|
||||||
|
if not allow_empty and not os.path.exists(file_to_edit):
|
||||||
|
return ''
|
||||||
|
|
||||||
dirname = os.path.dirname(file_to_edit)
|
dirname = os.path.dirname(file_to_edit)
|
||||||
if not os.path.exists(dirname):
|
if not os.path.exists(dirname):
|
||||||
os.makedirs(dirname)
|
os.makedirs(dirname)
|
||||||
|
|
||||||
return file_to_edit
|
return file_to_edit
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
|
Loading…
x
Reference in New Issue
Block a user