Skip to content

Commit ed5c2a0

Browse files
committed
[install:bash] Override __fzf_select__ and fzf-file-widget for improved ctrl-t experience
1 parent 97030d4 commit ed5c2a0

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

Diff for: install

+4
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ EOF
270270
else
271271
echo "eval \"\$(fzf --$shell)\"" >> "$src"
272272
fi
273+
if [[ "$shell" = bash ]]; then
274+
bash_override=shell/bash-override
275+
[ -f "$bash_override" ] && echo >> "$src" && cat "$bash_override" >> "$src"
276+
fi
273277
else
274278
cat >> "$src" << EOF
275279
# Auto-completion

Diff for: shell/bash-override

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Override defaults for improved ctrl-t experience
2+
__fzf_find() {
3+
command ls -1t $1;
4+
command find -L $1 -mindepth 2 \( -path '*/\.*' -o -fstype 'sysfs' -o -fstype 'devfs' -o -fstype 'devtmpfs' -o -fstype 'proc' \) -prune \
5+
-o -type f -printf '%P\n' \
6+
-o -type d -printf '%P\n' \
7+
-o -type l -printf '%P\n' 2> /dev/null
8+
}
9+
10+
__fzf_select__() {
11+
local cmd opts
12+
local dir=$1
13+
shift
14+
cmd="${FZF_CTRL_T_COMMAND:-"__fzf_find $dir"}"
15+
opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS -m"
16+
eval "$cmd" |
17+
FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" |
18+
while read -r item; do
19+
if [ "$dir" == "." ]; then
20+
printf '%q ' "$item" # escape special chars
21+
else
22+
printf '%q/%q ' "$dir" "$item"
23+
fi
24+
done
25+
}
26+
27+
fzf-file-widget() {
28+
local trailing_spaces=$(echo -n "${READLINE_LINE:0:$READLINE_POINT}" | sed "s/^.*\S//")
29+
local word=$(echo -n "${READLINE_LINE:0:$READLINE_POINT}" | sed "s/\s*$//"| awk '{print $NF}')
30+
local dir=$(echo "${word/#\~/$HOME}" | sed "s#/\+#/#g; s#/\$##")
31+
if [[ $READLINE_POINT -eq 0 || -n "$trailing_spaces" || ! -d "$dir" ]]; then
32+
local maybe_space=""
33+
[[ $READLINE_POINT -gt 0 && -z "$trailing_spaces" ]] && maybe_space=" "
34+
local selected="$(__fzf_select__ . "$@")"
35+
if [ -n "$selected" ]; then
36+
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$maybe_space$selected${READLINE_LINE:$READLINE_POINT}"
37+
READLINE_POINT=$((READLINE_POINT + ${#maybe_space} + ${#selected}))
38+
fi
39+
else
40+
local selected="$(__fzf_select__ "$dir" "$@")"
41+
if [ -n "$selected" ]; then
42+
local pre_word=$((READLINE_POINT - ${#word}))
43+
READLINE_LINE="${READLINE_LINE:0:$pre_word}$selected${READLINE_LINE:$READLINE_POINT}"
44+
READLINE_POINT=$((pre_word + ${#selected}))
45+
fi
46+
fi
47+
}
48+
# end of non default section

0 commit comments

Comments
 (0)