preview wrap, preview size and improved theme

This commit is contained in:
2025-10-08 14:57:16 +02:00
parent c7ee2e997f
commit 2e919d6702
4 changed files with 50 additions and 11 deletions

View File

@@ -546,6 +546,7 @@ FZF_CURRENT_MBID="\$FZF_BORDER_LABEL"
FZF_RELOAD_PLAYLIST="reload-sync($0 --lines $VIEW_PLAYLIST)"
FZF_POS_PLAYLIST="transform:$0 --action-playlistcursor"
PUT_FZF_KEY_LOGIC="case \$FZF_KEY in space) echo \"put( )\";; left) echo backward-char;; right) echo forward-char;; backspace|bspace|bs) echo backward-delete-char;; delete|del) echo delete-char;; *) echo \"put(\$FZF_KEY)\";; esac"
FZF_DEFAULT_PREVIEW_WINDOW="right,$PREVIEW_WINDOW_PERCENTAGE%,border-line,nowrap,<50(hidden)"
while true; do
case "$VIEW" in
"$VIEW_SELECT_ARTIST")
@@ -566,13 +567,16 @@ while true; do
--bind="$KEYS_KEYBINDINGS:preview:$0 --show-keybindings $VIEW_SELECT_ARTIST" \
--bind="$KEYS_SCROLL_PREVIEW_DOWN:preview-down" \
--bind="$KEYS_SCROLL_PREVIEW_UP:preview-up" \
--bind="$KEYS_PREVIEW_TOGGLE_WRAP:toggle-preview-wrap" \
--bind="$KEYS_PREVIEW_TOGGLE_SIZE:change-preview-window(right,90%,border-line,nowrap|$FZF_DEFAULT_PREVIEW_WINDOW)" \
--bind="$KEYS_PREVIEW_OPEN:show-preview" \
--bind="$KEYS_PREVIEW_CLOSE:hide-preview" \
--bind="$KEYS_FILTER_LOCAL:change-query($QUERY_LOCAL )" \
-0 -1 \
--border="bold" \
--border-label="Select artist" \
--preview-window="right,25%,border-left,wrap,<30(hidden)" \
--preview-window="$FZF_DEFAULT_PREVIEW_WINDOW" \
--wrap-sign="" \
--preview="$0 --preview $VIEW_SELECT_ARTIST {4}" \
--delimiter="\t" \
--prompt="$SEARCH_PROMPT" \
@@ -718,12 +722,15 @@ open \"\$(dirname {5})\"" \
--bind="$KEYS_N_QUIT:transform:$IN_NORMAL_MODE && ($IN_LIST_ARTISTS_VIEW && echo \"print($VIEW_QUIT)+accept\" || $0 --action-draw $MODE_NORMAL $VIEW_LIST_ARTISTS \"0\") || $PUT_FZF_KEY_LOGIC" \
--bind="$KEYS_SCROLL_PREVIEW_DOWN:preview-down" \
--bind="$KEYS_SCROLL_PREVIEW_UP:preview-up" \
--bind="$KEYS_PREVIEW_TOGGLE_WRAP:toggle-preview-wrap" \
--bind="$KEYS_PREVIEW_TOGGLE_SIZE:change-preview-window(right,90%,border-line,nowrap|$FZF_DEFAULT_PREVIEW_WINDOW)" \
--bind="$KEYS_PREVIEW_OPEN:show-preview" \
--bind="$KEYS_PREVIEW_CLOSE:hide-preview" \
--bind="$KEYS_PLAYBACK:transform:$0 --playback $FZF_CURRENT_VIEW $FZF_CURRENT_MBID {4} {5}" \
--bind="$KEYS_N_PLAYBACK:transform:$IN_NORMAL_MODE && $0 --playback $FZF_CURRENT_VIEW $FZF_CURRENT_MBID {4} {5} || $PUT_FZF_KEY_LOGIC" \
--bind="change:execute-silent($0 --mbsearch $FZF_CURRENT_VIEW &)+reload:$0 --lines $FZF_CURRENT_VIEW" \
--preview-window="right,25%,border-left,wrap,<30(hidden)" \
--preview-window="$FZF_DEFAULT_PREVIEW_WINDOW" \
--wrap-sign="" \
--preview="$0 --preview $FZF_CURRENT_VIEW {4}" \
--delimiter="\t" \
--with-nth="{1}" || true

View File

