mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 07:16:23 -04:00
* Add --hide-nth flag to hide fields while keeping them searchable Introduce a `--hide-nth <fieldspec>` option that takes the same comma-separated field index expressions as `--nth`/`--with-nth`. The listed fields are removed from the displayed line but remain part of the text used for matching, so a query can still match them. Characters in the hidden fields are ignored for match highlighting and horizontal scrolling. Implementation: - Resolve the fieldspec to byte ranges in the same coordinate space as the matching/display text and store them as `hidden_ranges` in DefaultSkimItem metadata, exposed via a new `SkimItem::hidden_ranges()` trait method. text()/output() keep the full text so hidden fields stay searchable and are preserved on output. - DefaultSkimItem::display() removes hidden characters and remaps match highlight positions into visible coordinates (project_visible_text / project_match_indices); this path takes precedence over ANSI styling. - ItemRenderer::render_item applies the same projection to derive the visible sub-line text and hscroll match range, so hidden characters are ignored for horizontal scrolling. Add unit tests for range normalization/projection and item behavior, plus insta snapshot tests covering display removal, searchability, and hscroll. Update ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCunXeAFMYAFduTc8SNjSM * Preserve ANSI colors for surviving text under --hide-nth Previously the hidden-field rendering path was applied ahead of the ANSI display branch and rebuilt the line from the ANSI-stripped text, so combining --hide-nth with --ansi dropped the colors of the visible fields. Integrate hidden-field removal into the ANSI branch instead: after parsing the styled spans, drop the hidden characters while preserving each span's style (retain_visible_spans) and remap the match positions into the resulting visible coordinate space, then run the normal highlighting. The plain (non-ANSI) branch keeps its project-and-to_line handling. Surviving characters now keep their ANSI colors while hidden fields stay searchable. Add unit tests for ANSI color preservation and remapped highlighting, plus ANSI color-snapshot integration tests. Update ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCunXeAFMYAFduTc8SNjSM * Set hidden fields via builder instead of DefaultSkimItem::new param Remove the `hidden_fields` parameter from `DefaultSkimItem::new` and set the hidden fields through a `hidden_fields(&[FieldRange], &Regex)` builder method instead. The builder resolves the fields against the item's own `text()` (the same coordinate space `new` would have used), so the result is identical while keeping `new`'s signature unchanged for its many existing call sites. The reader chains `.hidden_fields(&opt.hidden_fields, &opt.delimiter)` onto construction. Revert the extra `&[]` argument at the other call sites (selector, fuzz target, tests) and update the hide-nth tests to use the builder. Update ARCHITECTURE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCunXeAFMYAFduTc8SNjSM * chore: generate files --------- Co-authored-by: Claude <noreply@anthropic.com>
191 lines
11 KiB
Fish
191 lines
11 KiB
Fish
complete -c sk -l min-query-length -d 'Minimum query length to start showing results' -r
|
|
complete -c sk -s t -l tiebreak -d 'Comma-separated list of sort criteria to apply when the scores are tied.' -r -f -a "score\t''
|
|
-score\t''
|
|
begin\t''
|
|
-begin\t''
|
|
end\t''
|
|
-end\t''
|
|
length\t''
|
|
-length\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 -l hide-nth -d 'Fields to hide from display while keeping them searchable' -r
|
|
complete -c sk -s d -l delimiter -d 'Delimiter between fields' -r
|
|
complete -c sk -l algo -d 'Fuzzy matching algorithm' -r -f -a "arinae\t'Arinae: typo-resistant & natural algorithm, default'
|
|
clangd\t'Clangd fuzzy matching algorithm'
|
|
fzy\t'Fzy matching algorithm (https://github.com/jhawthorn/fzy)'
|
|
frizbee\t'Frizbee matching algorithm, typo resistant'
|
|
skim_v2\t'Previous skim fuzzy matching algorithm (v2)'"
|
|
complete -c sk -l case -d 'Case sensitivity' -r -f -a "respect\t'Case-sensitive matching'
|
|
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
|
|
complete -c sk -l color -d 'Set color theme' -r
|
|
complete -c sk -l skip-to-pattern -d 'Show the matched pattern at the line start' -r
|
|
complete -c sk -l disable-pattern -d 'Disable items based on this regex pattern' -r
|
|
complete -c sk -l layout -d 'Set layout' -r -f -a "default\t'Display from the bottom of the screen'
|
|
reverse\t'Display from the top of the screen'
|
|
reverse-list\t'Display from the top of the screen, prompt at the bottom'"
|
|
complete -c sk -l height -d 'Height of skim\'s window' -r
|
|
complete -c sk -l min-height -d 'Minimum height of skim\'s window' -r
|
|
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 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
|
|
complete -c sk -l header -d 'Set header, displayed next to the info' -r
|
|
complete -c sk -l header-lines -d 'Number of lines of the input treated as header' -r
|
|
complete -c sk -l border -d 'Draw borders around the UI components' -r -f -a "force-off\t'ForceOff disables borders around popups too set with no_border'
|
|
none\t''
|
|
plain\t''
|
|
rounded\t''
|
|
double\t''
|
|
thick\t''
|
|
light-double-dashed\t''
|
|
heavy-double-dashed\t''
|
|
light-triple-dashed\t''
|
|
heavy-triple-dashed\t''
|
|
light-quadruple-dashed\t''
|
|
heavy-quadruple-dashed\t''
|
|
quadrant-inside\t''
|
|
quadrant-outside\t''"
|
|
complete -c sk -l multiline -d 'Split item text into multiple display lines at the given separator character defaults to \\n if read0 is set, and \\\\n if not (matching literal \\n in text)' -r
|
|
complete -c sk -l scrollbar -d 'Set scrollbar style for the item list' -r
|
|
complete -c sk -l history -d 'History file' -r
|
|
complete -c sk -l history-size -d 'Maximum number of query history entries to keep' -r
|
|
complete -c sk -l cmd-history -d 'Command history file' -r
|
|
complete -c sk -l cmd-history-size -d 'Maximum number of query history entries to keep' -r
|
|
complete -c sk -l preview -d 'Preview command' -r
|
|
complete -c sk -l preview-window -d 'Preview window layout' -r
|
|
complete -c sk -l image -d 'Enable image preview' -r -f -a "detect\t'Default: automatically detect the available backend at startup'
|
|
halfblocks\t'Force halfblocks if you want blurry previews but a faster startup or if the detection fails'"
|
|
complete -c sk -s q -l query -d 'Initial query' -r
|
|
complete -c sk -l cmd-query -d 'Initial query in interactive mode' -r
|
|
complete -c sk -l output-format -d 'Set the output format If set, overrides all print_ options Will be expanded the same way as preview or commands' -r
|
|
complete -c sk -l pre-select-n -d 'Pre-select the first n items in multi-selection mode' -r
|
|
complete -c sk -l pre-select-pat -d 'Pre-select the matched items in multi-selection mode' -r
|
|
complete -c sk -l pre-select-items -d 'Pre-select the items separated by newline character' -r
|
|
complete -c sk -l pre-select-file -d 'Pre-select the items read from this file' -r
|
|
complete -c sk -s f -l filter -d 'Query for filter mode' -r
|
|
complete -c sk -l shell -d 'Generate shell completion script' -r -f -a "bash\t'Bourne Again SHell'
|
|
elvish\t'Elvish shell'
|
|
fish\t'Friendly Interactive SHell'
|
|
nushell\t'Nushell (nu)'
|
|
power-shell\t'PowerShell'
|
|
zsh\t'Zsh'"
|
|
complete -c sk -l listen -d 'Run an IPC socket with optional name (defaults to sk)' -r
|
|
complete -c sk -l remote -d 'Send commands to an IPC socket with optional name (defaults to sk)' -r
|
|
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'
|
|
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'
|
|
single-matcher\t'Limit the matcher thread pool to a single thread'"
|
|
complete -c sk -l hscroll-off -r
|
|
complete -c sk -l jump-labels -r
|
|
complete -c sk -l tail -r
|
|
complete -c sk -l style -r
|
|
complete -c sk -l padding -r
|
|
complete -c sk -l border-label -r
|
|
complete -c sk -l border-label-pos -r
|
|
complete -c sk -l wrap-sign -r
|
|
complete -c sk -l gap -r
|
|
complete -c sk -l gap-line -r
|
|
complete -c sk -l freeze-left -r
|
|
complete -c sk -l freeze-right -r
|
|
complete -c sk -l scroll-off -r
|
|
complete -c sk -l gutter -r
|
|
complete -c sk -l gutter-raw -r
|
|
complete -c sk -l marker-multi-line -r
|
|
complete -c sk -l list-border -r
|
|
complete -c sk -l list-label -r
|
|
complete -c sk -l list-label-pos -r
|
|
complete -c sk -l info-command -r
|
|
complete -c sk -l separator -r
|
|
complete -c sk -l ghost -r
|
|
complete -c sk -l input-border -r
|
|
complete -c sk -l input-label -r
|
|
complete -c sk -l input-label-pos -r
|
|
complete -c sk -l preview-label -r
|
|
complete -c sk -l preview-label-pos -r
|
|
complete -c sk -l header-border -r
|
|
complete -c sk -l header-lines-border -r
|
|
complete -c sk -l footer -r
|
|
complete -c sk -l footer-border -r
|
|
complete -c sk -l footer-label -r
|
|
complete -c sk -l footer-label-pos -r
|
|
complete -c sk -l with-shell -r
|
|
complete -c sk -l expect -d 'Deprecated, kept for compatibility purposes. See accept() bind instead' -r
|
|
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-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'
|
|
complete -c sk -l no-multi -d 'Disable multiple selection'
|
|
complete -c sk -l no-mouse -d 'Disable mouse'
|
|
complete -c sk -s i -l interactive -d 'Start skim in interactive mode'
|
|
complete -c sk -l highlight-line -d 'Highlight the entire current line, not just the text'
|
|
complete -c sk -l no-hscroll -d 'Disable horizontal scroll'
|
|
complete -c sk -l keep-right -d 'Keep the right end of the line visible on overflow'
|
|
complete -c sk -l no-clear-if-empty -d 'Do not clear previous line if the command returns an empty result'
|
|
complete -c sk -l no-clear-start -d 'Do not clear items on start'
|
|
complete -c sk -l no-clear -d 'Do not clear screen on exit'
|
|
complete -c sk -l show-cmd-error -d 'Show error message if command fails'
|
|
complete -c sk -l cycle -d 'Cycle the results by wrapping around when scrolling'
|
|
complete -c sk -l disabled -d 'Disable matching entirely'
|
|
complete -c sk -l reverse -d 'Shorthand for reverse layout'
|
|
complete -c sk -l no-height -d 'Disable height (force full screen)'
|
|
complete -c sk -l ansi -d 'Parse ANSI color codes in input strings'
|
|
complete -c sk -l no-info -d 'Alias for --info=hidden'
|
|
complete -c sk -l inline-info -d 'Alias for --info=inline'
|
|
complete -c sk -l border-no-collapse -d 'Do not collapse adjacent borders into a shared row or column'
|
|
complete -c sk -l no-border -d 'Disables all borders, including in tmux/zellij popups'
|
|
complete -c sk -l wrap -d 'Wrap items in the item list'
|
|
complete -c sk -l no-scrollbar -d 'Disable the scrollbar in the item list'
|
|
complete -c sk -l read0 -d 'Read input delimited by ASCII NUL(\\0) characters'
|
|
complete -c sk -l print0 -d 'Print output delimited by ASCII NUL(\\0) characters'
|
|
complete -c sk -l print-query -d 'Print the query as the first line'
|
|
complete -c sk -l print-cmd -d 'Print the command as the first line (after print-query)'
|
|
complete -c sk -l print-score -d 'Print the score after each item'
|
|
complete -c sk -l print-header -d 'Print the header as the first line (after print-score)'
|
|
complete -c sk -l print-current -d 'Print the current (highlighted) item as the first line (after print-header)'
|
|
complete -c sk -l no-strip-ansi -d 'Print the ANSI codes, making the output exactly match the input even when --ansi is on'
|
|
complete -c sk -s 1 -l select-1 -d 'Do not enter the TUI if the query passed in -q matches only one item and return it'
|
|
complete -c sk -s 0 -l exit-0 -d 'Do not enter the TUI if the query passed in -q does not match any item'
|
|
complete -c sk -l sync -d 'Synchronous search for multi-staged filtering'
|
|
complete -c sk -l shell-bindings -d 'Generate shell key bindings - only for bash, zsh and fish'
|
|
complete -c sk -l man -d 'Generate man page and output it to stdout'
|
|
complete -c sk -s x -l extended
|
|
complete -c sk -l literal
|
|
complete -c sk -l filepath-word
|
|
complete -c sk -l no-bold
|
|
complete -c sk -l phony
|
|
complete -c sk -l no-color
|
|
complete -c sk -l no-multi-line
|
|
complete -c sk -l raw
|
|
complete -c sk -l track
|
|
complete -c sk -l no-input
|
|
complete -c sk -l no-separator
|
|
complete -c sk -l header-first
|
|
complete -c sk -s h -l help -d 'Print help (see more with \'--help\')'
|
|
complete -c sk -s V -l version -d 'Print version'
|