fpf-cli 1.6.8 → 1.6.9

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 +4 -0
  2. package/fpf +56 -7
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -38,6 +38,8 @@ On every OS, default auto mode now includes all supported package managers that
38
38
 
39
39
  For no-query startup (`fpf`), each manager uses a lighter default query and per-manager result cap to keep startup responsive.
40
40
 
41
+ Live reload is enabled by default for single-manager mode (`--manager`), and disabled by default in all-manager mode to avoid lag/flicker while navigating.
42
+
41
43
  ## Supported Managers
42
44
 
43
45
  - Linux: `apt`, `dnf`, `pacman`, `zypper`, `emerge`
@@ -86,3 +88,5 @@ Installed packages are marked with `*` in the result list.
86
88
  - Requires: `bash` + `fzf`
87
89
  - If `fzf` is missing, `fpf` auto-installs it using a compatible detected manager.
88
90
  - Root managers (`apt`, `dnf`, `pacman`, `zypper`, `emerge`, `snap`) use `sudo` when needed.
91
+ - `FPF_DYNAMIC_RELOAD`: `single` (default), `always`, or `never`
92
+ - `FPF_DISABLE_INSTALLED_CACHE=1` disables installed-package marker cache
package/fpf CHANGED
@@ -3,7 +3,7 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_NAME="fpf"
6
- SCRIPT_VERSION="1.6.8"
6
+ SCRIPT_VERSION="1.6.9"
7
7
  TMP_ROOT="${TMPDIR:-/tmp}/fpf"
8
8
  SESSION_TMP_ROOT=""
9
9
  HELP_FILE=""
@@ -608,6 +608,23 @@ join_query() {
608
608
  printf "%s" "${query}"
609
609
  }
610
610
 
611
+ dynamic_reload_enabled() {
612
+ local manager_count="$1"
613
+ local mode="${FPF_DYNAMIC_RELOAD:-single}"
614
+
615
+ case "${mode}" in
616
+ always|on|1|true|yes)
617
+ return 0
618
+ ;;
619
+ never|off|0|false|no)
620
+ return 1
621
+ ;;
622
+ single|auto|*)
623
+ [[ "${manager_count}" -eq 1 ]]
624
+ ;;
625
+ esac
626
+ }
627
+
611
628
  query_is_single_token() {
612
629
  local query="$1"
613
630
  [[ -n "${query}" && "${query}" != *[[:space:]]* ]]
@@ -948,14 +965,45 @@ manager_installed_names() {
948
965
  manager_installed_entries "${manager}" | awk -F'\t' 'NF > 0 { print $1 }'
949
966
  }
950
967
 
968
+ manager_installed_names_cached() {
969
+ local manager="$1"
970
+ local output_file="$2"
971
+ local cache_enabled="${FPF_DISABLE_INSTALLED_CACHE:-0}"
972
+ local cache_dir="${TMP_ROOT}/cache"
973
+ local cache_file="${cache_dir}/installed.${manager}"
974
+
975
+ if [[ "${cache_enabled}" != "1" && -s "${cache_file}" ]]; then
976
+ cp "${cache_file}" "${output_file}"
977
+ return
978
+ fi
979
+
980
+ manager_installed_names "${manager}" >"${output_file}" 2>/dev/null || true
981
+
982
+ if [[ "${cache_enabled}" != "1" && -s "${output_file}" ]]; then
983
+ mkdir -p "${cache_dir}"
984
+ cp "${output_file}" "${cache_file}"
985
+ fi
986
+ }
987
+
951
988
  mark_installed_packages() {
952
989
  local manager="$1"
953
990
  local source_file="$2"
954
991
  local output_file="$3"
955
992
  local installed_file
956
993
 
994
+ if [[ "${FPF_SKIP_INSTALLED_MARKERS:-0}" == "1" ]]; then
995
+ awk -F'\t' '
996
+ {
997
+ desc = $2
998
+ if (desc == "") desc = "-"
999
+ print $1 "\t " desc
1000
+ }
1001
+ ' "${source_file}" >"${output_file}"
1002
+ return
1003
+ fi
1004
+
957
1005
  installed_file="$(mktemp "${SESSION_TMP_ROOT}/installed.XXXXXX")"
958
- manager_installed_names "${manager}" >"${installed_file}" 2>/dev/null || true
1006
+ manager_installed_names_cached "${manager}" "${installed_file}"
959
1007
 
960
1008
  awk -F'\t' '
961
1009
  FILENAME == ARGV[1] {
@@ -965,7 +1013,7 @@ mark_installed_packages() {
965
1013
  next
966
1014
  }
967
1015
  {
968
- mark = (installed[$1] ? "\033[32m*\033[0m " : " ")
1016
+ mark = (installed[$1] ? "* " : " ")
969
1017
  desc = $2
970
1018
  if (desc == "") desc = "-"
971
1019
  print $1 "\t" mark desc
@@ -1037,9 +1085,9 @@ build_dynamic_reload_command() {
1037
1085
  fi
1038
1086
 
1039
1087
  if [[ -n "${manager_override}" ]]; then
1040
- printf "%q --feed-search --manager %q -- {q} 2>/dev/null || true" "${script_path}" "${manager_override}"
1088
+ printf "FPF_SKIP_INSTALLED_MARKERS=1 %q --feed-search --manager %q -- {q} 2>/dev/null || true" "${script_path}" "${manager_override}"
1041
1089
  else
1042
- printf "%q --feed-search -- {q} 2>/dev/null || true" "${script_path}"
1090
+ printf "FPF_SKIP_INSTALLED_MARKERS=1 %q --feed-search -- {q} 2>/dev/null || true" "${script_path}"
1043
1091
  fi
1044
1092
  }
1045
1093
 
@@ -1287,7 +1335,6 @@ run_fuzzy_selector() {
1287
1335
  --marker='>>' \
1288
1336
  --header="${header_line}" \
1289
1337
  --info=inline-right \
1290
- --ansi \
1291
1338
  --margin="2%,1%,2%,1%" \
1292
1339
  --cycle \
1293
1340
  --tiebreak=begin,chunk,length \
@@ -1465,7 +1512,9 @@ main() {
1465
1512
 
1466
1513
  local reload_cmd=""
1467
1514
  if [[ "${ACTION}" == "search" && -z "${query}" ]]; then
1468
- reload_cmd="$(build_dynamic_reload_command "${MANAGER_OVERRIDE}")"
1515
+ if dynamic_reload_enabled "${#managers[@]}"; then
1516
+ reload_cmd="$(build_dynamic_reload_command "${MANAGER_OVERRIDE}")"
1517
+ fi
1469
1518
  fi
1470
1519
 
1471
1520
  local selected
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fpf-cli",
3
- "version": "1.6.8",
3
+ "version": "1.6.9",
4
4
  "description": "Cross-platform fuzzy package finder powered by fzf",
5
5
  "bin": {
6
6
  "fpf": "fpf"