fpf-cli 1.6.3 → 1.6.4
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 +2 -6
- package/fpf +74 -63
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -34,13 +34,9 @@ fpf -U
|
|
|
34
34
|
|
|
35
35
|
By default, `fpf` auto-detects your package manager.
|
|
36
36
|
|
|
37
|
-
On
|
|
37
|
+
On every OS, default auto mode now includes all supported package managers that are detected on your system in one combined list.
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
On Linux, default auto mode uses your distro manager plus installed cross-platform managers (`snap`, `flatpak`, `brew`, `npm`, `bun`).
|
|
42
|
-
|
|
43
|
-
On Windows (Git Bash / MSYS / Cygwin), default auto mode uses installed Windows managers (`winget`, `choco`, `scoop`) plus `npm` and `bun`.
|
|
39
|
+
For no-query startup (`fpf`), each manager uses a lighter default query and per-manager result cap to keep startup responsive.
|
|
44
40
|
|
|
45
41
|
## Supported Managers
|
|
46
42
|
|
package/fpf
CHANGED
|
@@ -346,9 +346,9 @@ detect_default_manager() {
|
|
|
346
346
|
}
|
|
347
347
|
|
|
348
348
|
detect_default_managers() {
|
|
349
|
-
local os
|
|
350
349
|
local emitted=""
|
|
351
350
|
local primary_manager=""
|
|
351
|
+
local manager
|
|
352
352
|
|
|
353
353
|
add_detected_manager() {
|
|
354
354
|
local manager_name="$1"
|
|
@@ -364,46 +364,13 @@ detect_default_managers() {
|
|
|
364
364
|
fi
|
|
365
365
|
}
|
|
366
366
|
|
|
367
|
-
os="$(uname -s)"
|
|
368
|
-
|
|
369
|
-
if [[ "${os}" == "Darwin" ]]; then
|
|
370
|
-
add_detected_manager "brew"
|
|
371
|
-
add_detected_manager "npm"
|
|
372
|
-
add_detected_manager "bun"
|
|
373
|
-
if [[ -n "${emitted}" ]]; then
|
|
374
|
-
return
|
|
375
|
-
fi
|
|
376
|
-
fi
|
|
377
|
-
|
|
378
|
-
if [[ "${os}" == MINGW* || "${os}" == MSYS* || "${os}" == CYGWIN* || "${os}" == "Windows_NT" ]]; then
|
|
379
|
-
add_detected_manager "winget"
|
|
380
|
-
add_detected_manager "choco"
|
|
381
|
-
add_detected_manager "scoop"
|
|
382
|
-
add_detected_manager "npm"
|
|
383
|
-
add_detected_manager "bun"
|
|
384
|
-
if [[ -n "${emitted}" ]]; then
|
|
385
|
-
return
|
|
386
|
-
fi
|
|
387
|
-
fi
|
|
388
|
-
|
|
389
|
-
if [[ "${os}" == "Linux" ]]; then
|
|
390
|
-
primary_manager="$(detect_default_manager)"
|
|
391
|
-
add_detected_manager "${primary_manager}"
|
|
392
|
-
|
|
393
|
-
add_detected_manager "snap"
|
|
394
|
-
add_detected_manager "flatpak"
|
|
395
|
-
add_detected_manager "brew"
|
|
396
|
-
add_detected_manager "npm"
|
|
397
|
-
add_detected_manager "bun"
|
|
398
|
-
|
|
399
|
-
if [[ -n "${emitted}" ]]; then
|
|
400
|
-
return
|
|
401
|
-
fi
|
|
402
|
-
fi
|
|
403
|
-
|
|
404
367
|
primary_manager="$(detect_default_manager)"
|
|
405
368
|
add_detected_manager "${primary_manager}"
|
|
406
369
|
|
|
370
|
+
for manager in apt dnf pacman zypper emerge brew winget choco scoop snap flatpak npm bun; do
|
|
371
|
+
add_detected_manager "${manager}"
|
|
372
|
+
done
|
|
373
|
+
|
|
407
374
|
if [[ -n "${emitted}" ]]; then
|
|
408
375
|
return
|
|
409
376
|
fi
|
|
@@ -616,6 +583,21 @@ manager_search_entries() {
|
|
|
616
583
|
local manager="$1"
|
|
617
584
|
local query="$2"
|
|
618
585
|
local effective_query="${query}"
|
|
586
|
+
local npm_search_limit=200
|
|
587
|
+
local line_limit=0
|
|
588
|
+
|
|
589
|
+
if [[ -z "${query}" ]]; then
|
|
590
|
+
npm_search_limit="${FPF_NO_QUERY_NPM_LIMIT:-120}"
|
|
591
|
+
line_limit="${FPF_NO_QUERY_RESULT_LIMIT:-200}"
|
|
592
|
+
fi
|
|
593
|
+
|
|
594
|
+
if ! [[ "${npm_search_limit}" =~ ^[0-9]+$ ]] || [[ "${npm_search_limit}" -eq 0 ]]; then
|
|
595
|
+
npm_search_limit=200
|
|
596
|
+
fi
|
|
597
|
+
|
|
598
|
+
if ! [[ "${line_limit}" =~ ^[0-9]+$ ]]; then
|
|
599
|
+
line_limit=0
|
|
600
|
+
fi
|
|
619
601
|
|
|
620
602
|
if [[ -z "${effective_query}" ]]; then
|
|
621
603
|
case "${manager}" in
|
|
@@ -626,7 +608,7 @@ manager_search_entries() {
|
|
|
626
608
|
effective_query="aa"
|
|
627
609
|
;;
|
|
628
610
|
winget)
|
|
629
|
-
effective_query="
|
|
611
|
+
effective_query="aa"
|
|
630
612
|
;;
|
|
631
613
|
esac
|
|
632
614
|
fi
|
|
@@ -762,7 +744,7 @@ manager_search_entries() {
|
|
|
762
744
|
fi
|
|
763
745
|
;;
|
|
764
746
|
npm)
|
|
765
|
-
npm search "${effective_query}" --searchlimit=
|
|
747
|
+
npm search "${effective_query}" --searchlimit="${npm_search_limit}" --parseable 2>/dev/null |
|
|
766
748
|
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
767
749
|
;;
|
|
768
750
|
bun)
|
|
@@ -771,12 +753,18 @@ manager_search_entries() {
|
|
|
771
753
|
bun search "${effective_query}" 2>/dev/null |
|
|
772
754
|
awk 'NR > 1 && NF > 0 { name=$1; $1=""; sub(/^[[:space:]]+/, "", $0); if ($0 == "") $0="-"; print name "\t" $0 }'
|
|
773
755
|
elif command_exists npm; then
|
|
774
|
-
npm search "${effective_query}" --searchlimit=
|
|
756
|
+
npm search "${effective_query}" --searchlimit="${npm_search_limit}" --parseable 2>/dev/null |
|
|
775
757
|
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
776
758
|
fi
|
|
777
759
|
} || true
|
|
778
760
|
;;
|
|
779
|
-
esac | awk -F'\t' 'NF >= 1 { if ($2 == "") $2 = "-"; print $1 "\t" $2 }' | sort -u
|
|
761
|
+
esac | awk -F'\t' 'NF >= 1 { if ($2 == "") $2 = "-"; print $1 "\t" $2 }' | sort -u | {
|
|
762
|
+
if [[ "${line_limit}" -gt 0 ]]; then
|
|
763
|
+
awk -v limit="${line_limit}" 'NR <= limit'
|
|
764
|
+
else
|
|
765
|
+
cat
|
|
766
|
+
fi
|
|
767
|
+
} || true
|
|
780
768
|
}
|
|
781
769
|
|
|
782
770
|
manager_installed_entries() {
|
|
@@ -1288,39 +1276,62 @@ main() {
|
|
|
1288
1276
|
display_file="$(mktemp "${TMP_ROOT}/display.XXXXXX")"
|
|
1289
1277
|
: >"${display_file}"
|
|
1290
1278
|
|
|
1291
|
-
local
|
|
1292
|
-
local
|
|
1279
|
+
local part_files=()
|
|
1280
|
+
local gather_pids=()
|
|
1281
|
+
local part_file
|
|
1282
|
+
local gather_pid
|
|
1283
|
+
|
|
1293
1284
|
for manager in "${managers[@]-}"; do
|
|
1294
|
-
|
|
1285
|
+
part_file="$(mktemp "${TMP_ROOT}/part.XXXXXX")"
|
|
1286
|
+
part_files+=("${part_file}")
|
|
1295
1287
|
|
|
1296
1288
|
if [[ "${ACTION}" == "list" || "${ACTION}" == "remove" ]]; then
|
|
1297
|
-
|
|
1298
|
-
|
|
1289
|
+
(
|
|
1290
|
+
local_source_file="$(mktemp "${TMP_ROOT}/source.XXXXXX")"
|
|
1291
|
+
manager_installed_entries "${manager}" >"${local_source_file}" || true
|
|
1292
|
+
if [[ -s "${local_source_file}" ]]; then
|
|
1293
|
+
awk -F'\t' -v mgr="${manager}" '
|
|
1294
|
+
NF >= 1 {
|
|
1295
|
+
desc = $2
|
|
1296
|
+
if (desc == "") desc = "-"
|
|
1297
|
+
print mgr "\t" $1 "\t" desc
|
|
1298
|
+
}
|
|
1299
|
+
' "${local_source_file}" >"${part_file}"
|
|
1300
|
+
fi
|
|
1301
|
+
rm -f "${local_source_file}"
|
|
1302
|
+
) &
|
|
1303
|
+
gather_pids+=("$!")
|
|
1304
|
+
continue
|
|
1305
|
+
fi
|
|
1306
|
+
|
|
1307
|
+
(
|
|
1308
|
+
local_source_file="$(mktemp "${TMP_ROOT}/source.XXXXXX")"
|
|
1309
|
+
local_marked_file="$(mktemp "${TMP_ROOT}/marked.XXXXXX")"
|
|
1310
|
+
manager_search_entries "${manager}" "${query}" >"${local_source_file}" || true
|
|
1311
|
+
if [[ -s "${local_source_file}" ]]; then
|
|
1312
|
+
mark_installed_packages "${manager}" "${local_source_file}" "${local_marked_file}"
|
|
1299
1313
|
awk -F'\t' -v mgr="${manager}" '
|
|
1300
1314
|
NF >= 1 {
|
|
1301
1315
|
desc = $2
|
|
1302
1316
|
if (desc == "") desc = "-"
|
|
1303
1317
|
print mgr "\t" $1 "\t" desc
|
|
1304
1318
|
}
|
|
1305
|
-
' "${
|
|
1319
|
+
' "${local_marked_file}" >"${part_file}"
|
|
1306
1320
|
fi
|
|
1307
|
-
rm -f "${
|
|
1308
|
-
|
|
1309
|
-
|
|
1321
|
+
rm -f "${local_source_file}" "${local_marked_file}"
|
|
1322
|
+
) &
|
|
1323
|
+
gather_pids+=("$!")
|
|
1324
|
+
done
|
|
1325
|
+
|
|
1326
|
+
for gather_pid in "${gather_pids[@]-}"; do
|
|
1327
|
+
wait "${gather_pid}" || true
|
|
1328
|
+
done
|
|
1310
1329
|
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
mark_installed_packages "${manager}" "${source_file}" "${marked_file}"
|
|
1315
|
-
awk -F'\t' -v mgr="${manager}" '
|
|
1316
|
-
NF >= 1 {
|
|
1317
|
-
desc = $2
|
|
1318
|
-
if (desc == "") desc = "-"
|
|
1319
|
-
print mgr "\t" $1 "\t" desc
|
|
1320
|
-
}
|
|
1321
|
-
' "${marked_file}" >>"${display_file}"
|
|
1330
|
+
for part_file in "${part_files[@]-}"; do
|
|
1331
|
+
if [[ -s "${part_file}" ]]; then
|
|
1332
|
+
cat "${part_file}" >>"${display_file}"
|
|
1322
1333
|
fi
|
|
1323
|
-
rm -f "${
|
|
1334
|
+
rm -f "${part_file}"
|
|
1324
1335
|
done
|
|
1325
1336
|
|
|
1326
1337
|
if [[ -s "${display_file}" ]]; then
|