@@ -59,6 +59,8 @@
# - KEYS_SCROLL_PREVIEW_UP: Scroll preview up
# - KEYS_PREVIEW_OPEN: Open preview window
# - KEYS_PREVIEW_CLOSE: Close preview window
# - KEYS_PREVIEW_TOGGLE_WRAP: Toggle line wrapping in preview window
# - KEYS_PREVIEW_TOGGLE_SIZE: Toggle size (small, large) of preview window
# - KEYS_REFRESH: Refresh current entry
#
# Playback:
@@ -101,7 +103,7 @@ if [ ! "${KEYS_LOADED:-}" ]; then
KEYS_N_DOWN="${KEYS_N_DOWN:-"j"}"
KEYS_N_UP="${KEYS_N_UP:-"k"}"
KEYS_N_BOT="${KEYS_N_BOT:-"G"}"
KEYS_N_TOP="${KEYS_N_TOP:-"1"}"
KEYS_N_TOP="${KEYS_N_TOP:-"g"}"
export KEYS_DOWN KEYS_UP KEYS_HALFPAGE_DOWN KEYS_HALFPAGE_UP KEYS_N_DOWN \
KEYS_N_UP KEYS_N_BOT KEYS_N_TOP
@@ -151,10 +153,14 @@ if [ ! "${KEYS_LOADED:-}" ]; then
KEYS_SCROLL_PREVIEW_UP="${KEYS_SCROLL_PREVIEW_UP:-"page-up"}"
KEYS_PREVIEW_OPEN="${KEYS_PREVIEW_OPEN:-"alt-up"}"
KEYS_PREVIEW_CLOSE="${KEYS_PREVIEW_CLOSE:-"alt-down"}"
KEYS_PREVIEW_TOGGLE_WRAP="${KEYS_PREVIEW_TOGGLE_WRAP:-"alt-w"}"
KEYS_PREVIEW_TOGGLE_SIZE="${KEYS_PREVIEW_TOGGLE_SIZE:-"alt-/"}"
KEYS_REFRESH="${KEYS_REFRESH:-"ctrl-r"}"
export KEYS_BROWSE KEYS_OPEN KEYS_N_YANK KEYS_YANK_CURRENT KEYS_SHOW_PLAYLIST \
KEYS_KEYBINDINGS KEYS_QUIT KEYS_N_QUIT KEYS_SCROLL_PREVIEW_DOWN \
KEYS_SCROLL_PREVIEW_UP KEYS_PREVIEW_CLOSE KEYS_PREVIEW_OPEN KEYS_REFRESH
export KEYS_BROWSE KEYS_OPEN KEYS_N_YANK KEYS_YANK_CURRENT \
KEYS_SHOW_PLAYLIST KEYS_KEYBINDINGS KEYS_QUIT KEYS_N_QUIT \
KEYS_SCROLL_PREVIEW_DOWN KEYS_SCROLL_PREVIEW_UP KEYS_PREVIEW_CLOSE \
KEYS_PREVIEW_OPEN KEYS_PREVIEW_TOGGLE_WRAP KEYS_PREVIEW_TOGGLE_SIZE \
KEYS_REFRESH
# Playback:
KEYS_PLAY="${KEYS_PLAY:-"enter"}"
@@ -239,6 +245,8 @@ print_keybindings() {
"$KEYS_SCROLL_PREVIEW_DOWN" "Scroll preview down" \
"$KEYS_SCROLL_PREVIEW_UP" "Scroll preview up" \
"$KEYS_KEYBINDINGS" "Show these keybindings" \
"$KEYS_PREVIEW_TOGGLE_WRAP" "Toggle preview wrapping" \
"$KEYS_PREVIEW_TOGGLE_SIZE" "Toggle preview size" \
"$KEYS_PREVIEW_OPEN" "Open preview window" \
"$KEYS_PREVIEW_CLOSE" "Close preview window"
__keybindinggroup_from_args "Navigation" \
@@ -313,6 +321,8 @@ print_keybindings() {
"$KEYS_SCROLL_PREVIEW_DOWN" "Scroll preview down" \
"$KEYS_SCROLL_PREVIEW_UP" "Scroll preview up" \
"$KEYS_KEYBINDINGS" "Show these keybindings" \
"$KEYS_PREVIEW_TOGGLE_WRAP" "Toggle preview wrapping" \
"$KEYS_PREVIEW_TOGGLE_SIZE" "Toggle preview size" \
"$KEYS_PREVIEW_OPEN" "Open preview window" \
"$KEYS_PREVIEW_CLOSE" "Close preview window"
__keybindinggroup_from_args "Navigation" \

View File

@@ -2,12 +2,32 @@
#
# For now, only artist previews are supported.
if [ ! "${PREVIEW_LOADED:-}" ]; then
PREVIEW_NO_WRAP="__DO_NOT_WRAP_THIS_LINE__"
PREVIEW_WINDOW_PERCENTAGE="30"
export PREVIEW_NO_WRAP PREVIEW_WINDOW_PERCENTAGE
export PREVIEW_LOADED=1
fi
# This internal method reshapes the text to be shown in the preview. This
# creates a border on both horizontal ends.
#
# The text is read from stdin.
# The text is read from stdin. If a line contains the pattern defined in
# PREVIEW_NO_WRAP, then that line will not be folded.
__shape() {
cat | tr -d '\r' | fold -s -w "$((FZF_PREVIEW_COLUMNS - 4))" | awk '{print " "$0" "}'
#width="$((FZF_PREVIEW_COLUMNS - 4))"
width="$((FZF_COLUMNS * PREVIEW_WINDOW_PERCENTAGE / 100 - 4))"
while IFS= read -r line; do
line="$(printf "%s" "$line" | tr -d '\r')"
if printf "%s" "$line" | grep --silent "$PREVIEW_NO_WRAP"; then
printf " %s\n" "$line" | sed "s/$PREVIEW_NO_WRAP//g"
else
printf "%s\n" "$line" |
fold -s -w "$width" |
awk '{print " "$0" "}'
fi
done
}
# Print preview of artist

View File

@@ -19,7 +19,6 @@ if [ ! "${THEME_LOADED:-}" ]; then
CNOTE="${ESC}[38;5;242m"
CXXX="${ESC}[38;5;109m"
CDESC="${ESC}[38;5;254m"
CLIFE="${ESC}[38;5;251m"
CKB="${ESC}[38;5;224m"
OFF="${ESC}[m"
@@ -303,6 +302,9 @@ if [ ! "${THEME_LOADED:-}" ]; then
# Artist Preview
# ==============
# Lines that contain the pattern defined in PREVIEW_NO_WRAP (see
# `src/sh/preview.sh`) will not be wrapped.
#
# We distinguish between single-person and group artists.
#
# <<name>> | string | Artist name
@@ -313,7 +315,7 @@ if [ ! "${THEME_LOADED:-}" ]; then
# <<start> | higher-order placeholder | Placeholder for start string
# <<end>> | higher-order placeholder | Placeholder for end string
# <<url>> | higher-order placeholder | Placeholder for links
PREVIEW_ARTIST_PERSON_FMT="${PREVIEW_ARTIST_PERSON_FMT:-"<<bio>><<alias>><<start>><<end>>\n<<url>>"}"
PREVIEW_ARTIST_PERSON_FMT="${PREVIEW_ARTIST_PERSON_FMT:-"\n\n<<bio>><<alias>><<start>><<end>>\n<<url>>"}"
PREVIEW_ARTIST_PERSON_NAME="${PREVIEW_ARTIST_PERSON_NAME:-"%s"}"
PREVIEW_ARTIST_PERSON_SORTNAME="${PREVIEW_ARTIST_PERSON_SORTNAME:-"%s"}"
PREVIEW_ARTIST_PERSON_BIO="${PREVIEW_ARTIST_PERSON_BIO:-"${CDESC}%s$OFF\n\n"}"
@@ -330,7 +332,7 @@ if [ ! "${THEME_LOADED:-}" ]; then
PREVIEW_ARTIST_PERSON_END_ENDPLACE="${PREVIEW_ARTIST_PERSON_END_ENDPLACE:-"in %s"}"
PREVIEW_ARTIST_PERSON_URL="${PREVIEW_ARTIST_PERSON_URL:-"\n${UNDERLINE}Links:$OFF%s\n"}"
PREVIEW_ARTIST_PERSON_URL_JOIN="${PREVIEW_ARTIST_PERSON_URL_JOIN:-"%s\n%s"}"
PREVIEW_ARTIST_PERSON_URL_FMT="${PREVIEW_ARTIST_PERSON_URL_FMT:-"<<urlindex>>:\n<<urlname>>\n<<urllink>>\n"}"
PREVIEW_ARTIST_PERSON_URL_FMT="${PREVIEW_ARTIST_PERSON_URL_FMT:-"${PREVIEW_NO_WRAP}<<urlindex>>: <<urlname>> <<urllink>>\n"}"
PREVIEW_ARTIST_PERSON_URL_URLINDEX="${PREVIEW_ARTIST_PERSON_URL_URLINDEX:-"${CDISAMB}%3d$OFF"}"
PREVIEW_ARTIST_PERSON_URL_URLNAME="${PREVIEW_ARTIST_PERSON_URL_URLNAME:-"${CDESC}%s$OFF"}"
PREVIEW_ARTIST_PERSON_URL_URLLINK="${PREVIEW_ARTIST_PERSON_URL_URLLINK:-"${FAINT}%s$OFF"}"