XMonad 0.13

[email protected]
urxvtc -name update -e yaourt -Syua && чего_то_что_обновит_надпись_на _статусбаре

urxvtc -name update -e yaourt -Syua; sleep 10; exit

Не? )
R.V.
sleep 10; exit
Нееее, sleep 10; exit в xmobar? нееее, она немного не bash, она жеж haskell

Я тут себе погоду на xmobar состряпал, может кому пригодится.

Началось все с того что штатный Run Weather, показывающий только градусы мне перестал нравиться. Использовать приложения или сервисы для погоды тоже не хотелось. Хотелось брать погоду с какого-нибудь сайта. После некоторого гугления такой сайт нашелся и скрипт для считывания тоже. Но возникла проблема - на даче интернет бывает слабый или на время пропадает вообще и тогда панель жестко морозится на время выполнения скрипта. Поэтому придумал решение - считывание данных с сайта засунуть в демон, который будет сбрасывать данные в файл, а другой скрипт погоды на панельке будет быстро читать файл и выводить на панель. Если демон не успел ничего скачать, на панели будут просто немного устаревшие данные, или будет пусто, но виснуть панель при этом не будет.
Итак, по-порядку.
В .xinitrc добавил строку

cat /dev/null > /home/s-adm/.scripts/weatmp &

Здесь и далее s-adm меняйте на свой username

Эта команда при перезагрузке будет очищать файл, ну или создаст новый если его нет. Между перезагрузками в него с интервалом скажем в 600 секднд демон будет вносить свежие данные, а скрипт погоды на панели с частотой 120 секунд их считывать и выдавать на панель.

Демон.

Сделал скрипт /home/s-adm/.scripts/get-weather.sh

#!/bin/sh

SLEEP_INTERVAL=600
while :; do
    # Search for your city at http://www.accuweather.com and replace the URL in the following script with the URL for your city:
    URL='http://www.accuweather.com/ru/ru/surgut/288459/current-weather/288459'
    wget -q -O- "$URL" | awk -F\' '/acm_RecentLocationsCarousel\.push/{print $10"°", $13}'| head -1 | sed 's/,  text:"//g' | rev | cut -c 5- | rev | sed 's/.*/\L&/' >> /home/s-adm/.scripts/weatmp
    sleep $SLEEP_INTERVAL
done

URL для свего города можно узнать по ссылке http://www.accuweather.com, у меня Сургут

Не забыть сделать исполняемым:

chmod +x /home/s-adm/.scripts/get-weather.sh

Собственно демон, запускающий этот скрипт:

sudo nano /etc/systemd/system/getweather.service

Вставляем:

[Unit]
Description=Подготовка данных для плагина погоды

[Service]
ExecStart=/home/s-adm/.scripts/get-weather.sh

[Install]
WantedBy=multi-user.target

Сохраняем и выходим. Ставим демона в автозапуск:

sudo systemctl enable getweather.service

После перезагрузки проверяем файл /home/s-adm/.scripts/weatmp, в нем должно быть что-то наподобие

1° ясно
0° ясно
.....

Xmobar

добавляем строку

, Run Com "/home/s-adm/.scripts/weather.sh" [] "weather" 120

и в нужное место в , template = вставляем модуль

<action=`/home/s-adm/.scripts/full-weather.sh` button=1><action=`chromium --app=http://www.accuweather.com/ru/ru/surgut/288459/current-weather/288459` button=3>%weather%</action></action>

сам скрипт /home/s-adm/.scripts/weather.sh такой:

#!/bin/sh

# для отображения иконок нужен шрифт ttf-font-awesome (AUR)

tail -n 1 /home/s-adm/.scripts/weatmp | sed 's/ясно//g' | sed 's/солнечно//g' | sed 's/слабый туман//g' | sed 's/слабый снег и туман/ /g' | sed 's/слабый снегопад//g' | sed 's/небольшой снег//g' | sed 's/снег//g' | sed 's/значительная облачность//g' | sed 's/облачно с прояснениями//g' | sed 's/малооблачно//g' | sed 's/облачно//g' | sed 's/метель//g'
# Иконки                  

