mirror of
https://github.com/junegunn/fzf.git
synced 2025-11-16 15:23:48 -05:00
Updated Examples (markdown)
113
Examples.md
113
Examples.md
@@ -1283,44 +1283,101 @@ uninstall() {
|
||||
```
|
||||
### DNF
|
||||
|
||||
Interactively Install, Remove and Search DNF packages via fzf
|
||||
Interactively Install, Remove, Upgrade and Fuzzy search DNF packages using fzf
|
||||
|
||||
```sh
|
||||
|
||||
#!/bin/bash
|
||||
#!/usr/bin/bash
|
||||
readonly basename="$(basename "$0")"
|
||||
|
||||
## [0m...4m] == [Normal, Bold, Dim, Italic, Underlined]
|
||||
if ! hash fzf &> /dev/null; then
|
||||
printf 'Error: Missing dep: fzf is required to use %s.\n' "${basename}" >&2
|
||||
exit 64
|
||||
fi
|
||||
|
||||
#Colors
|
||||
declare -r esc=$'\033'
|
||||
declare -r reset="${esc}[0m"
|
||||
declare -r red="${esc}[1m${esc}[31m"
|
||||
# for query and preview color consistency change the 34->36 from blue to "glaucous" (color name)
|
||||
declare -r blue="${esc}[1m${esc}[34m"
|
||||
declare -r BLUE="${esc}[1m${esc}[34m"
|
||||
declare -r RED="${esc}[31m"
|
||||
declare -r GREEN="${esc}[32m"
|
||||
declare -r YELLOW="${esc}[33m"
|
||||
declare -r CYAN="${esc}[36m"
|
||||
# Base commands
|
||||
readonly QRY="dnf --cacheonly --quiet repoquery "
|
||||
readonly PRVW="dnf --cacheonly --quiet --color=always info"
|
||||
readonly QRY_PRFX=' '
|
||||
readonly QRY_SFFX=' > '
|
||||
# Install mode
|
||||
readonly INS_QRYS="${QRY} --qf '${CYAN}%{name}'"
|
||||
readonly INS_PRVW="${PRVW}"
|
||||
readonly INS_PRMPT="${CYAN}${QRY_PRFX}Install packages${QRY_SFFX}"
|
||||
# Remove mode
|
||||
readonly RMV_QRYS="${QRY} --installed --qf '${RED}%{name}'"
|
||||
readonly RMV_PRVW="${PRVW} --installed"
|
||||
readonly RMV_PRMPT="${RED}${QRY_PRFX}Remove packages${QRY_SFFX}"
|
||||
# Remove-userinstalled mode
|
||||
readonly RUI_QRYS="${QRY} --userinstalled --qf '${YELLOW}%{name}'"
|
||||
readonly RUI_PRVW="${PRVW} --installed"
|
||||
readonly RUI_PRMPT="${YELLOW}${QRY_PRFX}Remove User-Installed${QRY_SFFX}"
|
||||
# Updates mode
|
||||
readonly UPD_QRY="${QRY} --upgrades --qf '${GREEN}%{name}'"
|
||||
readonly UPD_QRYS="if [[ $(${UPD_QRY} | wc -c) -ne 0 ]]; then ${UPD_QRY}; else echo ${GREEN}No updates available.; echo Try refreshing metadata cache...; fi"
|
||||
readonly UPD_PRVW="${PRVW}"
|
||||
readonly UPD_PRMPT="${GREEN}${QRY_PRFX}Upgrade packages${QRY_SFFX}"
|
||||
|
||||
DNF_INS_QRY="dnf -Cq repoquery --qf '${blue}%{name}'"
|
||||
DNF_RMV_QRY="dnf -Cq repoquery --qf '${red}%{name}'"
|
||||
DNF_RMV_PRVW="dnf --color=always -Cq --installed info {+}"
|
||||
DNF_INS_PRVW="dnf --color=always -Cq info"
|
||||
mapfile -d '' fhelp <<-EOF
|
||||
|
||||
# Delete tmp file used to determine install/remove mode
|
||||
rm -f /tmp/.dnfzf_rm &> /dev/null
|
||||
"${basename}"
|
||||
Interactive package manager for Fedora
|
||||
|
||||
FZF_DEFAULT_COMMAND="$DNF_INS_QRY" \
|
||||
fzf --ansi \
|
||||
--query=$* \
|
||||
--multi \
|
||||
--preview-window="right,65%,wrap" \
|
||||
--preview="$DNF_INS_PRVW {1}" \
|
||||
--prompt=" Install packages > " \
|
||||
--header="<Alt-r> Remove | <Alt-i> Install" \
|
||||
--bind="enter:execute(if [ -f /tmp/.dnfzf_rm ]; then sudo dnf remove {+}; else sudo dnf install {+}; fi; read -n 1 -s -r -p 'Press any key to continue...' && echo)" \
|
||||
--bind="alt-r:unbind(alt-r)+reload($DNF_RMV_QRY --installed)+change-prompt( Remove packages > )+execute-silent(touch /tmp/.dnfzf_rm)+rebind(alt-i)+change-preview:($DNF_RMV_PRVW {+})" \
|
||||
--bind="alt-i:unbind(alt-i)+reload($DNF_INS_QRY)+change-prompt( Install packages > )+execute-silent(rm -f /tmp/.dnfzf_rm)+rebind(alt-r)+change-preview:($DNF_INS_PRVW {+})"
|
||||
Alt-i Install mode (default)
|
||||
Alt-r Remove mode
|
||||
Alt-e Remove User-Installed mode
|
||||
Alt-u Updates mode
|
||||
Alt-m Update package metadata cache
|
||||
|
||||
Enter Confirm selection
|
||||
Tab Mark package ()
|
||||
Shift-Tab Unmark package
|
||||
Ctrl-a Select all
|
||||
|
||||
? Help (this page)
|
||||
ESC Quit
|
||||
EOF
|
||||
|
||||
declare tmp_file
|
||||
if tmp_file="$(mktemp --tmpdir "${basename}".XXXXXX)"; then
|
||||
printf 'in' > "${tmp_file}" &&
|
||||
SHELL='/bin/bash' \
|
||||
FZF_DEFAULT_COMMAND="${INS_QRYS}" \
|
||||
fzf \
|
||||
--ansi \
|
||||
--multi \
|
||||
--query=$* \
|
||||
--header=" ${basename} | Press Alt+? for help or ESC to quit" \
|
||||
--header-first \
|
||||
--prompt="${INS_PRMPT}" \
|
||||
--marker=' ' \
|
||||
--preview-window='right,67%,wrap' \
|
||||
--preview="${INS_PRVW} {1}" \
|
||||
--bind="enter:execute(if grep -q 'in' \"${tmp_file}\"; then sudo dnf install {+};
|
||||
elif grep -q 'rm' \"${tmp_file}\"; then sudo dnf remove {+}; \
|
||||
elif grep -q 'up' \"${tmp_file}\"; then sudo dnf upgrade {+}; fi; \
|
||||
read -s -r -n1 -p $'\n${BLUE}Press any key to continue...' && printf '\n')" \
|
||||
--bind="alt-i:unbind(alt-i)+reload(${INS_QRYS})+change-preview(${INS_PRVW} {1})+change-prompt(${INS_PRMPT})+execute-silent(printf 'in' > \"${tmp_file}\")+first+rebind(alt-r,alt-e,alt-u)" \
|
||||
--bind="alt-r:unbind(alt-r)+reload(${RMV_QRYS})+change-preview(${RMV_PRVW} {1})+change-prompt(${RMV_PRMPT})+execute-silent(printf 'rm' > \"${tmp_file}\")+first+rebind(alt-i,alt-e,alt-u)" \
|
||||
--bind="alt-e:unbind(alt-e)+reload(${RUI_QRYS})+change-preview(${RUI_PRVW} {1})+change-prompt(${RUI_PRMPT})+execute-silent(printf 'rm' > \"${tmp_file}\")+first+rebind(alt-i,alt-r,alt-u)" \
|
||||
--bind="alt-u:unbind(alt-u)+reload(${UPD_QRYS})+change-preview(${UPD_PRVW} {1})+change-prompt(${UPD_PRMPT})+execute-silent(printf 'up' > \"${tmp_file}\")+first+rebind(alt-i,alt-r,alt-e)" \
|
||||
--bind="alt-m:execute(sudo dnf makecache;read -s -r -n1 -p $'\n${BLUE}Press any key to continue...' && printf '\n')" \
|
||||
--bind="alt-?:preview(printf \"${fhelp[0]}\")" \
|
||||
--bind="ctrl-a:select-all"
|
||||
|
||||
rm -f "${tmp_file}" &> /dev/null
|
||||
else
|
||||
printf 'Error: Failed to create tmp file. $TMPDIR (or /tmp if $TMPDIR is unset) may not be writable.\n' >&2
|
||||
exit 65
|
||||
fi
|
||||
```
|
||||
#### Usage:
|
||||
<kbd>Alt+i</kbd> to switch on Install mode
|
||||
|
||||
<kbd>Alt+u</kbd> to switch on Remove mode
|
||||
|
||||
|
||||
### v
|
||||
|
||||
Reference in New Issue
Block a user