chore(ci): readd PR check (#1068)

* chore(ci): readd PR check

* fix(ci): use pull_request event

* fix(ci): bash syntax

* fix(ci): pass git cliff context as jq-generated file

* fix(ci): simpler check for changes

* fix(ci): output message if no diff too

* fix(ci): rerun on edit

* fix(ci): exit codes

* chore: fix typos (ci should fail)

* chore: generate files
This commit is contained in:
LoricAndre 2026-05-07 14:20:49 +02:00 committed by GitHub
parent ec77fa7245
commit e361a8dec0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 231 additions and 121 deletions

104
.github/workflows/pr.yml vendored Normal file
View file

@ -0,0 +1,104 @@
on:
pull_request:
types:
- opened
- synchronize
- reopened
- edited
jobs:
check-title:
runs-on: ubuntu-latest
steps:
- name: Create git-cliff mock context
env:
CONTEXT: >
[
{
"commits": [{
"id": "foo",
"message": $msg,
"links": [],
"author": {
"name": "",
"timestamp": 1
},
"committer": {
"name": "",
"timestamp": 1
},
"merge_commit": false,
"github": {
"pr_labels": [],
"is_first_time": false
},
"gitlab": {
"pr_labels": [],
"is_first_time": false
},
"gitea": {
"pr_labels": [],
"is_first_time": false
},
"bitbucket": {
"pr_labels": [],
"is_first_time": false
},
"azure_devops": {
"pr_labels": [],
"is_first_time": false
},
}],
"github": { "contributors": [] },
"gitlab": { "contributors": [] },
"gitea": { "contributors": [] },
"bitbucket": { "contributors": [] },
"azure_devops": { "contributors": [] },
"submodule_commits": {}
}
]
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
jq -nc --arg msg "$PR_TITLE" "$CONTEXT" | tee git-cliff-context.json
- name: Generate mock changelog entry
id: git-cliff
uses: orhun/git-cliff-action@v4
with:
args: >
--from-context git-cliff-context.json -s all
- name: Check generated entry
run: |
echo "Generated:"
cat "${{ steps.git-cliff.outputs.changelog }}"
echo "Checking..."
cat "${{ steps.git-cliff.outputs.changelog }}" | grep -Ev '^(## \[unreleased\]|)$' | grep -q '^.\+$'
check-generated-files:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ runner.os }}
add-job-id-key: "false"
add-rust-environment-hash-key: "false"
env-vars: "____"
cache-on-failure: "true"
cache-all-crates: "true"
- name: Generate files
run: |
cargo run -- --man > ./man/man1/sk.1
cargo run -- --shell bash > ./shell/completion.bash
cargo run -- --shell zsh > ./shell/completion.zsh
cargo run -- --shell fish > ./shell/completion.fish
cargo run -- --shell nushell > ./shell/completion.nu
- name: Check diff
run: |
if git diff --exit-code; then
echo "No changes to generated files found, PR is safe to merge"
exit 0
else
echo "Found changes to generated files, regenerate them locally and push them using 'just generate-files'"
exit 1
fi

View file

@ -25,7 +25,7 @@ required-features = ["cli"]
[features]
# Default is destined to the CLI, not to library usage.
default = ["cli", "frizbee"]
# Everyting needed to use skim as a cli (argument parsing, shell integrations...). This should not be needed for most libraries.
# Everything needed to use skim as a cli (argument parsing, shell integrations...). This should not be needed for most libraries.
cli = ["dep:clap", "dep:clap_complete", "dep:shlex", "dep:env_logger", "dep:clap_mangen"]
# Include frizbee as a matching algorithm
frizbee = ["dep:frizbee"]

View file

