1
0
mirror of https://github.com/skywind3000/z.lua synced 2026-03-22 07:39:48 +00:00

9 Commits

Author SHA1 Message Date
skywind3000
cfad8f54ce update doc 2021-02-15 00:06:38 +08:00
skywind3000
501f619f94 improve powershell 7 compatibility 2021-02-15 00:02:23 +08:00
skywind3000
7a8acd469d update z.lua to 1.8.11 2020-12-31 02:11:09 +08:00
skywind3000
52e066aae7 commit new z.lua 2020-12-31 02:05:46 +08:00
skywind3000
e1a44ee9a5 fix: pushd leak in windows cmd 2020-12-31 01:47:18 +08:00
Linwei
9c0eb6cfbc Merge pull request #127 from chrisant996/fixpushd
Fix leaked pushd
2020-12-30 23:01:17 +08:00
Chris Antos
e646d5baa5 A better fix for the final blank line. 2020-12-30 05:00:26 -08:00
Chris Antos
be90b1a528 Match original output.
Originally `z foo` printed a blank line after the command.  My recent
change accidentally changed how CMD interpreted the end of the file such
that CMD stopped printing the blank line.  This change adjusts the end
of the file to once again cause CMD to print a blank line on finish.
2020-12-30 04:50:29 -08:00
Chris Antos
bda94435fc Fix leaked pushd.
`z somedir` uses double `pushd` to tunnel the new path out past the
endlocal that restores the environment state.  But it ended up leaving
a pushd on the dir stack.

This change exploits normal variable expansion to restore the dir stack
to its initial state while still successfully tunneling the new path out
past the endlocal.
2020-12-30 04:42:05 -08:00
4 changed files with 55 additions and 12 deletions

View File

@@ -65,7 +65,12 @@ z -b foo # 跳转到父目录中名称以 foo 开头的那一级
antigen bundle skywind3000/z.lua
就可以了(主要要放在 antigen apply 语句之前)。
**注意**:使用 WSL-1 的用户,需要安装 `lua-filesystem` 包:
sudo apt-get install lua-filesystem
这是由于 wsl-1 的 [bug](https://github.com/microsoft/WSL/issues/5505) 引起的,使用 lua-filesystem 可以避免该问题。
- Fish Shell:
@@ -83,7 +88,7 @@ z -b foo # 跳转到父目录中名称以 foo 开头的那一级
在你 Power Shell 的配置文件 `profile.ps1` 中放入下面语句:
iex ($(lua /path/to/z.lua --init powershell) -join "`n")
Invoke-Expression (& { (lua /path/to/z.lua --init powershell) -join "`n" })
- Windows cmd (with clink):

View File

@@ -69,13 +69,19 @@ z -b foo # cd to the parent directory starting with foo
and perhaps this:
export _ZL_ECHO=1
eval "$(lua /path/to/z.lua --init bash enhanced once echo)"
if you want `z.lua` print the new directory after cd.
If you want `fzf` tab completion use:
For `fzf` tab completion use:
eval "$(lua /path/to/z.lua --init bash enhanced once fzf)"
**NOTE**: For wsl-1 users, `lua-filesystem` must be installed:
sudo apt-get install lua-filesystem
To avoid a wsl-1 [defect](https://github.com/microsoft/WSL/issues/5505).
- Zsh:
@@ -85,6 +91,8 @@ z -b foo # cd to the parent directory starting with foo
Options like "enhanced" and "once" can be used after `--init` too. It can also be initialized from "skywind3000/z.lua" with your zsh plugin managers (antigen / oh-my-zsh).
**NOTE**: for wsl-1 users, `lua-filesystem` must be installed.
- Posix Shells:
put something like this in your `.profile`:
@@ -113,21 +121,29 @@ z -b foo # cd to the parent directory starting with foo
put something like this in your `profile.ps1`:
iex ($(lua /path/to/z.lua --init powershell) -join "`n")
Invoke-Expression (& { (lua /path/to/z.lua --init powershell) -join "`n" })
- Windows cmd (with clink):
- copy z.lua and z.cmd to clink's home directory
- Copy z.lua and z.cmd to clink's home directory
- Add clink's home to `%PATH%` (z.cmd can be called anywhere)
- Ensure that "lua" can be called in `%PATH%`
- Windows cmder:
- copy z.lua and z.cmd to cmder/vendor
- Copy z.lua and z.cmd to cmder/vendor
- Add cmder/vendor to `%PATH%`
- Ensure that "lua" can be called in `%PATH%`
- Windows WSL-1:
Install `lua-filesystem` module before init z.lua:
sudo apt-get install lua-filesystem
This module is required due to a wsl-1 [defect](https://github.com/microsoft/WSL/issues/5505).
## Options

12
z.cmd
View File

@@ -106,13 +106,23 @@ if /i "%RunMode%"=="-n" (
pushd !NewPath!
pushd !NewPath!
endlocal
popd
goto popdir
)
)
) else (
call "%LuaExe%" "%LuaScript%" "%RunMode%" %MatchType% %StrictSub% %InterMode% %StripMode% %*
)
goto end
:popdir
rem -- Exploits variable expansion and the pushd stack to set the current
rem -- directory without leaking a pushd.
popd
setlocal
set NewPath=%CD%
endlocal & popd & cd /d "%NewPath%"
:end
echo.

20
z.lua
View File

@@ -1,10 +1,10 @@
#! /usr/bin/env lua
--=====================================================================
--
-- z.lua - a cd command that learns, by skywind 2018, 2019, 2020
-- z.lua - a cd command that learns, by skywind 2018, 2019, 2020, 2021
-- Licensed under MIT license.
--
-- Version 1.8.10, Last Modified: 2020/12/23 16:37
-- Version 1.8.12, Last Modified: 2021/02/15 00:05
--
-- * 10x faster than fasd and autojump, 3x faster than z.sh
-- * available for posix shells: bash, zsh, sh, ash, dash, busybox
@@ -51,7 +51,8 @@
-- Power Shell Install:
--
-- * put something like this in your config file:
-- iex ($(lua /path/to/z.lua --init powershell) -join "`n")
-- Invoke-Expression (& {
-- (lua /path/to/z.lua --init powershell) -join "`n" })
--
-- Windows Install (with Clink):
-- * copy z.lua and z.cmd to clink's home directory
@@ -63,6 +64,10 @@
-- * Add cmder/vendor to %PATH%
-- * Ensure that "lua" can be called in %PATH%
--
-- Windows WSL-1:
-- * Install lua-filesystem module before init z.lua:
-- sudo apt-get install lua-filesystem
--
-- Configure (optional):
-- set $_ZL_CMD in .bashrc/.zshrc to change the command (default z).
-- set $_ZL_DATA in .bashrc/.zshrc to change the datafile (default ~/.zlua).
@@ -2548,12 +2553,18 @@ if /i "%RunMode%"=="-n" (
pushd !NewPath!
pushd !NewPath!
endlocal
popd
goto popdir
)
)
) else (
call "%LuaExe%" "%LuaScript%" "%RunMode%" %MatchType% %StrictSub% %InterMode% %StripMode% %*
)
goto end
:popdir
popd
setlocal
set "NewPath=%CD%"
endlocal & popd & cd /d "%NewPath%"
:end
]]
@@ -2737,4 +2748,5 @@ if not pcall(debug.getlocal, 4, 1) then
end
end
-- vim: set ts=4 sw=4 tw=0 noet :