Тонкая настройка xmobar

<tt>    <big><b><u>Мой город</u></b></big>

 <i>Переменная облачность</i>

 Температура:  +22°C
 Ощущается:    +22°C
 Ветер:        С 5 <small>м/с</small>
 Давление:     760 <small>мм рт.ст.</small>
 Влажность:    40 %

 Восход:       4:34
 Закат:        20:38
</tt>%

Формат вывода задаётся через gw_config1.json
"save_weather_fmt": "<tt>    <big><b><u>{city_name}</u></b></big>\n \n <i>{condition_now}</i>\n \n Температура:  {t_now}C\n Ощущается:    {t_now_feel}C\n Ветер:        {wind_direct_now} {wind_speed_now} <small>{wind_units_now}</small>\n Давление:     {pressure_now} <small>мм рт.ст.</small>  \n Влажность:    {humidity_now}\n \n Восход:       {sunrise}\n Закат:        {sunset}\n</tt>"
Количество пробелов значимо, т.к. формат задавался для вывода через notify-send (dunst). Без этого отображение кривое - всё в куче
В итоге выглядит вот так
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Полазил по accuweather - пока набрал вот такой список возможных значений condition
"Ясно"
"Солнечно"
"Малооблачно"
"Ясно, облачно c прояснениями"
"Облачно c прояснениями"
"Переменная облачность"
"Временами переменная облачность"
"Растущая облачность"
"Значительная облачность"
"Облачно"
"Дождь"
"Небольшой дождь"
"Дождь, переходящий в изморось"
"Возможен ливень или гроза"
"Ливень или гроза"
"Грозы и ливни"
"Возможен ливень"
"Ливни"
"Гроза"
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
#!/bin/bash
weather=`cat 1.txt |  grep -o "<i>.*</i>" | sed 's/<i>\(.*\)<\/i>/\1/'`
data=`cat 1.txt | grep "Восход:" | awk '{print $2}'`
state=("Ясно" "Солнечно" "Ясно, облачно c прояснениями" "Облачно c прояснениями" "Малооблачно" "Переменная облач ость" "Переменная облачность" "Значительная облачность" "Дождь" "Ливень или гроза" "Гроза")
icons=("Ясно" "Солнечно" "Ясно, облачно c прояснениями" "Облачно c прояснениями" "Малооблачно" "Переменная облач
 ость" "Переменная облачность" "Значительная облачность" "Дождь" "Ливень или гроза" "Гроза")
rtime=`date "+%H:%M"`
for i in $(seq 0 ${#state[@]}); do
  if [[ `date -d "$data" +%s` -gt `date -d "$rtime" +%s` ]]; then
    if [[ "$weather" == "${state[$i]}" ]]; then
      echo "<fn=4>${icons[$i]}</fn>"
    fi
  fi
done

я не совсем понял что в итоге вы хотите получить, но вот так будет получше выглядеть...
ps. иконки сами подставите)

© здесь должна быть ссылка на пост Aivar`a предложившего использовать массивы)))
Ошибки в тексте-неповторимый стиль автора©
indeviral
но вот так будет получше выглядеть...
Именно. А где значок копирайта с ссылкой на пост Aivar'а с предложением использовать массивы? )
Собсно, можно и одним массивом обойтись:
array=("Ясный день" "_иконка_ясного_дня_" "Ясный пень" "_иконка_ясного_пня_" "и т.д." "_иконка_и_т.д._")
Так даже нагляднее будет. Скрипт соответственно изменить.
Спасибо за подсказки.
Правда я пошёл несколько иным путём - не стал заморачиваться со всякими "Ясно", "Солнечно", "Малооблачно". Попросту сопоставил каждой иконке из программы определённый символ данного шрифта. Их не так уж много - всего 47. Причём некоторые повторяются.
Решение это временное, пока автор программы не реализует то, что мы с ним обсуждали. Поэтому скрипт пока не выкладываю.

del
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
В итоге получилось вот так

$HOME/.config/gis-weather/gw_config1.json

    "pipe1": {
        "active": true,
        "path": "/tmp/haron/cur_temp",
        "text": "{t_now}"
    },
    "text_file1": {
        "active": true,
        "path": "/tmp/haron/weather_icon",
        "text": "{icon_now}"
    },
    "text_file2": {
        "active": true,
        "path": "/tmp/haron/condition",
        "text": "<tt>    <big><b><u>{city_name}</u></b></big>\n \n <i>{condition_now}</i>\n \n Температура:  {t_now}C\n Ощущается:    {t_now_feel}C\n Ветер:        {wind_direct_now} {wind_speed_now} <small>{wind_units_now}</small>\n Давление:     {pressure_now} <small>мм рт.ст.</small>  \n Влажность:    {humidity_now}\n \n Восход:       {sunrise}\n Закат:        {sunset}\n</tt>"
    }, 

xmobarrc

, additionalFonts  = ["xft:Terminus (TTF):size=12:weight=bold:antialias=true:hinting=true","xft:Terminus Re33:size=4","xft:FontAwesome:pixelsize=12","xft:Weather Icons:pixelsize=13"]
...
, Run PipeReader "/tmp/haron/cur_temp" "Cur_temp"
...
, Run Com        "XMWeatherIcon2" [] "" 600
...
, template = "... <action=`GWeather` button=1345><fc=#cccccc>%XMWeatherIcon2%</fc></action> <action=`XMAccuWeather` button=1><action=`XMGismeteo` button=3><fc=#95d5f5><fn=1>%Cur_temp%</fn></fc></action></action>  "

$HOME/.local/bin/XMWeatherIcon2

#!/usr/bin/env zsh

CONDITIONS=`cat /tmp/haron/weather_icon`
II=("00.png" "01.png" "02.png" "03.png" "04.png" "05.png" "06.png" "07.png" "08.png" "09.png" "10.png" "11.png" "12.png" "13.png" "14.png" "15.png" "16.png" "17.png" "18.png" "19.png" "20.png" "21.png" "22.png" "23.png" "24.png" "25.png" "26.png" "27.png" "28.png" "29.png" "30.png" "31.png" "32.png" "33.png" "34.png" "35.png" "36.png" "37.png" "38.png" "39.png" "40.png" "41.png" "42.png" "43.png" "44.png" "45.png" "46.png" "47.png" "*")
IO=("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "N/A" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "N/A" "" "" "" "N/A")
for i in $(seq 0 ${#II[@]}); do
    if [[ "$CONDITIONS" == "${II[$i]}" ]]; then
      echo "<fn=4>${IO[$i]}</fn>"
    fi
done
exit 0



В других скриптах также необходимо подправить пути к файлам.

Вроде бы работает.



Для вывода в xmobar изображения текущего состояния погоды использован шрифт Weather Icons (AUR)
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Зима gisweather-cli близко.
Отредактировал скрипт - там ошибка была, из-за которой выводился не тот значок
Теперь все соответствует.
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Haron_Prime
Вроде бы работает.
А значок плей/пауза "умный"?
xmobarrc
<action=`XMncmpcpp` button=3><action=`mpc prev` button=1><fn=3></fn></action> <action=`mpc toggle` button=1>%XMMPD%</action> <action=`mpc next` button=1><fn=3></fn></action></action>
"xft:FontAwesome:pixelsize=12"

XMncmpcpp
if (pidof ncmpcpp >/dev/null); then
    kill $(pidof ncmpcpp)
else
    urxvtc -name ncmpcpp -e /usr/bin/ncmpcpp
fi
exit 0

XMMPD
ST=`cat $HOME/.config/mpd/state | grep state | tail -1 | cut -d \  -f 2`
case $ST in
    play  ) echo "<fn=3></fn>" ;;
    pause ) echo "<fn=3></fn>" ;;
    stop  ) echo "<fn=3></fn>" ;;
esac
exit 0

XMMPDv2
ST=`mpc | grep "\[*\]" | cut -d \  -f 1 | sed -e 's/[^a-z]//g'`
case $ST in
    playing  ) echo "<fn=3></fn>" ;;
    paused   ) echo "<fn=3></fn>" ;;
    *        ) echo "<fn=3></fn>" ;;
esac
exit 0





*** обновлено

Вариант 2

-> ->

Вывод скрипта отправляется в канал (который необходимо предварительно создать - mkfifo /path/to/fifo)
В xmobarrc
, Run PipeReader "/tmp/haron/PS"   "PS"
command ="...<fn=3><action=`XMMPC` button=45><action=`XMncmpcpp` button=3><action=`XMMPCprev` button=1></action> %PS% <action=`XMMPCnext` button=1></action></action></action></fn>..."

Сам скрипт XMMPD
*запуск прописывается в ~/.xinitrc или в xmonad.hs в startupHook (<+> spawn "XMMPD")
#!/usr/bin/env zsh

while [[ true ]]; do
    ST=`mpc | sed -n 2p | awk '{print $1}' | sed -e 's/[^a-z]//g'`
    case $ST in
        playing  ) echo '<action=`mpc stop`></action> <action=`mpc pause`></action> <fc=#84ff7f><action=`mpc play`></action></fc>' > /tmp/haron/PS  ;;
        paused   ) echo '<action=`mpc stop`></action> <fc=#f7ff7f><action=`mpc pause`></action></fc> <action=`mpc play`></action>' > /tmp/haron/PS  ;;
        *        ) echo '<fc=#ff8181><action=`mpc stop`></action></fc> <action=`mpc pause`></action> <action=`mpc play`></action>' > /tmp/haron/PS  ;;
    esac
    sleep 1
done

Дополнительные скрипты
XMMPC
#!/usr/bin/env zsh

if (pidof dunst >/dev/null); then
    kill $(pidof dunst)
else
    mpc | head -1 | xargs -0 notify-send -i "/home/haron/.icons/nouveGnomeGray/24x24/mimetypes/gnome-mime-audio-x-midi.png"
fi
exit 0

XMMPCprew
#!/usr/bin/env zsh

kill $(pidof dunst) &
mpc prev &&
sleep 1 &&
mpc | head -1 | xargs -0 notify-send -i "/home/haron/.icons/nouveGnomeGray/24x24/mimetypes/gnome-mime-audio-x-midi.png"
exit 0

XMMPCnext
#!/usr/bin/env zsh

kill $(pidof dunst) &
mpc next &&
sleep 1 &&
mpc | head -1 | xargs -0 notify-send -i "/home/haron/.icons/nouveGnomeGray/24x24/mimetypes/gnome-mime-audio-x-midi.png"
exit 0

XMncmpcpp
#!/usr/bin/env zsh

if (pidof ncmpcpp >/dev/null); then
    kill $(pidof ncmpcpp)
else
    urxvtc -name ncmpcpp -e /usr/bin/ncmpcpp
fi
exit 0

Действия по кликам
ЛКМ - соответственно значению значка
ПКМ по любому значку - вызов окна терминала с запущеным псевдогуем (ncmpcpp)
Прокрутка колёсиком (в любую сторону) на любом значке - появляется/прячется всплывающее окно с именем исполнителя и названием текущей композиции



Видео
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
 
Зарегистрироваться или войдите чтобы оставить сообщение.