diff --git a/segments/now_playing.sh b/segments/now_playing.sh index fc63a104..2894232f 100755 --- a/segments/now_playing.sh +++ b/segments/now_playing.sh @@ -9,6 +9,8 @@ TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD_DEFAULT="trim" TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT="2" TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE:-repeat}" TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR:-  }" +TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH_DEFAULT="\${HOME}/.now_playing.log" +TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES_DEFAULT="100" TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT="localhost" TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT_DEFAULT="6600" TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD_DEFAULT="30" @@ -35,6 +37,10 @@ export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="${TMUX_POWERLINE_SEG_NOW_PLAYI # export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE}" # Separator for "repeat" roll mode # export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR="${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR}" +# If set to a non-empty string, played tracks will be logged to the following file. +# export TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH_DEFAULT}" +# Maximum number of logged song entries. Set to "unlimited" for unlimited entries. +# export TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES="${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES_DEFAULT}" # Hostname for MPD server in the format "[password@]host" export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="${TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST_DEFAULT}" @@ -120,6 +126,30 @@ run_segment() { return ${exitcode} fi if [ -n "$np" ]; then + if [[ -n "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" && -n "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES" ]]; then + local last_track=$( \ + awk -F': ' 'END { for (i = 2; i <= NF; ++i) printf("%s%s", $i, (i < NF) ? FS : "") }' \ + <"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" 2>/dev/null \ + ) + if [[ "$np" != "$last_track" ]]; then + local next_entry="$(date +"%Y-%m-%d %H:%M:%S"): ${np}" + if [[ "${TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES}" == "unlimited" ]]; then + echo "$next_entry" >> "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" + else + local tmp_log_file="$(mktemp)" && \ + { + tail -n $(( TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_MAX_ENTRIES - 1 )) \ + "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" 2>/dev/null + echo "$next_entry" + } > "$tmp_log_file" && \ + if [[ -f "$tmp_log_file" ]]; then + # Use `cat` to preserve destination file attributes rather than source file attributes + cat "$tmp_log_file" >"$TMUX_POWERLINE_SEG_NOW_PLAYING_TRACK_LOG_FILEPATH" + rm "$tmp_log_file" + fi + fi + fi + fi case "$TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD" in "roll") np=$(roll_text "${np}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED_DEFAULT}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_MODE}" "${TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SEPARATOR}")