awesome делимся виджетами

Разработка скриптов на lua. Создание виджетов, диалогов и т.д.
Аватара пользователя
olgmen
Сообщения: 155
Зарегистрирован: 30 ноя 2012, 11:00
Темы: 32
Откуда: Санкт-Петербург
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение olgmen » 28 янв 2014, 16:00

Виджет прогноза погоды на 5 суток

Изображение

Взять можно здесь

Небольшая инструкция:

Распаковать архив:

ConkyWeather.otf, ConkyWindNESW.otf поместить в пользовательскую директорию .fonts
если нет, нужно ее создать:

Код: Выделить всё

mkdir ~/.fonts
В терминале дать команду:

Код: Выделить всё

sudo fc-cache -v -f
эта команда зарегистрирует шрифты в системе и они станут доступными

файл v9000_display.png из архива поместить в директорию пользователя images

файл forecast_v_0_3.lua поместить в /home/директория_пользователя/.config/awesome

В rc.lua вставить строки

Код: Выделить всё

forecast = require("forecast_v_0_3")
local forecastbox = forecast.wibox
и ниже строк

Код: Выделить всё

awful.key({ modkey }, "x",
              function ()
                  awful.prompt.run({ prompt = "Run Lua code: " },
                  mypromptbox[mouse.screen].widget,
                  awful.util.eval, nil,
                  awful.util.getdir("cache") .. "/history_eval")
              end),
поместить строку

Код: Выделить всё

-- просмотр прогноза на 10 суток
	awful.key({ modkey, }, "#135", function() forecastbox.visible = not forecastbox.visible end),
которая позволяет запустить виджет нажатием клавиш "win" + "меню"

PS забыл сказать, что с первого раза не запускается, так как в отличии от conky данные загружаются с запозданием, второй и последующие запуски сбоя не дают

Код своего города, по умолчанию установлен код Санкт-Петербурга RSXX0091, редактируется в строке 35 скрипта forecast_v_0_3.lua
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

Аватара пользователя
lumberjack
Модератор
Сообщения: 1009
Зарегистрирован: 30 сен 2012, 04:04
Темы: 152
Откуда: Сургут
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение lumberjack » 31 янв 2014, 18:14

olgmen, огромное спасибо, виджет просто шикарен и работает как часы! :)

Faiver
Сообщения: 9
Зарегистрирован: 23 июн 2014, 07:08
Темы: 0
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение Faiver » 23 июн 2014, 10:25

Данный скриптик позволяет выделить текст (хоть в консоли, хоть в браузере) и нажав комбинацию клавиш вывести его перевод, никуда не переключаясь, и не запуская дополнительных программ.
Скрипт работает по системе Google.Translate.
Для начала создадим скрипт gtranslate и поместим его в папку со своими скриптами:
[spoiler="скрипт gtranslate"]

Код: Выделить всё

#!/bin/bash
if [ -z "$1" ]
then 
        echo "Нет данных для перевода"
