mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 06:30:03 +08:00
277 lines
6.6 KiB
Lua
277 lines
6.6 KiB
Lua
local M = {}
|
|
|
|
local system = require('spacevim.api').import('system')
|
|
local fn = nil
|
|
|
|
if vim.fn == nil then
|
|
fn = require('spacevim').fn
|
|
else
|
|
fn = vim.fn
|
|
end
|
|
|
|
if system.isWindows then
|
|
M.separator = '\\'
|
|
M.pathSeparator = ';'
|
|
else
|
|
M.separator = '/'
|
|
M.pathSeparator = ':'
|
|
end
|
|
|
|
local file_node_extensions = {
|
|
['styl'] = '',
|
|
['scss'] = '',
|
|
['htm'] = '',
|
|
['html'] = '',
|
|
['erb'] = '',
|
|
['slim'] = '',
|
|
['ejs'] = '',
|
|
['wxml'] = '',
|
|
['css'] = '',
|
|
['less'] = '',
|
|
['wxss'] = '',
|
|
['md'] = '',
|
|
['markdown'] = '',
|
|
['json'] = '',
|
|
['js'] = '',
|
|
['jsx'] = '',
|
|
['rb'] = '',
|
|
['php'] = '',
|
|
['py'] = '',
|
|
['pyc'] = '',
|
|
['pyo'] = '',
|
|
['pyd'] = '',
|
|
['coffee'] = '',
|
|
['mustache'] = '',
|
|
['hbs'] = '',
|
|
['conf'] = '',
|
|
['ini'] = '',
|
|
['yml'] = '',
|
|
['bat'] = '',
|
|
['jpg'] = '',
|
|
['jpeg'] = '',
|
|
['bmp'] = '',
|
|
['png'] = '',
|
|
['gif'] = '',
|
|
['ico'] = '',
|
|
['twig'] = '',
|
|
['cpp'] = '',
|
|
['c++'] = '',
|
|
['cxx'] = '',
|
|
['cc'] = '',
|
|
['cp'] = '',
|
|
['c'] = '',
|
|
['hs'] = '',
|
|
['lhs'] = '',
|
|
['lua'] = '',
|
|
['java'] = '',
|
|
['sh'] = '',
|
|
['fish'] = '',
|
|
['ml'] = 'λ',
|
|
['mli'] = 'λ',
|
|
['diff'] = '',
|
|
['db'] = '',
|
|
['sql'] = '',
|
|
['dump'] = '',
|
|
['clj'] = '',
|
|
['cljc'] = '',
|
|
['cljs'] = '',
|
|
['edn'] = '',
|
|
['scala'] = '',
|
|
['go'] = '',
|
|
['dart'] = '',
|
|
['xul'] = '',
|
|
['sln'] = '',
|
|
['suo'] = '',
|
|
['pl'] = '',
|
|
['pm'] = '',
|
|
['t'] = '',
|
|
['rss'] = '',
|
|
['f#'] = '',
|
|
['fsscript'] = '',
|
|
['fsx'] = '',
|
|
['fs'] = '',
|
|
['fsi'] = '',
|
|
['rs'] = '',
|
|
['rlib'] = '',
|
|
['d'] = '',
|
|
['erl'] = '',
|
|
['hrl'] = '',
|
|
['vim'] = '',
|
|
['ai'] = '',
|
|
['psd'] = '',
|
|
['psb'] = '',
|
|
['ts'] = '',
|
|
['tsx'] = '',
|
|
['jl'] = '',
|
|
['ex'] = '',
|
|
['exs'] = '',
|
|
['eex'] = '',
|
|
['leex'] = ''
|
|
}
|
|
|
|
local file_node_exact_matches = {
|
|
['exact-match-case-sensitive-1.txt'] = 'X1',
|
|
['exact-match-case-sensitive-2'] = 'X2',
|
|
['gruntfile.coffee'] = '',
|
|
['gruntfile.js'] = '',
|
|
['gruntfile.ls'] = '',
|
|
['gulpfile.coffee'] = '',
|
|
['gulpfile.js'] = '',
|
|
['gulpfile.ls'] = '',
|
|
['dropbox'] = '',
|
|
['.ds_store'] = '',
|
|
['.gitconfig'] = '',
|
|
['.gitignore'] = '',
|
|
['.bashrc'] = '',
|
|
['.bashprofile'] = '',
|
|
['favicon.ico'] = '',
|
|
['license'] = '',
|
|
['node_modules'] = '',
|
|
['react.jsx'] = '',
|
|
['Procfile'] = '',
|
|
['.vimrc'] = '',
|
|
['mix.lock'] = '',
|
|
}
|
|
|
|
local file_node_pattern_matches = {
|
|
['.*jquery.*\\.js$'] = '',
|
|
['.*angular.*\\.js$'] = '',
|
|
['.*backbone.*\\.js$'] = '',
|
|
['.*require.*\\.js$'] = '',
|
|
['.*materialize.*\\.js$'] = '',
|
|
['.*materialize.*\\.css$'] = '',
|
|
['.*mootools.*\\.js$'] = ''
|
|
}
|
|
|
|
function M.fticon(path)
|
|
local file = fn.fnamemodify(path, ':t')
|
|
if file_node_exact_matches[file] ~= nil then
|
|
return file_node_exact_matches[file]
|
|
end
|
|
for k,v in ipairs(file_node_pattern_matches) do
|
|
if fn.match(file, k) ~= -1 then
|
|
return v
|
|
end
|
|
end
|
|
local ext = fn.fnamemodify(file, ':e')
|
|
if file_node_extensions[ext] ~= nil then
|
|
return file_node_extensions[ext]
|
|
else
|
|
return ''
|
|
end
|
|
end
|
|
|
|
function M.read(path)
|
|
if fn.filereadable(path) then
|
|
return fn.readfile(path, '')
|
|
else
|
|
return ''
|
|
end
|
|
end
|
|
|
|
function M.write(msg, fname)
|
|
local flags
|
|
if fn.filereadable(fname) == 1 then
|
|
flags = 'a'
|
|
else
|
|
flags = ''
|
|
end
|
|
fn.writefile({msg}, fname, flags)
|
|
end
|
|
|
|
function M.override(msg, fname)
|
|
local flags
|
|
if fn.filereadable(fname) == 1 then
|
|
flags = 'b'
|
|
else
|
|
flags = ''
|
|
end
|
|
fn.writefile({msg}, fname, flags)
|
|
end
|
|
|
|
function M.read(fname)
|
|
if fn.filereadable(fname) == 1 then
|
|
return fn.readfile(fname, '')
|
|
else
|
|
return ''
|
|
end
|
|
end
|
|
|
|
function M.unify_path(_path, ...)
|
|
local mod = select('1', ...)
|
|
if mod == nil then
|
|
mod = ':p'
|
|
end
|
|
local path = fn.fnamemodify(_path, mod .. ':gs?[\\\\/]?/?')
|
|
if fn.isdirectory(path) == 1 and string.sub(path, -1) ~= '/' then
|
|
return path .. '/'
|
|
elseif string.sub(_path, -1) == '/' and string.sub(path, -1) ~= '/' then
|
|
return path .. '/'
|
|
else
|
|
return path
|
|
end
|
|
end
|
|
|
|
function M.path_to_fname(path)
|
|
return fn.substitute(M.unify_path(path), '[\\/:;.]', '_', 'g')
|
|
end
|
|
|
|
|
|
|
|
function M.findfile(what, where, ...)
|
|
-- let old_suffixesadd = &suffixesadd
|
|
-- let &suffixesadd = ''
|
|
local count = select('1', ...)
|
|
if count == nil then
|
|
count = 0
|
|
end
|
|
|
|
local file = ''
|
|
|
|
if fn.filereadable(where) == 1 and fn.isdirectory(where) == 0 then
|
|
path = fn.fnamemodify(where, ':h')
|
|
else
|
|
path = where
|
|
end
|
|
if count > 0 then
|
|
file = fn.findfile(what, fn.escape(path, ' ') .. ';', count)
|
|
elseif #{...} == 0 then
|
|
file = fn.findfile(what, fn.escape(path, ' ') .. ';')
|
|
elseif count == 0 then
|
|
file = fn.findfile(what, fn.escape(path, ' ') .. ';', -1)
|
|
else
|
|
file = fn.get(fn.findfile(what, fn.escape(path, ' ') .. ';', -1), count, '')
|
|
end
|
|
-- let &suffixesadd = old_suffixesadd
|
|
return file
|
|
end
|
|
|
|
function M.finddir(what, where, ...)
|
|
-- let old_suffixesadd = &suffixesadd
|
|
-- let &suffixesadd = ''
|
|
local count = select('1', ...)
|
|
if count == nil then
|
|
count = 0
|
|
end
|
|
local path = ''
|
|
local file = ''
|
|
if fn.filereadable(where) == 1 and fn.isdirectory(where) == 0 then
|
|
path = fn.fnamemodify(where, ':h')
|
|
else
|
|
path = where
|
|
end
|
|
if count > 0 then
|
|
file = fn.finddir(what, fn.escape(path, ' ') .. ';', count)
|
|
elseif #{...} == 0 then
|
|
file = fn.finddir(what, fn.escape(path, ' ') .. ';')
|
|
elseif count == 0 then
|
|
file = fn.finddir(what, fn.escape(path, ' ') .. ';', -1)
|
|
else
|
|
file = fn.get(fn.finddir(what, fn.escape(path, ' ') .. ';', -1), count, '')
|
|
end
|
|
-- let &suffixesadd = old_suffixesadd
|
|
return file
|
|
end
|
|
|
|
return M
|