Blingbling/ru

Описание Blingbling
Blingbling это графическая библиотека виджетов для оконного менеджера Awesome. Целью библиотеки Blingbling является обеспечение больше фееричности, настраиваемости и легкости для настройки графических виджетов, всплывающих окон или сигналов в Awesome. Изначально Blingbling писался для личного использования, но я делюсь им с вами, в надежде, что кому то может быть это интересно. Тестеры, обратная связь и предложения приветсвуются!

На данный момент Blingbling существует в 2 версиях.


 * версия v1.0 работает с awesome версий 3.4 (на данный момент только поддержка, но не развитие)
 * версия v2.0 которая работает с awesome версий 3.5.

Зависимости
Версия 2 Blingbling использует lgi, так что если у вас есть уже работающий Awesome WM v3.5 она будет работать без каких либо дополнительных зависимостей.
 * Blingbling v2.0

Эта версия Blingbling требует oocairo. Адрес сайта проекта : http://oocairo.naquadah.org.
 * Blingbling v1.0

Проверьте ваш менеджер пакетов, возможно уже есть пакет oocairo доступный для вашей системы. Например в Archlinux: yaourt -S lua-oocairo-git

Для установки oocairo в Ubuntu $ mkdir temp $ cd temp # apt-get -b source oocairo # dpkg -i liblua5.1-oocairo0_1.4-1.2_amd64.deb # dpkg -i liblua5.1-oocairo-dev_1.4-1.2_amd64.deb $ cd .. $ rm -r temp

Если вы не можете найти готовый пакет oocairo для вашей системы, вы можете установить его из исходников:

git clone git://git.naquadah.org/oocairo.git cd oocairo*

Затем прочтите файл readme, в нем находятся инструкции по установке.

Установка
($XDG_CONFIG_HOME usually ~/.config) cd $XDG_CONFIG_HOME/awesome/ git clone git://github.com/cedlemo/blingbling.git
 * Blingbling v2.0

Существует 2 способа:
 * Blingbling v1.0

cd $XDG_CONFIG_HOME/awesome/ wget https://github.com/cedlemo/blingbling/archive/v1.0.zip unzip v1.0.zip

или cd $XDG_CONFIG_HOME/awesome/ git clone git://github.com/cedlemo/blingbling.git cd blingbling git checkout v1.0

Использование
(В процессе разработки автором)

Blingbling v2.0
Смотрите https://github.com/cedlemo/blingbling и мой текущий файл конфигурации и темы https://github.com/cedlemo/blingbling/tree/master/config_example

Blingbling v1.0
Вы можете легко настроить виджеты, для этого смотрите файл README.

