feat: allow customizing Zoxide's FZF options with YAZI_ZOXIDE_OPTS (#1822)

This commit is contained in:
三咲雅 · Misaki Masa 2024-10-23 10:45:41 +08:00 committed by GitHub
parent 0e118b5b3a
commit 35d781e240
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 100 additions and 66 deletions

96
Cargo.lock generated
View file

@ -123,9 +123,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.90"
version = "1.0.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95"
checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8"
[[package]]
name = "arbitrary"
@ -147,7 +147,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -318,9 +318,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]]
name = "bytes"
version = "1.7.2"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3"
checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"
[[package]]
name = "cassowary"
@ -339,9 +339,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.1.30"
version = "1.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945"
checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f"
dependencies = [
"jobserver",
"libc",
@ -436,7 +436,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -615,7 +615,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -626,7 +626,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [
"darling_core",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -656,7 +656,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -666,7 +666,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -825,9 +825,9 @@ dependencies = [
[[package]]
name = "flume"
version = "0.11.0"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
dependencies = [
"spin",
]
@ -918,7 +918,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -1164,7 +1164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c"
dependencies = [
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -1184,7 +1184,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -1472,7 +1472,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -1559,7 +1559,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -1818,9 +1818,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.88"
version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9"
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
dependencies = [
"unicode-ident",
]
@ -1841,7 +1841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
dependencies = [
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2106,9 +2106,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
version = "1.0.210"
version = "1.0.213"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1"
dependencies = [
"serde_derive",
]
@ -2125,20 +2125,20 @@ dependencies = [
[[package]]
name = "serde_derive"
version = "1.0.210"
version = "1.0.213"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
name = "serde_json"
version = "1.0.131"
version = "1.0.132"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67d42a0bd4ac281beff598909bb56a86acaf979b84483e1c79c10dcaf98f8cf3"
checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
dependencies = [
"itoa",
"memchr",
@ -2304,7 +2304,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2319,9 +2319,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.79"
version = "2.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021"
dependencies = [
"proc-macro2",
"quote",
@ -2370,22 +2370,22 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "thiserror"
version = "1.0.64"
version = "1.0.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84"
checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.64"
version = "1.0.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2468,9 +2468,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.40.0"
version = "1.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998"
checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb"
dependencies = [
"backtrace",
"bytes",
@ -2492,7 +2492,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2585,7 +2585,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2767,7 +2767,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2864,7 +2864,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
"wasm-bindgen-shared",
]
@ -2886,7 +2886,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -2985,7 +2985,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -2996,7 +2996,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -3236,7 +3236,7 @@ name = "yazi-codegen"
version = "0.3.3"
dependencies = [
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]
@ -3476,7 +3476,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.82",
]
[[package]]

View file

@ -28,7 +28,7 @@ ratatui = { version = "0.28.1", features = [ "unstable-rendered-line-info"
regex = "1.11.0"
scopeguard = "1.2.0"
serde = { version = "1.0.210", features = [ "derive" ] }
serde_json = "1.0.131"
serde_json = "1.0.132"
shell-words = "1.1.0"
tokio = { version = "1.40.0", features = [ "full" ] }
tokio-stream = "0.1.16"

View file

@ -13,5 +13,5 @@ proc-macro = true
[dependencies]
# External dependencies
syn = "2.0.79"
syn = "2.0.82"
quote = "1.0.37"

View file

@ -9,24 +9,54 @@ local set_state = ya.sync(function(st, empty) st.empty = empty end)
local function fail(s, ...) ya.notify { title = "Zoxide", content = s:format(...), timeout = 5, level = "error" } end
local function head(cwd)
local child = Command("zoxide"):args({ "query", "-l" }):stdout(Command.PIPED):spawn()
if not child then
return 0
local function opts()
-- https://github.com/ajeetdsouza/zoxide/blob/main/src/cmd/query.rs#L92
local default = {
-- Search mode
"--exact",
-- Search result
"--no-sort",
-- Interface
"--bind=ctrl-z:ignore,btab:up,tab:down",
"--cycle",
"--keep-right",
-- Layout
"--layout=reverse",
"--height=50%",
"--border",
"--scrollbar=▌",
"--info=inline",
-- Display
"--tabstop=1",
-- Scripting
"--exit-0",
}
if ya.target_family() == "unix" then
default[#default + 1] = "--preview-window=down,30%,sharp"
if ya.target_os() == "linux" then
default[#default + 1] = [[--preview='\command -p ls -Cp --color=always --group-directories-first {2..}']]
else
default[#default + 1] = [[--preview='\command -p ls -Cp {2..}']]
end
end
local n = 0
repeat
local next, event = child:read_line()
if event ~= 0 then
break
elseif cwd ~= next:gsub("\n$", "") then
n = n + 1
end
until n >= 2
return (os.getenv("FZF_DEFAULT_OPTS") or "")
.. " "
.. table.concat(default, " ")
.. " "
.. (os.getenv("YAZI_ZOXIDE_OPTS") or "")
end
local function empty(cwd)
local child = Command("zoxide"):args({ "query", "-l", "--exclude" }):arg(cwd):stdout(Command.PIPED):spawn()
if not child then
return true
end
local first = child:read_line()
child:start_kill()
return n
return not first
end
local function setup(_, opts)
@ -49,18 +79,22 @@ end
local function entry()
local st = state()
if st.empty == nil then
st.empty = head(st.cwd) < 2
st.empty = empty(st.cwd)
set_state(st.empty)
end
if st.empty then
return fail("No directory history in the database, check out the `zoxide` docs to set it up.")
return fail("No directory history found, check Zoxide's doc to set it up and restart Yazi.")
end
local _permit = ya.hide()
local child, err = Command("zoxide")
:args({ "query", "-i", "--exclude" })
:arg(st.cwd)
:env("SHELL", "sh")
:env("CLICOLOR", "1")
:env("CLICOLOR_FORCE", "1")
:env("_ZO_FZF_OPTS", opts())
:stdin(Command.INHERIT)
:stdout(Command.PIPED)
:stderr(Command.INHERIT)