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.
Files changed (3) hide show
  1. package/README.md +2 -6
  2. package/fpf +74 -63
  3. 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 macOS, default auto mode uses `brew`, `npm`, and `bun` together.
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
- On macOS with no query (`fpf`), startup uses a lighter default search for `brew` and `bun` so you still get installable packages without the huge initial catalog load.
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="a"
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=200 --parseable 2>/dev/null |
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=200 --parseable 2>/dev/null |
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 || true
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 source_file
1292
- local marked_file
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
- source_file="$(mktemp "${TMP_ROOT}/source.XXXXXX")"
1285
+ part_file="$(mktemp "${TMP_ROOT}/part.XXXXXX")"
1286
+ part_files+=("${part_file}")
1295
1287
 
1296
1288
  if [[ "${ACTION}" == "list" || "${ACTION}" == "remove" ]]; then
1297
- manager_installed_entries "${manager}" >"${source_file}" || true
1298
- if [[ -s "${source_file}" ]]; then
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
- ' "${source_file}" >>"${display_file}"
1319
+ ' "${local_marked_file}" >"${part_file}"
1306
1320
  fi
1307
- rm -f "${source_file}"
1308
- continue
1309
- fi
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
- marked_file="$(mktemp "${TMP_ROOT}/marked.XXXXXX")"
1312
- manager_search_entries "${manager}" "${query}" >"${source_file}" || true
1313
- if [[ -s "${source_file}" ]]; then
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 "${source_file}" "${marked_file}"
1334
+ rm -f "${part_file}"
1324
1335
  done
1325
1336
 
1326
1337
  if [[ -s "${display_file}" ]]; then
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fpf-cli",
3
- "version": "1.6.3",
3
+ "version": "1.6.4",
4
4
  "description": "Cross-platform fuzzy package finder powered by fzf",
5
5
  "bin": {
6
6
  "fpf": "fpf"