Naughty
| Languages: |
English • Français |
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.
Contents |
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 < et > 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 :
- 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 :
echo 'naughty.notify({title = "Test", text = "Naughty", timeout = 10})' | awesome-client -</pre>
La dernière méthode est bonne pour fournir à naughty des données depuis acpid, ivman, etc.
Exemples
Ivman
Récupéré de ~/.ivman/IvmConfigActions.xml :
<ivm:Match name="hal.info.linux.driver" value="usb">
<ivm:Option name="exec" value="echo naughty.notify\({timeout=15, title=\'Appareil USB\',\
text=\'$hal.info.product$\'}\) | awesome-client -" />
</ivm:Match>
<ivm:Match name="hal.volume.is_mounted" value="true">
<ivm:Option name="exec" \
value="echo naughty.notify\({timeout=15,\ title=\'Monté\',\
text=\'$hal.block.device$ sur $hal.volume.mount_point$ \($hal.volume.size$\)\'}\)\
| awesome-client -" />
</ivm:Match>
<ivm:Match name="hal.info.category" value="storage">
<ivm:Match name="hal.storage.drive_type" value="disk">
<ivm:Option name="exec" value="echo naughty.notify\({timeout=15, title=\'Nouveau volume\',\
text=\'$hal.info.vendor$ $hal.info.product$ $hal.storage.size$\'}\) | awesome-client -" />
</ivm:Match>
</ivm:Match>
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('<title>')
if line:sub(beg+32, beg+32) == 'S' then ap = "<span color=\"#FF602E\">Recherche en cours…</span>"
elseif line:sub(beg+32,beg+32) == 'C' then
endd = line:find('</title>', 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 = "<span color='#008DFA'>Dico :</span> " },
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 = '<span font_desc="Sans 7">'..fr..'</span>', 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 = "<span color='#00A5AB'>Calc :</span> " }, mypromptbox,
function(expr)
val = awful.util.eval(expr)
naughty.notify({ text = expr .. ' = <span color="white">' .. val .. "</span>",
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('<span font_desc="%s">%s</span>', "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