fi
text="$1"
l_source="auto"
l_target="ru"
result=$(curl -s -i --user-agent "" -d "sl=$source" -d "tl=$target" --data-urlencode "text=$text" https://translate.google.ru)
encoding=$(awk '/Content-Type: .* charset=/ {sub(/^.*charset=["'\'']?/,""); sub(/[ "'\''].*$/,""); print}' <<<"$result")
iconv -f $encoding <<<"$result" |  awk 'BEGIN {RS="</div>"};/<span[^>]* id=["'\'']?result_box["'\'']?/' | html2text -utf8 | sed 's/<[^>]*>//g'
exit
[/spoiler]
Даем файлу права на выполнение:

Код: Выделить всё

chmod +x gtranslate
Теперь добавьте в ваш rc.lua функцию clip_translate:
[spoiler="функция clip_translate"]

Код: Выделить всё

function clip_translate()
        local clip = nil
        local val = nil
        clip = awful.util.pread("xclip -o")
        if clip then
                val = awful.util.pread("/home/user/script/gtranslate \"" .. clip .."\"")
                     mynotify = naughty.notify({
                     title = "Перевод:",
                     text = val,
                     timeout = 20,  --здесь вы можете настроить время отображения текста
                     position = "top_right"
                     })
         end
end
[/spoiler]
Ну и напоследок, добавляем в секцию Standart program клавиши для вызова нашей функции:

Код: Выделить всё

 awful.key ({modkey, "Control" }, "t", function () clip_translate() end),
Перезапускаем Awesome, выделяем текст нажимаем Mod4+Ctrl+t и наслаждаемся переводом!

P.S. Также можно посмотреть на сайте Awesome Wiki

Faiver
Сообщения: 9
Зарегистрирован: 23 июн 2014, 07:08
Темы: 0
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение Faiver » 23 июн 2014, 10:38

Некоторое время назад, после того как плотно перешел на Awesome на ноутбуке, все чаще стал ловить себя на мысли, что не помню те или иные клавиши для нужной мне программы. Когда помнишь основные, это еще куда не шло, но в том же vim их более 100, что согласитесь, запомнить почти нереально.
Поэтому подумав, решил, что не помешала бы какая нибудь помощь по горячим клавишам приложений. И вот результат перед вами. Данный модуль позволяет набрав комбинацию клавиш вызывать подсказку именно для открытой сейчас программы, не важно консольная она или графическая. Т.е. модуль определяет название запущенного приложения и открывает подсказку для него (правда только если файл с этой подсказкой существует)
Правда есть ограничение, если в консоли одна из программ остановлена (Ctrl+Z), то скрипт иногда сбивается, решить пока не удалось ((.
Но в то же время удалось добиться того, что если например в mc открыть файл на редактирование в vim или nano и есть соответствующий файл подсказок, то он будет отображен именно он.
Установка
Клонируйте репозиторий:

Код: Выделить всё

git clone https://github.com/FaiverBES/Awesome-help.git ~/.config/awesome/help
Затем в вашем rc.lua добавьте в начале файла:

Код: Выделить всё

require ("help/help")
Если используемый вами терминал отличается от Xterm, UXTerm, Rxvt, URxvt, Konsole, то добавьте его класс в список терминалов в файле help.lua в переменную termClass. Для получения класса терминала выполните команду:

Код: Выделить всё

xprop | grep CLASS
Класс это второе значение в кавычках.
После этого модуль сможет искать какая именно программа запущена в терминале, и если для нее существует файл подсказки, выводить ее.
Теперь осталось только добавить вызов модуля. Для этого в вашем rc.lua в секцию clientkey добавьте следующий код:
[spoiler="Назначение клавиш вызова"]

Код: Выделить всё

awful.key({ modkey,}, "z", function (c) 
                              if notifyHide(help_notify) then
                                help_notify = help.getClientName(c)
                              else
                                help_notify = nil
                               end 
                             end) ,
awful.key({ modkey, "Shift"}, "z", function ()
                                     if notifyHide(help_notify) then
                                       help_notify = help.displayHelp("Awesome")
                                     else
                                       help_notify = nil
                                     end 
                                   end)
[/spoiler]
Теперь при нажатии клавиш Mod4+z будет производиться определение приложения, и отображение подсказки для него(если существует). А при нажатии Mod4+Shift+z будет выводится подсказка для Awesome. При повторном нажатии этих же клавиш уведомление будет скрыто, или можете щелкнуть по нему мышкой.
Помимо этого, могу предложить еще создать меню, и поместить его например в systray, чтобы можно было вручную вызывать любую подсказку(например, можно добавить файл помощи по регулярным выражениям, каким то командам оболочки и т.д.).
[spoiler="helpMenu"]

Код: Выделить всё

helpMenu = awful.menu({ items = { { "Awesome", function () help.displayHelp("Awesome") end } , 
                                  { "Iceweasel", function () help.displayHelp("Iceweasel") end },
                                  { "Firefox", function () help.displayHelp("Firefox") end },
                                  { "bash", function () help.displayHelp("bash") end },
                                  { "htop", function () help.displayHelp("htop") end },
                                  { "mc", function () help.displayHelp("mc") end },
                                  { "mocp", function () help.displayHelp("mocp") end },
                                  { "mutt", function () help.displayHelp("mutt") end },
                                  { "vim", function () help.displayHelp("vim") end },
                                }
                       }) 
helpLauncher = awful.widget.launcher({ image='/home/faiver/.config/awesome/image/help.png',
                                     menu = helpMenu })
[/spoiler]
А затем в секцию ваших виджетов добавьте helpLauncher.

Файлы подсказок
Файлы с подсказками находятся в каталоге data и имеют то же название что и приложение. Если файл не найден, то будет выведено сообщение об этом, и вы сможете его создать(обращайте внимание на написание, название регистрозависимо).
Синтаксис очень простой:

Код: Выделить всё

== - название разделов
'' - выделяемые позиции
После названий разделов следуют клавиши и их описания через тире ( - ). Обратите внимание, чтобы в клавишах не использовалось тире. Также следует избегать символов : < > & - эти символы используются в разметке и поэтому их использование может привести к ошибкам, заменяйте их комбинациями клавиш, например Shift+7.
Старайтесь также избегать использования русских символов в левой части (где клавиши), так как они имеют размер 2Байта, и происходит некорректный центровка.
Все приведенные файлы помощи, являются демонстрационными, редактируйте их по своему усмотрению.
Последний раз редактировалось Faiver 25 июн 2014, 08:49, всего редактировалось 1 раз.

Аватара пользователя
ZEN
Администратор
Сообщения: 1350
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение ZEN » 23 июн 2014, 22:45

не пользуюсь awesome, но должен сказать что последний модуль меня заинтриговал. Интересная задумка.

Что касается спецсимволов (: < > &), то если в lua нет готового модуля, то можно попытаться самому заменить < на "<", > на "&gt", & на "&". В html будет отображение нормальным и ничего не сломается, хотя и костыль...
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Faiver
Сообщения: 9
Зарегистрирован: 23 июн 2014, 07:08
Темы: 0
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение Faiver » 23 июн 2014, 22:55

Обойти к сожалению вряд ли получится, т.к. используется встроенная система раскраски текста Pango. Но мысль понятна, попробую найти исходник и покопать в этом направлении.

Faiver
Сообщения: 9
Зарегистрирован: 23 июн 2014, 07:08
Темы: 0
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение Faiver » 25 июн 2014, 08:48

ZEN писал(а): Что касается спецсимволов (: < > &),
Благодарю за подсказку, добавил функцию, разметка текста больше не сбивается. :)

Аватара пользователя
ZEN
Администратор
Сообщения: 1350
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение ZEN » 26 июн 2014, 17:13

Faiver писал(а):
ZEN писал(а): Что касается спецсимволов (: < > &),
Благодарю за подсказку, добавил функцию, разметка текста больше не сбивается. :)
Всегда рад помочь :) К слову, я посмотрел код и есть у меня одно предложение. Сейчас подмена символов сделана примерно так:
if string.find (str, "&") then str = string.gsub (str, "&", '&') end if string.find (str, "<") then str = string.gsub (str, "<", '<') end if string.find (str, ">") then str = string.gsub (str, ">", '>') end return str Вполне можно его сократить до:
str = string.gsub (str, "&", '&') str = string.gsub (str, "<", '<') str = string.gsub (str, ">", '>') return str Так не будут выполняться дополнительные функции поиска символов, а если символов нет, то gsub ничего и не заменит. Код компактнее и проще.

Кстати, я посмотрел последний коммит, вижу что появилась возможность локализации. Это хороший плюс. Можно еще попробовать из системных переменных определять текущую локаль и автоматически выводить нужную справку (естественно с сохранением возможности переопределить локаль в конфиге). Но это так, мысли в слух... Были бы в awesome виджеты не на луа, мысли стали бы патчами :)
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Faiver
Сообщения: 9
Зарегистрирован: 23 июн 2014, 07:08
Темы: 0
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение Faiver » 29 июн 2014, 17:57

Да решение с лишними if вполне логичное, для меня lua язык достаточно новый, поэтому... 8-)
Насчет идеи по автоматического определения языка, было бы неплохо(тем более языка определяется элементарно), но вот где брать на этом языке информацию по клавишам. Разве, что только из man-ов дергать, но тогда код существенно усложнится. Попробую покопать в этом направлении.

Аватара пользователя
ZEN
Администратор
Сообщения: 1350
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение ZEN » 29 июн 2014, 22:51

Можно сделать справку по умолчанию для локалей POSIX, C, en_US. Если для текущей системной локали, например ru_RU.UTF-8, не найдено справки - то брать справку из C локали... В такому случае каждый желающий сможет основываясь на англоязычной справке сделать перевод для своего родного языка... Как-то я представляю )
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость