fpf-cli 1.6.34 → 1.6.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/fpf +123 -43
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -98,6 +98,7 @@ Installed packages are marked with `*` in the result list.
|
|
|
98
98
|
- `FPF_DYNAMIC_RELOAD`: `always` (default), `single`, or `never`
|
|
99
99
|
- Live reload uses `change:reload` by default for reliability (`ctrl-r` uses the same reload command).
|
|
100
100
|
- Set `FPF_DYNAMIC_RELOAD_TRANSPORT=ipc` to opt into `--listen` + IPC query notifications on supported `fzf` builds.
|
|
101
|
+
- Set `FPF_LOADING_INDICATOR=0` to disable the pre-search loading spinner.
|
|
101
102
|
- `FPF_RELOAD_MIN_CHARS`: minimum query length before live reload (default `2`)
|
|
102
103
|
- `FPF_RELOAD_DEBOUNCE`: reload debounce seconds (default `0.12`)
|
|
103
104
|
- `FPF_DISABLE_INSTALLED_CACHE=1` disables installed-package marker cache
|
package/fpf
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
SCRIPT_NAME="fpf"
|
|
6
|
-
SCRIPT_VERSION="1.6.
|
|
6
|
+
SCRIPT_VERSION="1.6.35"
|
|
7
7
|
TMP_ROOT="${TMPDIR:-/tmp}/fpf"
|
|
8
8
|
SESSION_TMP_ROOT=""
|
|
9
9
|
HELP_FILE=""
|
|
10
10
|
KBINDS_FILE=""
|
|
11
11
|
CACHE_FORMAT_VERSION="1"
|
|
12
12
|
CACHE_ROOT=""
|
|
13
|
+
LOADING_INDICATOR_PID=""
|
|
13
14
|
|
|
14
15
|
ACTION="search"
|
|
15
16
|
MANAGER_OVERRIDE=""
|
|
@@ -27,6 +28,72 @@ log() {
|
|
|
27
28
|
printf "%s\n" "$*" >&2
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
loading_indicator_enabled() {
|
|
32
|
+
local indicator_setting=""
|
|
33
|
+
|
|
34
|
+
indicator_setting="$(trim_whitespace "${FPF_LOADING_INDICATOR:-1}")"
|
|
35
|
+
indicator_setting="$(printf "%s" "${indicator_setting}" | tr '[:upper:]' '[:lower:]')"
|
|
36
|
+
|
|
37
|
+
case "${indicator_setting}" in
|
|
38
|
+
0|false|no|off)
|
|
39
|
+
return 1
|
|
40
|
+
;;
|
|
41
|
+
esac
|
|
42
|
+
|
|
43
|
+
[[ -t 2 ]]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
start_loading_indicator() {
|
|
47
|
+
local message="${1:-Loading}"
|
|
48
|
+
|
|
49
|
+
if [[ -n "${LOADING_INDICATOR_PID}" ]]; then
|
|
50
|
+
stop_loading_indicator
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
loading_indicator_enabled || return 0
|
|
54
|
+
|
|
55
|
+
(
|
|
56
|
+
trap 'exit 0' TERM INT
|
|
57
|
+
local frames='|/-\'
|
|
58
|
+
local frame_index=0
|
|
59
|
+
while true; do
|
|
60
|
+
printf "\r\033[2K%s [%s]" "${message}" "${frames:frame_index:1}" >&2
|
|
61
|
+
frame_index=$(((frame_index + 1) % 4))
|
|
62
|
+
sleep 0.1
|
|
63
|
+
done
|
|
64
|
+
) &
|
|
65
|
+
LOADING_INDICATOR_PID="$!"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
stop_loading_indicator() {
|
|
69
|
+
if [[ -z "${LOADING_INDICATOR_PID}" ]]; then
|
|
70
|
+
return 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
kill "${LOADING_INDICATOR_PID}" >/dev/null 2>&1 || true
|
|
74
|
+
wait "${LOADING_INDICATOR_PID}" >/dev/null 2>&1 || true
|
|
75
|
+
LOADING_INDICATOR_PID=""
|
|
76
|
+
|
|
77
|
+
if loading_indicator_enabled; then
|
|
78
|
+
printf "\r\033[2K" >&2
|
|
79
|
+
fi
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
run_with_loading_indicator() {
|
|
83
|
+
local message="$1"
|
|
84
|
+
shift
|
|
85
|
+
|
|
86
|
+
start_loading_indicator "${message}"
|
|
87
|
+
if "$@"; then
|
|
88
|
+
stop_loading_indicator
|
|
89
|
+
return 0
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
local status="$?"
|
|
93
|
+
stop_loading_indicator
|
|
94
|
+
return "${status}"
|
|
95
|
+
}
|
|
96
|
+
|
|
30
97
|
die() {
|
|
31
98
|
log "Error: $*"
|
|
32
99
|
exit 1
|
|
@@ -861,6 +928,8 @@ run_preview_item_action() {
|
|
|
861
928
|
}
|
|
862
929
|
|
|
863
930
|
cleanup_session_tmp_root() {
|
|
931
|
+
stop_loading_indicator
|
|
932
|
+
|
|
864
933
|
if [[ -n "${SESSION_TMP_ROOT}" && -d "${SESSION_TMP_ROOT}" ]]; then
|
|
865
934
|
rm -rf "${SESSION_TMP_ROOT}"
|
|
866
935
|
fi
|
|
@@ -2755,6 +2824,56 @@ collect_search_display_rows() {
|
|
|
2755
2824
|
rm -f "${merged_source_file}" "${merged_marked_file}"
|
|
2756
2825
|
}
|
|
2757
2826
|
|
|
2827
|
+
collect_installed_display_rows() {
|
|
2828
|
+
local output_file="$1"
|
|
2829
|
+
shift
|
|
2830
|
+
local managers=("$@")
|
|
2831
|
+
local part_files=()
|
|
2832
|
+
local gather_pids=()
|
|
2833
|
+
local manager
|
|
2834
|
+
local part_file
|
|
2835
|
+
local gather_pid
|
|
2836
|
+
|
|
2837
|
+
: >"${output_file}"
|
|
2838
|
+
|
|
2839
|
+
for manager in "${managers[@]-}"; do
|
|
2840
|
+
part_file="$(mktemp "${SESSION_TMP_ROOT}/part.XXXXXX")"
|
|
2841
|
+
part_files+=("${part_file}")
|
|
2842
|
+
|
|
2843
|
+
(
|
|
2844
|
+
local local_source_file
|
|
2845
|
+
local_source_file="$(mktemp "${SESSION_TMP_ROOT}/source.XXXXXX")"
|
|
2846
|
+
manager_installed_entries "${manager}" >"${local_source_file}" || true
|
|
2847
|
+
if [[ -s "${local_source_file}" ]]; then
|
|
2848
|
+
awk -F'\t' -v mgr="${manager}" '
|
|
2849
|
+
NF >= 1 {
|
|
2850
|
+
desc = $2
|
|
2851
|
+
if (desc == "") desc = "-"
|
|
2852
|
+
print mgr "\t" $1 "\t" desc
|
|
2853
|
+
}
|
|
2854
|
+
' "${local_source_file}" >"${part_file}"
|
|
2855
|
+
fi
|
|
2856
|
+
rm -f "${local_source_file}"
|
|
2857
|
+
) &
|
|
2858
|
+
gather_pids+=("$!")
|
|
2859
|
+
done
|
|
2860
|
+
|
|
2861
|
+
for gather_pid in "${gather_pids[@]-}"; do
|
|
2862
|
+
wait "${gather_pid}" || true
|
|
2863
|
+
done
|
|
2864
|
+
|
|
2865
|
+
for part_file in "${part_files[@]-}"; do
|
|
2866
|
+
if [[ -s "${part_file}" ]]; then
|
|
2867
|
+
cat "${part_file}" >>"${output_file}"
|
|
2868
|
+
fi
|
|
2869
|
+
rm -f "${part_file}"
|
|
2870
|
+
done
|
|
2871
|
+
|
|
2872
|
+
if [[ -s "${output_file}" ]]; then
|
|
2873
|
+
sort -u "${output_file}" -o "${output_file}"
|
|
2874
|
+
fi
|
|
2875
|
+
}
|
|
2876
|
+
|
|
2758
2877
|
build_dynamic_reload_command() {
|
|
2759
2878
|
local manager_override="$1"
|
|
2760
2879
|
local fallback_file="$2"
|
|
@@ -3286,48 +3405,9 @@ main() {
|
|
|
3286
3405
|
ensure_fzf "${managers[@]-}"
|
|
3287
3406
|
|
|
3288
3407
|
if [[ "${ACTION}" == "search" ]]; then
|
|
3289
|
-
collect_search_display_rows "${query}" "${display_file}" "${managers[@]-}"
|
|
3408
|
+
run_with_loading_indicator "Loading packages from ${manager_display}" collect_search_display_rows "${query}" "${display_file}" "${managers[@]-}"
|
|
3290
3409
|
else
|
|
3291
|
-
|
|
3292
|
-
local gather_pids=()
|
|
3293
|
-
local part_file
|
|
3294
|
-
local gather_pid
|
|
3295
|
-
|
|
3296
|
-
for manager in "${managers[@]-}"; do
|
|
3297
|
-
part_file="$(mktemp "${SESSION_TMP_ROOT}/part.XXXXXX")"
|
|
3298
|
-
part_files+=("${part_file}")
|
|
3299
|
-
|
|
3300
|
-
(
|
|
3301
|
-
local_source_file="$(mktemp "${SESSION_TMP_ROOT}/source.XXXXXX")"
|
|
3302
|
-
manager_installed_entries "${manager}" >"${local_source_file}" || true
|
|
3303
|
-
if [[ -s "${local_source_file}" ]]; then
|
|
3304
|
-
awk -F'\t' -v mgr="${manager}" '
|
|
3305
|
-
NF >= 1 {
|
|
3306
|
-
desc = $2
|
|
3307
|
-
if (desc == "") desc = "-"
|
|
3308
|
-
print mgr "\t" $1 "\t" desc
|
|
3309
|
-
}
|
|
3310
|
-
' "${local_source_file}" >"${part_file}"
|
|
3311
|
-
fi
|
|
3312
|
-
rm -f "${local_source_file}"
|
|
3313
|
-
) &
|
|
3314
|
-
gather_pids+=("$!")
|
|
3315
|
-
done
|
|
3316
|
-
|
|
3317
|
-
for gather_pid in "${gather_pids[@]-}"; do
|
|
3318
|
-
wait "${gather_pid}" || true
|
|
3319
|
-
done
|
|
3320
|
-
|
|
3321
|
-
for part_file in "${part_files[@]-}"; do
|
|
3322
|
-
if [[ -s "${part_file}" ]]; then
|
|
3323
|
-
cat "${part_file}" >>"${display_file}"
|
|
3324
|
-
fi
|
|
3325
|
-
rm -f "${part_file}"
|
|
3326
|
-
done
|
|
3327
|
-
|
|
3328
|
-
if [[ -s "${display_file}" ]]; then
|
|
3329
|
-
sort -u "${display_file}" -o "${display_file}"
|
|
3330
|
-
fi
|
|
3410
|
+
run_with_loading_indicator "Loading installed packages from ${manager_display}" collect_installed_display_rows "${display_file}" "${managers[@]-}"
|
|
3331
3411
|
fi
|
|
3332
3412
|
|
|
3333
3413
|
if [[ ! -s "${display_file}" ]]; then
|
|
@@ -3370,7 +3450,7 @@ main() {
|
|
|
3370
3450
|
if dynamic_reload_enabled "${#managers[@]}"; then
|
|
3371
3451
|
if [[ -n "${query}" ]]; then
|
|
3372
3452
|
reload_fallback_file="$(mktemp "${SESSION_TMP_ROOT}/reload-fallback.XXXXXX")"
|
|
3373
|
-
collect_search_display_rows "" "${reload_fallback_file}" "${managers[@]-}"
|
|
3453
|
+
run_with_loading_indicator "Preparing baseline search results" collect_search_display_rows "" "${reload_fallback_file}" "${managers[@]-}"
|
|
3374
3454
|
if [[ ! -s "${reload_fallback_file}" ]]; then
|
|
3375
3455
|
cp "${display_file}" "${reload_fallback_file}"
|
|
3376
3456
|
fi
|