fpf-cli 1.4.0 → 1.6.0
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 +1 -0
- package/fpf +121 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -83,4 +83,5 @@ On Windows (Git Bash / MSYS / Cygwin), default auto mode uses installed Windows
|
|
|
83
83
|
## Notes
|
|
84
84
|
|
|
85
85
|
- Requires: `bash` + `fzf`
|
|
86
|
+
- If `fzf` is missing, `fpf` auto-installs it using a compatible detected manager.
|
|
86
87
|
- Root managers (`apt`, `dnf`, `pacman`, `zypper`, `emerge`, `snap`) use `sudo` when needed.
|
package/fpf
CHANGED
|
@@ -106,6 +106,126 @@ manager_command_ready() {
|
|
|
106
106
|
esac
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
manager_can_install_fzf() {
|
|
110
|
+
local manager="$1"
|
|
111
|
+
case "${manager}" in
|
|
112
|
+
apt|dnf|pacman|zypper|emerge|brew|winget|choco|scoop|snap)
|
|
113
|
+
return 0
|
|
114
|
+
;;
|
|
115
|
+
*)
|
|
116
|
+
return 1
|
|
117
|
+
;;
|
|
118
|
+
esac
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
install_fzf_with_manager() {
|
|
122
|
+
local manager="$1"
|
|
123
|
+
|
|
124
|
+
case "${manager}" in
|
|
125
|
+
apt)
|
|
126
|
+
run_as_root apt-get install -y fzf
|
|
127
|
+
;;
|
|
128
|
+
dnf)
|
|
129
|
+
run_as_root dnf install -y fzf
|
|
130
|
+
;;
|
|
131
|
+
pacman)
|
|
132
|
+
run_as_root pacman -S --needed fzf
|
|
133
|
+
;;
|
|
134
|
+
zypper)
|
|
135
|
+
run_as_root zypper --non-interactive install --auto-agree-with-licenses fzf
|
|
136
|
+
;;
|
|
137
|
+
emerge)
|
|
138
|
+
run_as_root emerge --ask=n app-shells/fzf
|
|
139
|
+
;;
|
|
140
|
+
brew)
|
|
141
|
+
brew install fzf
|
|
142
|
+
;;
|
|
143
|
+
winget)
|
|
144
|
+
winget install --id junegunn.fzf --exact --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity ||
|
|
145
|
+
winget install --id fzf --exact --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity
|
|
146
|
+
;;
|
|
147
|
+
choco)
|
|
148
|
+
choco install fzf -y
|
|
149
|
+
;;
|
|
150
|
+
scoop)
|
|
151
|
+
scoop install fzf
|
|
152
|
+
;;
|
|
153
|
+
snap)
|
|
154
|
+
run_as_root snap install fzf
|
|
155
|
+
;;
|
|
156
|
+
*)
|
|
157
|
+
return 1
|
|
158
|
+
;;
|
|
159
|
+
esac
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
build_fzf_bootstrap_candidates() {
|
|
163
|
+
local seen=""
|
|
164
|
+
local manager
|
|
165
|
+
|
|
166
|
+
for manager in "$@"; do
|
|
167
|
+
[[ -n "${manager}" ]] || continue
|
|
168
|
+
manager_can_install_fzf "${manager}" || continue
|
|
169
|
+
manager_command_ready "${manager}" || continue
|
|
170
|
+
case " ${seen} " in
|
|
171
|
+
*" ${manager} "*)
|
|
172
|
+
continue
|
|
173
|
+
;;
|
|
174
|
+
esac
|
|
175
|
+
printf "%s\n" "${manager}"
|
|
176
|
+
seen+=" ${manager}"
|
|
177
|
+
done
|
|
178
|
+
|
|
179
|
+
if [[ -n "${seen}" ]]; then
|
|
180
|
+
return
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
for manager in apt dnf pacman zypper emerge brew winget choco scoop snap; do
|
|
184
|
+
manager_command_ready "${manager}" || continue
|
|
185
|
+
case " ${seen} " in
|
|
186
|
+
*" ${manager} "*)
|
|
187
|
+
continue
|
|
188
|
+
;;
|
|
189
|
+
esac
|
|
190
|
+
printf "%s\n" "${manager}"
|
|
191
|
+
seen+=" ${manager}"
|
|
192
|
+
done
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
ensure_fzf() {
|
|
196
|
+
local candidates=()
|
|
197
|
+
local manager
|
|
198
|
+
|
|
199
|
+
if command_exists fzf; then
|
|
200
|
+
return
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
while IFS= read -r manager; do
|
|
204
|
+
[[ -n "${manager}" ]] || continue
|
|
205
|
+
candidates+=("${manager}")
|
|
206
|
+
done < <(build_fzf_bootstrap_candidates "$@")
|
|
207
|
+
|
|
208
|
+
if [[ "${#candidates[@]}" -eq 0 ]]; then
|
|
209
|
+
die "fzf is required and no compatible manager is available to auto-install it"
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
local candidate_labels
|
|
213
|
+
candidate_labels="$(join_manager_labels "${candidates[@]-}")"
|
|
214
|
+
|
|
215
|
+
log "fzf is missing. Auto-installing with: ${candidate_labels}"
|
|
216
|
+
|
|
217
|
+
for manager in "${candidates[@]-}"; do
|
|
218
|
+
log "Attempting fzf install with $(manager_label "${manager}")"
|
|
219
|
+
if install_fzf_with_manager "${manager}"; then
|
|
220
|
+
if command_exists fzf; then
|
|
221
|
+
return
|
|
222
|
+
fi
|
|
223
|
+
fi
|
|
224
|
+
done
|
|
225
|
+
|
|
226
|
+
die "Failed to auto-install fzf. Install fzf manually and rerun."
|
|
227
|
+
}
|
|
228
|
+
|
|
109
229
|
normalize_manager() {
|
|
110
230
|
printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
|
|
111
231
|
}
|
|
@@ -1158,7 +1278,7 @@ main() {
|
|
|
1158
1278
|
exit 0
|
|
1159
1279
|
fi
|
|
1160
1280
|
|
|
1161
|
-
|
|
1281
|
+
ensure_fzf "${managers[@]-}"
|
|
1162
1282
|
|
|
1163
1283
|
local display_file
|
|
1164
1284
|
display_file="$(mktemp "${TMP_ROOT}/display.XXXXXX")"
|