текущий фиксированный трек в строке состояния dwm

Я пытаюсь воспроизвести текущий трек в строке состояния dwm. Я дошел до того, что получаю информацию с помощью этой команды.

enter code heredbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' 

В результате получается следующее:

 method return sender=:1.0 -> dest=:1.15 reply_serial=2 variant array [ dict entry( string "mpris:artUrl" variant string "http://open.spotify.com/thumb/45656b0961cba1598d127c3404ad276acb8e961b" ) dict entry( string "mpris:length" variant uint64 308000000 ) dict entry( string "mpris:trackid" variant string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ" ) dict entry( string "xesam:album" variant string "Chopin" ) dict entry( string "xesam:artist" variant array [ string "Frederic Chopin" ] ) dict entry( string "xesam:autoRating" variant double 0.57 ) dict entry( string "xesam:contentCreated" variant string "2009-01-01T00:00:00" ) dict entry( string "xesam:discNumber" variant int32 0 ) dict entry( string "xesam:title" variant string "Waltz No. 1 in E flat Major, Op. 18" ) dict entry( string "xesam:trackNumber" variant int32 8 ) dict entry( string "xesam:url" variant string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ" ) ] 

Итак, мой вопрос заключается в том, как я получаю запись «xesam: artist» и «xesam: title» из этого результата, чтобы я мог поместить ее в свою строку состояния?

  • Как предотвратить экранирование экрана (черный) из командной строки
  • Удалить GNOME и установить dwm
  • Пользовательские горячие клавиши в dwm
  • Netbeans не отображает на моем компьютере
  • Преимущества использования буферов vim на терминалах tmux / dwm
  • Как напечатать переменную bash, которая имеет массив как значение
  • Можно ли использовать xsetroot и dwm для установки верхних и нижних полос с разными временными интервалами?
  • Не удается запустить определенные полноэкранные приложения
  • 3 Solutions collect form web for “текущий фиксированный трек в строке состояния dwm”

    Это было бы намного проще, если бы он был хорошо отформатированным JSON, тогда вы могли бы использовать инструмент jshon для интеллектуального опроса данных.

    Возможно использование awk , но зависит от последовательного вывода:

     awk 'BEGIN {RS=" entry\\("; FS="\""}; /artist/ {artist = $4}; /title/ {title = $4} END { print artist": "title}' spotify_output Frederic Chopin: Waltz No. 1 in E flat Major, Op. 18 

    По существу, файл разбивается путем изменения разделителя записей ( RS ) на различные блоки записи ( entry( ), а поля в этих записях ограничены путем изменения разделителя полей ( FS ) по умолчанию (пробел) до кавычки ( " ), которые содержат значения, которые вы ищете.

    Оттуда это просто сопоставление образцов (например, /artist/ ).

    Если вам нужен только художник и название, я бы предложил использовать xprop для получения свойства _NET_WM_ICON_NAME Spotify.

     xprop -name "Spotify Free - Linux Preview" _NET_WM_ICON_NAME 

    дает тебе:

     _NET_WM_ICON_NAME(UTF8_STRING) = "Spotify - Stereophonics – Indian Summer" 

    вы можете использовать cut чтобы получить часть внутри кавычек:

     xprop -name "Spotify Free - Linux Preview" _NET_WM_ICON_NAME|\ cut -d "\"" -f 2 

    пропустите начальную часть "Spotify - " снова, используя разрез:

     xprop -name "Spotify Free - Linux Preview" _NET_WM_ICON_NAME|\ cut -d "\"" -f 2|cut -b 11- 

    Художник и название разделены этим тире: . Обратите внимание, что это не так:

    Вы можете использовать awk для разделения двух:

     xprop -name "Spotify Free - Linux Preview" _NET_WM_ICON_NAME|\ cut -d "\"" -f 2|cut -b 11-|awk -F " – " '{print $1}' 

    дает вам художника: "Stereophonics"

     xprop -name "Spotify Free - Linux Preview" _NET_WM_ICON_NAME|\ cut -d "\"" -f 2|cut -b 11-|awk -F " – " '{print $2}' 

    дает вам название: "Indian Summer"

    Вот решение, основанное на sp пользователем GitHub wandernauta :

     SP_VERSION="0.1" SP_DEST="org.mpris.MediaPlayer2.spotify" SP_PATH="/org/mpris/MediaPlayer2" SP_MEMB="org.mpris.MediaPlayer2.Player" SPOTIFY_METADATA="$(dbus-send \ --print-reply `# We need the reply.` \ --dest=$SP_DEST \ $SP_PATH \ org.freedesktop.DBus.Properties.Get \ string:"$SP_MEMB" string:'Metadata' \ | grep -Ev "^method" `# Ignore the first line.` \ | grep -Eo '("(.*)")|(\b[0-9][a-zA-Z0-9.]*\b)' `# Filter interesting fiels.`\ | sed -E '2~2 a|' `# Mark odd fields.` \ | tr -d '\n' `# Remove all newlines.` \ | sed -E 's/\|/\n/g' `# Restore newlines.` \ | sed -E 's/(xesam:)|(mpris:)//' `# Remove ns prefixes.` \ | sed -E 's/^"//' `# Strip leading...` \ | sed -E 's/"$//' `# ...and trailing quotes.` \ | sed -E 's/\"+/|/' `# Regard "" as seperator.` \ | sed -E 's/ +/ /g' `# Merge consecutive spaces.`\ )" TrackArtist=$(echo "$SPOTIFY_METADATA" | sed -n 's/artist|//p') TrackTitle=$(echo "$SPOTIFY_METADATA" | sed -n 's/title|//p') 
    Linux и Unix - лучшая ОС в мире.