From 2bb197196a34308ecf0cf86bc1c891d6e89ff20c Mon Sep 17 00:00:00 2001 From: Shou Ya Date: Sat, 9 Dec 2023 01:43:01 +0900 Subject: [PATCH] add limit option for zoxide query --- contrib/completions/_zoxide | 2 ++ contrib/completions/_zoxide.ps1 | 2 ++ contrib/completions/zoxide.bash | 10 +++++++++- contrib/completions/zoxide.elv | 2 ++ contrib/completions/zoxide.fish | 1 + contrib/completions/zoxide.ts | 9 +++++++++ src/cmd/cmd.rs | 4 ++++ src/cmd/query.rs | 5 +++++ 8 files changed, 34 insertions(+), 1 deletion(-) diff --git a/contrib/completions/_zoxide b/contrib/completions/_zoxide index fd898e6..9fc2932 100644 --- a/contrib/completions/_zoxide +++ b/contrib/completions/_zoxide @@ -117,6 +117,8 @@ _arguments "${_arguments_options[@]}" \ ;; (query) _arguments "${_arguments_options[@]}" \ +'-n+[Limit number of results in List mode]:LIMIT: ' \ +'--limit=[Limit number of results in List mode]:LIMIT: ' \ '--exclude=[Exclude the current directory]:path:_files -/' \ '-a[Show unavailable directories]' \ '--all[Show unavailable directories]' \ diff --git a/contrib/completions/_zoxide.ps1 b/contrib/completions/_zoxide.ps1 index ff0e6b0..caedd5f 100644 --- a/contrib/completions/_zoxide.ps1 +++ b/contrib/completions/_zoxide.ps1 @@ -99,6 +99,8 @@ Register-ArgumentCompleter -Native -CommandName 'zoxide' -ScriptBlock { break } 'zoxide;query' { + [CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Limit number of results in List mode') + [CompletionResult]::new('--limit', 'limit', [CompletionResultType]::ParameterName, 'Limit number of results in List mode') [CompletionResult]::new('--exclude', 'exclude', [CompletionResultType]::ParameterName, 'Exclude the current directory') [CompletionResult]::new('-a', 'a', [CompletionResultType]::ParameterName, 'Show unavailable directories') [CompletionResult]::new('--all', 'all', [CompletionResultType]::ParameterName, 'Show unavailable directories') diff --git a/contrib/completions/zoxide.bash b/contrib/completions/zoxide.bash index 93c19d9..1e8a290 100644 --- a/contrib/completions/zoxide.bash +++ b/contrib/completions/zoxide.bash @@ -187,12 +187,20 @@ _zoxide() { return 0 ;; zoxide__query) - opts="-a -i -l -s -h -V --all --interactive --list --score --exclude --help --version [KEYWORDS]..." + opts="-a -i -l -n -s -h -V --all --interactive --list --limit --score --exclude --help --version [KEYWORDS]..." if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 fi case "${prev}" in + --limit) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -n) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; --exclude) COMPREPLY=($(compgen -f "${cur}")) return 0 diff --git a/contrib/completions/zoxide.elv b/contrib/completions/zoxide.elv index 6183d37..43f27ee 100644 --- a/contrib/completions/zoxide.elv +++ b/contrib/completions/zoxide.elv @@ -87,6 +87,8 @@ set edit:completion:arg-completer[zoxide] = {|@words| cand --version 'Print version' } &'zoxide;query'= { + cand -n 'Limit number of results in List mode' + cand --limit 'Limit number of results in List mode' cand --exclude 'Exclude the current directory' cand -a 'Show unavailable directories' cand --all 'Show unavailable directories' diff --git a/contrib/completions/zoxide.fish b/contrib/completions/zoxide.fish index 276cbaf..760ccd1 100644 --- a/contrib/completions/zoxide.fish +++ b/contrib/completions/zoxide.fish @@ -31,6 +31,7 @@ complete -c zoxide -n "__fish_seen_subcommand_from init" -l hook -d 'Changes how complete -c zoxide -n "__fish_seen_subcommand_from init" -l no-cmd -d 'Prevents zoxide from defining the `z` and `zi` commands' complete -c zoxide -n "__fish_seen_subcommand_from init" -s h -l help -d 'Print help' complete -c zoxide -n "__fish_seen_subcommand_from init" -s V -l version -d 'Print version' +complete -c zoxide -n "__fish_seen_subcommand_from query" -s n -l limit -d 'Limit number of results in List mode' -r complete -c zoxide -n "__fish_seen_subcommand_from query" -l exclude -d 'Exclude the current directory' -r -f -a "(__fish_complete_directories)" complete -c zoxide -n "__fish_seen_subcommand_from query" -s a -l all -d 'Show unavailable directories' complete -c zoxide -n "__fish_seen_subcommand_from query" -s i -l interactive -d 'Use interactive selection' diff --git a/contrib/completions/zoxide.ts b/contrib/completions/zoxide.ts index 0200591..9c5b369 100644 --- a/contrib/completions/zoxide.ts +++ b/contrib/completions/zoxide.ts @@ -194,6 +194,15 @@ const completion: Fig.Spec = { name: "query", description: "Search for a directory in the database", options: [ + { + name: ["-n", "--limit"], + description: "Limit number of results in List mode", + isRepeatable: true, + args: { + name: "limit", + isOptional: true, + }, + }, { name: "--exclude", description: "Exclude the current directory", diff --git a/src/cmd/cmd.rs b/src/cmd/cmd.rs index 0e5f6c4..eaedde2 100644 --- a/src/cmd/cmd.rs +++ b/src/cmd/cmd.rs @@ -165,6 +165,10 @@ pub struct Query { #[clap(long, short, conflicts_with = "interactive")] pub list: bool, + /// Limit number of results in List mode + #[clap(long, short('n'))] + pub limit: Option, + /// Print score with results #[clap(long, short)] pub score: bool, diff --git a/src/cmd/query.rs b/src/cmd/query.rs index 21ae197..7cd234a 100644 --- a/src/cmd/query.rs +++ b/src/cmd/query.rs @@ -41,9 +41,14 @@ impl Query { } } else if self.list { let handle = &mut io::stdout().lock(); + let mut limit = self.limit.unwrap_or(usize::MAX); while let Some(dir) = stream.next() { + if limit == 0 { + break; + } let dir = if self.score { dir.display().with_score(now) } else { dir.display() }; writeln!(handle, "{dir}").pipe_exit("stdout")?; + limit -= 1; } } else { let handle = &mut io::stdout();