Naughty/Ru

Naughty это lua библиотека реализующая всплывающие сообщения в awesome3 (git). Эта бибилотека включена в текущую сборку awesome git.

Подключение Naughty
Сначала, нужно подключить библиотеку в ваш rc.lua: require('naughty')

Пользователям Gentoo, необходимо добавить dbus в awesome: sudo flaggie awesome +dbus

Если вы не хотите использовать настройки по умолчанию, вы можете переопределить любое из следующих полей. За подробностями обращайтесь на luadoc. naughty.config.defaults.timeout         = 5 naughty.config.defaults.screen          = 1 naughty.config.defaults.position        = "top_right" naughty.config.defaults.margin          = 4 naughty.config.defaults.height          = 16 naughty.config.defaults.width           = 300 naughty.config.defaults.gap             = 1 naughty.config.defaults.ontop           = true naughty.config.defaults.font            = beautiful.font or "Verdana 8" naughty.config.defaults.icon            = nil naughty.config.defaults.icon_size       = 16 naughty.config.defaults.fg              = beautiful.fg_focus or '#ffffff' naughty.config.defaults.bg              = beautiful.bg_focus or '#535d6c' naughty.config.presetss.border_color    = beautiful.border_focus or '#535d6c' naughty.config.defaults.border_width    = 1 naughty.config.defaults.hover_timeout   = nil

ПРИМЕЧАНИЕ: в старых версиях awesome использовалось `naughty.config.default_preset` (пример будет работать на версиях старше 3.5.2)

Использование Naughty
Для создания всплывающего уведомления используйте naughty.notify({args}). Стандартное использование: naughty.notify({ text="notification content", icon="/path/to/icon" })

Обратите внимание на то, что аргументы naughty.notify можно дополнять. Приведенный выше пример использует предопределенные настройки, что приводит к уведомлению стандартного вида с заданным текстом и картинкой. Если вы не хотите использовать дефолтные настройки, вы можете переопределить значения по умолчанию, передав их в виде аргументов функции:

naughty.notify({   text = "notification",    title = "title",    position = "top_left"|"top_right"|"bottom_left"|"bottom_right",    timeout = 5,    icon="/path/to/image",    fg="#ffggcc",    bg="#bbggcc",    screen = 1,    ontop = false,     run = function  awful.util.spawn("wicd-client") end })

Также вы можете использовать некоторые html теги в naughty. Поэтому все, что находится за < не будет отображено.

Вызов Naughty
Простое добавление Naughty в ваш конфиг не выведет никаких уведомлений, для этого необходимо передать эти данные клиенту echo 'naughty.notify({title = "testing", text = "naughty", timeout = 10})' | awesome-client -
 * Для проверки модуля вы можете вызвать naughty.notify из консоли Lua.
 * Вы можете вызвать функцию из любого места rc.lua (лучшее место в виджете, не правда ли!)
 * Вызвать функцию из консоли, используя awesome-client:

Хорошим способом использования этого метода, является вызов в acpid/ivman/прочих.

ivman
Взято из ~/.ivman/IvmConfigActions.xml:   

       

rc.lua + curl / мониторинг переключения сети*WRT/AutoAP
AutoAP это скипт демона позволяющий OpenWRT/DD-WRT/проч. переключать сеть в соотвествии с качеством сигнала сети, которая мониторится через ping. Дополнительно по DD-WRT смотрите Wiki.

function dump_autoap os.execute('curl -s http://gw/user/autoap.htm > /tmp/.awesome.autoap &') end

last_ap = "none" function get_autoap local ap = "" if info then return end local f = io.open('/tmp/.awesome.autoap') if not f then return end local line = f:read f:close if not line then return end

local aar, beg = line:find(' ') if line:sub(beg+32, beg+32) == 'S' then ap = "searching... " elseif line:sub(beg+32,beg+32) == 'C' then endd = line:find(' ', beg) ap = line:sub(beg+47,endd-2) end

if ap ~= last_ap then naughty.notify({title = "AutoAP network", text = ap, timeout = 10}) last_ap = ap   end return ap end

function hook_10s dump_autoap get_autoap end

awful.hooks.timer.register(10, hook_10s)

rc.lua + dict / словарные подсказки с выводом через naughty
keybinding({ modkey}, "d", function        info = true        awful.prompt.run({ fg_cursor = "black",bg_cursor="orange", prompt = " Dict: " }, mypromptbox[mouse.screen], function(word) local f = io.popen("dict -d wn " .. word .. " 2>&1") local fr = "" for line in f:lines do               fr = fr .. line .. '\n' end f:close naughty.notify({ text = ''..fr..' ', timeout = 0, width = 400 }) end, nil, awful.util.getdir("cache") .. "/dict") end):add

