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.
Files changed (3) hide show
  1. package/README.md +2 -6
  2. package/fpf +74 -62
  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 both `brew` 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,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="a"
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=200 --parseable 2>/dev/null |
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=200 --parseable 2>/dev/null |
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 || 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
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 source_file
1291
- local marked_file
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
- source_file="$(mktemp "${TMP_ROOT}/source.XXXXXX")"
1285
+ part_file="$(mktemp "${TMP_ROOT}/part.XXXXXX")"
1286
+ part_files+=("${part_file}")
1294
1287
 
1295
1288
  if [[ "${ACTION}" == "list" || "${ACTION}" == "remove" ]]; then
1296
- manager_installed_entries "${manager}" >"${source_file}" || true
1297
- 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}"
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
- ' "${source_file}" >>"${display_file}"
1319
+ ' "${local_marked_file}" >"${part_file}"
1305
1320
  fi
1306
- rm -f "${source_file}"
1307
- continue
1308
- 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
1309
1329
 
1310
- marked_file="$(mktemp "${TMP_ROOT}/marked.XXXXXX")"
1311
- manager_search_entries "${manager}" "${query}" >"${source_file}" || true
1312
- if [[ -s "${source_file}" ]]; then
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 "${source_file}" "${marked_file}"
1334
+ rm -f "${part_file}"
1323
1335
  done
1324
1336
 
1325
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.2",
3
+ "version": "1.6.4",
4
4
  "description": "Cross-platform fuzzy package finder powered by fzf",
5
5
  "bin": {
6
6
  "fpf": "fpf"