1
0
mirror of https://github.com/skywind3000/z.lua synced 2026-03-15 20:29:47 +00:00

update backward jumping

This commit is contained in:
skywind3000
2019-02-14 10:21:02 +08:00
parent cf45449c14
commit c50e1a6af9
2 changed files with 17 additions and 14 deletions

View File

@@ -446,6 +446,7 @@ As you see, z.lua is the fastest one and requires less resource.
## History
- 1.4.8 (2019-02-14): fixed minor issues in backward jumping.
- 1.4.7 (2019-02-13): Don't use regex in backward jumping (use plain text instead).
- 1.4.6 (2019-02-12): change: `_ZL_EXCLUDE_DIRS` to a comma separated list of dirs to exclude.
- 1.4.5 (2019-02-10): improve bash fzf completion and posix compatibility.

30
z.lua
View File

@@ -4,7 +4,7 @@
-- z.lua - a cd command that learns, by skywind 2018, 2019
-- Licensed under MIT license.
--
-- Version 1.4.7, Last Modified: 2019/02/13 20:30
-- Version 1.4.8, Last Modified: 2019/02/14 10:19
--
-- * 10x faster than fasd and autojump, 3x faster than z.sh
-- * available for posix shells: bash, zsh, sh, ash, dash, busybox
@@ -1503,21 +1503,23 @@ function cd_backward(args, options, pwd)
if not key:match('%u') then
test = test:lower()
end
local pos, _ = test:rfind(key)
if not pos then
return nil
local pos, ends = test:rfind('/' .. key)
if pos then
ends = test:find('/', pos + key:len() + 1, true)
ends = ends and ends or test:len()
return os.path.normpath(pwd:sub(1, ends))
elseif windows and test:startswith(key) then
ends = test:find('/', key:len(), true)
ends = ends and ends or test:len()
return os.path.normpath(pwd:sub(1, ends))
end
if pos > 1 then
if test:sub(pos - 1, pos - 1) ~= '/' then
return nil
end
pos = test:rfind(key)
if pos then
ends = test:find('/', pos + key:len(), true)
ends = ends and ends or test:len()
return os.path.normpath(pwd:sub(1, ends))
end
local ends = test:find('/', pos + key:len(), 0, true)
if not ends then
ends = test:len()
end
local path = pwd:sub(1, (not ends) and test:len() or ends)
return os.path.normpath(path)
return nil
end
else
local test = windows and pwd:gsub('\\', '/') or pwd