feat(Bash): support bash
This commit is contained in:
56
bash/keybindings/fzf_keybindings.sh
Normal file
56
bash/keybindings/fzf_keybindings.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if ! command -v fzf >/dev/null 2>&1; then
|
||||
return
|
||||
fi
|
||||
|
||||
_pj_readline_append() {
|
||||
local text="$1"
|
||||
[[ -z "$text" ]] && return 0
|
||||
READLINE_LINE="${READLINE_LINE:0:READLINE_POINT}${text}${READLINE_LINE:READLINE_POINT}"
|
||||
READLINE_POINT=$((READLINE_POINT + ${#text}))
|
||||
}
|
||||
|
||||
__pj_fzf_file_widget() {
|
||||
local selected_file
|
||||
local command_to_run
|
||||
|
||||
if command -v fd >/dev/null 2>&1; then
|
||||
command_to_run='fd --type f --hidden --exclude .git | fzf'
|
||||
elif command -v rg >/dev/null 2>&1; then
|
||||
command_to_run='rg --files --hidden --glob "!.git/*" | fzf'
|
||||
elif command -v ag >/dev/null 2>&1; then
|
||||
command_to_run='ag -l --hidden -g "" --ignore .git | fzf'
|
||||
else
|
||||
command_to_run='find . -type f 2>/dev/null | fzf'
|
||||
fi
|
||||
|
||||
selected_file="$(eval "$command_to_run")"
|
||||
_pj_readline_append "$selected_file"
|
||||
}
|
||||
|
||||
__pj_fzf_dir_widget() {
|
||||
local selected_dir
|
||||
local command_to_run
|
||||
|
||||
if command -v fd >/dev/null 2>&1; then
|
||||
command_to_run='fd --type d --hidden --no-ignore --exclude .git | fzf'
|
||||
else
|
||||
command_to_run='find . -type d 2>/dev/null | fzf'
|
||||
fi
|
||||
|
||||
selected_dir="$(eval "$command_to_run")"
|
||||
_pj_readline_append "$selected_dir"
|
||||
}
|
||||
|
||||
__pj_fzf_history_widget() {
|
||||
local selected_command
|
||||
|
||||
selected_command="$({ HISTTIMEFORMAT= history; } | sed 's/^[[:space:]]*[0-9]\+[[:space:]]*//' | fzf --height 40% --reverse --border)"
|
||||
_pj_readline_append "$selected_command"
|
||||
}
|
||||
|
||||
# Alt-f: file selector, Alt-d: directory selector, Alt-h: history selector
|
||||
bind -x '"\ef":__pj_fzf_file_widget'
|
||||
bind -x '"\ed":__pj_fzf_dir_widget'
|
||||
bind -x '"\eh":__pj_fzf_history_widget'
|
||||
Reference in New Issue
Block a user