blob: 1395383b8608bba3f95f931e80733f147a98f8ca (
plain)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/env bash
ui::fzf() {
local -r autoselect="$(dict::get "$OPTIONS" autoselect)"
local -r with_nth="$(dict::get "$OPTIONS" with-nth)"
local -r nth="$(dict::get "$OPTIONS" nth)"
local args
args+=("--height")
args+=("100%")
if ${autoselect:-false}; then
args+=("--select-1")
fi
args+=("--bind"); args+=("ctrl-j:down,ctrl-k:up")
local -r fzf_cmd="$([ $NAVI_ENV == "test" ] && echo "fzf_mock" || echo "fzf")"
"$fzf_cmd" ${args[@]:-} --inline-info "$@"
}
ui::select() {
local -r cheats="$1"
[[ "${SHELL:-}" =~ 'fish' ]] || local -r sub='$'
local -r script_path="${NAVI_HOME}/navi"
local -r preview_cmd="\"${script_path}\" preview ${sub:-}(echo \'{}\' | $(arg::serialize_code) 2> /dev/null)"
local -r query="$(dict::get "$OPTIONS" query)"
local -r entry_point="$(dict::get "$OPTIONS" entry_point)"
local -r preview="$(dict::get "$OPTIONS" preview)"
local -r best="$(dict::get "$OPTIONS" best)"
local -r fzf_overrides="$(dict::get "$OPTIONS" fzf-overrides)"
local args=()
args+=("-i")
args+=("--ansi")
if $preview; then
args+=("--preview"); args+=("$preview_cmd")
args+=("--preview-window"); args+=("up:2")
fi
if [[ -n "$query" ]] && $best; then
args+=("--filter"); args+=("${query} ")
elif [[ -n "$query" ]] && ! $best; then
args+=("--query"); args+=("${query} ")
fi
if [ "$entry_point" = "search" ]; then
args+=("--header"); args+=("Displaying online results. Please refer to 'navi --help' for details")
fi
args+=("--delimiter"); args+=('\s\s+')
args+=("--expect"); args+=("ctrl-y")
export FZF_DEFAULT_OPTS="${FZF_DEFAULT_OPTS} ${fzf_overrides}"
local -r result="$(echo "$cheats" \
| cheat::prettify \
| str::as_column $(printf "$ESCAPE_CHAR_3") \
| ui::fzf "${args[@]}")"
local -r key="$(echo "$result" | head -n1)"
echo "$result" \
| ($best && head -n1 || tail -n +2) \
| selection::dict "$cheats" "$key"
}
ui::clear_previous_line() {
tput cuu1 2>/dev/null && tput el || true
}
ui::width() {
shopt -s checkwinsize; (:;:) 2> /dev/null || true
if command_exists tput; then
tput cols
else
echo 130
fi
}
ui::remove_dep_order() {
sed -E 's/^[^;]+; //'
}
ui::print_preview() {
local -r selection="$1"
local -r comment="$(selection::comment "$selection" | cmd::unescape)"
local -r snippet="$(selection::snippet "$selection" | cmd::unescape)"
local -r tags="$(selection::tags "$selection" | cmd::unescape)"
local -r comment_color="$(style::comment_color)"
local -r snippet_color="$(style::snippet_color)"
local -r tag_color="$(style::tag_color)"
printf "\033[${comment_color}m# "; echo -n "$comment"
printf " \033[${tag_color}m["; echo -n "$tags"; echo "]"
printf "\033[${snippet_color}m"
echo "$snippet" | ui::remove_dep_order
}
|