fpf-cli 1.4.0 → 1.5.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 +123 -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` can prompt to auto-install 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,128 @@ 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
|
+
if ! confirm_action "fzf is not installed. Install it now using ${candidate_labels}?"; then
|
|
216
|
+
die "fzf is required"
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
for manager in "${candidates[@]-}"; do
|
|
220
|
+
log "Attempting fzf install with $(manager_label "${manager}")"
|
|
221
|
+
if install_fzf_with_manager "${manager}"; then
|
|
222
|
+
if command_exists fzf; then
|
|
223
|
+
return
|
|
224
|
+
fi
|
|
225
|
+
fi
|
|
226
|
+
done
|
|
227
|
+
|
|
228
|
+
die "Failed to auto-install fzf. Install fzf manually and rerun."
|
|
229
|
+
}
|
|
230
|
+
|
|
109
231
|
normalize_manager() {
|
|
110
232
|
printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
|
|
111
233
|
}
|
|
@@ -1158,7 +1280,7 @@ main() {
|
|
|
1158
1280
|
exit 0
|
|
1159
1281
|
fi
|
|
1160
1282
|
|
|
1161
|
-
|
|
1283
|
+
ensure_fzf "${managers[@]-}"
|
|
1162
1284
|
|
|
1163
1285
|
local display_file
|
|
1164
1286
|
display_file="$(mktemp "${TMP_ROOT}/display.XXXXXX")"
|