2016-01-16 01:06:35 +08:00
|
|
|
-- default script for clink, called by init.bat when injecting clink
|
|
|
|
|
|
|
|
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
|
|
|
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
|
|
|
|
2017-11-03 20:13:51 +08:00
|
|
|
-- luacheck: globals clink
|
2016-01-16 01:06:35 +08:00
|
|
|
|
2016-01-09 19:43:52 +08:00
|
|
|
-- At first, load the original clink.lua file
|
2017-10-29 17:46:38 +08:00
|
|
|
-- this is needed as we set the script path to this dir and therefore the original
|
2016-01-09 19:43:52 +08:00
|
|
|
-- clink.lua is not loaded.
|
|
|
|
local clink_lua_file = clink.get_env('CMDER_ROOT')..'\\vendor\\clink\\clink.lua'
|
|
|
|
dofile(clink_lua_file)
|
|
|
|
|
|
|
|
-- now add our own things...
|
|
|
|
|
2018-12-20 04:17:45 +08:00
|
|
|
---
|
|
|
|
-- Makes a string safe to use as the replacement in string.gsub
|
|
|
|
---
|
|
|
|
local function verbatim(s)
|
|
|
|
s = string.gsub(s, "%%", "%%%%")
|
|
|
|
return s
|
|
|
|
end
|
|
|
|
|
2016-05-24 20:26:14 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Setting the prompt in clink means that commands which rewrite the prompt do
|
|
|
|
-- not destroy our own prompt. It also means that started cmds (or batch files
|
|
|
|
-- which echo) don't get the ugly '{lamb}' shown.
|
2016-05-24 20:26:14 +08:00
|
|
|
---
|
2018-01-07 06:43:50 +08:00
|
|
|
local function set_prompt_filter()
|
2016-08-09 19:45:36 +08:00
|
|
|
-- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
|
|
|
|
-- pure ASCII will get garbled. So try to parse the current directory from the original prompt
|
|
|
|
-- and only if that doesn't work, use get_cwd() directly.
|
|
|
|
-- The matching relies on the default prompt which ends in X:\PATH\PATH>
|
|
|
|
-- (no network path possible here!)
|
|
|
|
local old_prompt = clink.prompt.value
|
|
|
|
local cwd = old_prompt:match('.*(.:[^>]*)>')
|
|
|
|
if cwd == nil then cwd = clink.get_cwd() end
|
2017-10-29 17:46:38 +08:00
|
|
|
|
2016-08-09 19:45:36 +08:00
|
|
|
-- environment systems like pythons virtualenv change the PROMPT and usually
|
|
|
|
-- set some variable. But the variables are differently named and we would never
|
|
|
|
-- get them all, so try to parse the env name out of the PROMPT.
|
|
|
|
-- envs are usually put in round or square parentheses and before the old prompt
|
|
|
|
local env = old_prompt:match('.*%(([^%)]+)%).+:')
|
|
|
|
-- also check for square brackets
|
|
|
|
if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
|
2017-10-29 17:46:38 +08:00
|
|
|
|
2016-08-09 19:45:36 +08:00
|
|
|
-- build our own prompt
|
2016-05-24 20:26:14 +08:00
|
|
|
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
|
|
|
-- color codes: "\x1b[1;37;40m"
|
2017-10-29 17:46:38 +08:00
|
|
|
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
|
2018-03-08 19:01:48 +08:00
|
|
|
local lambda = "λ"
|
2018-12-20 04:17:45 +08:00
|
|
|
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", verbatim(cwd))
|
2018-06-08 00:29:48 +08:00
|
|
|
|
2018-03-08 19:01:48 +08:00
|
|
|
if env ~= nil then
|
|
|
|
lambda = "("..env..") "..lambda
|
2016-08-09 19:45:36 +08:00
|
|
|
end
|
2018-12-20 04:17:45 +08:00
|
|
|
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", verbatim(lambda))
|
2015-03-20 04:53:29 +08:00
|
|
|
end
|
|
|
|
|
2018-06-08 00:29:48 +08:00
|
|
|
local function percent_prompt_filter()
|
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
|
|
|
|
end
|
|
|
|
|
2015-03-22 05:42:01 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Resolves closest directory location for specified directory.
|
|
|
|
-- Navigates subsequently up one level and tries to find specified directory
|
|
|
|
-- @param {string} path Path to directory will be checked. If not provided
|
|
|
|
-- current directory will be used
|
|
|
|
-- @param {string} dirname Directory name to search for
|
|
|
|
-- @return {string} Path to specified directory or nil if such dir not found
|
2015-03-22 05:42:01 +08:00
|
|
|
local function get_dir_contains(path, dirname)
|
|
|
|
|
|
|
|
-- return parent path for specified entry (either file or directory)
|
|
|
|
local function pathname(path)
|
|
|
|
local prefix = ""
|
|
|
|
local i = path:find("[\\/:][^\\/:]*$")
|
|
|
|
if i then
|
|
|
|
prefix = path:sub(1, i-1)
|
|
|
|
end
|
|
|
|
return prefix
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Navigates up one level
|
|
|
|
local function up_one_level(path)
|
|
|
|
if path == nil then path = '.' end
|
|
|
|
if path == '.' then path = clink.get_cwd() end
|
|
|
|
return pathname(path)
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Checks if provided directory contains git directory
|
|
|
|
local function has_specified_dir(path, specified_dir)
|
|
|
|
if path == nil then path = '.' end
|
|
|
|
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
|
|
|
if #found_dirs > 0 then return true end
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Set default path to current directory
|
|
|
|
if path == nil then path = '.' end
|
|
|
|
|
|
|
|
-- If we're already have .git directory here, then return current path
|
|
|
|
if has_specified_dir(path, dirname) then
|
|
|
|
return path..'/'..dirname
|
|
|
|
else
|
|
|
|
-- Otherwise go up one level and make a recursive call
|
|
|
|
local parent_path = up_one_level(path)
|
|
|
|
if parent_path == path then
|
|
|
|
return nil
|
|
|
|
else
|
|
|
|
return get_dir_contains(parent_path, dirname)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-02-16 18:15:10 +08:00
|
|
|
-- adapted from from clink-completions' git.lua
|
2015-03-22 05:42:01 +08:00
|
|
|
local function get_git_dir(path)
|
2016-02-16 18:15:10 +08:00
|
|
|
|
|
|
|
-- return parent path for specified entry (either file or directory)
|
|
|
|
local function pathname(path)
|
|
|
|
local prefix = ""
|
|
|
|
local i = path:find("[\\/:][^\\/:]*$")
|
|
|
|
if i then
|
|
|
|
prefix = path:sub(1, i-1)
|
|
|
|
end
|
2018-01-08 22:39:37 +08:00
|
|
|
|
2016-02-16 18:15:10 +08:00
|
|
|
return prefix
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Checks if provided directory contains git directory
|
|
|
|
local function has_git_dir(dir)
|
2017-03-10 00:22:13 +08:00
|
|
|
return clink.is_dir(dir..'/.git') and dir..'/.git'
|
2016-02-16 18:15:10 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
local function has_git_file(dir)
|
|
|
|
local gitfile = io.open(dir..'/.git')
|
|
|
|
if not gitfile then return false end
|
|
|
|
|
|
|
|
local git_dir = gitfile:read():match('gitdir: (.*)')
|
|
|
|
gitfile:close()
|
|
|
|
|
|
|
|
return git_dir and dir..'/'..git_dir
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Set default path to current directory
|
|
|
|
if not path or path == '.' then path = clink.get_cwd() end
|
|
|
|
|
|
|
|
-- Calculate parent path now otherwise we won't be
|
|
|
|
-- able to do that inside of logical operator
|
|
|
|
local parent_path = pathname(path)
|
|
|
|
|
|
|
|
return has_git_dir(path)
|
|
|
|
or has_git_file(path)
|
|
|
|
-- Otherwise go up one level and make a recursive call
|
|
|
|
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
2015-03-22 05:42:01 +08:00
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
local function get_hg_dir(path)
|
|
|
|
return get_dir_contains(path, '.hg')
|
|
|
|
end
|
|
|
|
|
|
|
|
local function get_svn_dir(path)
|
|
|
|
return get_dir_contains(path, '.svn')
|
|
|
|
end
|
|
|
|
|
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Find out current branch
|
|
|
|
-- @return {nil|git branch name}
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
|
|
|
local function get_git_branch(git_dir)
|
|
|
|
git_dir = git_dir or get_git_dir()
|
|
|
|
|
|
|
|
-- If git directory not found then we're probably outside of repo
|
|
|
|
-- or something went wrong. The same is when head_file is nil
|
|
|
|
local head_file = git_dir and io.open(git_dir..'/HEAD')
|
|
|
|
if not head_file then return end
|
|
|
|
|
|
|
|
local HEAD = head_file:read()
|
|
|
|
head_file:close()
|
|
|
|
|
|
|
|
-- if HEAD matches branch expression, then we're on named branch
|
|
|
|
-- otherwise it is a detached commit
|
|
|
|
local branch_name = HEAD:match('ref: refs/heads/(.+)')
|
|
|
|
|
|
|
|
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
|
|
|
end
|
|
|
|
|
2015-03-20 04:53:29 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Find out current branch
|
|
|
|
-- @return {false|mercurial branch name}
|
2015-03-20 04:53:29 +08:00
|
|
|
---
|
2018-01-07 06:43:50 +08:00
|
|
|
local function get_hg_branch()
|
2019-04-19 14:16:45 +08:00
|
|
|
local file = io.popen("hg branch 2>nul")
|
|
|
|
for line in file:lines() do
|
2015-03-20 04:53:29 +08:00
|
|
|
local m = line:match("(.+)$")
|
|
|
|
if m then
|
2019-04-19 14:16:45 +08:00
|
|
|
file:close()
|
2015-03-20 04:53:29 +08:00
|
|
|
return m
|
|
|
|
end
|
|
|
|
end
|
2019-04-19 14:16:45 +08:00
|
|
|
file:close()
|
2015-03-20 04:53:29 +08:00
|
|
|
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Find out current branch
|
|
|
|
-- @return {false|svn branch name}
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
|
|
|
local function get_svn_branch(svn_dir)
|
2019-04-19 14:16:45 +08:00
|
|
|
local file = io.popen("svn info 2>nul")
|
|
|
|
for line in file:lines() do
|
2018-01-08 22:39:37 +08:00
|
|
|
local m = line:match("^Relative URL:")
|
|
|
|
if m then
|
2019-04-19 14:16:45 +08:00
|
|
|
file:close()
|
2018-01-08 22:39:37 +08:00
|
|
|
return line:sub(line:find("/")+1,line:len())
|
|
|
|
end
|
|
|
|
end
|
2019-04-19 14:16:45 +08:00
|
|
|
file:close()
|
2018-01-08 22:39:37 +08:00
|
|
|
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Get the status of working dir
|
|
|
|
-- @return {bool}
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
|
|
|
local function get_git_status()
|
|
|
|
local file = io.popen("git --no-optional-locks status --porcelain 2>nul")
|
|
|
|
for line in file:lines() do
|
2018-01-17 04:58:28 +08:00
|
|
|
file:close()
|
2018-01-08 22:39:37 +08:00
|
|
|
return false
|
|
|
|
end
|
2018-01-17 04:58:28 +08:00
|
|
|
file:close()
|
2018-01-08 22:40:34 +08:00
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2018-09-17 04:53:49 +08:00
|
|
|
---
|
|
|
|
-- Gets the conflict status
|
|
|
|
-- @return {bool} indicating true for conflict, false for no conflicts
|
|
|
|
---
|
|
|
|
function get_git_conflict()
|
|
|
|
local file = io.popen("git diff --name-only --diff-filter=U 2>nul")
|
|
|
|
for line in file:lines() do
|
|
|
|
file:close()
|
|
|
|
return true;
|
|
|
|
end
|
|
|
|
file:close()
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2015-03-20 04:53:29 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Get the status of working dir
|
|
|
|
-- @return {bool}
|
2015-03-20 04:53:29 +08:00
|
|
|
---
|
2018-01-07 06:43:50 +08:00
|
|
|
local function get_hg_status()
|
2018-01-17 04:58:28 +08:00
|
|
|
local file = io.popen("hg status -0")
|
|
|
|
for line in file:lines() do
|
|
|
|
file:close()
|
|
|
|
return false
|
2015-03-20 04:53:29 +08:00
|
|
|
end
|
2018-01-17 04:58:28 +08:00
|
|
|
file:close()
|
2018-01-08 22:39:37 +08:00
|
|
|
|
2015-03-20 04:53:29 +08:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
2018-01-17 04:58:28 +08:00
|
|
|
-- Get the status of working dir
|
|
|
|
-- @return {bool}
|
2018-01-08 22:39:37 +08:00
|
|
|
---
|
2018-06-08 00:29:48 +08:00
|
|
|
local function get_svn_status()
|
2018-01-17 04:58:28 +08:00
|
|
|
local file = io.popen("svn status -q")
|
|
|
|
for line in file:lines() do
|
|
|
|
file:close()
|
|
|
|
return false
|
2017-04-04 10:07:41 +08:00
|
|
|
end
|
2018-01-17 04:58:28 +08:00
|
|
|
file:close()
|
2018-01-08 22:39:37 +08:00
|
|
|
|
2017-04-04 10:07:41 +08:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2019-11-04 00:00:10 +08:00
|
|
|
---
|
|
|
|
-- Get the status of working dir
|
|
|
|
-- @return {bool}
|
|
|
|
---
|
|
|
|
local function get_git_status_setting()
|
2019-11-24 07:13:03 +08:00
|
|
|
gitStatusSetting = io.popen("git --no-pager config -l 2>nul")
|
2019-11-04 00:00:10 +08:00
|
|
|
|
|
|
|
for line in gitStatusSetting:lines() do
|
2019-11-24 00:54:53 +08:00
|
|
|
if string.match(line, 'cmder.status=false') or string.match(line, 'cmder.cmdstatus=false') then
|
2019-11-04 00:00:10 +08:00
|
|
|
gitStatusSetting:close()
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
gitStatusSetting:close()
|
|
|
|
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
local function git_prompt_filter()
|
2015-03-20 04:53:29 +08:00
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
-- Colors for git status
|
2015-03-20 04:53:29 +08:00
|
|
|
local colors = {
|
|
|
|
clean = "\x1b[1;37;40m",
|
2018-09-17 04:53:49 +08:00
|
|
|
dirty = "\x1b[33;3m",
|
|
|
|
conflict = "\x1b[31;1m"
|
2015-03-20 04:53:29 +08:00
|
|
|
}
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
local git_dir = get_git_dir()
|
2019-11-04 00:00:10 +08:00
|
|
|
|
|
|
|
if get_git_status_setting() then
|
|
|
|
if git_dir then
|
|
|
|
-- if we're inside of git repo then try to detect current branch
|
|
|
|
local branch = get_git_branch(git_dir)
|
|
|
|
local color
|
|
|
|
if branch then
|
|
|
|
-- Has branch => therefore it is a git folder, now figure out status
|
|
|
|
local gitStatus = get_git_status()
|
|
|
|
local gitConflict = get_git_conflict()
|
|
|
|
|
|
|
|
color = colors.dirty
|
|
|
|
if gitStatus then
|
|
|
|
color = colors.clean
|
|
|
|
end
|
|
|
|
|
|
|
|
if gitConflict then
|
|
|
|
color = colors.conflict
|
|
|
|
end
|
|
|
|
|
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..verbatim(branch)..")")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
2015-03-20 04:53:29 +08:00
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
-- No git present or not in git file
|
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
2015-03-20 04:53:29 +08:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2018-01-08 22:39:37 +08:00
|
|
|
local function hg_prompt_filter()
|
2015-03-20 04:53:29 +08:00
|
|
|
|
2018-07-07 04:34:48 +08:00
|
|
|
local result = ""
|
|
|
|
|
|
|
|
local hg_dir = get_hg_dir()
|
|
|
|
if hg_dir then
|
|
|
|
-- Colors for mercurial status
|
|
|
|
local colors = {
|
|
|
|
clean = "\x1b[1;37;40m",
|
|
|
|
dirty = "\x1b[31;1m",
|
|
|
|
}
|
|
|
|
|
2019-01-21 12:02:31 +08:00
|
|
|
local pipe = io.popen("hg branch 2>&1")
|
2018-07-07 04:34:48 +08:00
|
|
|
local output = pipe:read('*all')
|
|
|
|
local rc = { pipe:close() }
|
|
|
|
|
2019-01-02 02:17:53 +08:00
|
|
|
-- strip the trailing newline from the branch name
|
|
|
|
local n = #output
|
|
|
|
while n > 0 and output:find("^%s", n) do n = n - 1 end
|
2019-01-21 12:02:31 +08:00
|
|
|
local branch = output:sub(1, n)
|
2019-01-02 02:17:53 +08:00
|
|
|
|
2019-01-21 12:02:31 +08:00
|
|
|
if branch ~= nil and
|
|
|
|
string.sub(branch,1,7) ~= "abort: " and -- not an HG working copy
|
|
|
|
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
|
2018-07-07 04:34:48 +08:00
|
|
|
local color = colors.clean
|
2019-01-21 12:02:31 +08:00
|
|
|
|
|
|
|
local pipe = io.popen("hg status -amrd 2>&1")
|
|
|
|
local output = pipe:read('*all')
|
|
|
|
local rc = { pipe:close() }
|
|
|
|
|
|
|
|
if output ~= nil and output ~= "" then color = colors.dirty end
|
|
|
|
result = color .. "(" .. branch .. ")"
|
2015-03-20 04:53:29 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-12-20 04:17:45 +08:00
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", verbatim(result))
|
2015-03-20 04:53:29 +08:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2018-01-07 06:43:50 +08:00
|
|
|
local function svn_prompt_filter()
|
2017-04-04 10:07:41 +08:00
|
|
|
-- Colors for svn status
|
|
|
|
local colors = {
|
|
|
|
clean = "\x1b[1;37;40m",
|
|
|
|
dirty = "\x1b[31;1m",
|
|
|
|
}
|
|
|
|
|
|
|
|
if get_svn_dir() then
|
|
|
|
-- if we're inside of svn repo then try to detect current branch
|
|
|
|
local branch = get_svn_branch()
|
2017-11-03 20:13:51 +08:00
|
|
|
local color
|
2017-04-04 10:07:41 +08:00
|
|
|
if branch then
|
|
|
|
if get_svn_status() then
|
|
|
|
color = colors.clean
|
|
|
|
else
|
|
|
|
color = colors.dirty
|
|
|
|
end
|
|
|
|
|
2018-12-20 04:17:45 +08:00
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", color.."("..verbatim(branch)..")")
|
2017-04-04 10:07:41 +08:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- No mercurial present or not in mercurial file
|
|
|
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
|
|
|
return false
|
|
|
|
end
|
2018-01-08 22:39:37 +08:00
|
|
|
|
2019-09-28 06:17:24 +08:00
|
|
|
local function tilde_match (text, f, l)
|
|
|
|
if text == '~' then
|
|
|
|
clink.add_match(clink.get_env('userprofile'))
|
|
|
|
clink.matches_are_files()
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
if text:sub(1, 1) == '~' then
|
|
|
|
clink.add_match(string.gsub(text, "~", clink.get_env('userprofile'), 1))
|
|
|
|
-- second match prevents adding a space so we can look for more matches
|
|
|
|
clink.add_match(string.gsub(text, "~", clink.get_env('userprofile'), 1) .. '+')
|
|
|
|
clink.matches_are_files()
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-24 20:26:14 +08:00
|
|
|
-- insert the set_prompt at the very beginning so that it runs first
|
2019-09-28 06:17:24 +08:00
|
|
|
clink.register_match_generator(tilde_match, 1)
|
2016-05-24 20:26:14 +08:00
|
|
|
clink.prompt.register_filter(set_prompt_filter, 1)
|
2015-03-20 04:53:29 +08:00
|
|
|
clink.prompt.register_filter(hg_prompt_filter, 50)
|
|
|
|
clink.prompt.register_filter(git_prompt_filter, 50)
|
2017-04-04 10:07:41 +08:00
|
|
|
clink.prompt.register_filter(svn_prompt_filter, 50)
|
2018-06-08 00:29:48 +08:00
|
|
|
clink.prompt.register_filter(percent_prompt_filter, 51)
|
2015-03-20 04:53:29 +08:00
|
|
|
|
|
|
|
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
|
2020-03-14 21:01:06 +08:00
|
|
|
-- Execute '.init.lua' first to ensure package.path is set properly
|
|
|
|
dofile(completions_dir..'.init.lua')
|
2015-03-20 04:53:29 +08:00
|
|
|
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
|
|
|
|
-- Skip files that starts with _. This could be useful if some files should be ignored
|
|
|
|
if not string.match(lua_module, '^_.*') then
|
|
|
|
local filename = completions_dir..lua_module
|
|
|
|
-- use dofile instead of require because require caches loaded modules
|
|
|
|
-- so config reloading using Alt-Q won't reload updated modules.
|
|
|
|
dofile(filename)
|
|
|
|
end
|
2015-11-07 07:44:43 +08:00
|
|
|
end
|
2018-03-24 21:03:28 +08:00
|
|
|
|
2018-09-02 03:32:43 +08:00
|
|
|
if clink.get_env('CMDER_USER_CONFIG') then
|
2018-09-16 23:18:10 +08:00
|
|
|
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
|
|
|
|
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do
|
|
|
|
local filename = cmder_config_dir..lua_module
|
|
|
|
-- use dofile instead of require because require caches loaded modules
|
|
|
|
-- so config reloading using Alt-Q won't reload updated modules.
|
|
|
|
dofile(filename)
|
2018-09-02 02:59:40 +08:00
|
|
|
end
|
2018-03-24 21:03:28 +08:00
|
|
|
end
|