Blingbling предоставляет:

 * Value text box:
 * Это текстовое поле, которе может принимать значения между 0 и 1, и отобразить его как текст (как обычный виджет textbox в Awesome). Различие с этим класическим виджетом заключается в том, что пользователь может отобразить текст с цветным фоном имеющим закругленные (или обычные) края. Кроме того, пользователь может устанавливать различные цвета для отображения значения (не на весь текст). Например, 30>значение<70 установит зеленый цвет текста, >70% цвет текста будет красным.


 * Classical graph(v1 и v2 line_graph):
 * Выглядит как виджет graph в Awesome, но с поддержкой прозрачности и текста на нем, а также множества методов для его настройки.


 * Tiled graph:
 * Выглядит как обычный graph, но значение отображается с плиткой


 * Progress graph:
 * Выглядит как progress bar в Awesome, но с поддержкой прозрачности и текста на нем, а также множества методов для его настройки. Может увеличиваться/уменьшаться по горизонтали или вертикали.


 * Progress bar:
 * Выглядит как progress graph, но graph отображается в виде цилиндра.


 * Volume graph:
 * Виджет, который отображает значение используя треугольник или столбиков с поддержкой прозрачности и текста. Может автоматически обновляться для Master или MPD звука.


 * Mpd widget:
 * Виджет посвященный MPD. Он считывает FIFO генерируемым MPD и отображает graph основанный на выводе PCM. Он может оботражать следующую информацию: текущую песню, состояние MPD и может быть связан с командами mpc (громкость +/-, следующий трек, переключение stop/play).


 * Net widget:
 * Виджет который может отображать информацию по интернет соединению (upload/download) со стрелками и текстом. Всплывающее уведомление с информацией, например ip-адресом, ip-адрес шлюза, внешний ip адрес и внешний tor ip адрес может быть привязан к нему.


 * Top popup:
 * (не требует oocairo) Всплывающее уведомление, имеющее цветной вывод, может быть привязано к любому виджету. Количество строк в верхнем выводе может быть динамически увеличено/уменьшено с помощью колеса мыши


 * Netstat popup:
 * (не требует oocairo) Всплывающе уведомление, отображающее раскрашенную статистику сети, которая может быть привязана к любому виджету.


 * System shutdown/Reboot button:
 * (не требует oocairo) Кнопка, которая отображает диалоговое меню для перезагрузки или завершения работы системы. Вам необходимо иметь активированную сессию console kit.


 * Udisks-glue widget menu:
 * (не требует oocairo) С пользовательским udisks-glue.conf и этим виджетом, вы можете привязать меню к иконке, которая динамически отображает устройства подключенные udisks-glue. Это меню позволяет вам монтировать, отмонтировать, отсоединять или извлекать устройства. Каждое событие генерирует уведомление отображающее тип устройства, точку монтирования и действие, которое породило это уведомление (mount, unmount или remove device)


 * Menu widget:
 * Этот виджет основан на оригинальном виджете меню из awful. В этом меню ширина самого меню или его подменю является автоматически настраиваемой. Он не имеет фиксированной ширины.


 * Task warrior widget:
 * Task warrior widget это базовый интерфейс для task warrior (http://taskwarrior.org/projects/show/taskwarrior). Целью виджета является обеспечение быстрого способа посмотреть активные проекты и задачи, и обеспечить основное управление задачами или проектами (просто моментально устанавливает задание выполненным).


 * Table widget layout:
 * Этот layout, при использовании в wibox, позволяет пользователям отображать виджеты как в таблице.


 * Calendar widget:
 * Этот wibox отображает календарь текущего месяца с помощью виджета. По умолчанию у вас есть две кнопки для переключения на предыдущий и следующий месяц. Кроме того, вы можете просмотреть события для какого либо дня (из task warrior и напоминания по умолчанию) в меню, когда мышь находится над этим днем. Пользователи могут легко добавить или удалить функции, для получения события из внешних приложений.

Пример значений виджета text box:
--First widget on the left (the configurations for the other widgets are the same) my_fs=blingbling.value_text_box.new my_fs:set_height(18) my_fs:set_width(40) my_fs:set_v_margin(2) my_fs:set_filled(true) my_fs:set_filled_color("#00000099") my_fs:set_values_text_color( {{"#88aa00ff",0}, --all value > 0 will be displaying using this color                             {"#d4aa00ff", 0.75},                              {"#d45500ff",0.77}} ) --There is no maximum number of color that users can set, just put the lower values at first. my_fs:set_default_text_color(beautiful.textbox_widget_as_label_font_color) my_fs:set_rounded_size(0.4) my_fs:set_background_color("#00000044") my_fs:set_label("usage: $percent %") vicious.register(my_fs, vicious.widgets.fs, "${/home used_p}", 120)

Пример classical graph, progress graph и netwidget:


require("blingbling") -- cpulabel= widget({ type = "textbox" }) cpulabel.text='CPU: ' -- mycairograph=blingbling.classical_graph.new mycairograph:set_height(18) mycairograph:set_width(360) mycairograph:set_tiles_color("#00000022") mycairograph:set_show_text(true) mycairograph:set_label("Load: $percent %") -- --bind top popup on the graph blingbling.popups.htop(mycairograph.widget,       { title_color =beautiful.notify_font_color_1,            user_color= beautiful.notify_font_color_2,            root_color=beautiful.notify_font_color_3,            terminal = "urxvt"}) vicious.register(mycairograph, vicious.widgets.cpu,'$1',2) -- memwidget=blingbling.classical_graph.new memwidget:set_height(18) memwidget:set_width(200) memwidget:set_tiles_color("#00000022") memwidget:set_show_text(true) vicious.register(memwidget, vicious.widgets.mem, '$2', 2) -- mycore1=blingbling.progress_graph.new mycore1:set_height(18) mycore1:set_width(6) mycore1:set_filled(true) mycore1:set_h_margin(1) mycore1:set_filled_color("#00000033") vicious.register(mycore1, vicious.widgets.cpu, "$2") --  mycore2=blingbling.progress_graph.new -- --  mycore4=blingbling.progress_graph.new -- --  memlabel= widget({ type = "textbox" }) memlabel.text='MEM: ' memwidget=blingbling.classical_graph.new memwidget:set_height(18) memwidget:set_width(200) memwidget:set_tiles_color("#00000022") memwidget:set_show_text(true) vicious.register(memwidget, vicious.widgets.mem, '$2', 2) -- netwidget = widget({ type = "textbox", name = "netwidget" }) netwidget.text='NET: ' --bind nestat popup on textbox blingbling.popups.netstat(netwidget,{ title_color = beautiful.notify_font_color_1, established_color= beautiful.notify_font_color_3, listen_color=beautiful.notify_font_color_2}) -- my_net=blingbling.net.new my_net:set_height(18) --activate popup with ip informations on the net widget my_net:set_ippopup my_net:set_show_text(true) my_net:set_v_margin(3)



mycairograph=blingbling.classical_graph.new mycairograph:set_height(18) mycairograph:set_width(360) mycairograph:set_show_text(true) mycairograph:set_label("Load: $percent %") mycairograph:set_rounded_size(0.4) mycairograph:set_filled(true) mycairograph:set_filled_color("#00000033") vicious.register(mycairograph, vicious.widgets.cpu,'$1',2) --bind a top popup on the graph blingbling.popups.htop(mycairograph.widget,                       { title_color =beautiful.notify_font_color_1,                           user_color= beautiful.notify_font_color_2,                           root_color=beautiful.notify_font_color_3,                           terminal = "urxvt"}) -- mycore1=blingbling.progress_graph.new mycore1:set_height(18) mycore1:set_width(20) mycore1:set_filled(true) mycore1:set_h_margin(1) mycore1:set_filled_color("#00000033") mycore1:set_show_text(true) mycore1:set_label("$percent") mycore1:set_rounded_size(0.4) vicious.register(mycore1, vicious.widgets.cpu, "$2") -- mycore2=blingbling.progress_graph.new --same as mycore1 mycore3=blingbling.progress_graph.new --same as mycore1 mycore4=blingbling.progress_graph.new --same as mycore1

Пример tiled graph:


mycairograph=blingbling.tiled_graph.new mycairograph:set_height(18) mycairograph:set_width(360) mycairograph:set_tiles_color("#00000022") mycairograph:set_show_text(true) mycairograph:set_label("Load: $percent %")

Пример progress bar и progress graph:


my_fs=blingbling.progress_bar.new my_fs:set_height(18) my_fs:set_width(40) my_fs:set_show_text(true) my_fs:set_horizontal(true) --   my_fs_root=blingbling.progress_bar.new my_fs_root:set_height(18) my_fs_root:set_width(40) my_fs_root:set_v_margin(2) my_fs_root:set_show_text(true) my_fs_root:set_horizontal(true) -- my_fs_data0=blingbling.progress_graph.new my_fs_data0:set_height(18) my_fs_data0:set_width(40) my_fs_data0:set_show_text(true) my_fs_data0:set_horizontal(true) my_fs_data0:set_filled(true) -- my_fs_data1=blingbling.progress_bar.new my_fs_data1:set_height(18) my_fs_data1:set_width(40) my_fs_data1:set_show_text(true) my_fs_data1:set_horizontal(true) my_fs_data1:set_filled(true)



my_fs=blingbling.progress_bar.new my_fs:set_height(18) my_fs:set_width(40) my_fs:set_show_text(true) my_fs:set_horizontal(true) -- my_fs_root=blingbling.progress_bar.new my_fs_root:set_height(18) my_fs_root:set_width(40) my_fs_root:set_show_text(true) my_fs_root:set_horizontal(false) -- my_fs_data0=blingbling.progress_bar.new my_fs_data0:set_height(18) my_fs_data0:set_width(40) my_fs_data0:set_show_text(true) my_fs_data0:set_horizontal(false) --  my_fs_data1=blingbling.progress_bar.new my_fs_data1:set_height(18) my_fs_data1:set_width(40) my_fs_data1:set_show_text(true) my_fs_data1:set_horizontal(true)

Пример volume bar и mpd visualizer:
mpdlabel= widget({ type = "textbox" }) mpdlabel.text='MPD: ' -- my_mpd_volume=blingbling.volume.new my_mpd_volume:set_height(18) my_mpd_volume:set_width(30) --bind the volume graph on mpd my_mpd_volume:update_mpd --use bar, default is a triangle my_mpd_volume:set_bar(true) -- my_mpd=blingbling.mpd_visualizer.new my_mpd:set_height(18) my_mpd:set_width(350) my_mpd:update --display pcm graph with a line my_mpd:set_line(true) my_mpd:set_h_margin(4) --bind mpc commands on the widget my_mpd:set_mpc_commands --Show the artist name and the current song my_mpd:set_show_text(true) my_mpd:set_label("$artist > $title") -- my_volume=blingbling.volume.new my_volume:set_height(18) my_volume:set_width(30) --bind the volume widget on the master channel my_volume:update_master my_volume:set_master_control my_volume:set_bar(true)

Пример reboot button:
reboot=blingbling.system.rebootmenu(beautiful.reboot, beautiful.dialog_ok,    beautiful.dialog_cancel)

Пример меню udisks-glue:




udisks_glue=blingbling.udisks_glue.new(beautiful.dialog_ok) udisks_glue:set_mount_icon(beautiful.dialog_ok) udisks_glue:set_umount_icon(beautiful.dialog_cancel) udisks_glue:set_detach_icon(beautiful.dialog_cancel) udisks_glue:set_Usb_icon(beautiful.usb_icon) udisks_glue:set_Cdrom_icon(beautiful.cdrom_icon)

В конфигурации udisks-glue.conf используйте: filter disks { optical = false partition_table = false usage = filesystem } filter optical { optical = true } match disks { automount = true automount_options = sync post_mount_command = "echo \'udisks_glue:mount_device(\"%device_file\",\"%mount_point\",\"Usb\")\' | awesome-client" post_unmount_command = "echo \'udisks_glue:unmount_device(\"%device_file\",\"%mount_point\",\"Usb\")\' | awesome-client" post_removal_command = "echo \'udisks_glue:remove_device(\"%device_file\",\"%mount_point\",\"Usb\")\' | awesome-client" } match optical { automount = true automount_options = ro         post_mount_command = "echo \'udisks_glue:mount_device(\"%device_file\",\"%mount_point\",\"Cdrom\")\' | awesome-client" post_unmount_command = "echo \'udisks_glue:unmount_device(\"%device_file\",\"%mount_point\",\"Cdrom\")\' | awesome-client" post_removal_command = "echo \'udisks_glue:remove_device(\"%device_file\",\"%mount_point\",\"Cdrom\")\' | awesome-client" }

Пример виджета task warrior (здесь используется blingbling версия виджета меню):


task_warrior=blingbling.task_warrior.new(beautiful.tasks_icon) task_warrior:set_task_done_icon(beautiful.task_done_icon) task_warrior:set_task_icon(beautiful.task_icon) task_warrior:set_project_icon(beautiful.project_icon)

Пример таблицы виджетов layout
Этот пример виджета календаря blingbling (пока не закончен). Используется массив layout:



calendarbox.widgets={ {displayed_month_and_year, layout = blingbling.layout.array.line_center }, {day_widgets[1], day_widgets[2], day_widgets[3], day_widgets[4], day_widgets[5], day_widgets[6], day_widgets[7], layout =blingbling.layout.array.line_center}, {days_of_month[1],days_of_month[2], days_of_month[3], days_of_month[4], days_of_month[5],days_of_month[6],days_of_month[7],layout =blingbling.layout.array.line_center}, {days_of_month[8],days_of_month[9], days_of_month[10], days_of_month[11], days_of_month[12],days_of_month[13],days_of_month[14],layout =blingbling.layout.array.line_center}, {days_of_month[15],days_of_month[16], days_of_month[17], days_of_month[18], days_of_month[19],days_of_month[20],days_of_month[21],layout =blingbling.layout.array.line_center}, {days_of_month[22],days_of_month[23], days_of_month[24], days_of_month[25], days_of_month[26],days_of_month[27],days_of_month[28],layout =blingbling.layout.array.line_center}, {days_of_month[29],days_of_month[30], days_of_month[31], days_of_month[32], days_of_month[33],days_of_month[34],days_of_month[35],layout =blingbling.layout.array.line_center}, layout = blingbling.layout.array.stack_lines }

Пример Calendar widget


my_cal =blingbling.calendar.new({type = "imagebox", image = beautiful.calendar_icon}) --you can set blingbling.calendar.new({type = "textbox", text = "calendar"}) if you prefer a textbox my_cal:set_cell_padding(4) my_cal:set_columns_lines_titles_text_color(beautiful.text_font_color_2) my_cal:set_title_text_color(beautiful.bg_focus) --with only this you have a calendar with 2 buttons (next and previous month)



Меню появляется при нахождение мыши на датой. Переключение между событиями из напоминаний и task warrior (и всеми событиями которые у вас есть) осуществляется колесом мыши.

my_cal =blingbling.calendar.new({type = "imagebox", image = beautiful.calendar_icon}) my_cal:set_cell_padding(4) my_cal:set_columns_lines_titles_text_color(beautiful.text_font_color_2) my_cal:set_title_text_color(beautiful.bg_focus) my_cal:set_link_to_external_calendar(true) --This last line activate the functions that get events for a day from remind or task warrior (you can remove them and add your own)