1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 05:30:07 +08:00
SpaceVim/lua/spacevim/api/vim/argv.lua
Eric Wong 256e72f5e4 fix(api): fix argv api
`:Git log bundle\dir` does not work
2024-03-09 23:41:32 +08:00

60 lines
1.3 KiB
Lua

--=============================================================================
-- argv.lua --- cmdline to argv
-- Copyright (c) 2016-2022 Wang Shidong & Contributors
-- Author: Wang Shidong < wsdjeg@outlook.com >
-- URL: https://spacevim.org
-- License: GPLv3
--=============================================================================
local M = {}
local str = require('spacevim.api.data.string')
function M.parser(cmdline)
local argvs = {}
local argv = ''
local escape = false
local isquote = false
for _, c in ipairs(str.string2chars(cmdline)) do
if not escape and not isquote and c == ' ' then
if #argv > 0 then
table.insert(argvs, argv)
argv = ''
end
elseif not escape and isquote and c == '"' then
isquote = false
table.insert(argvs, argv)
argv = ''
elseif not escape and not isquote and c == '"' then
isquote = true
elseif not escape and c == '\\' then
escape = true
elseif escape and c == '"' then
argv = argv .. '"'
escape = false
elseif escape then
argv = argv .. '\\' .. c
escape = false
else
argv = argv .. c
end
end
-- is last char is \
if escape then
argv = argv .. '\\'
end
if argv ~= '' then
table.insert(argvs, argv)
end
return argvs
end
return M