feat: add _ZO_ZI_ONLY_RESULT env var
This commit is contained in:
parent
bea2225b68
commit
87bb931999
|
|
@ -395,6 +395,7 @@ When calling `zoxide init`, the following flags are available:
|
||||||
- `--cmd j` would change the commands to (`j`, `ji`).
|
- `--cmd j` would change the commands to (`j`, `ji`).
|
||||||
- `--cmd cd` would replace the `cd` command.
|
- `--cmd cd` would replace the `cd` command.
|
||||||
- `--hook <HOOK>`
|
- `--hook <HOOK>`
|
||||||
|
|
||||||
- Changes how often zoxide increments a directory's score:
|
- Changes how often zoxide increments a directory's score:
|
||||||
|
|
||||||
| Hook | Description |
|
| Hook | Description |
|
||||||
|
|
@ -414,6 +415,7 @@ Environment variables[^2] can be used for configuration. They must be set before
|
||||||
`zoxide init` is called.
|
`zoxide init` is called.
|
||||||
|
|
||||||
- `_ZO_DATA_DIR`
|
- `_ZO_DATA_DIR`
|
||||||
|
|
||||||
- Specifies the directory in which the database is stored.
|
- Specifies the directory in which the database is stored.
|
||||||
- The default value varies across OSes:
|
- The default value varies across OSes:
|
||||||
|
|
||||||
|
|
@ -427,6 +429,7 @@ Environment variables[^2] can be used for configuration. They must be set before
|
||||||
- When set to 1, `z` will print the matched directory before navigating to
|
- When set to 1, `z` will print the matched directory before navigating to
|
||||||
it.
|
it.
|
||||||
- `_ZO_EXCLUDE_DIRS`
|
- `_ZO_EXCLUDE_DIRS`
|
||||||
|
|
||||||
- Excludes the specified directories from the database.
|
- Excludes the specified directories from the database.
|
||||||
- This is provided as a list of [globs][glob], separated by OS-specific
|
- This is provided as a list of [globs][glob], separated by OS-specific
|
||||||
characters:
|
characters:
|
||||||
|
|
@ -437,6 +440,7 @@ Environment variables[^2] can be used for configuration. They must be set before
|
||||||
| Windows | `;` | `$HOME;$HOME/private/*` |
|
| Windows | `;` | `$HOME;$HOME/private/*` |
|
||||||
|
|
||||||
- By default, this is set to `"$HOME"`.
|
- By default, this is set to `"$HOME"`.
|
||||||
|
|
||||||
- `_ZO_FZF_OPTS`
|
- `_ZO_FZF_OPTS`
|
||||||
- Custom options to pass to [fzf] during interactive selection. See
|
- Custom options to pass to [fzf] during interactive selection. See
|
||||||
[`man fzf`][fzf-man] for the list of options.
|
[`man fzf`][fzf-man] for the list of options.
|
||||||
|
|
@ -447,6 +451,9 @@ Environment variables[^2] can be used for configuration. They must be set before
|
||||||
- `_ZO_RESOLVE_SYMLINKS`
|
- `_ZO_RESOLVE_SYMLINKS`
|
||||||
- When set to 1, `z` will resolve symlinks before adding directories to the
|
- When set to 1, `z` will resolve symlinks before adding directories to the
|
||||||
database.
|
database.
|
||||||
|
- `_ZO_ZI_ONLY_RESULT`
|
||||||
|
- When set to 1, `zi foo` will automatically select the only result `fzf` returns.
|
||||||
|
- However, if only one result is available during selection in the `fzf` menu, it will not be automatically selected.
|
||||||
|
|
||||||
## Third-party integrations
|
## Third-party integrations
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@ https://github.com/ajeetdsouza/zoxide
|
||||||
{tab}<bold>_ZO_EXCLUDE_DIRS</bold> {tab}List of directory globs to be excluded
|
{tab}<bold>_ZO_EXCLUDE_DIRS</bold> {tab}List of directory globs to be excluded
|
||||||
{tab}<bold>_ZO_FZF_OPTS</bold> {tab}Custom flags to pass to fzf
|
{tab}<bold>_ZO_FZF_OPTS</bold> {tab}Custom flags to pass to fzf
|
||||||
{tab}<bold>_ZO_MAXAGE</bold> {tab}Maximum total age after which entries start getting deleted
|
{tab}<bold>_ZO_MAXAGE</bold> {tab}Maximum total age after which entries start getting deleted
|
||||||
{tab}<bold>_ZO_RESOLVE_SYMLINKS</bold>{tab}Resolve symlinks when storing paths").into_resettable()
|
{tab}<bold>_ZO_RESOLVE_SYMLINKS</bold>{tab}Resolve symlinks when storing paths
|
||||||
|
{tab}<bold>_ZO_ZI_ONLY_RESULT</bold>{tab}Automatically select only result after fzf initialization (but not while fuzzy finding)").into_resettable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,9 @@ impl Query {
|
||||||
let now = util::current_time()?;
|
let now = util::current_time()?;
|
||||||
let mut stream = self.get_stream(db, now)?;
|
let mut stream = self.get_stream(db, now)?;
|
||||||
|
|
||||||
if self.interactive {
|
if self.interactive && config::zi_only_result() {
|
||||||
|
self.query_interactive_only_result(&mut stream, now)
|
||||||
|
} else if self.interactive {
|
||||||
self.query_interactive(&mut stream, now)
|
self.query_interactive(&mut stream, now)
|
||||||
} else if self.list {
|
} else if self.list {
|
||||||
self.query_list(&mut stream, now)
|
self.query_list(&mut stream, now)
|
||||||
|
|
@ -30,6 +32,33 @@ impl Query {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn query_interactive(&self, stream: &mut Stream, now: Epoch) -> Result<()> {
|
fn query_interactive(&self, stream: &mut Stream, now: Epoch) -> Result<()> {
|
||||||
|
let mut fzf = Self::get_fzf()?;
|
||||||
|
let selection = loop {
|
||||||
|
match stream.next() {
|
||||||
|
Some(dir) if Some(dir.path.as_ref()) == self.exclude.as_deref() => {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Some(dir) => {
|
||||||
|
if let Some(selection) = fzf.write(dir, now)? {
|
||||||
|
break selection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
break fzf.wait()?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if self.score {
|
||||||
|
print!("{selection}");
|
||||||
|
} else {
|
||||||
|
let path = selection.get(7..).context("could not read selection from fzf")?;
|
||||||
|
print!("{path}");
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn query_interactive_only_result(&self, stream: &mut Stream, now: Epoch) -> Result<()> {
|
||||||
let mut fzf = Self::get_fzf()?;
|
let mut fzf = Self::get_fzf()?;
|
||||||
let mut stream_length = 0;
|
let mut stream_length = 0;
|
||||||
let mut last_dir: Option<String> = None;
|
let mut last_dir: Option<String> = None;
|
||||||
|
|
|
||||||
|
|
@ -60,3 +60,7 @@ pub fn maxage() -> Result<Rank> {
|
||||||
pub fn resolve_symlinks() -> bool {
|
pub fn resolve_symlinks() -> bool {
|
||||||
env::var_os("_ZO_RESOLVE_SYMLINKS").is_some_and(|var| var == "1")
|
env::var_os("_ZO_RESOLVE_SYMLINKS").is_some_and(|var| var == "1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn zi_only_result() -> bool {
|
||||||
|
env::var_os("_ZO_ZI_ONLY_RESULT").is_some_and(|var| var == "1")
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use std::{env, mem};
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use anyhow::{Context, Error, Result, bail};
|
use anyhow::{Context, Result, bail};
|
||||||
|
|
||||||
use crate::db::{Dir, Epoch};
|
use crate::db::{Dir, Epoch};
|
||||||
use crate::error::SilentExit;
|
use crate::error::SilentExit;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue