fpf-cli 1.6.45 → 1.6.46
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/fpf +103 -109
- package/package.json +1 -1
package/fpf
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
SCRIPT_NAME="fpf"
|
|
6
|
-
SCRIPT_VERSION="1.6.
|
|
6
|
+
SCRIPT_VERSION="1.6.46"
|
|
7
7
|
TMP_ROOT="${TMPDIR:-/tmp}/fpf"
|
|
8
8
|
SESSION_TMP_ROOT=""
|
|
9
9
|
HELP_FILE=""
|
|
@@ -102,7 +102,7 @@ dynamic_reload_query_cache_bypass_value() {
|
|
|
102
102
|
local bypass_setting="${FPF_DYNAMIC_RELOAD_BYPASS_QUERY_CACHE:-1}"
|
|
103
103
|
|
|
104
104
|
bypass_setting="$(trim_whitespace "${bypass_setting}")"
|
|
105
|
-
bypass_setting="$
|
|
105
|
+
bypass_setting="${bypass_setting,,}"
|
|
106
106
|
|
|
107
107
|
case "${bypass_setting}" in
|
|
108
108
|
1|true|yes|on)
|
|
@@ -122,7 +122,7 @@ loading_indicator_enabled() {
|
|
|
122
122
|
local indicator_setting=""
|
|
123
123
|
|
|
124
124
|
indicator_setting="$(trim_whitespace "${FPF_LOADING_INDICATOR:-1}")"
|
|
125
|
-
indicator_setting="$
|
|
125
|
+
indicator_setting="${indicator_setting,,}"
|
|
126
126
|
|
|
127
127
|
case "${indicator_setting}" in
|
|
128
128
|
0|false|no|off)
|
|
@@ -430,7 +430,7 @@ assume_yes_enabled() {
|
|
|
430
430
|
fi
|
|
431
431
|
|
|
432
432
|
env_assume_yes="$(trim_whitespace "${FPF_ASSUME_YES:-0}")"
|
|
433
|
-
env_assume_yes="$
|
|
433
|
+
env_assume_yes="${env_assume_yes,,}"
|
|
434
434
|
|
|
435
435
|
case "${env_assume_yes}" in
|
|
436
436
|
1|true|yes|on)
|
|
@@ -491,13 +491,14 @@ initialize_cache_root() {
|
|
|
491
491
|
}
|
|
492
492
|
|
|
493
493
|
normalize_cache_query() {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
494
|
+
local value="$1"
|
|
495
|
+
local -a tokens=()
|
|
496
|
+
|
|
497
|
+
read -r -a tokens <<<"${value}"
|
|
498
|
+
value="${tokens[*]}"
|
|
499
|
+
value="${value,,}"
|
|
500
|
+
|
|
501
|
+
printf "%s" "${value}"
|
|
501
502
|
}
|
|
502
503
|
|
|
503
504
|
trim_whitespace() {
|
|
@@ -531,7 +532,10 @@ log_selection_parse_skip() {
|
|
|
531
532
|
}
|
|
532
533
|
|
|
533
534
|
platform_cache_token() {
|
|
534
|
-
|
|
535
|
+
local os
|
|
536
|
+
|
|
537
|
+
os="$(uname -s)"
|
|
538
|
+
printf "%s" "${os,,}"
|
|
535
539
|
}
|
|
536
540
|
|
|
537
541
|
cache_fingerprint() {
|
|
@@ -1079,7 +1083,7 @@ search_catalog_async_prewarm_enabled() {
|
|
|
1079
1083
|
fi
|
|
1080
1084
|
|
|
1081
1085
|
setting="$(trim_whitespace "${setting}")"
|
|
1082
|
-
setting="$
|
|
1086
|
+
setting="${setting,,}"
|
|
1083
1087
|
|
|
1084
1088
|
case "${setting}" in
|
|
1085
1089
|
0|false|no|off)
|
|
@@ -1771,7 +1775,7 @@ normalize_manager() {
|
|
|
1771
1775
|
local manager="$1"
|
|
1772
1776
|
|
|
1773
1777
|
manager="$(trim_whitespace "${manager}")"
|
|
1774
|
-
manager="$
|
|
1778
|
+
manager="${manager,,}"
|
|
1775
1779
|
|
|
1776
1780
|
case "${manager}" in
|
|
1777
1781
|
homebrew)
|
|
@@ -2086,6 +2090,9 @@ parse_args() {
|
|
|
2086
2090
|
--feed-search)
|
|
2087
2091
|
ACTION="feed-search"
|
|
2088
2092
|
;;
|
|
2093
|
+
--dynamic-reload)
|
|
2094
|
+
ACTION="dynamic-reload"
|
|
2095
|
+
;;
|
|
2089
2096
|
--ipc-reload)
|
|
2090
2097
|
ACTION="ipc-reload"
|
|
2091
2098
|
;;
|
|
@@ -2346,8 +2353,10 @@ exact_query_candidates() {
|
|
|
2346
2353
|
local dashed_query=""
|
|
2347
2354
|
local underscored_query=""
|
|
2348
2355
|
local nospace_query=""
|
|
2356
|
+
local -a query_tokens=()
|
|
2349
2357
|
|
|
2350
|
-
|
|
2358
|
+
read -r -a query_tokens <<<"${query}"
|
|
2359
|
+
compact_query="${query_tokens[*]}"
|
|
2351
2360
|
[[ -n "${compact_query}" ]] || return 0
|
|
2352
2361
|
|
|
2353
2362
|
printf "%s\n" "${compact_query}"
|
|
@@ -2362,41 +2371,6 @@ exact_query_candidates() {
|
|
|
2362
2371
|
fi
|
|
2363
2372
|
}
|
|
2364
2373
|
|
|
2365
|
-
exact_match_entry() {
|
|
2366
|
-
local manager="$1"
|
|
2367
|
-
local query="$2"
|
|
2368
|
-
local candidate
|
|
2369
|
-
|
|
2370
|
-
if [[ -z "${query}" ]]; then
|
|
2371
|
-
return 0
|
|
2372
|
-
fi
|
|
2373
|
-
|
|
2374
|
-
while IFS= read -r candidate; do
|
|
2375
|
-
[[ -n "${candidate}" ]] || continue
|
|
2376
|
-
|
|
2377
|
-
case "${manager}" in
|
|
2378
|
-
brew)
|
|
2379
|
-
if brew info --formula "${candidate}" >/dev/null 2>&1 || brew info --cask "${candidate}" >/dev/null 2>&1; then
|
|
2380
|
-
printf "%s\t-\n" "${candidate}"
|
|
2381
|
-
return 0
|
|
2382
|
-
fi
|
|
2383
|
-
;;
|
|
2384
|
-
npm)
|
|
2385
|
-
if command_exists npm && npm view "${candidate}" name >/dev/null 2>&1; then
|
|
2386
|
-
printf "%s\t-\n" "${candidate}"
|
|
2387
|
-
return 0
|
|
2388
|
-
fi
|
|
2389
|
-
;;
|
|
2390
|
-
bun)
|
|
2391
|
-
if bun info "${candidate}" >/dev/null 2>&1 || (command_exists npm && npm view "${candidate}" name >/dev/null 2>&1); then
|
|
2392
|
-
printf "%s\t-\n" "${candidate}"
|
|
2393
|
-
return 0
|
|
2394
|
-
fi
|
|
2395
|
-
;;
|
|
2396
|
-
esac
|
|
2397
|
-
done < <(exact_query_candidates "${query}" | awk '!seen[$0]++')
|
|
2398
|
-
}
|
|
2399
|
-
|
|
2400
2374
|
manager_bun_search_entries_strict() {
|
|
2401
2375
|
local query="$1"
|
|
2402
2376
|
local effective_query="${query}"
|
|
@@ -2437,7 +2411,6 @@ manager_bun_search_entries_strict() {
|
|
|
2437
2411
|
|
|
2438
2412
|
{
|
|
2439
2413
|
awk 'NR > 1 && NF > 0 { name=$1; $1=""; sub(/^[[:space:]]+/, "", $0); if ($0 == "") $0="-"; print name "\t" $0 }' "${bun_search_file}"
|
|
2440
|
-
exact_match_entry "bun" "${query}"
|
|
2441
2414
|
} | awk -F'\t' 'NF >= 1 { if ($2 == "") $2 = "-"; print $1 "\t" $2 }' | awk -F'\t' '!seen[$1]++' | {
|
|
2442
2415
|
if [[ "${effective_limit}" -gt 0 ]]; then
|
|
2443
2416
|
awk -v limit="${effective_limit}" 'NR <= limit'
|
|
@@ -2568,25 +2541,16 @@ manager_search_entries_uncached() {
|
|
|
2568
2541
|
;;
|
|
2569
2542
|
brew)
|
|
2570
2543
|
if search_entries_from_catalog_cache "${manager}" "${effective_query}"; then
|
|
2571
|
-
|
|
2544
|
+
:
|
|
2572
2545
|
elif [[ -n "${query}" ]] && search_catalog_async_prewarm_enabled; then
|
|
2573
2546
|
start_search_catalog_prewarm_async "${manager}"
|
|
2574
|
-
{
|
|
2575
|
-
|
|
2576
|
-
awk 'NF >= 1 { print $1 "\t-" }'
|
|
2577
|
-
exact_match_entry "${manager}" "${query}"
|
|
2578
|
-
}
|
|
2547
|
+
brew search "${effective_query}" 2>/dev/null |
|
|
2548
|
+
awk 'NF >= 1 { print $1 "\t-" }'
|
|
2579
2549
|
elif ensure_search_catalog_cache "${manager}"; then
|
|
2580
|
-
{
|
|
2581
|
-
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2582
|
-
exact_match_entry "${manager}" "${query}"
|
|
2583
|
-
}
|
|
2550
|
+
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2584
2551
|
else
|
|
2585
|
-
{
|
|
2586
|
-
|
|
2587
|
-
awk 'NF > 0 && $1 != "==>" { print $1 "\t-" }'
|
|
2588
|
-
exact_match_entry "${manager}" "${query}"
|
|
2589
|
-
}
|
|
2552
|
+
brew search "${effective_query}" 2>/dev/null |
|
|
2553
|
+
awk 'NF > 0 && $1 != "==>" { print $1 "\t-" }'
|
|
2590
2554
|
fi
|
|
2591
2555
|
;;
|
|
2592
2556
|
winget)
|
|
@@ -2658,11 +2622,8 @@ manager_search_entries_uncached() {
|
|
|
2658
2622
|
fi
|
|
2659
2623
|
;;
|
|
2660
2624
|
npm)
|
|
2661
|
-
{
|
|
2662
|
-
|
|
2663
|
-
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
2664
|
-
exact_match_entry "${manager}" "${query}"
|
|
2665
|
-
}
|
|
2625
|
+
npm search "${effective_query}" --searchlimit="${npm_search_limit}" --parseable 2>/dev/null |
|
|
2626
|
+
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
2666
2627
|
;;
|
|
2667
2628
|
bun)
|
|
2668
2629
|
{
|
|
@@ -2675,7 +2636,6 @@ manager_search_entries_uncached() {
|
|
|
2675
2636
|
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
2676
2637
|
fi
|
|
2677
2638
|
rm -f "${bun_search_file}"
|
|
2678
|
-
exact_match_entry "${manager}" "${query}"
|
|
2679
2639
|
} || true
|
|
2680
2640
|
;;
|
|
2681
2641
|
esac | awk -F'\t' 'NF >= 1 { if ($2 == "") $2 = "-"; print $1 "\t" $2 }' | awk -F'\t' '!seen[$1]++' | {
|
|
@@ -2707,7 +2667,7 @@ manager_search_entries() {
|
|
|
2707
2667
|
|
|
2708
2668
|
flags="$(query_cache_flags)"
|
|
2709
2669
|
query_cache_setting="$(trim_whitespace "${query_cache_setting}")"
|
|
2710
|
-
query_cache_setting="$
|
|
2670
|
+
query_cache_setting="${query_cache_setting,,}"
|
|
2711
2671
|
query_cache_ttl="$(query_cache_ttl_seconds_for_manager "${manager}")"
|
|
2712
2672
|
|
|
2713
2673
|
if [[ "${manager}" == "bun" ]]; then
|
|
@@ -3331,29 +3291,15 @@ build_dynamic_reload_command() {
|
|
|
3331
3291
|
local manager_override="$1"
|
|
3332
3292
|
local fallback_file="$2"
|
|
3333
3293
|
local script_path="${BASH_SOURCE[0]}"
|
|
3334
|
-
local min_chars="${FPF_RELOAD_MIN_CHARS:-2}"
|
|
3335
|
-
local reload_debounce="${FPF_RELOAD_DEBOUNCE:-0.12}"
|
|
3336
3294
|
local bypass_query_cache="1"
|
|
3337
3295
|
|
|
3338
|
-
if ! [[ "${min_chars}" =~ ^[0-9]+$ ]]; then
|
|
3339
|
-
min_chars=2
|
|
3340
|
-
fi
|
|
3341
|
-
|
|
3342
|
-
if ! [[ "${reload_debounce}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
3343
|
-
reload_debounce=0.12
|
|
3344
|
-
fi
|
|
3345
|
-
|
|
3346
3296
|
bypass_query_cache="$(dynamic_reload_query_cache_bypass_value)"
|
|
3347
3297
|
|
|
3348
3298
|
if [[ "${script_path}" != /* ]]; then
|
|
3349
3299
|
script_path="$(pwd)/${script_path}"
|
|
3350
3300
|
fi
|
|
3351
3301
|
|
|
3352
|
-
|
|
3353
|
-
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --feed-search --manager %q -- "$q" 2>/dev/null || cat %q; fi' "${min_chars}" "${fallback_file}" "${reload_debounce}" "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}" "${manager_override}" "${fallback_file}"
|
|
3354
|
-
else
|
|
3355
|
-
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE= FPF_IPC_FALLBACK_FILE=%q %q --feed-search -- "$q" 2>/dev/null || cat %q; fi' "${min_chars}" "${fallback_file}" "${reload_debounce}" "${bypass_query_cache}" "${fallback_file}" "${script_path}" "${fallback_file}"
|
|
3356
|
-
fi
|
|
3302
|
+
printf 'FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --dynamic-reload -- "{q}"' "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}"
|
|
3357
3303
|
}
|
|
3358
3304
|
|
|
3359
3305
|
build_dynamic_reload_command_for_query() {
|
|
@@ -3361,34 +3307,15 @@ build_dynamic_reload_command_for_query() {
|
|
|
3361
3307
|
local fallback_file="$2"
|
|
3362
3308
|
local query_value="$3"
|
|
3363
3309
|
local script_path="${BASH_SOURCE[0]}"
|
|
3364
|
-
local min_chars="${FPF_RELOAD_MIN_CHARS:-2}"
|
|
3365
|
-
local reload_debounce="${FPF_RELOAD_DEBOUNCE:-0.12}"
|
|
3366
3310
|
local bypass_query_cache="1"
|
|
3367
3311
|
|
|
3368
|
-
if ! [[ "${min_chars}" =~ ^[0-9]+$ ]]; then
|
|
3369
|
-
min_chars=2
|
|
3370
|
-
fi
|
|
3371
|
-
|
|
3372
|
-
if ! [[ "${reload_debounce}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
3373
|
-
reload_debounce=0.12
|
|
3374
|
-
fi
|
|
3375
|
-
|
|
3376
3312
|
bypass_query_cache="$(dynamic_reload_query_cache_bypass_value)"
|
|
3377
3313
|
|
|
3378
3314
|
if [[ "${script_path}" != /* ]]; then
|
|
3379
3315
|
script_path="$(pwd)/${script_path}"
|
|
3380
3316
|
fi
|
|
3381
3317
|
|
|
3382
|
-
|
|
3383
|
-
printf 'cat %q' "${fallback_file}"
|
|
3384
|
-
return
|
|
3385
|
-
fi
|
|
3386
|
-
|
|
3387
|
-
if [[ -n "${manager_override}" ]]; then
|
|
3388
|
-
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --feed-search --manager %q -- %q 2>/dev/null || cat %q' "${reload_debounce}" "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}" "${manager_override}" "${query_value}" "${fallback_file}"
|
|
3389
|
-
else
|
|
3390
|
-
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE= FPF_IPC_FALLBACK_FILE=%q %q --feed-search -- %q 2>/dev/null || cat %q' "${reload_debounce}" "${bypass_query_cache}" "${fallback_file}" "${script_path}" "${query_value}" "${fallback_file}"
|
|
3391
|
-
fi
|
|
3318
|
+
printf 'FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --dynamic-reload -- %q' "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}" "${query_value}"
|
|
3392
3319
|
}
|
|
3393
3320
|
|
|
3394
3321
|
build_dynamic_reload_ipc_command() {
|
|
@@ -3514,6 +3441,68 @@ send_fzf_prompt_action() {
|
|
|
3514
3441
|
send_fzf_listen_action "${action_payload}"
|
|
3515
3442
|
}
|
|
3516
3443
|
|
|
3444
|
+
run_dynamic_reload_action() {
|
|
3445
|
+
local query="$1"
|
|
3446
|
+
local manager_override="${FPF_IPC_MANAGER_OVERRIDE:-}"
|
|
3447
|
+
local fallback_file="${FPF_IPC_FALLBACK_FILE:-}"
|
|
3448
|
+
local min_chars="${FPF_RELOAD_MIN_CHARS:-2}"
|
|
3449
|
+
local reload_debounce="${FPF_RELOAD_DEBOUNCE:-0.12}"
|
|
3450
|
+
local output_file=""
|
|
3451
|
+
local detected_manager=""
|
|
3452
|
+
local -a managers=()
|
|
3453
|
+
|
|
3454
|
+
if [[ -z "${fallback_file}" || ! -r "${fallback_file}" ]]; then
|
|
3455
|
+
return 1
|
|
3456
|
+
fi
|
|
3457
|
+
|
|
3458
|
+
if ! [[ "${min_chars}" =~ ^[0-9]+$ ]]; then
|
|
3459
|
+
min_chars=2
|
|
3460
|
+
fi
|
|
3461
|
+
|
|
3462
|
+
if ! [[ "${reload_debounce}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
3463
|
+
reload_debounce=0.12
|
|
3464
|
+
fi
|
|
3465
|
+
|
|
3466
|
+
if [[ ${#query} -lt ${min_chars} ]]; then
|
|
3467
|
+
cat "${fallback_file}"
|
|
3468
|
+
return 0
|
|
3469
|
+
fi
|
|
3470
|
+
|
|
3471
|
+
sleep "${reload_debounce}"
|
|
3472
|
+
|
|
3473
|
+
if [[ -n "${manager_override}" ]]; then
|
|
3474
|
+
manager_override="$(normalize_manager "${manager_override}")"
|
|
3475
|
+
if ! manager_supported "${manager_override}" || ! manager_command_ready "${manager_override}"; then
|
|
3476
|
+
cat "${fallback_file}"
|
|
3477
|
+
return 0
|
|
3478
|
+
fi
|
|
3479
|
+
managers+=("${manager_override}")
|
|
3480
|
+
else
|
|
3481
|
+
while IFS= read -r detected_manager; do
|
|
3482
|
+
[[ -n "${detected_manager}" ]] || continue
|
|
3483
|
+
if manager_supported "${detected_manager}" && manager_command_ready "${detected_manager}"; then
|
|
3484
|
+
managers+=("${detected_manager}")
|
|
3485
|
+
fi
|
|
3486
|
+
done < <(detect_default_managers)
|
|
3487
|
+
fi
|
|
3488
|
+
|
|
3489
|
+
if [[ "${#managers[@]}" -eq 0 ]]; then
|
|
3490
|
+
cat "${fallback_file}"
|
|
3491
|
+
return 0
|
|
3492
|
+
fi
|
|
3493
|
+
|
|
3494
|
+
output_file="$(mktemp "${SESSION_TMP_ROOT}/dynamic-reload.XXXXXX")"
|
|
3495
|
+
: >"${output_file}"
|
|
3496
|
+
|
|
3497
|
+
if collect_search_display_rows "${query}" "${output_file}" "${managers[@]-}"; then
|
|
3498
|
+
cat "${output_file}"
|
|
3499
|
+
else
|
|
3500
|
+
cat "${fallback_file}"
|
|
3501
|
+
fi
|
|
3502
|
+
|
|
3503
|
+
rm -f "${output_file}"
|
|
3504
|
+
}
|
|
3505
|
+
|
|
3517
3506
|
run_ipc_reload_action() {
|
|
3518
3507
|
local query="$1"
|
|
3519
3508
|
local manager_override="${FPF_IPC_MANAGER_OVERRIDE:-}"
|
|
@@ -3628,7 +3617,7 @@ confirm_action() {
|
|
|
3628
3617
|
printf "%s [y/N]: " "${prompt}" >&2
|
|
3629
3618
|
read -r reply || true
|
|
3630
3619
|
reply="$(trim_whitespace "${reply}")"
|
|
3631
|
-
normalized_reply="$
|
|
3620
|
+
normalized_reply="${reply,,}"
|
|
3632
3621
|
|
|
3633
3622
|
case "${normalized_reply}" in
|
|
3634
3623
|
y|yes)
|
|
@@ -3738,6 +3727,11 @@ main() {
|
|
|
3738
3727
|
exit 0
|
|
3739
3728
|
fi
|
|
3740
3729
|
|
|
3730
|
+
if [[ "${ACTION}" == "dynamic-reload" ]]; then
|
|
3731
|
+
run_dynamic_reload_action "$(join_query)" || true
|
|
3732
|
+
exit 0
|
|
3733
|
+
fi
|
|
3734
|
+
|
|
3741
3735
|
if [[ "${ACTION}" == "preview-item" ]]; then
|
|
3742
3736
|
local preview_manager="${MANAGER_OVERRIDE:-}"
|
|
3743
3737
|
local preview_package
|