1
0
mirror of https://github.com/skywind3000/z.lua synced 2026-03-24 08:39:49 +00:00

12 Commits

Author SHA1 Message Date
skywind3000
5c36d55698 use lua-filesystem package if possible when $_ZL_USE_LFS is 1 2019-09-07 01:02:48 +08:00
skywind3000
bdab27db1b fixed wrong return value from os.path.exists 2019-09-06 01:21:28 +08:00
skywind3000
e08f5beca4 update doc 2019-08-01 20:06:05 +08:00
skywind3000
a245db0d93 update doc 2019-08-01 19:54:34 +08:00
skywind3000
dd721703c3 1.7.2: improve bash / zsh shell compatibility 2019-08-01 19:46:23 +08:00
Linwei
7920d56c89 Merge pull request #71 from barlik/prompt-command
Do not append semicolon to PROMPT_COMMAND
2019-08-01 17:45:54 +08:00
Linwei
645818ccc8 Merge pull request #72 from barlik/zsh-hooks 2019-08-01 02:41:19 +08:00
Rastislav Barlik
b98911a227 Setting zsh-hooks to be unique is not necessary 2019-07-31 14:46:28 +01:00
Rastislav Barlik
671830059b Do not append semicolon to PROMPT_COMMAND 2019-07-31 13:47:55 +01:00
skywind3000
0fad96124b commit new README.md 2019-06-07 22:17:42 +08:00
skywind3000
465f2b8e62 fixed linux $_ZL_DATA failure 2019-06-07 22:13:29 +08:00
skywind3000
ff9d874ef4 update doc 2019-03-09 17:24:53 +08:00
2 changed files with 44 additions and 13 deletions

View File

