skim (fuzzy finder) integration into xonsh (shell)
Sets up keybinds to search various type of data: dirs/files, history of commands/CWDs/dirs, ssh hosts...
xpip install -U xontrib-skim
# or: xpip install -U git+https://github.com/eugenesvk/xontrib-skim
Supported data sources:
- xonsh history of commands (and their frequency)
- xonsh history of commands' CWDs (and the frequency of commands started here)
- zoxide's history of dirs
CWDs/dirs support multi-selection (with proper escape-quoting) as well ascd
-ing to the selected dir in-place - files in the current directory and its sub-directories
- dirs in the current directory and its sub-directories
- ssh hosts from
/etc/ssh/ssh_config
,~/.ssh/config
,~/.ssh/known_hosts
This xontrib requires sk
(or sk-tmux
) to be in PATH
. If it's added to PATH
via another xontrib (e.g, you installed it via Homebrew and use xontrib-homebrew
), then you should load this xontrib after the one setting PATH
- Add the following to your
.py
xontrib loading config andimport
it in your xonsh run control file (~/.xonshrc
or~/.config/rc.xsh
):
from xonsh.xontribs import xontribs_load
from xonsh.built_ins import XSH
envx = XSH.env
xontribs = [ "skim", # Initializes skim (Fuzzy Finder)
# your other xontribs
]
# ↓ optional configuration variables (use `False` to disable a keybind)
if 'skim' in xontribs: # Configure skim only if you're actually loading it
#Config var Value ≝Default ¦Alt_cmd Comment
envx["X_SKIM_KEY_HIST" ] = "⎈ s" #≝c-s ¦False Search in xonsh 's history entries and ⎀insert the chosen command
envx["X_SKIM_KEY_HIST_CWD→"] = " ⎇s" #≝['escape','s'] ¦False Search in xonsh 's history entries' CWD and →CD to the selected item (if exists, do nothing otherwise)
envx["X_SKIM_KEY_HIST_CWD" ] = "⎈⎇s" #≝['escape','c-s']¦False Search in xonsh 's history entries' CWD and ⎀insert the selected item(s)
envx["X_SKIM_KEY_HIST_Z→" ] = " ⎇z" #≝['escape','z'] ¦False Search in zoxide's history entries and →CD to the selected item (if exists, do nothing otherwise)
envx["X_SKIM_KEY_HIST_Z" ] = "⎈⎇z" #≝['escape','c-z']¦False Search in zoxide's history entries and ⎀insert the selected item(s)
envx["X_SKIM_KEY_FILE" ] = "⎈ f" #≝c-f ¦False Find files in the current directory and its sub-directories
envx["X_SKIM_KEY_DIR" ] = " ⎇f" #≝['escape','f'] ¦False Find dirs in the current directory and its sub-directories
envx["X_SKIM_KEY_SSH" ] = "⎈ b" #≝c-b ¦False Run 'ssh HOST' for hosts in /etc/ssh/ssh_config, ~/.ssh/config, ~/.ssh/known_hosts
# run to see the allowed list for ↑: from prompt_toolkit.keys import ALL_KEYS; print(ALL_KEYS)
# Alt is also supported as either of: a- ⎇ ⌥ (converted to a prefix 'escape')
# Control symbols are also supported as either of: ⎈ ⌃
# ↓ are key bindings for the skim binary itself, not this xontrib, so use skim rules https://github.com/lotabout/skim#keymap
#Config var Value ≝Default¦Alt_cmd Comment
envx["X_SKIM_KEY_SORT_TOGGLE" ] = "ctrl-r" #≝ctrl-r ¦False ⎈R binding for 'toggle-sort'
envx["X_SKIM_KEY_CUSTOM" ] = None #≝None ¦{'key':'action'}
envx["X_SKIM_NO_HEIGHT" ] = True #≝True ¦False disable `--height` to fix a skim bug
envx["X_SKIM_NO_SORT" ] = True #≝True ¦False disable history sorting
envx["X_SKIM_CMD_FRQ" ] = True #≝True ¦False add ∑command runs for a given command
envx["X_SKIM_CMD_FRQ_MIN" ] = 5 #≝5 ¦ hide frequency numbers below this
envx["X_SKIM_CWD_FRQ" ] = True #≝True ¦False add ∑command runs at a given CWD
envx["X_SKIM_CWD_FRQ_MIN" ] = 5 #≝5 ¦ hide frequency numbers below this
envx["X_SKIM_CMD_FIND" ] = "fd -t f -t l" #≝None command used by skim to search for files
envx["X_SKIM_CMD_FIND_DIR" ] = "fd -t d " #≝None command used by skim to search for directories
envx["X_SKIM_DIR_VIEW" ] = "ls -F --color=always {2..}" #≝None preview function for Dir lists
envx["SKIM_DEFAULT_OPTIONS" ] = "--ansi --preview-window=right:40%:wrap" #≝None other options to pass to skim
xontribs_load(xontribs) # actually load all xontribs in the list
- Or just add this to your xonsh run control file
xontrib load skim # Initializes skim (fuzzy finder)
# configure like in the example above, but replace envx['VAR'] with $VAR
$X_SKIM_KEY_HISTORY = "c-s" # ...
-
cd
to a path in-place without losing the command you've already typed in the prompt! -
Find fils/dirs in xonsh-completed paths: type
cd ~/Mus
; hit ⎈F to limit your file search to~/Music
-
Find files with ⎈F and dirs with ⎇F
envx["X_SKIM_KEY_FILE"] = "⎇f"
envx["X_SKIM_KEY_DIR"] = "⎈f"
- Insert multiple paths with home row cursor keys
⎇J to toggle and ▼
⎇K to toggle and ▲envx["X_SKIM_KEY_CUSTOM"] = { 'alt-j':'toggle+down' , 'alt-k':'toggle+up' }
- skim doesn't clear the screen properly when
--height
is set due to a bug. At the moment this flag is disabled viaX_SKIM_NO_HEIGHT
- skim sometimes prints extraneous text symbols, e.g., when searching history, maybe due to this bug or something else
- skim might bug in tmux on some system/terminals bug1, bug2
toggle-sort
(andX_SKIM_KEY_SORT_TOGGLE
) doesn't seem to be supported in skim,ls | sk --bind=pgdn:toggle-sort
also fails- to remove extra
?[38;5;26mFOLDER
from output, add--ansi
to$SKIM_DEFAULT_OPTIONS
or disable colors in your$X_SKIM_CMD_FIND
/DIR
filter (e.g.,fd -t d -c never
) - ⎈/⎇f conflict with xontrib-output-search's defaults
This package was created with xontrib template