@ -1439,7 +1439,7 @@ fn cmd_plot(args: &PlotArgs) -> std::result::Result<(), Box<dyn std::error::Erro
fg.set_multiplot_layout(2, 2).set_title("Benchmark Results");
// Shared label options: text in TEXT colour.
let lbl = &[TextColor(TEXT)];
let lbl = &[TextColor(gnuplot::RGBString(TEXT))];
// ── Panel 0: Total Time — log x, log y ───────────────────────────────────
{
@ -1450,7 +1450,7 @@ fn cmd_plot(args: &PlotArgs) -> std::result::Result<(), Box<dyn std::error::Erro
axes.set_title("Total Time", lbl)
.set_x_label("Items", lbl)
.set_y_label("Time (s)", lbl)
.set_border(true, &[Bottom, Left, Top, Right], &[Color(SURFACE)])
.set_border(true, &[Bottom, Left, Top, Right], &[Color(gnuplot::RGBString(SURFACE))])
.set_x_log(Some(10.0))
.set_y_log(Some(10.0))
.set_x_range(Fix(x_lo), Fix(x_hi))
@ -1475,7 +1475,7 @@ fn cmd_plot(args: &PlotArgs) -> std::result::Result<(), Box<dyn std::error::Erro
axes.set_title("Peak CPU", lbl)
.set_x_label("Items", lbl)
.set_y_label("CPU (%)", lbl)
.set_border(true, &[Bottom, Left, Top, Right], &[Color(SURFACE)])
.set_border(true, &[Bottom, Left, Top, Right], &[Color(gnuplot::RGBString(SURFACE))])
.set_x_log(Some(10.0))
.set_x_range(Fix(x_lo), Fix(x_hi))
.set_y_range(Fix(0.0), Fix(y_hi))
@ -1498,7 +1498,7 @@ fn cmd_plot(args: &PlotArgs) -> std::result::Result<(), Box<dyn std::error::Erro
axes.set_title("Peak Memory", lbl)
.set_x_label("Items", lbl)
.set_y_label("Memory (MB)", lbl)
.set_border(true, &[Bottom, Left, Top, Right], &[Color(SURFACE)])
.set_border(true, &[Bottom, Left, Top, Right], &[Color(gnuplot::RGBString(SURFACE))])
.set_x_log(Some(10.0))
.set_x_range(Fix(x_lo), Fix(x_hi))
.set_y_range(Fix(0.0), Fix(y_hi))
@ -1521,7 +1521,7 @@ fn cmd_plot(args: &PlotArgs) -> std::result::Result<(), Box<dyn std::error::Erro
axes.set_title("Startup Time", lbl)
.set_x_label("Items", lbl)
.set_y_label("Time (s)", lbl)
.set_border(true, &[Bottom, Left, Top, Right], &[Color(SURFACE)])
.set_border(true, &[Bottom, Left, Top, Right], &[Color(gnuplot::RGBString(SURFACE))])
.set_x_log(Some(10.0))
.set_x_range(Fix(x_lo), Fix(x_hi))
.set_y_range(Fix(0.0), Fix(y_hi))

132
flake.nix
View file

@ -3,71 +3,77 @@
inputs.nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
outputs = inputs: let
inherit (inputs.nixpkgs) lib;
systems = lib.systems.flakeExposed;
eachSystem = lib.genAttrs systems;
pkgsFor = system:
import inputs.nixpkgs {
inherit system;
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) ["vagrant"];
};
in {
devShells = eachSystem (
system: let
pkgs = pkgsFor system;
outputs =
inputs:
let
inherit (inputs.nixpkgs) lib;
systems = lib.systems.flakeExposed;
eachSystem = lib.genAttrs systems;
pkgsFor =
system:
import inputs.nixpkgs {
inherit system;
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "vagrant" ];
};
in
{
devShells = eachSystem (
system:
let
pkgs = pkgsFor system;
# --- package groups -------------------------------------------------------
base = with pkgs; [
rustup
just
];
tests = with pkgs; [
cargo-nextest
cargo-insta
cargo-llvm-cov
tmux
];
utils = with pkgs; [
hyperfine
cargo-edit
cargo-public-api
git-cliff
cargo-dist
cargo-cross
cargo-xwin
gnuplot
];
gungraun = with pkgs; [
valgrind
libclang
binutils
];
vagrantDeps = with pkgs; [
vagrant
rsync
];
# --- package groups -------------------------------------------------------
base = with pkgs; [
rustup
just
];
tests = with pkgs; [
cargo-nextest
cargo-insta
cargo-llvm-cov
tmux
];
utils = with pkgs; [
hyperfine
cargo-edit
cargo-public-api
git-cliff
cargo-dist
cargo-cross
cargo-xwin
gnuplot
];
gungraun = with pkgs; [
valgrind
libclang
binutils
];
vagrantDeps = with pkgs; [
vagrant
rsync
];
# --- shell hooks (only groups that need env vars) -------------------------
gungraunHook = ''
export LIBCLANG_PATH="${pkgs.libclang.lib}/lib"
export LD_LIBRARY_PATH="${pkgs.valgrind.out}/lib:$LD_LIBRARY_PATH"
'';
vagrantHook = ''
export VAGRANT_LIBVIRT_OVMF_CODE="${pkgs.OVMF.fd}/FV/OVMF_CODE.fd"
'';
# --- shell hooks (only groups that need env vars) -------------------------
gungraunHook = ''
export LIBCLANG_PATH="${pkgs.libclang.lib}/lib"
export LD_LIBRARY_PATH="${pkgs.valgrind.out}/lib:$LD_LIBRARY_PATH"
'';
vagrantHook = ''
export VAGRANT_LIBVIRT_OVMF_CODE="${pkgs.OVMF.fd}/FV/OVMF_CODE.fd"
'';
mkShell = packages: shellHook: pkgs.mkShellNoCC {inherit packages shellHook;};
in {
default = mkShell base "";
tests = mkShell (base ++ tests) "";
utils = mkShell (base ++ utils) "";
gungraun = mkShell (base ++ gungraun) gungraunHook;
vagrant = mkShell (base ++ vagrantDeps) vagrantHook;
full = mkShell (base ++ tests ++ utils ++ gungraun ++ vagrantDeps) (gungraunHook + vagrantHook);
}
);
mkShell = packages: shellHook: pkgs.mkShellNoCC { inherit packages shellHook; };
in
{
default = mkShell base "";
tests = mkShell (base ++ tests) "";
utils = mkShell (base ++ utils) "";
gungraun = mkShell (base ++ gungraun) gungraunHook;
vagrant = mkShell (base ++ vagrantDeps) vagrantHook;
full = mkShell (base ++ tests ++ utils ++ gungraun ++ vagrantDeps) (gungraunHook + vagrantHook);
}
);
formatter = eachSystem (system: (pkgsFor system).nixfmt);
};
formatter = eachSystem (system: (pkgsFor system).nixfmt);
};
}

