From 0ac1ac878d138325d7a5e09ddb44f215ae481840 Mon Sep 17 00:00:00 2001 From: Loric ANDRE Date: Sun, 8 Mar 2026 19:13:19 +0100 Subject: [PATCH] release: v3.7.0 --- CHANGELOG.md | 52 ++++++++++++++++++++ Cargo.lock | 110 +++++++----------------------------------- Cargo.toml | 2 +- man/man1/sk.1 | 24 +++++++-- shell/completion.bash | 14 +++--- shell/completion.fish | 9 +++- shell/completion.nu | 9 +++- shell/completion.zsh | 9 ++-- shell/version.txt | 2 +- 9 files changed, 119 insertions(+), 112 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ea8b690..1d2d081c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file. 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). +## [3.7.0] - 2026-03-08 + +This adds a new library API: `Skim::run_items`. Using this, you don't need to send the items, the library handles it for you. + +Instead of writing this: + +```rust +use skim::prelude::*; +let (rx, tx) = unbounded(); + +// We need MySkimItem to override the set_index/get_index methods +struct MySkimItem { + value: String, + index: usize +} + +impl SkimItem for MySkimItem { + // Implement the default members +} + +tx.send(MySkimItem { value: String::from("foo"), index: 0 }); +tx.send(MySkimItem { value: String::from("bar"), index: 1 }); + +let res = Skim::run_with(options, Some(rx)); +``` + +You can simply write this: +```rust +use skim::prelude::*; + +let res = Skim::run_with(options, ["foo", "bar"]); +``` + +It will automatically convert any iterator of by adding an `index` field and then send it, before running skim. + + + +### 🚀 Features + +- Add `scheme` for better filepath matching in Arinae +- Add Skim::run_items API + +### 🐛 Bug Fixes + +- Use sum of scores in And engine +- Correctly init rank for and engine + +### ⚙️ Miscellaneous Tasks + +- Add gungraun benchmark +- Review snapshots + ## [3.6.2] - 2026-03-04 ### ⚙️ Miscellaneous Tasks diff --git a/Cargo.lock b/Cargo.lock index 19a066c5..60deeb2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1308,9 +1308,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libmimalloc-sys" @@ -2277,7 +2277,7 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "skim" -version = "3.6.2" +version = "3.7.0" dependencies = [ "ansi-to-tui", "assert_enum_variants", @@ -2337,12 +2337,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2747,9 +2747,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ "atomic", "getrandom 0.4.2", @@ -3054,7 +3054,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -3063,16 +3063,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", + "windows-targets", ] [[package]] @@ -3090,31 +3081,14 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -3123,96 +3097,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winreg" version = "0.10.1" diff --git a/Cargo.toml b/Cargo.toml index 9d35bfba..ee09749b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "skim" -version = "3.6.2" +version = "3.7.0" authors = ["Loric ANDRE", "Zhang Jinzhou "] description = "Fuzzy Finder in rust!" documentation = "https://docs.rs/skim" diff --git a/man/man1/sk.1 b/man/man1/sk.1 index 2fdc322a..19d430ea 100644 --- a/man/man1/sk.1 +++ b/man/man1/sk.1 @@ -1,6 +1,6 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' -.TH sk 1 "sk 3.6.2" +.TH sk 1 "sk 3.7.0" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH NAME @@ -8,7 +8,7 @@ sk \- Fuzzy Finder in rust! .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH SYNOPSIS -\fBsk\fR [\fB\-\-tac\fR] [\fB\-\-min\-query\-length\fR] [\fB\-\-no\-sort\fR] [\fB\-t\fR|\fB\-\-tiebreak\fR] [\fB\-n\fR|\fB\-\-nth\fR] [\fB\-\-with\-nth\fR] [\fB\-d\fR|\fB\-\-delimiter\fR] [\fB\-e\fR|\fB\-\-exact\fR] [\fB\-\-regex\fR] [\fB\-\-algo\fR] [\fB\-\-case\fR] [\fB\-\-typos\fR] [\fB\-\-no\-typos\fR] [\fB\-\-normalize\fR] [\fB\-\-split\-match\fR] [\fB\-b\fR|\fB\-\-bind\fR] [\fB\-m\fR|\fB\-\-multi\fR] [\fB\-\-no\-multi\fR] [\fB\-\-no\-mouse\fR] [\fB\-c\fR|\fB\-\-cmd\fR] [\fB\-i\fR|\fB\-\-interactive\fR] [\fB\-I \fR] [\fB\-\-color\fR] [\fB\-\-no\-hscroll\fR] [\fB\-\-keep\-right\fR] [\fB\-\-skip\-to\-pattern\fR] [\fB\-\-no\-clear\-if\-empty\fR] [\fB\-\-no\-clear\-start\fR] [\fB\-\-no\-clear\fR] [\fB\-\-show\-cmd\-error\fR] [\fB\-\-cycle\fR] [\fB\-\-disabled\fR] [\fB\-\-layout\fR] [\fB\-\-reverse\fR] [\fB\-\-height\fR] [\fB\-\-no\-height\fR] [\fB\-\-min\-height\fR] [\fB\-\-margin\fR] [\fB\-p\fR|\fB\-\-prompt\fR] [\fB\-\-cmd\-prompt\fR] [\fB\-\-selector\fR] [\fB\-\-multi\-selector\fR] [\fB\-\-ansi\fR] [\fB\-\-tabstop\fR] [\fB\-\-info\fR] [\fB\-\-no\-info\fR] [\fB\-\-inline\-info\fR] [\fB\-\-header\fR] [\fB\-\-header\-lines\fR] [\fB\-\-border\fR] [\fB\-\-wrap\fR] [\fB\-\-history\fR] [\fB\-\-history\-size\fR] [\fB\-\-cmd\-history\fR] [\fB\-\-cmd\-history\-size\fR] [\fB\-\-preview\fR] [\fB\-\-preview\-window\fR] [\fB\-q\fR|\fB\-\-query\fR] [\fB\-\-cmd\-query\fR] [\fB\-\-read0\fR] [\fB\-\-print0\fR] [\fB\-\-print\-query\fR] [\fB\-\-print\-cmd\fR] [\fB\-\-print\-score\fR] [\fB\-\-print\-header\fR] [\fB\-\-print\-current\fR] [\fB\-\-output\-format\fR] [\fB\-\-no\-strip\-ansi\fR] [\fB\-1\fR|\fB\-\-select\-1\fR] [\fB\-0\fR|\fB\-\-exit\-0\fR] [\fB\-\-sync\fR] [\fB\-\-pre\-select\-n\fR] [\fB\-\-pre\-select\-pat\fR] [\fB\-\-pre\-select\-items\fR] [\fB\-\-pre\-select\-file\fR] [\fB\-f\fR|\fB\-\-filter\fR] [\fB\-\-shell\fR] [\fB\-\-shell\-bindings\fR] [\fB\-\-man\fR] [\fB\-\-listen\fR] [\fB\-\-remote\fR] [\fB\-\-tmux\fR] [\fB\-\-log\-level\fR] [\fB\-\-log\-file\fR] [\fB\-\-expect\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] +\fBsk\fR [\fB\-\-tac\fR] [\fB\-\-min\-query\-length\fR] [\fB\-\-no\-sort\fR] [\fB\-t\fR|\fB\-\-tiebreak\fR] [\fB\-n\fR|\fB\-\-nth\fR] [\fB\-\-with\-nth\fR] [\fB\-d\fR|\fB\-\-delimiter\fR] [\fB\-e\fR|\fB\-\-exact\fR] [\fB\-\-regex\fR] [\fB\-\-algo\fR] [\fB\-\-case\fR] [\fB\-\-typos\fR] [\fB\-\-no\-typos\fR] [\fB\-\-normalize\fR] [\fB\-\-split\-match\fR] [\fB\-\-last\-match\fR] [\fB\-\-scheme\fR] [\fB\-b\fR|\fB\-\-bind\fR] [\fB\-m\fR|\fB\-\-multi\fR] [\fB\-\-no\-multi\fR] [\fB\-\-no\-mouse\fR] [\fB\-c\fR|\fB\-\-cmd\fR] [\fB\-i\fR|\fB\-\-interactive\fR] [\fB\-I \fR] [\fB\-\-color\fR] [\fB\-\-no\-hscroll\fR] [\fB\-\-keep\-right\fR] [\fB\-\-skip\-to\-pattern\fR] [\fB\-\-no\-clear\-if\-empty\fR] [\fB\-\-no\-clear\-start\fR] [\fB\-\-no\-clear\fR] [\fB\-\-show\-cmd\-error\fR] [\fB\-\-cycle\fR] [\fB\-\-disabled\fR] [\fB\-\-layout\fR] [\fB\-\-reverse\fR] [\fB\-\-height\fR] [\fB\-\-no\-height\fR] [\fB\-\-min\-height\fR] [\fB\-\-margin\fR] [\fB\-p\fR|\fB\-\-prompt\fR] [\fB\-\-cmd\-prompt\fR] [\fB\-\-selector\fR] [\fB\-\-multi\-selector\fR] [\fB\-\-ansi\fR] [\fB\-\-tabstop\fR] [\fB\-\-info\fR] [\fB\-\-no\-info\fR] [\fB\-\-inline\-info\fR] [\fB\-\-header\fR] [\fB\-\-header\-lines\fR] [\fB\-\-border\fR] [\fB\-\-wrap\fR] [\fB\-\-history\fR] [\fB\-\-history\-size\fR] [\fB\-\-cmd\-history\fR] [\fB\-\-cmd\-history\-size\fR] [\fB\-\-preview\fR] [\fB\-\-preview\-window\fR] [\fB\-q\fR|\fB\-\-query\fR] [\fB\-\-cmd\-query\fR] [\fB\-\-read0\fR] [\fB\-\-print0\fR] [\fB\-\-print\-query\fR] [\fB\-\-print\-cmd\fR] [\fB\-\-print\-score\fR] [\fB\-\-print\-header\fR] [\fB\-\-print\-current\fR] [\fB\-\-output\-format\fR] [\fB\-\-no\-strip\-ansi\fR] [\fB\-1\fR|\fB\-\-select\-1\fR] [\fB\-0\fR|\fB\-\-exit\-0\fR] [\fB\-\-sync\fR] [\fB\-\-pre\-select\-n\fR] [\fB\-\-pre\-select\-pat\fR] [\fB\-\-pre\-select\-items\fR] [\fB\-\-pre\-select\-file\fR] [\fB\-f\fR|\fB\-\-filter\fR] [\fB\-\-shell\fR] [\fB\-\-shell\-bindings\fR] [\fB\-\-man\fR] [\fB\-\-listen\fR] [\fB\-\-remote\fR] [\fB\-\-tmux\fR] [\fB\-\-log\-level\fR] [\fB\-\-log\-file\fR] [\fB\-\-expect\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH OPTIONS @@ -45,7 +45,7 @@ Comma\-separated list of sort criteria to apply when the scores are tied. .br .br -[\fIpossible values: \fRscore, \-score, begin, \-begin, end, \-end, length, \-length, index, \-index] +[\fIpossible values: \fRscore, \-score, begin, \-begin, end, \-end, length, \-length, index, \-index, pathname, \-pathname] .TP \fB\-n\fR, \fB\-\-nth\fR \fI\fR [default: ] Fields to be matched @@ -139,6 +139,22 @@ When set, normalize accents and other unicode diacritics/others Enable split matching and set delimiter Split matching runs the matcher in splits: foo:bar will match all items matching foo, then :, then bar if the delimiter is present, or match normally if not. +.TP +\fB\-\-last\-match\fR +Highlight the last match found, not the first one This makes tiebreak more pertinent on path items where we want to prioritize a match on the last parts +.TP +\fB\-\-scheme\fR \fI\fR [default: default] + +.br +\fIPossible values:\fR +.RS 14 +.IP \(bu 2 +default: Default scheme, no modifications to the options +.IP \(bu 2 +path: Path scheme: will find the furthest match in the item and set pathname as the main tiebreak +.IP \(bu 2 +history: History scheme: will force index as the first tiebreak +.RE .SH INTERFACE .TP \fB\-b\fR, \fB\-\-bind\fR [\fI...\fR] [default: ] @@ -1046,4 +1062,4 @@ When using `sk \-\-remote`, pipe in action chains (see the KEYBINDS section), fo .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH VERSION -v3.6.2 +v3.7.0 diff --git a/shell/completion.bash b/shell/completion.bash index 9e117d61..03714305 100644 --- a/shell/completion.bash +++ b/shell/completion.bash @@ -23,7 +23,7 @@ _sk() { case "${cmd}" in sk) - opts="-t -n -d -e -b -m -c -i -I -p -q -1 -0 -f -x -h -V --tac --min-query-length --no-sort --tiebreak --nth --with-nth --delimiter --exact --regex --algo --case --typos --no-typos --normalize --split-match --bind --multi --no-multi --no-mouse --cmd --interactive --color --no-hscroll --keep-right --skip-to-pattern --no-clear-if-empty --no-clear-start --no-clear --show-cmd-error --cycle --disabled --layout --reverse --height --no-height --min-height --margin --prompt --cmd-prompt --selector --multi-selector --ansi --tabstop --ellipsis --info --no-info --inline-info --header --header-lines --border --wrap --history --history-size --cmd-history --cmd-history-size --preview --preview-window --query --cmd-query --read0 --print0 --print-query --print-cmd --print-score --print-header --print-current --output-format --no-strip-ansi --select-1 --exit-0 --sync --pre-select-n --pre-select-pat --pre-select-items --pre-select-file --filter --shell --shell-bindings --man --listen --remote --tmux --log-level --log-file --flags --extended --literal --hscroll-off --filepath-word --jump-labels --no-bold --phony --scheme --tail --style --no-color --padding --border-label --border-label-pos --highlight-line --wrap-sign --no-multi-line --raw --track --gap --gap-line --freeze-left --freeze-right --scroll-off --gutter --gutter-raw --marker-multi-line --scrollbar --no-scrollbar --list-border --list-label --list-label-pos --no-input --info-command --separator --no-separator --ghost --input-border --input-label --input-label-pos --preview-label --preview-label-pos --header-first --header-border --header-lines-border --footer --footer-border --footer-label --footer-label-pos --with-shell --expect --help --version" + opts="-t -n -d -e -b -m -c -i -I -p -q -1 -0 -f -x -h -V --tac --min-query-length --no-sort --tiebreak --nth --with-nth --delimiter --exact --regex --algo --case --typos --no-typos --normalize --split-match --last-match --scheme --bind --multi --no-multi --no-mouse --cmd --interactive --color --no-hscroll --keep-right --skip-to-pattern --no-clear-if-empty --no-clear-start --no-clear --show-cmd-error --cycle --disabled --layout --reverse --height --no-height --min-height --margin --prompt --cmd-prompt --selector --multi-selector --ansi --tabstop --ellipsis --info --no-info --inline-info --header --header-lines --border --wrap --history --history-size --cmd-history --cmd-history-size --preview --preview-window --query --cmd-query --read0 --print0 --print-query --print-cmd --print-score --print-header --print-current --output-format --no-strip-ansi --select-1 --exit-0 --sync --pre-select-n --pre-select-pat --pre-select-items --pre-select-file --filter --shell --shell-bindings --man --listen --remote --tmux --log-level --log-file --flags --extended --literal --hscroll-off --filepath-word --jump-labels --no-bold --phony --tail --style --no-color --padding --border-label --border-label-pos --highlight-line --wrap-sign --no-multi-line --raw --track --gap --gap-line --freeze-left --freeze-right --scroll-off --gutter --gutter-raw --marker-multi-line --scrollbar --no-scrollbar --list-border --list-label --list-label-pos --no-input --info-command --separator --no-separator --ghost --input-border --input-label --input-label-pos --preview-label --preview-label-pos --header-first --header-border --header-lines-border --footer --footer-border --footer-label --footer-label-pos --with-shell --expect --help --version" if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 @@ -34,11 +34,11 @@ _sk() { return 0 ;; --tiebreak) - COMPREPLY=($(compgen -W "score -score begin -begin end -end length -length index -index" -- "${cur}")) + COMPREPLY=($(compgen -W "score -score begin -begin end -end length -length index -index pathname -pathname" -- "${cur}")) return 0 ;; -t) - COMPREPLY=($(compgen -W "score -score begin -begin end -end length -length index -index" -- "${cur}")) + COMPREPLY=($(compgen -W "score -score begin -begin end -end length -length index -index pathname -pathname" -- "${cur}")) return 0 ;; --nth) @@ -77,6 +77,10 @@ _sk() { COMPREPLY=($(compgen -f "${cur}")) return 0 ;; + --scheme) + COMPREPLY=($(compgen -W "default path history" -- "${cur}")) + return 0 + ;; --bind) COMPREPLY=($(compgen -f "${cur}")) return 0 @@ -265,10 +269,6 @@ _sk() { COMPREPLY=($(compgen -f "${cur}")) return 0 ;; - --scheme) - COMPREPLY=($(compgen -f "${cur}")) - return 0 - ;; --tail) COMPREPLY=($(compgen -f "${cur}")) return 0 diff --git a/shell/completion.fish b/shell/completion.fish index 6e460594..f938ed46 100644 --- a/shell/completion.fish +++ b/shell/completion.fish @@ -8,7 +8,9 @@ end\t'' length\t'' -length\t'' index\t'' --index\t''" +-index\t'' +pathname\t'' +-pathname\t''" complete -c sk -s n -l nth -d 'Fields to be matched' -r complete -c sk -l with-nth -d 'Fields to be transformed' -r complete -c sk -s d -l delimiter -d 'Delimiter between fields' -r @@ -23,6 +25,9 @@ ignore\t'Case-insensitive matching' smart\t'Smart case: case-insensitive unless query contains uppercase'" complete -c sk -l typos -d 'Enable typo-tolerant matching' -r complete -c sk -l split-match -d 'Enable split matching and set delimiter' -r +complete -c sk -l scheme -r -f -a "default\t'Default scheme, no modifications to the options' +path\t'Path scheme: will find the furthest match in the item and set pathname as the main tiebreak' +history\t'History scheme: will force index as the first tiebreak'" complete -c sk -s b -l bind -d 'Comma separated list of bindings' -r complete -c sk -s c -l cmd -d 'Command to invoke dynamically in interactive mode' -r complete -c sk -s I -d 'Replace replstr with the selected item in commands' -r @@ -86,7 +91,6 @@ complete -c sk -l flags -d 'Feature flags' -r -f -a "no-preview-pty\t'Disable pr show-score\t'Display the item\'s match score before its value in the item list (for matcher debugging)'" complete -c sk -l hscroll-off -r complete -c sk -l jump-labels -r -complete -c sk -l scheme -r complete -c sk -l tail -r complete -c sk -l style -r complete -c sk -l padding -r @@ -127,6 +131,7 @@ complete -c sk -s e -l exact -d 'Run in exact mode' complete -c sk -l regex -d 'Start in regex mode instead of fuzzy-match' complete -c sk -l no-typos -d 'Disable typo-resistant matching' complete -c sk -l normalize -d 'Normalize unicode characters' +complete -c sk -l last-match -d 'Highlight the last match found, not the first one This makes tiebreak more pertinent on path items where we want to prioritize a match on the last parts' complete -c sk -s m -l multi -d 'Enable multiple selection' complete -c sk -l no-multi -d 'Disable multiple selection' complete -c sk -l no-mouse -d 'Disable mouse' diff --git a/shell/completion.nu b/shell/completion.nu index 6e64a367..1654f5c9 100644 --- a/shell/completion.nu +++ b/shell/completion.nu @@ -1,7 +1,7 @@ module completions { def "nu-complete sk tiebreak" [] { - [ "score" "-score" "begin" "-begin" "end" "-end" "length" "-length" "index" "-index" ] + [ "score" "-score" "begin" "-begin" "end" "-end" "length" "-length" "index" "-index" "pathname" "-pathname" ] } def "nu-complete sk algorithm" [] { @@ -12,6 +12,10 @@ module completions { [ "respect" "ignore" "smart" ] } + def "nu-complete sk scheme" [] { + [ "default" "path" "history" ] + } + def "nu-complete sk layout" [] { [ "default" "reverse" "reverse-list" ] } @@ -49,6 +53,8 @@ module completions { --no-typos # Disable typo-resistant matching --normalize # Normalize unicode characters --split-match: string # Enable split matching and set delimiter + --last-match # Highlight the last match found, not the first one This makes tiebreak more pertinent on path items where we want to prioritize a match on the last parts + --scheme: string@"nu-complete sk scheme" --bind(-b): string # Comma separated list of bindings --multi(-m) # Enable multiple selection --no-multi # Disable multiple selection @@ -127,7 +133,6 @@ module completions { --jump-labels: string --no-bold --phony - --scheme: string --tail: string --style: string --no-color diff --git a/shell/completion.zsh b/shell/completion.zsh index dc017ec0..1453788d 100644 --- a/shell/completion.zsh +++ b/shell/completion.zsh @@ -16,8 +16,8 @@ _sk() { local context curcontext="$curcontext" state line _arguments "${_arguments_options[@]}" : \ '--min-query-length=[Minimum query length to start showing results]:MIN_QUERY_LENGTH:_default' \ -'*-t+[Comma-separated list of sort criteria to apply when the scores are tied.]:TIEBREAK:(score -score begin -begin end -end length -length index -index)' \ -'*--tiebreak=[Comma-separated list of sort criteria to apply when the scores are tied.]:TIEBREAK:(score -score begin -begin end -end length -length index -index)' \ +'*-t+[Comma-separated list of sort criteria to apply when the scores are tied.]:TIEBREAK:(score -score begin -begin end -end length -length index -index pathname -pathname)' \ +'*--tiebreak=[Comma-separated list of sort criteria to apply when the scores are tied.]:TIEBREAK:(score -score begin -begin end -end length -length index -index pathname -pathname)' \ '*-n+[Fields to be matched]:NTH:_default' \ '*--nth=[Fields to be matched]:NTH:_default' \ '*--with-nth=[Fields to be transformed]:WITH_NTH:_default' \ @@ -34,6 +34,9 @@ ignore\:"Case-insensitive matching" smart\:"Smart case\: case-insensitive unless query contains uppercase"))' \ '--typos=[Enable typo-tolerant matching]::TYPOS:_default' \ '--split-match=[Enable split matching and set delimiter]::SPLIT_MATCH:_default' \ +'--scheme=[]:SCHEME:((default\:"Default scheme, no modifications to the options" +path\:"Path scheme\: will find the furthest match in the item and set pathname as the main tiebreak" +history\:"History scheme\: will force index as the first tiebreak"))' \ '*-b+[Comma separated list of bindings]::BIND:_default' \ '*--bind=[Comma separated list of bindings]::BIND:_default' \ '-c+[Command to invoke dynamically in interactive mode]:CMD:_default' \ @@ -89,7 +92,6 @@ zsh\:"Zsh"))' \ show-score\:"Display the item'\''s match score before its value in the item list (for matcher debugging)"))' \ '--hscroll-off=[]:HSCROLL_OFF:_default' \ '--jump-labels=[]:JUMP_LABELS:_default' \ -'--scheme=[]:SCHEME:_default' \ '--tail=[]:TAIL:_default' \ '--style=[]:STYLE:_default' \ '--padding=[]:PADDING:_default' \ @@ -131,6 +133,7 @@ show-score\:"Display the item'\''s match score before its value in the item list '--regex[Start in regex mode instead of fuzzy-match]' \ '(--typos --typos)--no-typos[Disable typo-resistant matching]' \ '--normalize[Normalize unicode characters]' \ +'--last-match[Highlight the last match found, not the first one This makes tiebreak more pertinent on path items where we want to prioritize a match on the last parts]' \ '-m[Enable multiple selection]' \ '--multi[Enable multiple selection]' \ '(-m --multi)--no-multi[Disable multiple selection]' \ diff --git a/shell/version.txt b/shell/version.txt index b7276283..7c69a55d 100644 --- a/shell/version.txt +++ b/shell/version.txt @@ -1 +1 @@ -3.6.2 +3.7.0