rc.lua / calculator prompt with naughty output
При нажатии клавиш, отображается расчитанная калькулятором строка(предварительно заполненная последним результатом, если он есть) и отображает уведомление naughty с полученным значением. Когда нажимается, значение копируется в буфер, для дальнейшей вставки где либо. val = nil keybinding({ modkey}, "c", function    awful.prompt.run({  text = val and tostring(val), selectall = true, fg_cursor = "black",bg_cursor="orange", prompt = " Calc: " }, mypromptbox, function(expr) val = awful.util.eval(expr) naughty.notify({ text = expr .. ' = ' .. val .. " ",                              timeout = 0,                               run = function io.popen("echo ".. val .. " | xsel -i"):close end, }) end, nil, awful.util.getdir("cache") .. "/calc") end):add

Использование naughty для отладки кода lua
С помощью naughty, очень легко в любое время проверить значение переменных. Забудьте print и проверку в консоли. Для защиты от ошибок в синтаксисе, поместите эту функцию перед отлаживаемым кодом: function dbg(vars) local text = "" for i=1, #vars do text = text .. vars[i] .. " | " end naughty.notify({ text = text, timeout = 0 }) end Затем в коде, вы можете для отладки кода использовать следующую строку, чтобы увидеть значение переменной в реальном времени, через всплывающее сообщение! dbg({list, of, variables})

Всплывающий календарь
Если у вас не достаточно места на рабочем столе, или ваши часы отображают только время, вы можете использовать всплывающий календарь, когда мышка находится над часами. Используйте колесо мыши, чтобы переключать отображаемый месяц. local calendar = nil local offset = 0

function remove_calendar if calendar ~= nil then naughty.destroy(calendar) calendar = nil offset = 0 end end

function add_calendar(inc_offset) local save_offset = offset remove_calendar offset = save_offset + inc_offset local datespec = os.date("*t") datespec = datespec.year * 12 + datespec.month - 1 + offset datespec = (datespec % 12 + 1) .. " " .. math.floor(datespec / 12) local cal = awful.util.pread("cal -m " .. datespec) cal = string.gsub(cal, "^%s*(.-)%s*$", "%1") calendar = naughty.notify({           text = string.format('%s ', "monospace", os.date("%a, %d %B %Y") .. "\n" .. cal),           timeout = 0, hover_timeout = 0.5,            width = 160,        }) end

-- измените clockbox вашего виджета часов (т.е. mytextclock) mytextclock:add_signal("mouse::enter", function     add_calendar(0)    end) mytextclock:add_signal("mouse::leave", remove_calendar) mytextclock:buttons(awful.util.table.join( button({ }, 4, function           add_calendar(-1)        end), button({ }, 5, function           add_calendar(1)        end) ))

Вызов naughty через dbus
Скачайте последнюю версию awesome с поддержкой dbus. Вы можете создать уведомление используя notify-me, dbus-send, d-feet или просто запусти любое приложение с поддержкой dbus-уведомлений, например gajim.

Использование notify-send: notify-send "awesome is" "getting naughty" Обратите внимание, что системы Debian/Ubuntu, имеют предустановленный notification-daemon, поэтому notify-send перехватываются Gnome/KDE (соответственно, уведомление не будет отображено naughty)

Использование dbus-send: dbus-send --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.Notify string:"" uint32:0 string:"" \ string:"title" string:"text" array:string:"" array:string:"" int32:-1

Приостановка/Возобновление Naughty
Вы можете временно отключить naughty, например когда просматриваете видео. Для этого вызовите, а затем для восстановления его работы. Naughty приостановит все уведомления, которые будут ему посылаться, а затем отобразит их, когда работа будет восстановлена.

Удаление уведомлений
Иногда случаются события, например изменение громкости, подключение устройств, когда может потребоваться отобразить новое уведомление немедленно после предыдущего. Но вы не хотите, чтобы уведомления перекрывали друг друга. И Awesome еще не послал notify-osd. В этом случае можно использовать другой путь, совместно используя 'psychon' пользовательской рассылке:

$ echo 'return naughty.notify({ text = "foo", timeout = 0 }).id' | awesome-client double 1551 $ echo 'return naughty.notify({ text = "foo2", timeout = 0, replaces_id = 1551 }).id' | awesome-client double 1552

По сути, это заменит предыдущее уведомление новым.

To be naughtier

 * stacking - new popups appearing 'before' old ones
 * уровни важности