View file

@ -97,7 +97,7 @@ See nth for the details
\fB\-d\fR, \fB\-\-delimiter\fR \fI<DELIMITER>\fR [default: [\\t\\n ]+]
Delimiter between fields
In regex format, default to AWK\-style. Escape sequences like \\x00, \\t, \\n are supported.
In regex format, defaults to AWK\-style. Escape sequences like \\x00, \\t, \\n are supported.
.TP
\fB\-e\fR, \fB\-\-exact\fR
Run in exact mode
@ -137,7 +137,7 @@ skim_v2: Previous skim fuzzy matching algorithm (v2)
\fB\-\-case\fR \fI<CASE>\fR [default: smart]
Case sensitivity
Determines whether or not to ignore case while matching Note: this is not used for the Frizbee matcher, it uses a penalty system to favor case\-sensitivity without enforcing it
Determines whether or not to ignore case while matching Note: this is not used for the Frizbee matcher, which uses a penalty system to favor case\-sensitivity without enforcing it
.br
.br
@ -157,7 +157,7 @@ Enable typo\-tolerant matching
When passed without a value (\-\-typos), uses adaptive formula (pattern_length / 4). When passed with a value (e.g. \-\-typos=2), uses that exact number as the maximum allowed typos. \-\-typos=0 explicitly disables typo tolerance. Applies to both fzy and frizbee matchers.
.TP
\fB\-\-no\-typos\fR
Disable typo\-resistant matching
Disable typo\-tolerant matching
.TP
\fB\-\-normalize\fR
Normalize unicode characters
@ -212,19 +212,19 @@ Note: if no argument is supplied to reload, the default command is run.
You can use the same placeholder expressions as in \-\-preview.
sk switches to the alternate screen when executing a command. However, if the command is ex
pected to complete quickly, and you are not interested in its output, you might want to use exe
cute\-silent instead, which silently executes the command without the switching. Note that sk
`sk` switches to the alternate screen when executing a command. However, if the command is
expected to complete quickly, and you are not interested in its output, you might want to use
execute\-silent instead, which silently executes the command without the switching. Note that sk
will not be responsive until the command is complete. For asynchronous execution, start your
command as a background process (i.e. appending &).
command as a background process (i.e. appending `&`).
With if\-query\-empty and if\-query\-not\-empty action, you could specify the action to execute de
pends on the query condition. For example:
With the `if\-query\-empty` and `if\-query\-not\-empty` actions, you could specify the action to execute
depending on the query condition. For example:
`sk \-\-bind \*(Aqctrl\-d:if\-query\-empty(abort)+delete\-char\*(Aq`
If the query is empty, skim will execute abort action, otherwise execute delete\-char action. It
is equal to delete\-char/eof.
is equal to \*(Aqdelete\-char/eof\*(Aq.
.TP
\fB\-m\fR, \fB\-\-multi\fR
Enable multiple selection
@ -240,7 +240,7 @@ Disable mouse
\fB\-c\fR, \fB\-\-cmd\fR \fI<CMD>\fR
Command to invoke dynamically in interactive mode
Will be invoked using sh \-c on unix\-like systems and cmd /c on Windows
Will be invoked using sh \-c on Unix\-like systems and cmd /c on Windows
.TP
\fB\-i\fR, \fB\-\-interactive\fR
Start skim in interactive mode
@ -281,8 +281,8 @@ Do not clear previous line if the command returns an empty result
Do not clear previous items if new command returns empty result. This might be useful to
reduce flickering when typing new commands and the half\-complete commands are not valid.
This is not the default behavior because similar use cases for grep and rg have already been op
timized where empty query results actually mean "empty" and previous results should be
This is not the default behavior because similar use cases for `grep` and `rg` have already been
optimized where empty query results actually mean "empty" and previous results should be
cleared.
.TP
\fB\-\-no\-clear\-start\fR
@ -357,7 +357,7 @@ Set prompt in command mode
Set selected item icon
.TP
\fB\-\-multi\-selector\fR \fI<MULTI_SELECT_ICON>\fR [default: >]
Set selected item icon
Set multi\-selected item icon
.SH DISPLAY
.TP
\fB\-\-ansi\fR
@ -466,7 +466,7 @@ Run in a tmux or zellij popup
Format: `sk \-\-popup <center|top|bottom|left|right>[,SIZE[%]][,SIZE[%]]`
Note: this will try to detect a Zellij session, then a Tmux session
This means that in nested sesions, skim will prioritize Zellij over Tmux
This means that in nested sessions, `skim` will prioritize Zellij over Tmux
.SH HISTORY
.TP
\fB\-\-history\fR \fI<HISTORY_FILE>\fR
@ -494,8 +494,8 @@ Maximum number of query history entries to keep
Preview command
Execute the given command for the current line and display the result on the preview window. {} in the command
is the placeholder that is replaced to the single\-quoted string of the current line. To transform the replace
ment string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).
is the placeholder that is replaced to the single\-quoted string of the current line. To transform the
replacement string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).
**Examples**:
@ -510,11 +510,11 @@ Format: [up|down|left|right][:SIZE][:hidden][:[no]wrap][:[no]pty][:+SCROLL[\-OFF
Determine the layout of the preview window. If the argument ends with: hidden, the preview window will be hidden by default until toggle\-preview action is triggered. Long lines are truncated by default. Line wrap can be enabled with :wrap flag. For more interactive commands or previews that draw complex interfaces, the preview can use a PTY with the :pty flag.
Note: the preview will run in a PTY (interactive session) on linux and when wrap is unset
Note: the preview will run in a PTY (interactive session) on Linux and when wrap is unset
SIZE can be either: \- 0, which will hide the preview window \- A positive size (eg 20) \- A percentage of the total size (eg 50%) \- A negative size, which will set the size of everything but the preview to that value
+SCROLL[\-OFFSET] determines the initial scroll offset of the preview window. SCROLL can be either a numeric integer or a single\-field index expression that refers to a numeric integer. The optional \-OFFSET part is for adjusting the base offset so that you can see the text above it. It should be given as a numeric integer (\-INTEGER), or as a denom inator form (\-/INTEGER) for specifying a fraction of the preview window height.
+SCROLL[\-OFFSET] determines the initial scroll offset of the preview window. SCROLL can be either a numeric integer or a single\-field index expression that refers to a numeric integer. The optional \-OFFSET part is for adjusting the base offset so that you can see the text above it. It should be given as a numeric integer (\-INTEGER), or as a denominator form (\-/INTEGER) for specifying a fraction of the preview window height.
Examples:
@ -577,7 +577,7 @@ Do not enter the TUI if the query passed in \-q does not match any item
\fB\-\-sync\fR
Synchronous search for multi\-staged filtering
Synchronous search for multi\-staged filtering. If specified, skim will launch ncurses finder only after the input stream is complete. e.g. sk \-\-multi | sk \-\-sync
Synchronous search for multi\-staged filtering. If specified, skim will launch the TUI finder only after the input stream is complete. e.g. sk \-\-multi | sk \-\-sync
.TP
\fB\-\-pre\-select\-n\fR \fI<PRE_SELECT_N>\fR [default: 0]
Pre\-select the first n items in multi\-selection mode

View file

@ -41,7 +41,7 @@ complete -c sk -l margin -d 'Screen margin' -r
complete -c sk -s p -l prompt -d 'Set prompt' -r
complete -c sk -l cmd-prompt -d 'Set prompt in command mode' -r
complete -c sk -l selector -d 'Set selected item icon' -r
complete -c sk -l multi-selector -d 'Set selected item icon' -r
complete -c sk -l multi-selector -d 'Set multi-selected item icon' -r
complete -c sk -l tabstop -d 'Number of spaces that make up a tab' -r
complete -c sk -l ellipsis -d 'The characters used to display truncated lines' -r
complete -c sk -l info -d 'Set matching result count display position' -r
@ -88,7 +88,7 @@ complete -c sk -l remote -d 'Send commands to an IPC socket with optional name (
complete -c sk -l popup -d 'Run in a tmux or zellij popup' -r
complete -c sk -l log-level -d 'Set the log level' -r
complete -c sk -l log-file -d 'Pipe log output to a file' -r
complete -c sk -l flags -d 'Feature flags' -r -f -a "no-preview-pty\t'Disable preview PTY on linux'
complete -c sk -l flags -d 'Feature flags' -r -f -a "no-preview-pty\t'Disable preview PTY on Linux'
show-score\t'Display the item\'s match score before its value in the item list (for matcher debugging)'
show-index\t'Display the item\'s index before its value in the item list'
single-reader\t'Limit the reader thread pool to a single thread'
@ -132,7 +132,7 @@ complete -c sk -l tac -d 'Show results in reverse order'
complete -c sk -l no-sort -d 'Do not sort the results'
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 no-typos -d 'Disable typo-tolerant 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'

View file

@ -46,7 +46,7 @@ module completions {
--algo: string@"nu-complete sk algorithm" # Fuzzy matching algorithm
--case: string@"nu-complete sk case" # Case sensitivity
--typos: string # Enable typo-tolerant matching
--no-typos # Disable typo-resistant matching
--no-typos # Disable typo-tolerant 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
@ -78,7 +78,7 @@ module completions {
--prompt(-p): string # Set prompt
--cmd-prompt: string # Set prompt in command mode
--selector: string # Set selected item icon
--multi-selector: string # Set selected item icon
--multi-selector: string # Set multi-selected item icon
--ansi # Parse ANSI color codes in input strings
--tabstop: string # Number of spaces that make up a tab
--ellipsis: string # The characters used to display truncated lines

View file

@ -53,7 +53,7 @@ reverse-list\:"Display from the top of the screen, prompt at the bottom"))' \
'--prompt=[Set prompt]:PROMPT:_default' \
'--cmd-prompt=[Set prompt in command mode]:CMD_PROMPT:_default' \
'--selector=[Set selected item icon]:SELECTOR_ICON:_default' \
'--multi-selector=[Set selected item icon]:MULTI_SELECT_ICON:_default' \
'--multi-selector=[Set multi-selected item icon]:MULTI_SELECT_ICON:_default' \
'--tabstop=[Number of spaces that make up a tab]:TABSTOP:_default' \
'--ellipsis=[The characters used to display truncated lines]:ELLIPSIS:_default' \
'--info=[Set matching result count display position]:INFO:_default' \
@ -102,7 +102,7 @@ zsh\:"Zsh"))' \
'--popup=[Run in a tmux or zellij popup]::POPUP:_default' \
'--log-level=[Set the log level]:LOG_LEVEL:_default' \
'--log-file=[Pipe log output to a file]:LOG_FILE:_default' \
'*--flags=[Feature flags]:FLAGS:((no-preview-pty\:"Disable preview PTY on linux"
'*--flags=[Feature flags]:FLAGS:((no-preview-pty\:"Disable preview PTY on Linux"
show-score\:"Display the item'\''s match score before its value in the item list (for matcher debugging)"
show-index\:"Display the item'\''s index before its value in the item list"
single-reader\:"Limit the reader thread pool to a single thread"
@ -147,7 +147,7 @@ single-matcher\:"Limit the matcher thread pool to a single thread"))' \
'-e[Run in exact mode]' \
'--exact[Run in exact mode]' \
'--regex[Start in regex mode instead of fuzzy-match]' \
'--no-typos[Disable typo-resistant matching]' \
'--no-typos[Disable typo-tolerant 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]' \