На панель выводится температура и иконка погоды. Иконка не всегда достаточно информативна, поэтому по левому клику, как видно, можно выполнить подробнее в notify-send скриптом /home/s-adm/.scripts/full-weather.sh который выглядит так:

#!/bin/sh

notify-send -u normal -h int:x:500 -h int:y:500 -t 4000 -i /home/s-adm/.scripts/icon/surgut.png "    Погода в Сургуте    " "    $(tail -n 1 /home/s-adm/.scripts/weatmp)"

Иконку surgut.png естественно замените на свою.

По правому клику идем на сайт, если нужен прогноз, у меня через chromium, и чтобы он открывался в скратчпаде, я сделал в xmonad.hs для него правило

mynameScratchpads = [ NS "ncmpcpp"      "urxvtc -name ncmpcpp -e ncmpcpp"     (appName    =? "ncmpcpp")      (customFloating $ W.RationalRect 0.15 0.2 0.7 0.6)
                    ...
                    , NS "Weather"      "Weather"                             (role       =? "pop-up")       (customFloating $ W.RationalRect 0.15 0.2 0.7 0.6)
                    ]
Вроде все.
ну в общем ничего хорошего про обновлялку я сказать не могу (((
ничего из того, что я опробовал, не сработало
остаётся только так
#!/bin/zsh
urxvtc -name update -e yaourt -Syua
while `pgrep yaourt >/dev/null`
do
	sleep 1
done
killall xmobar
xmobar
exit 0

Может в понедельник придумаю что-нибудь толковое - сейчас башка после работы туго варит, а завтра вряд ли найду на это время.
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Ну а я пока сделал так:
<action=`urxvtc -name update -e yaourt -Syua` button=1><action=`xmonad --restart` button=3>%update%</action></action>
Т.е. по правому клику рестарт панели
можно в скрипт прописать, вместо
killall xmobar
xmobar
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
я сейчас проверил работу этого варианта скрипта (появились обновления) - отработал нормально
в общем, до понедельника будет так
а там глядишь чего-нибудь более приличное слеплю
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
OK)
Есть решение - ещё вчера над этим думал, но был уставший после работы и не осилил грамотно реализовать
Далее по по пунктам

1 - создаём именованный канал
mkfifo ~/.xmonad/pipe

2 - редактируем XMUpdate - его нужно привести к вот такому виду
#!/bin/sh
UPD=`checkupdates | wc -l`
if [ $UPD -gt 0 ]; then echo '<fc=#cccccc>  Update:</fc><fn=2> </fn><fn=1><fc=#ff6500>'$UPD'<fn=2> </fn>pkg</fc></fn>' > ~/.xmonad/pipe
fi
exit 0

3 - редактируем XMYaourt
#!/bin/sh
urxvtc -name update -e yaourt -Syua &&
while `pgrep yaourt >/dev/null`
do
	sleep 1
done
echo > ~/.xmonad/pipe
exit 0

4 - редактируем xmobarrc
4.1 - добавляем строку
, Run PipeReader "~/.xmonad/pipe" "Update"

4.2 - устанавливаем нужный интервал для проверки обновлений
, Run Com        "XMUpdate" [] "" 36000

4.3 - редактируем строку template - добавляем туда новое действие
<action=XMYaourt>%Update%%XMUpdate%</action>

5 - рестартуем xmobar

6 - Профит

P.S> отредактировано
внесены коррективы, фиксящие проблему, описанную ниже в топике
--HP
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Отлично, но есть нюанс. Если в процессе обновления пользователь решит отложить и нажмет n, обновления не установятся, но все равно выполнится echo "" > ~/.xmonad/pipe и уведомление на баре исчезнет до конца интервала для проверки обновлений?
 
Зарегистрироваться или войдите чтобы оставить сообщение.