Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package zoxide for openSUSE:Factory checked in at 2026-02-03 21:29:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/zoxide (Old) and /work/SRC/openSUSE:Factory/.zoxide.new.1995 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "zoxide" Tue Feb 3 21:29:03 2026 rev:14 rq:1330395 version:0.9.9 Changes: -------- --- /work/SRC/openSUSE:Factory/zoxide/zoxide.changes 2025-06-11 16:23:11.368119594 +0200 +++ /work/SRC/openSUSE:Factory/.zoxide.new.1995/zoxide.changes 2026-02-03 21:30:20.509719635 +0100 @@ -1,0 +2,13 @@ +Sat Jan 31 15:54:17 UTC 2026 - Andrea Manzini <[email protected]> + +- Update to 0.9.9: + * Fish: added support for v4.1.0+. + Fixed + * Nushell: use sigil operator when calling external commands. + * Zsh: support multiple digits in z +N and z -N dirstack commands. + * Bash: avoid downcasting $PROMPT_COMMAND array into a string. + * Bash: avoid overwriting $PIPESTATUS. + * POSIX: remove non-POSIX compliant calls to builtin. + * Fish: clear existing completions when defining z command. + +------------------------------------------------------------------- Old: ---- zoxide-0.9.8.tar.gz New: ---- zoxide-0.9.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ zoxide.spec ++++++ --- /var/tmp/diff_new_pack.AjRon2/_old 2026-02-03 21:30:21.493761270 +0100 +++ /var/tmp/diff_new_pack.AjRon2/_new 2026-02-03 21:30:21.497761439 +0100 @@ -1,7 +1,7 @@ # # spec file for package zoxide # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %global rustflags '-Clink-arg=-Wl,-z,relro,-z,now' Name: zoxide -Version: 0.9.8 +Version: 0.9.9 Release: 0 Summary: A smarter cd command License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.AjRon2/_old 2026-02-03 21:30:21.545763470 +0100 +++ /var/tmp/diff_new_pack.AjRon2/_new 2026-02-03 21:30:21.557763978 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/ajeetdsouza/zoxide</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.9.8</param> + <param name="revision">v0.9.9</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> </service> ++++++ vendor.tar.xz ++++++ /work/SRC/openSUSE:Factory/zoxide/vendor.tar.xz /work/SRC/openSUSE:Factory/.zoxide.new.1995/vendor.tar.xz differ: char 15, line 1 ++++++ zoxide-0.9.8.tar.gz -> zoxide-0.9.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/CHANGELOG.md new/zoxide-0.9.9/CHANGELOG.md --- old/zoxide-0.9.8/CHANGELOG.md 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/CHANGELOG.md 2026-01-31 08:42:16.000000000 +0100 @@ -7,6 +7,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.9] - 2026-01-31 + +### Added + +- Support for Android ARMv7. +- Fish: support for v4.1.0+. + +### Fixed + +- Nushell: use sigil operator when calling external commands. +- Zsh: support multiple digits in `z +N` and `z -N` dirstack commands. +- Bash: avoid downcasting `$PROMPT_COMMAND` array into a string. +- Bash: avoid overwriting `$PIPESTATUS`. +- POSIX: remove non-POSIX compliant calls to `builtin`. +- Fish: clear existing completions when defining `z` command. + ## [0.9.8] - 2025-05-27 ### Added @@ -22,7 +38,7 @@ ### Fixed -- Bash: doctor now handles `PROMPT_COMMAND` being an array. +- Bash: doctor now handles `$PROMPT_COMMAND` being an array. - Bash: doctor now handles Visual Studio Code's shell integration. - Bash: completions now work with `ble.sh`. - Nushell: stop ignoring symlinks when `cd`-ing into a directory. @@ -35,7 +51,7 @@ ### Added -- Nushell: support for 0.102.0. +- Nushell: support for v0.102.0. - Bash / Zsh: add doctor to diagnose common issues. ### Fixed @@ -302,7 +318,7 @@ - `zoxide query --all` for listing deleted directories. - Lazy deletion for removed directories that have not been accessed in > 90 days. -- Nushell: support for 0.32.0+. +- Nushell: support for v0.32.0+. ### Fixed @@ -536,6 +552,7 @@ - GitHub Actions pipeline to build and upload releases. - Add support for Zsh. +[0.9.9]: https://github.com/ajeetdsouza/zoxide/compare/v0.9.8...v0.9.9 [0.9.8]: https://github.com/ajeetdsouza/zoxide/compare/v0.9.7...v0.9.8 [0.9.7]: https://github.com/ajeetdsouza/zoxide/compare/v0.9.6...v0.9.7 [0.9.6]: https://github.com/ajeetdsouza/zoxide/compare/v0.9.5...v0.9.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/Cargo.lock new/zoxide-0.9.9/Cargo.lock --- old/zoxide-0.9.8/Cargo.lock 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/Cargo.lock 2026-01-31 08:42:16.000000000 +0100 @@ -335,7 +335,19 @@ dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -386,12 +398,6 @@ [[package]] name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" @@ -546,6 +552,12 @@ ] [[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -572,7 +584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", ] [[package]] @@ -581,7 +593,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "getrandom", + "getrandom 0.2.16", "libredox", "thiserror", ] @@ -623,19 +635,18 @@ [[package]] name = "rstest" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" dependencies = [ "rstest_macros", - "rustc_version", ] [[package]] name = "rstest_macros" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ "cfg-if", "glob", @@ -676,19 +687,6 @@ [[package]] name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys", -] - -[[package]] -name = "rustix" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" @@ -696,7 +694,7 @@ "bitflags", "errno", "libc", - "linux-raw-sys 0.9.4", + "linux-raw-sys", "windows-sys", ] @@ -769,15 +767,14 @@ [[package]] name = "tempfile" -version = "3.15.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.3", "once_cell", - "rustix 0.38.44", + "rustix", "windows-sys", ] @@ -841,6 +838,15 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] name = "which" version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -848,7 +854,7 @@ dependencies = [ "either", "env_home", - "rustix 1.0.7", + "rustix", "winsafe", ] @@ -941,6 +947,15 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] name = "yansi" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -968,7 +983,7 @@ [[package]] name = "zoxide" -version = "0.9.8" +version = "0.9.9" dependencies = [ "anyhow", "askama", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/Cargo.toml new/zoxide-0.9.9/Cargo.toml --- old/zoxide-0.9.8/Cargo.toml 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/Cargo.toml 2026-01-31 08:42:16.000000000 +0100 @@ -10,7 +10,7 @@ readme = "README.md" repository = "https://github.com/ajeetdsouza/zoxide" rust-version = "1.85.0" -version = "0.9.8" +version = "0.9.9" [badges] maintenance = { status = "actively-developed" } @@ -49,9 +49,9 @@ [dev-dependencies] assert_cmd = "2.0.0" -rstest = { version = "0.25.0", default-features = false } +rstest = { version = "0.26.0", default-features = false } rstest_reuse = "0.7.0" -tempfile = "=3.15.0" +tempfile = "3.15.0" [features] default = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/README.md new/zoxide-0.9.9/README.md --- old/zoxide-0.9.8/README.md 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/README.md 2026-01-31 08:42:16.000000000 +0100 @@ -11,12 +11,13 @@ <sup>Special thanks to:</sup> -<div><img src="contrib/warp.png" width="230" alt="Warp" /></div> -<div><sup><b>Warp, the intelligent terminal</b></sup></div> -<div><sup>Available for MacOS, Linux, and Windows</sup></div> +<!-- markdownlint-disable-next-line MD013 --> +<div><a href="https://go.warp.dev/zoxide"><img alt="Sponsored by Warp" width="230" src="https://raw.githubusercontent.com/warpdotdev/brand-assets/refs/heads/main/Github/Sponsor/Warp-Github-LG-03.png" /></a></div> +<div><sup><b>Warp, built for coding with multiple AI agents.</b></sup></div> +<div><sup>Available for macOS, Linux, and Windows.</sup></div> <div><sup> Visit - <a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=zoxide_20231001"><u>warp.dev</u></a> + <a href="https://go.warp.dev/zoxide"><u>warp.dev</u></a> to learn more. </sup></div> @@ -62,10 +63,6 @@ Read more about the matching algorithm [here][algorithm-matching]. -<a href="https://app.warp.dev/drive/folder/zoxide-EyHNpQumHVWNcYB8GJgDxG?utm_source=github&utm_medium=warp_pack&utm_campaign=zoxide_20231001"> - <img src="contrib/warp-packs-green.png" alt="Follow tutorial in Warp"> -</a> - ## Installation zoxide can be installed in 4 easy steps: @@ -86,34 +83,30 @@ > > Or, you can use a package manager: > - > | Distribution | Repository | Instructions | - > | ------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------- | - > | **_Any_** | **[crates.io]** | `cargo install zoxide --locked` | - > | _Any_ | [asdf] | `asdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git` <br /> `asdf install zoxide latest` | - > | _Any_ | [conda-forge] | `conda install -c conda-forge zoxide` | - > | _Any_ | [guix] | `guix install zoxide` | - > | _Any_ | [Linuxbrew] | `brew install zoxide` | - > | _Any_ | [nixpkgs] | `nix-env -iA nixpkgs.zoxide` | - > | AlmaLinux | | `dnf install zoxide` | - > | Alpine Linux 3.13+ | [Alpine Linux Packages] | `apk add zoxide` | - > | Arch Linux | [Arch Linux Extra] | `pacman -S zoxide` | - > | CentOS Stream | | `dnf install zoxide` | - > | ~Debian 11+~[^1] | ~[Debian Packages]~ | ~`apt install zoxide`~ | - > | Devuan 4.0+ | [Devuan Packages] | `apt install zoxide` | - > | Exherbo Linux | [Exherbo packages] | `cave resolve -x repository/rust` <br /> `cave resolve -x zoxide` | - > | Fedora 32+ | [Fedora Packages] | `dnf install zoxide` | - > | Gentoo | [Gentoo Packages] | `emerge app-shells/zoxide` | - > | Manjaro | | `pacman -S zoxide` | - > | openSUSE Tumbleweed | [openSUSE Factory] | `zypper install zoxide` | - > | ~Parrot OS~[^1] | | ~`apt install zoxide`~ | - > | ~Raspbian 11+~[^1] | ~[Raspbian Packages]~ | ~`apt install zoxide`~ | - > | RHEL 8+ | | `dnf install zoxide` | - > | Rhino Linux | [Pacstall Packages] | `pacstall -I zoxide-deb` | - > | Rocky Linux | | `dnf install zoxide` | - > | Slackware 15.0+ | [SlackBuilds] | [Instructions][slackbuilds-howto] | - > | Solus | [Solus Packages] | `eopkg install zoxide` | - > | ~Ubuntu 21.04+~[^1] | ~[Ubuntu Packages]~ | ~`apt install zoxide`~ | - > | Void Linux | [Void Linux Packages] | `xbps-install -S zoxide` | + > | Distribution | Repository | Instructions | + > | ------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------- | + > | **_Any_** | **[crates.io]** | `cargo install zoxide --locked` | + > | _Any_ | [asdf] | `asdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git` <br /> `asdf install zoxide latest` | + > | _Any_ | [conda-forge] | `conda install -c conda-forge zoxide` | + > | _Any_ | [guix] | `guix install zoxide` | + > | _Any_ | [Linuxbrew] | `brew install zoxide` | + > | _Any_ | [nixpkgs] | `nix-env -iA nixpkgs.zoxide` | + > | Alpine Linux 3.13+ | [Alpine Linux Packages] | `apk add zoxide` | + > | Arch Linux | [Arch Linux Extra] | `pacman -S zoxide` | + > | ~Debian~[^1] | ~[Debian Packages]~ | ~`apt install zoxide`~ | + > | Devuan 4.0+ | [Devuan Packages] | `apt install zoxide` | + > | Exherbo Linux | [Exherbo packages] | `cave resolve -x repository/rust` <br /> `cave resolve -x zoxide` | + > | Fedora 32+ | [Fedora Packages] | `dnf install zoxide` | + > | Gentoo | [Gentoo Packages] | `emerge app-shells/zoxide` | + > | Manjaro | | `pacman -S zoxide` | + > | openSUSE Tumbleweed | [openSUSE Factory] | `zypper install zoxide` | + > | ~Parrot OS~[^1] | | ~`apt install zoxide`~ | + > | ~Raspbian~[^1] | ~[Raspbian Packages]~ | ~`apt install zoxide`~ | + > | Rhino Linux | [Pacstall Packages] | `pacstall -I zoxide-deb` | + > | Slackware 15.0+ | [SlackBuilds] | [Instructions][slackbuilds-howto] | + > | Solus | [Solus Packages] | `eopkg install zoxide` | + > | ~Ubuntu~[^1] | ~[Ubuntu Packages]~ | ~`apt install zoxide`~ | + > | Void Linux | [Void Linux Packages] | `xbps-install -S zoxide` | </details> @@ -473,6 +466,7 @@ | [lf] | File manager | See the [wiki][lf-wiki] | | [nnn] | File manager | [nnn-autojump] | | [ranger] | File manager | [ranger-zoxide] | +| [raycast] | macOS launcher | [raycast-zoxide] | | [rfm] | File manager | Natively supported | | [sesh] | `tmux` session manager | Natively supported | | [telescope.nvim] | Fuzzy finder for Neovim | [telescope-zoxide] | @@ -542,6 +536,8 @@ [ranger-zoxide]: https://github.com/jchook/ranger-zoxide [ranger]: https://github.com/ranger/ranger [raspbian packages]: https://archive.raspbian.org/raspbian/pool/main/r/rust-zoxide/ +[raycast]: https://www.raycast.com/ +[raycast-zoxide]: https://www.raycast.com/mrpunkin/raycast-zoxide [releases]: https://github.com/ajeetdsouza/zoxide/releases [rfm]: https://github.com/dsxmachina/rfm [scoop]: https://github.com/ScoopInstaller/Main/tree/master/bucket/zoxide.json diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/_zoxide new/zoxide-0.9.9/contrib/completions/_zoxide --- old/zoxide-0.9.8/contrib/completions/_zoxide 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/_zoxide 2026-01-31 08:42:16.000000000 +0100 @@ -120,6 +120,7 @@ (query) _arguments "${_arguments_options[@]}" : \ '--exclude=[Exclude the current directory]:path:_files -/' \ +'--base-dir=[Only search within this directory]:path:_files -/' \ '-a[Show unavailable directories]' \ '--all[Show unavailable directories]' \ '(-l --list)-i[Use interactive selection]' \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/_zoxide.ps1 new/zoxide-0.9.9/contrib/completions/_zoxide.ps1 --- old/zoxide-0.9.8/contrib/completions/_zoxide.ps1 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/_zoxide.ps1 2026-01-31 08:42:16.000000000 +0100 @@ -102,6 +102,7 @@ } 'zoxide;query' { [CompletionResult]::new('--exclude', '--exclude', [CompletionResultType]::ParameterName, 'Exclude the current directory') + [CompletionResult]::new('--base-dir', '--base-dir', [CompletionResultType]::ParameterName, 'Only search within this directory') [CompletionResult]::new('-a', '-a', [CompletionResultType]::ParameterName, 'Show unavailable directories') [CompletionResult]::new('--all', '--all', [CompletionResultType]::ParameterName, 'Show unavailable directories') [CompletionResult]::new('-i', '-i', [CompletionResultType]::ParameterName, 'Use interactive selection') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/zoxide.bash new/zoxide-0.9.9/contrib/completions/zoxide.bash --- old/zoxide-0.9.8/contrib/completions/zoxide.bash 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/zoxide.bash 2026-01-31 08:42:16.000000000 +0100 @@ -199,7 +199,7 @@ return 0 ;; zoxide__query) - opts="-a -i -l -s -h -V --all --interactive --list --score --exclude --help --version [KEYWORDS]..." + opts="-a -i -l -s -h -V --all --interactive --list --score --exclude --base-dir --help --version [KEYWORDS]..." if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 @@ -209,6 +209,13 @@ COMPREPLY=() if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then compopt -o plusdirs + fi + return 0 + ;; + --base-dir) + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + compopt -o plusdirs fi return 0 ;; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/zoxide.elv new/zoxide-0.9.9/contrib/completions/zoxide.elv --- old/zoxide-0.9.8/contrib/completions/zoxide.elv 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/zoxide.elv 2026-01-31 08:42:16.000000000 +0100 @@ -90,6 +90,7 @@ } &'zoxide;query'= { cand --exclude 'Exclude the current directory' + cand --base-dir 'Only search within this directory' cand -a 'Show unavailable directories' cand --all 'Show unavailable directories' cand -i 'Use interactive selection' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/zoxide.fish new/zoxide-0.9.9/contrib/completions/zoxide.fish --- old/zoxide-0.9.8/contrib/completions/zoxide.fish 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/zoxide.fish 2026-01-31 08:42:16.000000000 +0100 @@ -62,6 +62,7 @@ complete -c zoxide -n "__fish_zoxide_using_subcommand init" -s h -l help -d 'Print help' complete -c zoxide -n "__fish_zoxide_using_subcommand init" -s V -l version -d 'Print version' complete -c zoxide -n "__fish_zoxide_using_subcommand query" -l exclude -d 'Exclude the current directory' -r -f -a "(__fish_complete_directories)" +complete -c zoxide -n "__fish_zoxide_using_subcommand query" -l base-dir -d 'Only search within this directory' -r -f -a "(__fish_complete_directories)" complete -c zoxide -n "__fish_zoxide_using_subcommand query" -s a -l all -d 'Show unavailable directories' complete -c zoxide -n "__fish_zoxide_using_subcommand query" -s i -l interactive -d 'Use interactive selection' complete -c zoxide -n "__fish_zoxide_using_subcommand query" -s l -l list -d 'List all matching directories' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/zoxide.nu new/zoxide-0.9.9/contrib/completions/zoxide.nu --- old/zoxide-0.9.8/contrib/completions/zoxide.nu 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/zoxide.nu 2026-01-31 08:42:16.000000000 +0100 @@ -82,6 +82,7 @@ --list(-l) # List all matching directories --score(-s) # Print score with results --exclude: path # Exclude the current directory + --base-dir: path # Only search within this directory --help(-h) # Print help --version(-V) # Print version ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/contrib/completions/zoxide.ts new/zoxide-0.9.9/contrib/completions/zoxide.ts --- old/zoxide-0.9.8/contrib/completions/zoxide.ts 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/contrib/completions/zoxide.ts 2026-01-31 08:42:16.000000000 +0100 @@ -215,6 +215,16 @@ }, }, { + name: "--base-dir", + description: "Only search within this directory", + isRepeatable: true, + args: { + name: "base_dir", + isOptional: true, + template: "folders", + }, + }, + { name: ["-a", "--all"], description: "Show unavailable directories", }, Binary files old/zoxide-0.9.8/contrib/warp-packs-green.png and new/zoxide-0.9.9/contrib/warp-packs-green.png differ Binary files old/zoxide-0.9.8/contrib/warp.png and new/zoxide-0.9.9/contrib/warp.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/install.sh new/zoxide-0.9.9/install.sh --- old/zoxide-0.9.8/install.sh 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/install.sh 2026-01-31 08:42:16.000000000 +0100 @@ -31,7 +31,7 @@ # Create and enter a temporary directory. local _tmp_dir - _tmp_dir="$(mktemp -d)" || err "mktemp: could not create temporary directory" + _tmp_dir="$(mktemp -d /tmp/zoxide_XXXXXX)" || err "mktemp: could not create temporary directory" cd "${_tmp_dir}" || err "cd: failed to enter directory: ${_tmp_dir}" # Download and extract zoxide. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/cmd/cmd.rs new/zoxide-0.9.9/src/cmd/cmd.rs --- old/zoxide-0.9.8/src/cmd/cmd.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/cmd/cmd.rs 2026-01-31 08:42:16.000000000 +0100 @@ -186,6 +186,10 @@ /// Exclude the current directory #[clap(long, value_hint = ValueHint::DirPath, value_name = "path")] pub exclude: Option<String>, + + /// Only search within this directory + #[clap(long, value_hint = ValueHint::DirPath, value_name = "path")] + pub base_dir: Option<String>, } /// Remove a directory from the database diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/cmd/import.rs new/zoxide-0.9.9/src/cmd/import.rs --- old/zoxide-0.9.8/src/cmd/import.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/cmd/import.rs 2026-01-31 08:42:16.000000000 +0100 @@ -37,7 +37,7 @@ let mut rank = rank.parse::<f64>().with_context(|| format!("invalid rank: {rank}"))?; // Normalize the rank using a sigmoid function. Don't import actual ranks from // autojump, since its scoring algorithm is very different and might - // take a while to get normalized. + // take a while to normalize. rank = sigmoid(rank); db.add_unchecked(path, rank, 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/cmd/query.rs new/zoxide-0.9.9/src/cmd/query.rs --- old/zoxide-0.9.8/src/cmd/query.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/cmd/query.rs 2026-01-31 08:42:16.000000000 +0100 @@ -79,7 +79,8 @@ fn get_stream<'a>(&self, db: &'a mut Database, now: Epoch) -> Result<Stream<'a>> { let mut options = StreamOptions::new(now) .with_keywords(self.keywords.iter().map(|s| s.as_str())) - .with_exclude(config::exclude_dirs()?); + .with_exclude(config::exclude_dirs()?) + .with_base_dir(self.base_dir.clone()); if !self.all { let resolve_symlinks = config::resolve_symlinks(); options = options.with_exists(true).with_resolve_symlinks(resolve_symlinks); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/db/mod.rs new/zoxide-0.9.9/src/db/mod.rs --- old/zoxide-0.9.8/src/db/mod.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/db/mod.rs 2026-01-31 08:42:16.000000000 +0100 @@ -76,8 +76,9 @@ } /// Creates a new directory. This will create a duplicate entry if this - /// directory is always in the database, it is expected that the user either - /// does a check before calling this, or calls `dedup()` afterward. + /// directory is already in the database, it is expected that the user + /// either does a check before calling this, or calls `dedup()` + /// afterward. pub fn add_unchecked(&mut self, path: impl AsRef<str> + Into<String>, rank: Rank, now: Epoch) { self.with_dirs_mut(|dirs| { dirs.push(Dir { path: path.into().into(), rank, last_accessed: now }) @@ -183,7 +184,7 @@ *self.borrow_dirty() } - pub fn dirs(&self) -> &[Dir] { + pub fn dirs(&self) -> &[Dir<'_>] { self.borrow_dirs() } @@ -203,7 +204,7 @@ .context("could not serialize database") } - fn deserialize(bytes: &[u8]) -> Result<Vec<Dir>> { + fn deserialize(bytes: &[u8]) -> Result<Vec<Dir<'_>>> { // Assume a maximum size for the database. This prevents bincode from throwing // strange errors when it encounters invalid data. const MAX_SIZE: u64 = 32 << 20; // 32 MiB diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/db/stream.rs new/zoxide-0.9.9/src/db/stream.rs --- old/zoxide-0.9.8/src/db/stream.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/db/stream.rs 2026-01-31 08:42:16.000000000 +0100 @@ -1,5 +1,6 @@ use std::iter::Rev; use std::ops::Range; +use std::path::Path; use std::{fs, path}; use glob::Pattern; @@ -20,7 +21,7 @@ Stream { db, idxs, options } } - pub fn next(&mut self) -> Option<&Dir> { + pub fn next(&mut self) -> Option<&Dir<'_>> { while let Some(idx) = self.idxs.next() { let dir = &self.db.dirs()[idx]; @@ -28,11 +29,16 @@ continue; } + if !self.filter_by_base_dir(&dir.path) { + continue; + } + if !self.filter_by_exclude(&dir.path) { self.db.swap_remove(idx); continue; } + // Exists queries are slow, this should always be checked last. if !self.filter_by_exists(&dir.path) { if dir.last_accessed < self.options.ttl { self.db.swap_remove(idx); @@ -47,6 +53,30 @@ None } + fn filter_by_base_dir(&self, path: &str) -> bool { + match &self.options.base_dir { + Some(base_dir) => Path::new(path).starts_with(base_dir), + None => true, + } + } + + fn filter_by_exclude(&self, path: &str) -> bool { + !self.options.exclude.iter().any(|pattern| pattern.matches(path)) + } + + fn filter_by_exists(&self, path: &str) -> bool { + if !self.options.exists { + return true; + } + + // The logic here is reversed - if we resolve symlinks when adding entries to + // the database, we should not return symlinks when querying from + // the database. + let resolver = + if self.options.resolve_symlinks { fs::symlink_metadata } else { fs::metadata }; + resolver(path).map(|metadata| metadata.is_dir()).unwrap_or_default() + } + fn filter_by_keywords(&self, path: &str) -> bool { let (keywords_last, keywords) = match self.options.keywords.split_last() { Some(split) => split, @@ -74,23 +104,6 @@ true } - - fn filter_by_exclude(&self, path: &str) -> bool { - !self.options.exclude.iter().any(|pattern| pattern.matches(path)) - } - - fn filter_by_exists(&self, path: &str) -> bool { - if !self.options.exists { - return true; - } - - // The logic here is reversed - if we resolve symlinks when adding entries to - // the database, we should not return symlinks when querying back from - // the database. - let resolver = - if self.options.resolve_symlinks { fs::symlink_metadata } else { fs::metadata }; - resolver(path).map(|metadata| metadata.is_dir()).unwrap_or_default() - } } pub struct StreamOptions { @@ -112,6 +125,10 @@ /// Directories that do not exist and haven't been accessed since TTL will /// be lazily removed. ttl: Epoch, + + /// Only return directories within this parent directory + /// Does not check if the path exists + base_dir: Option<String>, } impl StreamOptions { @@ -123,6 +140,7 @@ exists: false, resolve_symlinks: false, ttl: now.saturating_sub(3 * MONTH), + base_dir: None, } } @@ -149,6 +167,11 @@ self.resolve_symlinks = resolve_symlinks; self } + + pub fn with_base_dir(mut self, base_dir: Option<String>) -> Self { + self.base_dir = base_dir; + self + } } #[cfg(test)] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/shell.rs new/zoxide-0.9.9/src/shell.rs --- old/zoxide-0.9.8/src/shell.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/shell.rs 2026-01-31 08:42:16.000000000 +0100 @@ -97,10 +97,10 @@ #[apply(opts)] fn elvish_elvish(cmd: Option<&str>, hook: InitHook, echo: bool, resolve_symlinks: bool) { let opts = Opts { cmd, hook, echo, resolve_symlinks }; - let mut source = String::default(); + let mut source = String::new(); // Filter out lines using edit:*, since those functions are only available in - // the interactive editor. + // interactive editor mode. for line in Elvish(&opts).render().unwrap().lines().filter(|line| !line.contains("edit:")) { source.push_str(line); source.push('\n'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/src/util.rs new/zoxide-0.9.9/src/util.rs --- old/zoxide-0.9.8/src/util.rs 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/src/util.rs 2026-01-31 08:42:16.000000000 +0100 @@ -135,7 +135,7 @@ mem::drop(self.0.stdin.take()); let mut stdout = self.0.stdout.take().unwrap(); - let mut output = String::default(); + let mut output = String::new(); stdout.read_to_string(&mut output).context("failed to read from fzf")?; let status = self.0.wait().context("wait failed on fzf")?; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/templates/bash.txt new/zoxide-0.9.9/templates/bash.txt --- old/zoxide-0.9.8/templates/bash.txt 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/templates/bash.txt 2026-01-31 08:42:16.000000000 +0100 @@ -55,7 +55,14 @@ # Initialize hook. if [[ ${PROMPT_COMMAND:=} != *'__zoxide_hook'* ]]; then - PROMPT_COMMAND="__zoxide_hook;${PROMPT_COMMAND#;}" + if [[ "$(declare -p PROMPT_COMMAND 2>&1)" == "declare -a"* ]]; then + PROMPT_COMMAND=("${PROMPT_COMMAND[@]}" __zoxide_hook) + else + # shellcheck disable=SC2128,SC2178 + PROMPT_COMMAND="${PROMPT_COMMAND%"${PROMPT_COMMAND##*[![:space:]]}"}" + # shellcheck disable=SC2128,SC2178 + PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND};}__zoxide_hook" + fi fi {%- endif %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/templates/fish.txt new/zoxide-0.9.9/templates/fish.txt --- old/zoxide-0.9.8/templates/fish.txt 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/templates/fish.txt 2026-01-31 08:42:16.000000000 +0100 @@ -19,7 +19,11 @@ # A copy of fish's internal cd function. This makes it possible to use # `alias cd=z` without causing an infinite loop. if ! builtin functions --query __zoxide_cd_internal - string replace --regex -- '^function cd\s' 'function __zoxide_cd_internal ' <$__fish_data_dir/functions/cd.fish | source + if status list-files functions/cd.fish &>/dev/null + status get-file functions/cd.fish | string replace --regex -- '^function cd\s' 'function __zoxide_cd_internal ' | source + else + string replace --regex -- '^function cd\s' 'function __zoxide_cd_internal ' <$__fish_data_dir/functions/cd.fish | source + end end # cd + custom logic based on the value of _ZO_ECHO. @@ -113,9 +117,11 @@ {%- when Some with (cmd) %} abbr --erase {{cmd}} &>/dev/null +complete --erase --command {{cmd}} alias {{cmd}}=__zoxide_z abbr --erase {{cmd}}i &>/dev/null +complete --erase --command {{cmd}}i alias {{cmd}}i=__zoxide_zi {%- when None %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/templates/nushell.txt new/zoxide-0.9.9/templates/nushell.txt --- old/zoxide-0.9.8/templates/nushell.txt 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/templates/nushell.txt 2026-01-31 08:42:16.000000000 +0100 @@ -26,7 +26,7 @@ if not $__zoxide_hooked { $env.config.hooks.pre_prompt = ($env.config.hooks.pre_prompt | append { __zoxide_hook: true, - code: {|| zoxide add -- $env.PWD} + code: {|| ^zoxide add -- $env.PWD} }) } {%- else if hook == InitHook::Pwd %} @@ -43,7 +43,7 @@ if not $__zoxide_hooked { $env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD | append { __zoxide_hook: true, - code: {|_, dir| zoxide add -- $dir} + code: {|_, dir| ^zoxide add -- $dir} }) } {%- endif %} @@ -62,7 +62,7 @@ [ '-' ] => {'-'}, [ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg} _ => { - zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n" + ^zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n" } } cd $path @@ -73,7 +73,7 @@ # Jump to a directory using interactive search. def --env --wrapped __zoxide_zi [...rest:string] { - cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")' + cd $'(^zoxide query --interactive -- ...$rest | str trim -r -c "\n")' {%- if echo %} echo $env.PWD {%- endif %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/templates/posix.txt new/zoxide-0.9.9/templates/posix.txt --- old/zoxide-0.9.8/templates/posix.txt 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/templates/posix.txt 2026-01-31 08:42:16.000000000 +0100 @@ -10,7 +10,7 @@ # pwd based on the value of _ZO_RESOLVE_SYMLINKS. __zoxide_pwd() { {%- if cfg!(windows) %} - \command cygpath -w "$(\builtin pwd -P)" + \command cygpath -w "$(\command pwd -P)" {%- else if resolve_symlinks %} \command pwd -P {%- else %} @@ -35,7 +35,7 @@ {%- when InitHook::Prompt -%} # Hook to add new entries to the database. __zoxide_hook() { - \command zoxide add -- "$(__zoxide_pwd || \builtin true)" + \command zoxide add -- "$(__zoxide_pwd || \command true)" } # Initialize hook. @@ -95,7 +95,7 @@ elif [ "$#" -eq 1 ] && [ -d "$1" ]; then __zoxide_cd "$1" else - __zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd || \builtin true)" -- "$@")" && + __zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd || \command true)" -- "$@")" && __zoxide_cd "${__zoxide_result}" fi } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zoxide-0.9.8/templates/zsh.txt new/zoxide-0.9.9/templates/zsh.txt --- old/zoxide-0.9.8/templates/zsh.txt 2025-05-26 23:43:06.000000000 +0200 +++ new/zoxide-0.9.9/templates/zsh.txt 2026-01-31 08:42:16.000000000 +0100 @@ -84,7 +84,7 @@ __zoxide_doctor if [[ "$#" -eq 0 ]]; then __zoxide_cd ~ - elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then + elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]+$ ]]; }; then __zoxide_cd "$1" elif [[ "$#" -eq 2 ]] && [[ "$1" = "--" ]]; then __zoxide_cd "$2"
