fpf-cli 1.6.2 → 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 -62
- 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,45 +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 "bun"
|
|
372
|
-
if [[ -n "${emitted}" ]]; then
|
|
373
|
-
return
|
|
374
|
-
fi
|
|
375
|
-
fi
|
|
376
|
-
|
|
377
|
-
if [[ "${os}" == MINGW* || "${os}" == MSYS* || "${os}" == CYGWIN* || "${os}" == "Windows_NT" ]]; then
|
|
378
|
-
add_detected_manager "winget"
|
|
379
|
-
add_detected_manager "choco"
|
|
380
|
-
add_detected_manager "scoop"
|
|
381
|
-
add_detected_manager "npm"
|
|
382
|
-
add_detected_manager "bun"
|
|
383
|
-
if [[ -n "${emitted}" ]]; then
|
|
384
|
-
return
|
|
385
|
-
fi
|
|
386
|
-
fi
|
|
387
|
-
|
|
388
|
-
if [[ "${os}" == "Linux" ]]; then
|
|
389
|
-
primary_manager="$(detect_default_manager)"
|
|
390
|
-
add_detected_manager "${primary_manager}"
|
|
391
|
-
|
|
392
|
-
add_detected_manager "snap"
|
|
393
|
-
add_detected_manager "flatpak"
|
|
394
|
-
add_detected_manager "brew"
|
|
395
|
-
add_detected_manager "npm"
|
|
396
|
-
add_detected_manager "bun"
|
|
397
|
-
|
|
398
|
-
if [[ -n "${emitted}" ]]; then
|
|
399
|
-
return
|
|
400
|
-
fi
|
|
401
|
-
fi
|
|
402
|
-
|
|
403
367
|
primary_manager="$(detect_default_manager)"
|
|
404
368
|
add_detected_manager "${primary_manager}"
|
|
405
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
|
+
|
|
406
374
|
if [[ -n "${emitted}" ]]; then
|
|
407
375
|
return
|
|
408
376
|
fi
|
|
@@ -615,6 +583,21 @@ manager_search_entries() {
|
|
|
615
583
|
local manager="$1"
|
|
616
584
|
local query="$2"
|
|
617
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
|
|
618
601
|
|
|
619
602
|
if [[ -z "${effective_query}" ]]; then
|
|
620
603
|
case "${manager}" in
|
|
@@ -625,7 +608,7 @@ manager_search_entries() {
|
|
|
625
608
|
effective_query="aa"
|
|
626
609
|
;;
|
|
627
610
|
winget)
|
|
628
|
-
effective_query="
|
|
611
|
+
effective_query="aa"
|
|
629
612
|
;;
|
|
630
613
|
esac
|
|
631
614
|
fi
|
|
@@ -761,7 +744,7 @@ manager_search_entries() {
|
|
|
761
744
|
fi
|
|
762
745
|
;;
|
|
763
746
|
npm)
|
|
764
|
-
npm search "${effective_query}" --searchlimit=
|
|
747
|
+
npm search "${effective_query}" --searchlimit="${npm_search_limit}" --parseable 2>/dev/null |
|
|
765
748
|
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
766
749
|
;;
|
|
767
750
|
bun)
|
|
@@ -770,12 +753,18 @@ manager_search_entries() {
|
|
|
770
753
|
bun search "${effective_query}" 2>/dev/null |
|
|
771
754
|
awk 'NR > 1 && NF > 0 { name=$1; $1=""; sub(/^[[:space:]]+/, "", $0); if ($0 == "") $0="-"; print name "\t" $0 }'
|
|
772
755
|
elif command_exists npm; then
|
|
773
|
-
npm search "${effective_query}" --searchlimit=
|
|
756
|
+
npm search "${effective_query}" --searchlimit="${npm_search_limit}" --parseable 2>/dev/null |
|
|
774
757
|
awk -F'\t' 'NF >= 2 { print $1 "\t" $2 }'
|
|
775
758
|
fi
|
|
776
759
|
} || true
|
|
777
760
|
;;
|
|
778
|
-
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
|
|
779
768
|
}
|
|
780
769
|
|
|
781
770
|
manager_installed_entries() {
|
|
@@ -1287,39 +1276,62 @@ main() {
|
|
|
1287
1276
|
display_file="$(mktemp "${TMP_ROOT}/display.XXXXXX")"
|
|
1288
1277
|
: >"${display_file}"
|
|
1289
1278
|
|
|
1290
|
-
local
|
|
1291
|
-
local
|
|
1279
|
+
local part_files=()
|
|
1280
|
+
local gather_pids=()
|
|
1281
|
+
local part_file
|
|
1282
|
+
local gather_pid
|
|
1283
|
+
|
|
1292
1284
|
for manager in "${managers[@]-}"; do
|
|
1293
|
-
|
|
1285
|
+
part_file="$(mktemp "${TMP_ROOT}/part.XXXXXX")"
|
|
1286
|
+
part_files+=("${part_file}")
|
|
1294
1287
|
|
|
1295
1288
|
if [[ "${ACTION}" == "list" || "${ACTION}" == "remove" ]]; then
|
|
1296
|
-
|
|
1297
|
-
|
|
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}"
|
|
1298
1313
|
awk -F'\t' -v mgr="${manager}" '
|
|
1299
1314
|
NF >= 1 {
|
|
1300
1315
|
desc = $2
|
|
1301
1316
|
if (desc == "") desc = "-"
|
|
1302
1317
|
print mgr "\t" $1 "\t" desc
|
|
1303
1318
|
}
|
|
1304
|
-
' "${
|
|
1319
|
+
' "${local_marked_file}" >"${part_file}"
|
|
1305
1320
|
fi
|
|
1306
|
-
rm -f "${
|
|
1307
|
-
|
|
1308
|
-
|
|
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
|
|
1309
1329
|
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
mark_installed_packages "${manager}" "${source_file}" "${marked_file}"
|
|
1314
|
-
awk -F'\t' -v mgr="${manager}" '
|
|
1315
|
-
NF >= 1 {
|
|
1316
|
-
desc = $2
|
|
1317
|
-
if (desc == "") desc = "-"
|
|
1318
|
-
print mgr "\t" $1 "\t" desc
|
|
1319
|
-
}
|
|
1320
|
-
' "${marked_file}" >>"${display_file}"
|
|
1330
|
+
for part_file in "${part_files[@]-}"; do
|
|
1331
|
+
if [[ -s "${part_file}" ]]; then
|
|
1332
|
+
cat "${part_file}" >>"${display_file}"
|
|
1321
1333
|
fi
|
|
1322
|
-
rm -f "${
|
|
1334
|
+
rm -f "${part_file}"
|
|
1323
1335
|
done
|
|
1324
1336
|
|
|
1325
1337
|
if [[ -s "${display_file}" ]]; then
|