skim (fuzzy finder) integration
Project description
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...
Installation
To install use pip:
xpip install xontrib-skim
# or: xpip install -U git+https://github.com/eugenesvk/xontrib-skim
Usage
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 and dirs) support multi-selection (with proper escape-quoting) as well as
cd
-ing to the selected dir - 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 (polyglot asdf-like runtime manager)
# 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 history entries and insert the chosen command
envx["X_SKIM_KEY_HIST_CWD→"] = "⎇s" #|['escape','s']| False¦ Search in 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 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
envx["X_SKIM_KEY_SORT_TOGGLE"] = "ctrl-r" #|ctrl-r|False¦ ⎈R binding for 'toggle-sort'
envx["X_SKIM_KEY_CUSTOM"] = None #|None| a dictionary of {'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" # ...
Examples
-
cd
to a path in-place without losing the command you've already typed in the prompt!-
Press ⎇s (for command history CWD's) or ⎇z (for zoxide's history) to launch fuzzy finder of your favorite dirs
-
Find the correct dir and insert it
-
The prompt is updated in the background, reflecting the dir change and preserving the command
-
-
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' }
Known issues
- 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
Credits
This package was created with xontrib template
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for xontrib_skim-0.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9cbca113f2adc6fd960aa29ca50a53540fcd5aa1b1046c9441c6906d74ded8a |
|
MD5 | fa8a7c3623ed403d66c9b96395344838 |
|
BLAKE2b-256 | f4367b7af4ce0ca60a237a65225e02c53185293b513580f55591d15f070f8c59 |