@@ -458,7 +458,10 @@ As you see, z.lua is the fastest one and requires less resource.
## History ## History
- 1.7.0 (2019-03-09): Support ranger, fix ReplaceFile issue in luajit (windows). - 1.7.3 (2019-09-07): use [lua-filesystem](http://keplerproject.github.io/luafilesystem/) package if possible when `$_ZL_USE_LFS` is `1`.
- 1.7.2 (2019-08-01): Improve bash/zsh shell compatibility by [@barlik](https://github.com/barlik).
- 1.7.1 (2019-06-07): Fixed: `$_ZL_DATA` failure on Linux sometimes.
- 1.7.0 (2019-03-09): Support [ranger](https://github.com/skywind3000/z.lua/wiki/FAQ#how-to-integrate-zlua-to-ranger-), fix ReplaceFile issue in luajit (windows).
- 1.6.0 (2019-03-04): optimize with ffi module (luajit builtin module). - 1.6.0 (2019-03-04): optimize with ffi module (luajit builtin module).
- 1.5.11 (2019-03-02): fixed: os.path.isdir doesn't work for symbol link folders. - 1.5.11 (2019-03-02): fixed: os.path.isdir doesn't work for symbol link folders.
- 1.5.10 (2019-03-01): Prevent writing file racing. - 1.5.10 (2019-03-01): Prevent writing file racing.
@@ -510,6 +513,7 @@ This project needs help for the tasks below:
- Thanks to [@TeddyDD](https://github.com/TeddyDD) for Fish Shell porting. - Thanks to [@TeddyDD](https://github.com/TeddyDD) for Fish Shell porting.
- Thanks to [@manhong2112](https://github.com/manhong2112) for Power Shell porting. - Thanks to [@manhong2112](https://github.com/manhong2112) for Power Shell porting.
- Thanks to [@BarbUk](https://github.com/BarbUk) for fzf completion in Bash. - Thanks to [@BarbUk](https://github.com/BarbUk) for fzf completion in Bash.
- Thanks to [@barlik](https://github.com/barlik) for many improvements.
And many others. And many others.

51
z.lua
View File

@@ -4,7 +4,7 @@
-- z.lua - a cd command that learns, by skywind 2018, 2019 -- z.lua - a cd command that learns, by skywind 2018, 2019
-- Licensed under MIT license. -- Licensed under MIT license.
-- --
-- Version 1.7.0, Last Modified: 2019/03/09 16:51 -- Version 1.7.3, Last Modified: 2019/09/06 17:27
-- --
-- * 10x faster than fasd and autojump, 3x faster than z.sh -- * 10x faster than fasd and autojump, 3x faster than z.sh
-- * available for posix shells: bash, zsh, sh, ash, dash, busybox -- * available for posix shells: bash, zsh, sh, ash, dash, busybox
@@ -74,6 +74,7 @@
-- set $_ZL_MAXAGE to define a aging threshold (default is 5000). -- set $_ZL_MAXAGE to define a aging threshold (default is 5000).
-- set $_ZL_MATCH_MODE to 1 to enable enhanced matching mode. -- set $_ZL_MATCH_MODE to 1 to enable enhanced matching mode.
-- set $_ZL_NO_CHECK to 1 to disable path validation. z --purge to clear. -- set $_ZL_NO_CHECK to 1 to disable path validation. z --purge to clear.
-- set $_ZL_USE_LFS to 1 to use lua-filesystem package
-- --
--===================================================================== --=====================================================================
@@ -548,6 +549,9 @@ end
-- file or path exists -- file or path exists
----------------------------------------------------------------------- -----------------------------------------------------------------------
function os.path.exists(name) function os.path.exists(name)
if name == '/' then
return true
end
local ok, err, code = os.rename(name, name) local ok, err, code = os.rename(name, name)
if not ok then if not ok then
if code == 13 then if code == 13 then
@@ -1869,11 +1873,8 @@ function z_init()
DATA_FILE = _zl_data DATA_FILE = _zl_data
else else
-- avoid windows environments affect cygwin & msys -- avoid windows environments affect cygwin & msys
if _zl_data:sub(2, 2) ~= ':' then if not string.match(_zl_data, '^%a:[/\\]') then
local t = _zl_data:sub(3, 3) DATA_FILE = _zl_data
if t ~= '/' and t ~= "\\" then
DATA_FILE = _zl_data
end
end end
end end
end end
@@ -2013,14 +2014,14 @@ alias ${_ZL_CMD:-z}='_zlua'
local script_init_bash = [[ local script_init_bash = [[
case "$PROMPT_COMMAND" in case "$PROMPT_COMMAND" in
*_zlua?--add*) ;; *_zlua?--add*) ;;
*) PROMPT_COMMAND="(_zlua --add \"\$(command pwd 2>/dev/null)\" &);$PROMPT_COMMAND" ;; *) PROMPT_COMMAND="(_zlua --add \"\$(command pwd 2>/dev/null)\" &)${PROMPT_COMMAND:+;$PROMPT_COMMAND}" ;;
esac esac
]] ]]
local script_init_bash_fast = [[ local script_init_bash_fast = [[
case "$PROMPT_COMMAND" in case "$PROMPT_COMMAND" in
*_zlua?--add*) ;; *_zlua?--add*) ;;
*) PROMPT_COMMAND="(_zlua --add \"\$PWD\" &);$PROMPT_COMMAND" ;; *) PROMPT_COMMAND="(_zlua --add \"\$PWD\" &)${PROMPT_COMMAND:+;$PROMPT_COMMAND}" ;;
esac esac
]] ]]
@@ -2032,7 +2033,7 @@ _zlua_precmd() {
} }
case "$PROMPT_COMMAND" in case "$PROMPT_COMMAND" in
*_zlua_precmd*) ;; *_zlua_precmd*) ;;
*) PROMPT_COMMAND="_zlua_precmd;$PROMPT_COMMAND" ;; *) PROMPT_COMMAND="_zlua_precmd${PROMPT_COMMAND:+;$PROMPT_COMMAND}" ;;
esac esac
]] ]]
@@ -2059,7 +2060,7 @@ local script_init_zsh = [[
_zlua_precmd() { _zlua_precmd() {
(_zlua --add "${PWD:a}" &) (_zlua --add "${PWD:a}" &)
} }
typeset -gaU precmd_functions typeset -ga precmd_functions
[ -n "${precmd_functions[(r)_zlua_precmd]}" ] || { [ -n "${precmd_functions[(r)_zlua_precmd]}" ] || {
precmd_functions[$(($#precmd_functions+1))]=_zlua_precmd precmd_functions[$(($#precmd_functions+1))]=_zlua_precmd
} }
@@ -2069,7 +2070,7 @@ local script_init_zsh_once = [[
_zlua_precmd() { _zlua_precmd() {
(_zlua --add "${PWD:a}" &) (_zlua --add "${PWD:a}" &)
} }
typeset -gaU chpwd_functions typeset -ga chpwd_functions
[ -n "${chpwd_functions[(r)_zlua_precmd]}" ] || { [ -n "${chpwd_functions[(r)_zlua_precmd]}" ] || {
chpwd_functions[$(($#chpwd_functions+1))]=_zlua_precmd chpwd_functions[$(($#chpwd_functions+1))]=_zlua_precmd
} }
@@ -2542,7 +2543,33 @@ end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- testing case -- LFS optimize
-----------------------------------------------------------------------
os.lfs = {}
os.lfs.enable = os.getenv('_ZL_USE_LFS')
if os.lfs.enable ~= nil then
local m = string.lower(os.lfs.enable)
if (m == '1' or m == 'yes' or m == 'true' or m == 't') then
os.lfs.status, os.lfs.pkg = pcall(require, 'lfs')
if os.lfs.status then
local lfs = os.lfs.pkg
os.path.exists = function (name)
return lfs.attributes(name) and true or false
end
os.path.isdir = function (name)
local mode = lfs.attributes(name)
if not mode then
return false
end
return (mode.mode == 'directory') and true or false
end
end
end
end
-----------------------------------------------------------------------
-- program entry
----------------------------------------------------------------------- -----------------------------------------------------------------------
if not pcall(debug.getlocal, 4, 1) then if not pcall(debug.getlocal, 4, 1) then
-- main script -- main script