Naughty/fr

Naughty est une bibliothèque Lua qui permet l’implémentation de notifications pour awesome 3 (git) sous la forme de popups. Elle est incluse dans la version maître git actuelle d’awesome. Vous pouvez trouver la branche de développement dans la branche naughty du miroir git d’awesome.

Mettre en place naughty
Tout d’abord, incluez la bibliothèque dans votre rc.lua : require('naughty')

Si vous voulez changer les paramètres par défaut, vous pouvez redéfinir les champs suivants. Pour des détails, reportez-vous à la doc Lua. naughty.config.timeout         = 5 naughty.config.screen          = 1 naughty.config.position        = "top_right" naughty.config.margin          = 4 naughty.config.height          = 16 naughty.config.width           = 300 naughty.config.gap             = 1 naughty.config.ontop           = true naughty.config.font            = beautiful.font or "Verdana 8" naughty.config.icon            = nil naughty.config.icon_size       = 16 naughty.config.fg              = beautiful.fg_focus or '#ffffff' naughty.config.bg              = beautiful.bg_focus or '#535d6c' naughty.config.presets.normal.border_color    = beautiful.border_focus or '#535d6c' naughty.config.border_width    = 1 naughty.config.hover_timeout   = nil

Utilisation de naughty
Pour créer une notification sous forme de popup, appelez naughty.notify({arguments}). D’habitude, on utilise : naughty.notify({ text="Contenu de la notification", icon="/chemin/vers/icone" })

Remarquez que les arguments de naughty.notify sont facultatifs. L’exemple précédent utilise des paramètres configurés par défaut qui on pour résultat de générer des popups avec une apparence uniforme pour le texte et l’icône. Si vous voulez changer tous les détails, vous pouvez changer le paramètres par défaut avec les arguments suivants : naughty.notify({   text = "Notification",    title = "Titre",    position = "top_left"|"top_right"|"bottom_left"|"bottom_right",    timeout = 5,    icon="/chemin/vers/image",    fg="#ffggcc",    bg="#bbggcc",    screen = 1,    ontop = false,     run = function  awful.util.spawn("wicd-client") end })

Remarquez que vous pouvez utiliser des balises HTML avec naughty, donc les symboles ne s’afficheront pas.

Fournir des informations à naughty
Charger uniquement naughty dans votre configuration ne produira aucune popup. Le problème principal est de lui fournir des données. Pour cela : echo 'naughty.notify({title = "Test", text = "Naughty", timeout = 10})' | awesome-client -
 * pour tester le module, vous pouvez appeler naughty.notify depuis l’invite Lua ;
 * vous pouvez appeler la fonction depuis n’importe quel endroit du rc.lua, ce qui est bien pour des infos supplémentaires de widgets, par exemple ;
 * pour appeler la fonction depuis n’importe quoi qui peut exécuter des commandes, utilisez awesome-client :

La dernière méthode est bonne pour fournir à naughty des données depuis acpid, ivman, etc.

Ivman
Récupéré de ~/.ivman/IvmConfigActions.xml :   

       

rc.lua + curl : hack pour bascule de réseau *WRT/AutoAP
AutoAP est un script de démon qui permet à OpenWRT, DD-WRT ou autre de changer de réseau en se basant sur la qualité du signal qui est suivi avec ping. Regardez le wiki de DD-WRT pour plus d’infos.

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 = "Recherche en cours… " 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 = "Réseau AutoAP", 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 : invite de dictionnaire avec sortie naughty
keybinding({ modkey}, "d", function        info = true        awful.prompt.run({ fg_cursor = "black",bg_cursor="orange", prompt = " Dico : " }, 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 : invite de calculatrice avec sortie naughty
Le raccourci clavier suivant affiche une invite de calculatrice, contenant le dernier résultat si disponible, et affiche également une popup naughty dont la valeur est l’expression. Quand on clique, la valeur est copiée vers le presse-papiers pour la coller ailleurs. capture d’écran 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

Utiliser naughty pour déboguer du code Lua
Avec naughty, il est très facile de vérifier la valeur de variables à n’importe quel moment. Oubliez print dans votre console ! Pour vous évitez de devoir retaper toute la syntaxe, vous pouvez mettre cette fonction avant le code que vous voulez déboguer. capture d’écran function dbg(vars) local text = "" for i=1, #vars do text = text .. vars[i] .. " | " end naughty.notify({ text = text, timeout = 0 }) end Maintenant, vous pouvez utiliser la ligne suivant dans le code que vous voulez déboguer, pour votre les valeurs en temps réel dans des popups ! dbg({liste, de, variables})

Calendrier popup
Si vous n’avez pas beaucoup de place sur votre bureau et que votre horloge ne vous donne que l’heure, vous pouvez afficher la date et le calendrier quand la souris passe dessus. Utilisez alors la roulette de la souris pour changer le mois que vous voulez regarder. capture d’écran

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

-- remplace la boîte d’horloge par le widget d’horloge (par exemple « mytextbox ») clockbox.mouse_enter = function add_calendar(0) end clockbox.mouse_leave = remove_calendar

clockbox:buttons({       button({ }, 4, function add_calendar(-1) end),       button({ }, 5, function add_calendar(1) end),   })

Fournir des informations à naughty en utilisant D-Bus
Récupérez la dernière version git d’awesome et naughty écoutera l’interface D-Bus. Vous pouvez créer des notifications en utilisant notify-me, dbus-send, d-feet ou en ouvrant simplement n’importe quelle application avec une notification D-Bus, comme Gajim.

Pour utiliser notify-send : notify-send "awesome is" "getting naughty"

Pour utiliser dbus-send : dbus-send --dest=org.freedesktop.Notifications --type=method_call /org/freedesktop/Notifications \ org.freedesktop.Notifications.Notify string:"" uint32:0 string:"" string:"awesome is" string:"getting naughty"

Pour aller plus loin avec naughty

 * empilement : les nouvelles popups s’affichent « avant » les anciennes
 * niveaux d’urgence pour les popups