View file

@ -156,7 +156,7 @@ pub struct SkimOptions {
/// Delimiter between fields
///
/// In regex format, default to AWK-style. Escape sequences like \x00, \t, \n are supported.
/// In regex format, defaults to AWK-style. Escape sequences like \x00, \t, \n are supported.
#[cfg_attr(
feature = "cli",
arg(short, long, default_value = r"[\t\n ]+", value_parser = parse_delimiter_value, help_heading = "Search")
@ -197,7 +197,7 @@ pub struct SkimOptions {
/// Case sensitivity
///
/// Determines whether or not to ignore case while matching
/// Note: this is not used for the Frizbee matcher, it uses a penalty system to favor
/// Note: this is not used for the Frizbee matcher, which uses a penalty system to favor
/// case-sensitivity without enforcing it
#[cfg_attr(
feature = "cli",
@ -217,7 +217,7 @@ pub struct SkimOptions {
)]
pub typos: Typos,
/// Disable typo-resistant matching
/// Disable typo-tolerant matching
#[cfg_attr(feature = "cli", arg(long, overrides_with = "typos", help_heading = "Search"))]
pub no_typos: bool,
@ -277,19 +277,19 @@ pub struct SkimOptions {
///
/// You can use the same placeholder expressions as in --preview.
///
/// sk switches to the alternate screen when executing a command. However, if the command is ex
/// pected to complete quickly, and you are not interested in its output, you might want to use exe
/// cute-silent instead, which silently executes the command without the switching. Note that sk
/// `sk` switches to the alternate screen when executing a command. However, if the command is
/// expected to complete quickly, and you are not interested in its output, you might want to use
/// execute-silent instead, which silently executes the command without the switching. Note that sk
/// will not be responsive until the command is complete. For asynchronous execution, start your
/// command as a background process (i.e. appending &).
/// command as a background process (i.e. appending `&`).
///
/// With if-query-empty and if-query-not-empty action, you could specify the action to execute de
/// pends on the query condition. For example:
/// With the `if-query-empty` and `if-query-not-empty` actions, you could specify the action to execute
/// depending on the query condition. For example:
///
/// `sk --bind 'ctrl-d:if-query-empty(abort)+delete-char'`
///
/// If the query is empty, skim will execute abort action, otherwise execute delete-char action. It
/// is equal to delete-char/eof.
/// is equal to 'delete-char/eof'.
#[cfg_attr(
feature = "cli",
arg(short, long, help_heading = "Interface", verbatim_doc_comment, default_value = "", num_args=0..)
@ -315,7 +315,7 @@ pub struct SkimOptions {
/// Command to invoke dynamically in interactive mode
///
/// Will be invoked using `sh -c` on unix-like systems and `cmd /c` on Windows
/// Will be invoked using `sh -c` on Unix-like systems and `cmd /c` on Windows
#[cfg_attr(feature = "cli", arg(short, long, help_heading = "Interface"))]
pub cmd: Option<String>,
@ -365,8 +365,8 @@ pub struct SkimOptions {
/// Do not clear previous items if new command returns empty result. This might be useful to
/// reduce flickering when typing new commands and the half-complete commands are not valid.
///
/// This is not the default behavior because similar use cases for grep and rg have already been op
/// timized where empty query results actually mean "empty" and previous results should be
/// This is not the default behavior because similar use cases for `grep` and `rg` have already been
/// optimized where empty query results actually mean "empty" and previous results should be
/// cleared.
#[cfg_attr(feature = "cli", arg(long, help_heading = "Interface", verbatim_doc_comment))]
pub no_clear_if_empty: bool,
@ -463,7 +463,7 @@ pub struct SkimOptions {
)]
pub selector_icon: String,
/// Set selected item icon
/// Set multi-selected item icon
#[cfg_attr(
feature = "cli",
arg(
@ -624,8 +624,8 @@ pub struct SkimOptions {
/// Preview command
///
/// Execute the given command for the current line and display the result on the preview window. {} in the command
/// is the placeholder that is replaced to the single-quoted string of the current line. To transform the replace
/// ment string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).
/// is the placeholder that is replaced to the single-quoted string of the current line. To transform the
/// replacement string, specify field index expressions between the braces (See FIELD INDEX EXPRESSION for the details).
///
/// **Examples**:
///
@ -644,7 +644,7 @@ pub struct SkimOptions {
/// Line wrap can be enabled with `:wrap` flag.
/// For more interactive commands or previews that draw complex interfaces, the preview can use a PTY with the `:pty` flag.
///
/// Note: the preview will run in a PTY (interactive session) on linux and when `wrap` is unset
/// Note: the preview will run in a PTY (interactive session) on Linux and when `wrap` is unset
///
/// SIZE can be either:
/// - `0`, which will hide the preview window
@ -652,10 +652,10 @@ pub struct SkimOptions {
/// - A percentage of the total size (eg `50%`)
/// - A negative size, which will set the size of everything but the preview to that value
///
/// +SCROLL[-OFFSET] determines the initial scroll offset of the preview window. SCROLL can be either a numeric integer
/// or a single-field index expression that refers to a numeric integer. The optional -OFFSET part is for adjusting the
/// base offset so that you can see the text above it. It should be given as a numeric integer (-INTEGER), or as a denom
/// inator form (-/INTEGER) for specifying a fraction of the preview window height.
/// +SCROLL[-OFFSET] determines the initial scroll offset of the preview window. SCROLL can be either a numeric integer
/// or a single-field index expression that refers to a numeric integer. The optional -OFFSET part is for adjusting the
/// base offset so that you can see the text above it. It should be given as a numeric integer (-INTEGER), or as a
/// denominator form (-/INTEGER) for specifying a fraction of the preview window height.
///
/// **Examples**:
/// ```bash
@ -743,7 +743,7 @@ pub struct SkimOptions {
/// Synchronous search for multi-staged filtering
///
/// Synchronous search for multi-staged filtering. If specified,
/// skim will launch ncurses finder only after the input stream is complete.
/// `skim` will launch the TUI finder only after the input stream is complete.
/// e.g. `sk --multi | sk --sync`
#[cfg_attr(feature = "cli", arg(long, help_heading = "Scripting"))]
pub sync: bool,
@ -820,7 +820,7 @@ pub struct SkimOptions {
///
/// Format: `sk --popup <center|top|bottom|left|right>[,SIZE[%]][,SIZE[%]]`
/// Note: this will try to detect a Zellij session, then a Tmux session
/// This means that in nested sesions, skim will prioritize Zellij over Tmux
/// This means that in nested sessions, `skim` will prioritize Zellij over Tmux
#[cfg_attr(feature = "cli", arg(long, verbatim_doc_comment, help_heading = "Display", default_missing_value = "center,50%", num_args=0.., alias = "tmux"))]
pub popup: Option<String>,
@ -1340,7 +1340,7 @@ impl SkimOptions {
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
pub enum FeatureFlag {
/// Disable preview PTY on linux
/// Disable preview PTY on Linux
NoPreviewPty,
/// Display the item's match score before its value in the item list (for matcher debugging)
ShowScore,