From 2e919d6702fb8a64762c0edbae7102862e66ef1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=84min=20Baumeler?= Date: Wed, 8 Oct 2025 14:57:16 +0200 Subject: [PATCH] preview wrap, preview size and improved theme --- src/main.sh | 11 +++++++++-- src/sh/keys.sh | 18 ++++++++++++++---- src/sh/preview.sh | 24 ++++++++++++++++++++++-- src/sh/theme.sh | 8 +++++--- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/main.sh b/src/main.sh index 262487b..05213de 100755 --- a/src/main.sh +++ b/src/main.sh @@ -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 diff --git a/src/sh/keys.sh b/src/sh/keys.sh index 84fc568..2e27a74 100644 --- a/src/sh/keys.sh +++ b/src/sh/keys.sh @@ -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" \ diff --git a/src/sh/preview.sh b/src/sh/preview.sh index 4ac59e1..7014f17 100644 --- a/src/sh/preview.sh +++ b/src/sh/preview.sh @@ -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 diff --git a/src/sh/theme.sh b/src/sh/theme.sh index f6d45d5..1c9005f 100644 --- a/src/sh/theme.sh +++ b/src/sh/theme.sh @@ -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. # # <> | string | Artist name @@ -313,7 +315,7 @@ if [ ! "${THEME_LOADED:-}" ]; then # < | higher-order placeholder | Placeholder for start string # <> | higher-order placeholder | Placeholder for end string # <> | higher-order placeholder | Placeholder for links - PREVIEW_ARTIST_PERSON_FMT="${PREVIEW_ARTIST_PERSON_FMT:-"<><><><>\n<>"}" + PREVIEW_ARTIST_PERSON_FMT="${PREVIEW_ARTIST_PERSON_FMT:-"\n\n<><><><>\n<>"}" 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:-"<>:\n<>\n<>\n"}" + PREVIEW_ARTIST_PERSON_URL_FMT="${PREVIEW_ARTIST_PERSON_URL_FMT:-"${PREVIEW_NO_WRAP}<>: <> <>\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"}"