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