текущий фиксированный трек в строке состояния 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» из этого результата, чтобы я мог поместить ее в свою строку состояния?

  • Пользовательские горячие клавиши в dwm
  • Не удается запустить определенные полноэкранные приложения
  • Терминал не открывается под dwm - есть ли файл журнала ошибок?
  • граница на нижней части терминальных эмуляторов даже в виде моноклава
  • Как напечатать переменную bash, которая имеет массив как значение
  • Удалить GNOME и установить dwm
  • dwm и блокировка экрана
  • Dwm-pertag patch - сохранение состояния между перезапусками
  • 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') 
    Interesting Posts

    как установить новый пакет, когда какой-либо пакет нарушен?

    Как присоединиться к двум файлам, сопоставляя столбцы с неправильным количеством столбцов?

    Rsync, который обрабатывает разумно

    Песочница учетная запись и предотвратить ее от любых изменений системы

    awk с параметром number для столбца, который вы хотите распечатать

    Как отключить тайм-аут запроса пароля для дешифрования раздела во время загрузки?

    Как найти отсутствующие файлы с последовательными именами?

    LXC: Установлены ли rootfs без nosuid

    полное шифрование диска (включая своп, возможно, правдоподобную отрицательность)

    Ли Linux прекращает обработку, связанную с графическим интерфейсом, когда мы удаляем экран рабочего стола из подключения из шкафа (процессорный блок)?

    как мне сделать список файлов всех файлов / пакетов в .iso в stdout или в файл?

    Второй монитор не пробуждается после обновления ядра в Fedora Core 20

    Имеет ли структура данных inode фактический адрес файла на диске?

    Поздняя аутентификация

    Как удалить «мертвые части окна» после ошибок GUI?

    Linux и Unix - лучшая ОС в мире.