Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
awesome [Le 06/02/2012, 14:25] rolinh màj widget batterie rolinh |
awesome [Le 21/02/2020, 19:02] 91.169.249.112 |
||
---|---|---|---|
Ligne 25: | Ligne 25: | ||
===== Installation ===== | ===== Installation ===== | ||
+ | |||
+ | <note important>Il existe un dépôt PPA contenant la dernière version. Pour Installer awesome depuis ce dépôt : | ||
+ | <code>sudo add-apt-repository ppa:klaus-vormweg/awesome && sudo apt-get update && sudo apt-get install awesome</code></note> | ||
Awesome se trouve déjà dans les dépôts officiels. | Awesome se trouve déjà dans les dépôts officiels. | ||
Il suffit d’[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt://awesome|awesome]] et [[apt://awesome-extra|awesome-extra]]**. | Il suffit d’[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt://awesome|awesome]] et [[apt://awesome-extra|awesome-extra]]**. | ||
- | le paquet **awesome-extra** fournit de nombreux //widgets// supplémentaires | + | Le paquet **awesome-extra** fournit de nombreux //widgets// supplémentaires |
(l'usage de la mémoire, la vitesse bande passante, etc ). | (l'usage de la mémoire, la vitesse bande passante, etc ). | ||
- | |||
- | La compilation (fastidieuse) de awesone n'est utile que pour ceux qui ont réellement besoin de la toute dernière version. | ||
- | |||
- | |||
==== En compilant les sources ==== | ==== En compilant les sources ==== | ||
Ligne 69: | Ligne 68: | ||
Il faut commencer par créer le dossier qui contiendra les fichiers de configuration dans le home: | Il faut commencer par créer le dossier qui contiendra les fichiers de configuration dans le home: | ||
<code>mkdir ~/.config/awesome</code> | <code>mkdir ~/.config/awesome</code> | ||
- | Ensuite, afin d'avoir une base, on copie de le fichier de configuration par défaut: | + | Ensuite, afin d'avoir une base, on copie le fichier de configuration par défaut: |
<code>cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua</code> | <code>cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua</code> | ||
Il est aussi possible de copier le fichier de thème afin de les personnaliser: | Il est aussi possible de copier le fichier de thème afin de les personnaliser: | ||
Ligne 77: | Ligne 76: | ||
==== Raccourcis claviers ==== | ==== Raccourcis claviers ==== | ||
Les principaux sont les suivants: | Les principaux sont les suivants: | ||
- | * Meta = Touche Windows (entre Ctrl gauche et Alt) | + | * Super = Touche Windows (entre Ctrl gauche et Alt) |
- | * Meta + Entrer => ouvre un terminal | + | * Super + Entrer => ouvre un terminal |
- | * Meta + Fleche Droite => passer au bureau de droite | + | * Super + Flèche Droite => passer au bureau de droite |
- | * Meta + Fleche Gauche => passer au bureau de gauche | + | * Super + Flèche Gauche => passer au bureau de gauche |
- | * Meta + F1 => lanceur d'un manuel pour une application | + | * Super + F1 => lanceur d'un manuel pour une application |
Ligne 138: | Ligne 137: | ||
</note> | </note> | ||
- | ==== afficher la date et l'heure dans la version française ==== | + | ==== Afficher la date et l'heure dans la version française ==== |
Modifiez les lignes suivantes : | Modifiez les lignes suivantes : | ||
Ligne 144: | Ligne 143: | ||
<code lua> | <code lua> | ||
-- Create a textclock widget | -- Create a textclock widget | ||
- | mytextclock = awful.widget.textclock({ align = "right" })</code> | + | mytextclock = awful.widget.textclock()</code> |
par | par | ||
Ligne 151: | Ligne 150: | ||
-- Create a textclock widget | -- Create a textclock widget | ||
os.setlocale("fr_FR.UTF-8") -- Français | os.setlocale("fr_FR.UTF-8") -- Français | ||
- | mytextclock = awful.widget.textclock({ align = "right" }," %a %d %b %H:%M ")</code> | + | mytextclock = awful.widget.textclock(" %a %d %b %H:%M ", 60) |
+ | -- mytextclock = awful.widget.textclock(" %a %d %b, %H:%M:%S ", 1) si vous voulez afficher les secondes</code> | ||
Ligne 173: | Ligne 173: | ||
Les layouts (''layouts[2]'' par exemple) correspondent au layouts définit dans le tableau au dessus dans votre rc.lua. Ainsi, ''layouts[2]'' correspond au mode tile normal et layouts[1] correspond au mode float. Vous pouvez donc remplacer le numéro celui qui correspond à n'importe lequel des 12 layouts disponibles. Notez bien que les arrays ''names'' et ''layout'' doivent avoir la même taille! | Les layouts (''layouts[2]'' par exemple) correspondent au layouts définit dans le tableau au dessus dans votre rc.lua. Ainsi, ''layouts[2]'' correspond au mode tile normal et layouts[1] correspond au mode float. Vous pouvez donc remplacer le numéro celui qui correspond à n'importe lequel des 12 layouts disponibles. Notez bien que les arrays ''names'' et ''layout'' doivent avoir la même taille! | ||
- | ====Lancer des applications au demarrage==== | + | ====Lancer des applications au démarrage==== |
- | Pour lancer des applications au demarrage rien de plus simple, il suffit de rajouter cette ligne (en fin de fichier rc.lua) pour lancer nm-applet (applet de Network-Manager) | + | Pour lancer des applications au démarrage rien de plus simple, il suffit de rajouter cette ligne (en fin de fichier rc.lua) pour lancer nm-applet (applet de Network-Manager) |
<code>os.execute("nm-applet &")</code> | <code>os.execute("nm-applet &")</code> | ||
ou | ou | ||
<code>awful.util.spawn("nm-applet &")</code> | <code>awful.util.spawn("nm-applet &")</code> | ||
- | Bien evidemment ceci est valable pour tout les executables que vous voudriez lancer au demarrage :D | + | Bien évidemment ceci est valable pour tout les exécutables que vous voudriez lancer au démarrage :D |
+ | <note important>Cette fonctionnalité ne fonctionne pas sur la version 13.10 avec awful.util.spawn. Plus d'information sur la page de bug https://bugs.launchpad.net/ubuntu/+source/awesome/+bug/1176862</note> | ||
==== Ajouter des widgets ==== | ==== Ajouter des widgets ==== | ||
La zone de notification se situe par défaut en haut à droite, à côté de l'horloge. Il est très facile d'écrire des widgets en lua afin de, par exemple, afficher des notifications à propos de l'état de la batterie ou encore créer un applet de son. Cependant, si cela vous rebute, il y existe également des librairies de widgets toute prêtes dont l'utilisation est détaillée ci-dessous. | La zone de notification se situe par défaut en haut à droite, à côté de l'horloge. Il est très facile d'écrire des widgets en lua afin de, par exemple, afficher des notifications à propos de l'état de la batterie ou encore créer un applet de son. Cependant, si cela vous rebute, il y existe également des librairies de widgets toute prêtes dont l'utilisation est détaillée ci-dessous. | ||
=== Precious (Widgets de Rolinh) === | === Precious (Widgets de Rolinh) === | ||
- | Ces widgets ont été écrit pas mes soins et adapté à mes machines. Par conséquent, il est possible qu'il y ait quelques modifications mineures à apporter à certains de ces widgets afin qu'ils marchent correctement pour vous. Rien d'insurmontable cependant. Libre à vous également de les adapter/modifier comme bon vous semble! On peut les trouver dans ce [[http://git.rolinh.ch/?p=precious.git&a=summary|dépôt git]]. | + | <note important>Ces widgets ont été écrit pas mes soins et adapté à mes machines. Par conséquent, il est possible qu'il y ait quelques modifications mineures à apporter à certains de ces widgets afin qu'ils marchent correctement pour vous. Rien d'insurmontable cependant. Libre à vous également de les adapter/modifier comme bon vous semble! On peut les trouver dans ce [[http://projects.gw-computing.net/projects/precious/repository|dépôt git]]. Il est prévu que je les améliore dans le futur afin de les rendre plus générique.</note> |
+ | <note warning>Depuis la version 3.5 (sortie en décembre 2012), les API Awesome pour les widgets ont complétement changés. Étant donné que Precious souffre également du manque d'une couche d'abstraction pour récupérer les informations nécessaires aux widgets, je ne vais pas fournir l'effort d'adapter les widgets à Awesome 3.5 (pour le moment en tout cas). La librairie Vicious fonctionne avec Awesome 3.5 et constiture à mon avis une bonne alternative.</note> | ||
Pour avoir une idée de ce à quoi cela peut ressembler, voici une capture de la zone de widget: | Pour avoir une idée de ce à quoi cela peut ressembler, voici une capture de la zone de widget: | ||
Ligne 191: | Ligne 193: | ||
{{:awesomewmapplet.png|}} | {{:awesomewmapplet.png|}} | ||
- | Il est à noter cependant qu'il est fort possible, voir très probable, qu'ils aient changés / évolués et que d'autres soient apparus depuis le temps de la capture d'écran. | + | Il est à noter cependant qu'il est fort possible, voire très probable, qu'ils aient changé / évolué et que d'autres soient apparus depuis le temps de la capture d'écran. |
- | Ajouter des widgets peut se faire de plusieurs manières, la plus simple étant de copier le code d'un widget directement dans votre rc.lua. En revanche, cette méthode n'est pas recomandée car si des mises-à-jours sont apportées aux widgets, vous devrez recommencer le processus sans compter que vous ne serez pas forcément au courant des mises-à-jour. | + | Ajouter des widgets peut se faire de plusieurs manières, la plus simple étant de copier le code d'un widget directement dans votre rc.lua. En revanche, cette méthode n'est pas recommandée car si des mises-à-jours sont apportées aux widgets, vous devrez recommencer le processus sans compter que vous ne serez pas forcément au courant des mises-à-jour. |
La méthode recommandée consiste donc à cloner le dépôt [[git|git]] dans votre dossier awesome. Pour cela, il vous faut bien sûr que git soit installé sur votre machine. | La méthode recommandée consiste donc à cloner le dépôt [[git|git]] dans votre dossier awesome. Pour cela, il vous faut bien sûr que git soit installé sur votre machine. | ||
Une fois que vous l'aurez cloné, la mise.à-jour des widgets se fera simplement à l'aide d'une commande. Alors, elle n'est pas belle la vie? | Une fois que vous l'aurez cloné, la mise.à-jour des widgets se fera simplement à l'aide d'une commande. Alors, elle n'est pas belle la vie? | ||
Ligne 255: | Ligne 257: | ||
awful.key({ }, "XF86AudioLowerVolume", function () volume("down", tb_volume) end), | awful.key({ }, "XF86AudioLowerVolume", function () volume("down", tb_volume) end), | ||
awful.key({ }, "XF86AudioMute", function () volume("mute", tb_volume) end)</coPassons maintenant à l'applet lui-même:de> | awful.key({ }, "XF86AudioMute", function () volume("mute", tb_volume) end)</coPassons maintenant à l'applet lui-même:de> | ||
+ | </code> | ||
Pour le reste, il vous suffit d'inclure le code correspondant au widget pour le son à votre rc.lua: | Pour le reste, il vous suffit d'inclure le code correspondant au widget pour le son à votre rc.lua: | ||
<code lua> | <code lua> | ||
Ligne 280: | Ligne 282: | ||
=== Applet d'indication de l'état de la batterie === | === Applet d'indication de l'état de la batterie === | ||
Cet applet n'est utile que pour ceux qui utilisent un ordinateur portable ;-) | Cet applet n'est utile que pour ceux qui utilisent un ordinateur portable ;-) | ||
+ | |||
+ | {{:precious-battery.png|}} | ||
+ | |||
+ | Les informations détaillées ne sont affichées qu'au survol de l'applet (en haut à gauche sur l'image) avec la souris. | ||
<note important>Si le widget ne fonctionne pas, il faut vérifier le numéro de la batterie pour le remplacer dans le code de battery.lua. Pour cela, allez faire un tour dans ''/proc/acpi/battery'' et vérifiez si c'est dans BAT0 ou BAT1 qu'il y a les infos. Chez moi, les infos sont dans BAT0 mais si chez vous c'est dans BAT1 il faut alors remplacer en conséquence la première ligne dans le widget (battery.lua).</note> | <note important>Si le widget ne fonctionne pas, il faut vérifier le numéro de la batterie pour le remplacer dans le code de battery.lua. Pour cela, allez faire un tour dans ''/proc/acpi/battery'' et vérifiez si c'est dans BAT0 ou BAT1 qu'il y a les infos. Chez moi, les infos sont dans BAT0 mais si chez vous c'est dans BAT1 il faut alors remplacer en conséquence la première ligne dans le widget (battery.lua).</note> | ||
Il suffit d'include le widget: | Il suffit d'include le widget: | ||
Ligne 288: | Ligne 294: | ||
=== Applet d'indication de l'état d'utilisation de la mémoire RAM === | === Applet d'indication de l'état d'utilisation de la mémoire RAM === | ||
- | Comme je ne vais pas chercher la taille de votre mémoire RAM automatiquement (ce n'est pas quelque chose qui change souvent :-P ), il faut juste indiquer le total correspondant (chez moi c'est 2056100). | + | Comme d'habitude: |
- | Pour savoir la quantité exact de RAM, utilisez cette commande: | + | <code lua> |
- | <code>cat /proc/meminfo | grep MemTotal</code> | + | require("precious.ram") |
- | <code lua>-- Create a RAM widget giving the MB used by the RAM | + | </code> |
- | -- declare memtot for reuse below | + | |
- | memtot = 2056100 | + | |
- | function activeram() | + | Et il faut aussi ajouter ''meminfo'' dans la wibox. |
- | local active, ramusg, res | + | |
- | + | ||
- | for line in io.lines("/proc/meminfo") do | + | |
- | for key , value in string.gmatch(line, "(%w+):\ +(%d+).+") do | + | |
- | if key == "Active" then active = tonumber(value) | + | |
- | end | + | |
- | end | + | |
- | end | + | |
- | + | ||
- | ramusg = (active/memtot)*100 | + | |
- | + | ||
- | res = string.format("%.2f", (active/1024)) | + | |
- | + | ||
- | if ramusg < 51 then | + | |
- | res = '<span color="green">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | + | |
- | elseif ramusg < 71 then | + | |
- | res = '<span color="yellow">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | + | |
- | elseif ramusg < 86 then | + | |
- | res = '<span color="orange">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | + | |
- | else | + | |
- | res = '<span color="red">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | + | |
- | end | + | |
- | return res | + | === Applet du taux d'utilisation du CPU et de sa température === |
- | end | + | <code lua> |
- | + | require("precious.cpu") | |
- | meminfo = widget({ type = "textbox", name = "meminfo" }) | + | |
- | + | ||
- | -- Assign a hook to update info | + | |
- | meminfo_timer = timer({timeout = 1}) | + | |
- | meminfo_timer:add_signal("timeout", function() meminfo.text = activeram() .. " | " end) | + | |
- | meminfo_timer:start() | + | |
</code> | </code> | ||
- | Et de nouveau, il faut ajouter ''meminfo'' dans la wibox. | ||
- | |||
- | === Applet du taux d'utilisation du CPU et de sa température === | ||
- | <code lua>-- Create a CPU widget | ||
- | jiffies = {} | ||
- | function activecpu() | ||
- | local s, str | ||
- | |||
- | for line in io.lines("/proc/stat") do | ||
- | local cpu,newjiffies = string.match(line, "(cpu)\ +(%d+)") | ||
- | if cpu and newjiffies then | ||
- | if not jiffies[cpu] then | ||
- | jiffies[cpu] = newjiffies | ||
- | end | ||
- | -- The string.format prevents your task list from jumping around | ||
- | -- When CPU usage goes above/below 10% | ||
- | str = string.format("%02d", newjiffies-jiffies[cpu]) | ||
- | |||
- | if str < "31" then | ||
- | str = '<span color="green">' .. str .. '</span>' | ||
- | elseif str < "51" then | ||
- | str = '<span color="yellow">' .. str .. '</span>' | ||
- | elseif str < "70" then | ||
- | str = '<span color="orange">' .. str .. '</span>' | ||
- | else | ||
- | str = '<span color="red">' .. str .. '</span>' | ||
- | end | ||
- | |||
- | s = '| CPU: ' .. str .. '% ' | ||
- | jiffies[cpu] = newjiffies | ||
- | end | ||
- | end | ||
- | |||
- | return s | ||
- | end | ||
- | |||
- | cpuinfo = widget({ type = "textbox", name = "cpuinfo" }) | ||
- | -- register the hook to update the display | ||
- | cpuinfo_timer = timer({timeout = 1}) | ||
- | cpuinfo_timer:add_signal("timeout", function() cpuinfo.text = activecpu() end) | ||
- | cpuinfo_timer:start() | ||
- | |||
- | -- Create CPU Temp Widget | ||
- | function activecputemp() | ||
- | local temp | ||
- | |||
- | io.input("/sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/temp") | ||
- | temp = io.read("*number")/1000 | ||
- | |||
- | if temp < 46 then | ||
- | temp = '<span color="turquoise">' .. temp .. '</span>' | ||
- | elseif temp < 61 then | ||
- | temp = '<span color="yellow">' .. temp .. '</span>' | ||
- | elseif temp < 76 then | ||
- | temp = '<span color="orange">' .. temp .. '</span>' | ||
- | else | ||
- | temp = '<span color="red">' .. temp .. '</span>' | ||
- | end | ||
- | |||
- | return temp | ||
- | end | ||
- | |||
- | cputemp = widget({ type = "textbox" , name = "cputemp" }) | ||
- | |||
- | -- Assign a hook to update temperature | ||
- | -- awful.hooks.timer.register(1, function() cputemp.text = "@ " .. activecputemp() .. "°C | RAM: " end) | ||
- | cputemp_timer = timer({timeout = 1}) | ||
- | cputemp_timer:add_signal("timeout", function() cputemp.text = "@ " .. activecputemp() .. "°C | RAM: " end) | ||
- | cputemp_timer:start()</code> | ||
Ajoutez encore ''cpuinfo'' et ''cputemp'' dans la wibox en suivant cet ordre afin que l'affichage soit correct (il s'agit de deux widgets différents). | Ajoutez encore ''cpuinfo'' et ''cputemp'' dans la wibox en suivant cet ordre afin que l'affichage soit correct (il s'agit de deux widgets différents). | ||
Ligne 455: | Ligne 362: | ||
=== Vicious === | === Vicious === | ||
Tout d'abord, une bonne idée est d'aller faire un tour sur [[http://sysphere.org/~anrxc/j/archives/2009/07/09/vicious_widgets_for_awesome_wm/index.html|le site officiel de Vicious]], ou sur [[http://awesome.naquadah.org/wiki/Vicious|la section Vicious du wiki officiel d'Awesome]], avant de télécharger le code des widgets sur [[http://git.sysphere.org/vicious/|le dépôt Git officiel]]. | Tout d'abord, une bonne idée est d'aller faire un tour sur [[http://sysphere.org/~anrxc/j/archives/2009/07/09/vicious_widgets_for_awesome_wm/index.html|le site officiel de Vicious]], ou sur [[http://awesome.naquadah.org/wiki/Vicious|la section Vicious du wiki officiel d'Awesome]], avant de télécharger le code des widgets sur [[http://git.sysphere.org/vicious/|le dépôt Git officiel]]. | ||
- | ==== Exemple de rc.lua ==== | ||
- | Pour les flemmard qui ne veulent pas tout écrire eux-même ou pour ceux qui veulent s'en inspirer, voici mon rc.lua complet: | ||
- | <code lua> | ||
- | -- Standard awesome library | ||
- | require("awful") | ||
- | require("awful.autofocus") | ||
- | require("awful.rules") | ||
- | -- Theme handling library | ||
- | require("beautiful") | ||
- | -- Notification library | ||
- | require("naughty") | ||
- | |||
- | -- Sound Widget | ||
- | cardid = 0 | ||
- | channel = "Master" | ||
- | function volume (mode, widget) | ||
- | if mode == "update" then | ||
- | local fd = io.popen("amixer -c " .. cardid .. " -- sget " .. channel) | ||
- | local status = fd:read("*all") | ||
- | fd:close() | ||
- | |||
- | local volume = string.match(status, "(%d?%d?%d)%%") | ||
- | volume = string.format("% 3d", volume) | ||
- | |||
- | status = string.match(status, "%[(o[^%]]*)%]") | ||
- | |||
- | if string.find(status, "on", 1, true) then | ||
- | volume = "| Vol:<span color='green'>" .. volume .. "</span>% " | ||
- | else | ||
- | volume = "| Vol:<span color='red'>" .. volume .. "</span>M " | ||
- | end | ||
- | widget.text = volume | ||
- | elseif mode == "up" then | ||
- | io.popen("amixer -q -c " .. cardid .. " sset " .. channel .. " 5%+"):read("*all") | ||
- | volume("update", widget) | ||
- | elseif mode == "down" then | ||
- | io.popen("amixer -q -c " .. cardid .. " sset " .. channel .. " 5%-"):read("*all") | ||
- | volume("update", widget) | ||
- | else | ||
- | io.popen("amixer -c " .. cardid .. " sset " .. channel .. " toggle"):read("*all") | ||
- | volume("update", widget) | ||
- | end | ||
- | end | ||
- | |||
- | -- Enable mocp | ||
- | function moc_control (action) | ||
- | local moc_info,moc_state | ||
- | |||
- | if action == "next" then | ||
- | io.popen("mocp --next") | ||
- | elseif action == "previous" then | ||
- | io.popen("mocp --previous") | ||
- | elseif action == "stop" then | ||
- | io.popen("mocp --stop") | ||
- | elseif action == "play_pause" then | ||
- | moc_info = io.popen("mocp -i"):read("*all") | ||
- | moc_state = string.gsub(string.match(moc_info, "State: %a*"),"State: ","") | ||
- | |||
- | if moc_state == "PLAY" then | ||
- | io.popen("mocp --pause") | ||
- | elseif moc_state == "PAUSE" then | ||
- | io.popen("mocp --unpause") | ||
- | elseif moc_state == "STOP" then | ||
- | io.popen("mocp --play") | ||
- | end | ||
- | end | ||
- | end | ||
- | |||
- | -- {{{ Variable definitions | ||
- | -- Themes define colours, icons, and wallpapers | ||
- | beautiful.init("/usr/share/awesome/themes/shertheme/theme.lua") | ||
- | |||
- | -- This is used later as the default terminal and editor to run. | ||
- | --terminal = "xterm" | ||
- | terminal = "urxvtc" | ||
- | editor = os.getenv("EDITOR") or "vim" | ||
- | editor_cmd = terminal .. " -e " .. editor | ||
- | |||
- | -- Default modkey. | ||
- | -- Usually, Mod4 is the key with a logo between Control and Alt. | ||
- | -- If you do not like this or do not have such a key, | ||
- | -- I suggest you to remap Mod4 to another key using xmodmap or other tools. | ||
- | -- However, you can use another modifier like Mod1, but it may interact with others. | ||
- | modkey = "Mod4" | ||
- | |||
- | -- Table of layouts to cover with awful.layout.inc, order matters. | ||
- | layouts = | ||
- | { | ||
- | awful.layout.suit.floating, | ||
- | awful.layout.suit.tile, | ||
- | awful.layout.suit.tile.left, | ||
- | awful.layout.suit.tile.bottom, | ||
- | awful.layout.suit.tile.top, | ||
- | awful.layout.suit.fair, | ||
- | awful.layout.suit.fair.horizontal, | ||
- | awful.layout.suit.spiral, | ||
- | awful.layout.suit.spiral.dwindle, | ||
- | awful.layout.suit.max, | ||
- | awful.layout.suit.max.fullscreen, | ||
- | awful.layout.suit.magnifier | ||
- | } | ||
- | -- }}} | ||
- | |||
- | -- {{{ Tags | ||
- | -- Define a tag table which hold all screen tags. | ||
- | tags = { | ||
- | names = { "sec", "main", "dev", "web", "im", "mus" }, | ||
- | layout = { layouts[2], layouts[2], layouts[2], layouts[1], layouts[2], layouts[2]} | ||
- | } | ||
- | |||
- | for s = 1, screen.count() do | ||
- | tags[s] = awful.tag(tags.names, s, tags.layout) | ||
- | end | ||
- | |||
- | -- }}} | ||
- | |||
- | -- {{{ Menu | ||
- | -- Create a laucher widget and a main menu | ||
- | myawesomemenu = { | ||
- | { "manual", terminal .. " -e man awesome" }, | ||
- | { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" }, | ||
- | { "restart", awesome.restart }, | ||
- | { "quit", awesome.quit } | ||
- | } | ||
- | |||
- | mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, | ||
- | { "open terminal", terminal }, | ||
- | } | ||
- | }) | ||
- | |||
- | mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), | ||
- | menu = mymainmenu }) | ||
- | -- }}} | ||
- | |||
- | -- {{{ Wibox | ||
- | |||
- | -- Create Volume Control Widget | ||
- | tb_volume = widget({ type = "textbox", name = "tb_volume", align = "right" }) | ||
- | tb_volume:buttons(awful.util.table.join( | ||
- | awful.button({ }, 4, function () volume("up", tb_volume) end), | ||
- | awful.button({ }, 5, function () volume("down", tb_volume) end), | ||
- | awful.button({ }, 1, function () volume("mute", tb_volume) end) | ||
- | )) | ||
- | volume("update", tb_volume) | ||
- | |||
- | -- refresh the Volume Control Widget | ||
- | tb_volume_timer = timer({ timeout = 10 }) | ||
- | tb_volume_timer:add_signal("timeout", function () volume("update", tb_volume) end) | ||
- | tb_volume_timer:start() | ||
- | |||
- | -- Moc Widget | ||
- | tb_moc = widget({ type = "textbox", align = "right" }) | ||
- | |||
- | function hook_moc() | ||
- | moc_info = io.popen("mocp -i"):read("*all") | ||
- | moc_state = string.gsub(string.match(moc_info, "State: %a*"),"State: ","") | ||
- | if moc_state == "PLAY" or moc_state == "PAUSE" then | ||
- | moc_artist = string.gsub(string.match(moc_info, "Artist: %C*"), "Artist: ","") | ||
- | moc_title = string.gsub(string.match(moc_info, "SongTitle: %C*"), "SongTitle: ","") | ||
- | moc_curtime = string.gsub(string.match(moc_info, "CurrentTime: %d*:%d*"), "CurrentTime: ","") | ||
- | moc_totaltime = string.gsub(string.match(moc_info, "TotalTime: %d*:%d*"), "TotalTime: ","") | ||
- | if moc_artist == "" then | ||
- | moc_artist = "unknown artist" | ||
- | end | ||
- | if moc_title == "" then | ||
- | moc_title = "unknown title" | ||
- | end | ||
- | -- moc_title = string.format("%.5c", moc_title) | ||
- | moc_string = moc_artist .. " - " .. moc_title .. "(" .. moc_curtime .. "/" .. moc_totaltime .. ")" | ||
- | if moc_state == "PAUSE" then | ||
- | moc_string = "PAUSE - " .. moc_string .. "" | ||
- | end | ||
- | else | ||
- | moc_string = "-- not playing --" | ||
- | end | ||
- | return moc_string | ||
- | end | ||
- | |||
- | -- refresh Moc widget | ||
- | --awful.hooks.timer.register(1, function() tb_moc.text = '| ' .. hook_moc() .. ' ' end) | ||
- | moc_timer = timer({timeout = 1}) | ||
- | moc_timer:add_signal("timeout", function() tb_moc.text = '| ' .. hook_moc() .. ' ' end) | ||
- | moc_timer:start() | ||
- | |||
- | -- Create a CPU widget | ||
- | jiffies = {} | ||
- | function activecpu() | ||
- | local s, str | ||
- | |||
- | for line in io.lines("/proc/stat") do | ||
- | local cpu,newjiffies = string.match(line, "(cpu)\ +(%d+)") | ||
- | if cpu and newjiffies then | ||
- | if not jiffies[cpu] then | ||
- | jiffies[cpu] = newjiffies | ||
- | end | ||
- | -- The string.format prevents your task list from jumping around | ||
- | -- When CPU usage goes above/below 10% | ||
- | str = string.format("%02d", newjiffies-jiffies[cpu]) | ||
- | |||
- | if str < "31" then | ||
- | str = '<span color="green">' .. str .. '</span>' | ||
- | elseif str < "51" then | ||
- | str = '<span color="yellow">' .. str .. '</span>' | ||
- | elseif str < "70" then | ||
- | str = '<span color="orange">' .. str .. '</span>' | ||
- | else | ||
- | str = '<span color="red">' .. str .. '</span>' | ||
- | end | ||
- | |||
- | s = '| CPU: ' .. str .. '% ' | ||
- | jiffies[cpu] = newjiffies | ||
- | end | ||
- | end | ||
- | |||
- | return s | ||
- | end | ||
- | |||
- | cpuinfo = widget({ type = "textbox", name = "cpuinfo" }) | ||
- | |||
- | -- register the hook to update the display | ||
- | -- awful.hooks.timer.register(1, function() cpuinfo.text = activecpu() end) | ||
- | cpuinfo_timer = timer({timeout = 1}) | ||
- | cpuinfo_timer:add_signal("timeout", function() cpuinfo.text = activecpu() end) | ||
- | cpuinfo_timer:start() | ||
- | |||
- | |||
- | -- Create CPU Temp Widget | ||
- | function activecputemp() | ||
- | local temp | ||
- | |||
- | io.input("/sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/temp") | ||
- | temp = io.read("*number")/1000 | ||
- | |||
- | if temp < 46 then | ||
- | temp = '<span color="turquoise">' .. temp .. '</span>' | ||
- | elseif temp < 61 then | ||
- | temp = '<span color="yellow">' .. temp .. '</span>' | ||
- | elseif temp < 76 then | ||
- | temp = '<span color="orange">' .. temp .. '</span>' | ||
- | else | ||
- | temp = '<span color="red">' .. temp .. '</span>' | ||
- | end | ||
- | |||
- | return temp | ||
- | end | ||
- | |||
- | cputemp = widget({ type = "textbox" , name = "cputemp" }) | ||
- | |||
- | -- Assign a hook to update temperature | ||
- | -- awful.hooks.timer.register(1, function() cputemp.text = "@ " .. activecputemp() .. "°C | RAM: " end) | ||
- | cputemp_timer = timer({timeout = 1}) | ||
- | cputemp_timer:add_signal("timeout", function() cputemp.text = "@ " .. activecputemp() .. "°C | RAM: " end) | ||
- | cputemp_timer:start() | ||
- | |||
- | -- Battery status Widget | ||
- | |||
- | -- get the full capacity of the battery | ||
- | for line in io.lines("/proc/acpi/battery/BAT0/info") do | ||
- | bat_stat = string.match(line, "last full capacity:\ +(%d+)") | ||
- | |||
- | if bat_stat then | ||
- | -- define stat_tot for reuse later for battery status | ||
- | stat_tot = bat_stat | ||
- | end | ||
- | end | ||
- | |||
- | function activebat() | ||
- | local stat_actu, res | ||
- | |||
- | for line in io.lines("/proc/acpi/battery/BAT0/state") do | ||
- | local present = string.match(line, "present:\ +(%a+)") | ||
- | if (present == "no") then | ||
- | return '<span color="red">not present</span>' | ||
- | end | ||
- | local status = string.match(line, "remaining capacity:\ +(%d+)") | ||
- | local state = string.match(line, "charging state:\ +(%a+)") | ||
- | if status then | ||
- | stat_actu = status | ||
- | end | ||
- | if state then | ||
- | stat_bat = state | ||
- | end | ||
- | end | ||
- | |||
- | res = string.format("%.2f", (stat_actu/stat_tot) * 100); | ||
- | |||
- | if ((stat_actu/stat_tot) * 100) < 10 then | ||
- | res = '<span color="red">' .. res .. '</span>' | ||
- | elseif ((stat_actu/stat_tot) * 100) < 20 then | ||
- | res = '<span color="orange">' .. res .. '</span>' | ||
- | elseif ((stat_actu/stat_tot) * 100) < 30 then | ||
- | res = '<span color="yellow">' .. res .. '</span>' | ||
- | elseif ((stat_actu/stat_tot) * 100) >= 100 then | ||
- | return '<span color="green">fully charged</span>' | ||
- | else | ||
- | res = '<span color="green">' .. res .. '</span>' | ||
- | end | ||
- | |||
- | if (stat_bat == 'discharging') then | ||
- | stat_bat = '<span color="red">discharging</span>' | ||
- | elseif (stat_bat == 'charging') then | ||
- | stat_bat = '<span color = "green">charging</span>' | ||
- | end | ||
- | |||
- | res = res .. '% ' .. stat_bat | ||
- | |||
- | |||
- | return res | ||
- | end | ||
- | |||
- | batinfo = widget({ type = "textbox" , name = "batinfo" }) | ||
- | |||
- | -- Assign a hook to update info | ||
- | -- awful.hooks.timer.register(1, function() batinfo.text = "BAT: " .. activebat() .. " |" end) | ||
- | activebat_timer = timer({timeout = 1}) | ||
- | activebat_timer:add_signal("timeout", function() batinfo.text = "BAT: " .. activebat() .. " |" end) | ||
- | activebat_timer:start() | ||
- | |||
- | -- Create a RAM widget giving the MB used by the RAM | ||
- | -- declare memtot for reuse below | ||
- | memtot = 2056100 | ||
- | |||
- | function activeram() | ||
- | local active, ramusg, res | ||
- | |||
- | for line in io.lines("/proc/meminfo") do | ||
- | for key , value in string.gmatch(line, "(%w+):\ +(%d+).+") do | ||
- | if key == "Active" then active = tonumber(value) | ||
- | end | ||
- | end | ||
- | end | ||
- | |||
- | ramusg = (active/memtot)*100 | ||
- | |||
- | res = string.format("%.2f", (active/1024)) | ||
- | |||
- | if ramusg < 51 then | ||
- | res = '<span color="green">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | ||
- | elseif ramusg < 71 then | ||
- | res = '<span color="yellow">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | ||
- | elseif ramusg < 86 then | ||
- | res = '<span color="orange">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | ||
- | else | ||
- | res = '<span color="red">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)' | ||
- | end | ||
- | |||
- | return res | ||
- | end | ||
- | |||
- | meminfo = widget({ type = "textbox", name = "meminfo" }) | ||
- | |||
- | -- Assign a hook to update info | ||
- | -- awful.hooks.timer.register(1, function() meminfo.text = activeram() .. " | " end) | ||
- | meminfo_timer = timer({timeout = 1}) | ||
- | meminfo_timer:add_signal("timeout", function() meminfo.text = activeram() .. " | " end) | ||
- | meminfo_timer:start() | ||
- | |||
- | -- Create a textclock widget | ||
- | mytextclock = awful.widget.textclock({ align = "right" }) | ||
- | |||
- | -- Create a systray | ||
- | mysystray = widget({ type = "systray" }) | ||
- | |||
- | -- Create a wibox for each screen and add it | ||
- | mywibox = {} | ||
- | mypromptbox = {} | ||
- | mylayoutbox = {} | ||
- | mytaglist = {} | ||
- | mytaglist.buttons = awful.util.table.join( | ||
- | awful.button({ }, 1, awful.tag.viewonly), | ||
- | awful.button({ modkey }, 1, awful.client.movetotag), | ||
- | awful.button({ }, 3, awful.tag.viewtoggle), | ||
- | awful.button({ modkey }, 3, awful.client.toggletag), | ||
- | awful.button({ }, 4, awful.tag.viewnext), | ||
- | awful.button({ }, 5, awful.tag.viewprev) | ||
- | ) | ||
- | mytasklist = {} | ||
- | mytasklist.buttons = awful.util.table.join( | ||
- | awful.button({ }, 1, function (c) | ||
- | if not c:isvisible() then | ||
- | awful.tag.viewonly(c:tags()[1]) | ||
- | end | ||
- | client.focus = c | ||
- | c:raise() | ||
- | end), | ||
- | awful.button({ }, 3, function () | ||
- | if instance then | ||
- | instance:hide() | ||
- | instance = nil | ||
- | else | ||
- | instance = awful.menu.clients({ width=250 }) | ||
- | end | ||
- | end), | ||
- | awful.button({ }, 4, function () | ||
- | awful.client.focus.byidx(1) | ||
- | if client.focus then client.focus:raise() end | ||
- | end), | ||
- | awful.button({ }, 5, function () | ||
- | awful.client.focus.byidx(-1) | ||
- | if client.focus then client.focus:raise() end | ||
- | end)) | ||
- | |||
- | for s = 1, screen.count() do | ||
- | -- Create a promptbox for each screen | ||
- | mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) | ||
- | -- Create an imagebox widget which will contains an icon indicating which layout we're using. | ||
- | -- We need one layoutbox per screen. | ||
- | mylayoutbox[s] = awful.widget.layoutbox(s) | ||
- | mylayoutbox[s]:buttons(awful.util.table.join( | ||
- | awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), | ||
- | awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), | ||
- | awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), | ||
- | awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) | ||
- | -- Create a taglist widget | ||
- | mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) | ||
- | |||
- | -- Create a tasklist widget | ||
- | mytasklist[s] = awful.widget.tasklist(function(c) | ||
- | return awful.widget.tasklist.label.currenttags(c, s) | ||
- | end, mytasklist.buttons) | ||
- | |||
- | -- Create the wibox | ||
- | mywibox[s] = awful.wibox({ position = "top", screen = s }) | ||
- | -- Add widgets to the wibox - order matters | ||
- | mywibox[s].widgets = { | ||
- | { | ||
- | mylauncher, | ||
- | mytaglist[s], | ||
- | mypromptbox[s], | ||
- | layout = awful.widget.layout.horizontal.leftright | ||
- | }, | ||
- | mylayoutbox[s], | ||
- | mymail, | ||
- | s == 1 and mysystray or nil, | ||
- | tb_volume, | ||
- | mytextclock, | ||
- | batinfo, | ||
- | meminfo, | ||
- | cputemp, | ||
- | cpuinfo, | ||
- | tb_moc, | ||
- | mytasklist[s], | ||
- | layout = awful.widget.layout.horizontal.rightleft | ||
- | } | ||
- | end | ||
- | -- }}} | ||
- | |||
- | -- {{{ Mouse bindings | ||
- | root.buttons(awful.util.table.join( | ||
- | awful.button({ }, 3, function () mymainmenu:toggle() end), | ||
- | awful.button({ }, 4, awful.tag.viewnext), | ||
- | awful.button({ }, 5, awful.tag.viewprev) | ||
- | )) | ||
- | -- }}} | ||
- | |||
- | -- {{{ Key bindings | ||
- | globalkeys = awful.util.table.join( | ||
- | awful.key({ modkey, }, "Left", awful.tag.viewprev ), | ||
- | awful.key({ modkey, }, "Right", awful.tag.viewnext ), | ||
- | awful.key({ modkey, }, "Escape", awful.tag.history.restore), | ||
- | |||
- | awful.key({ modkey, }, "j", | ||
- | function () | ||
- | awful.client.focus.byidx( 1) | ||
- | if client.focus then client.focus:raise() end | ||
- | end), | ||
- | awful.key({ modkey, }, "k", | ||
- | function () | ||
- | awful.client.focus.byidx(-1) | ||
- | if client.focus then client.focus:raise() end | ||
- | end), | ||
- | awful.key({ modkey, }, "w", function () mymainmenu:show(true) end), | ||
- | |||
- | -- Multimedia keys | ||
- | awful.key({ }, "XF86AudioRaiseVolume", function () volume("up", tb_volume) end), | ||
- | awful.key({ }, "XF86AudioLowerVolume", function () volume("down", tb_volume) end), | ||
- | awful.key({ }, "XF86AudioMute", function () volume("mute", tb_volume) end), | ||
- | awful.key({ "Control", }, "Right", function () moc_control("next") end), | ||
- | awful.key({ "Control", }, "Left", function () moc_control("previous") end), | ||
- | awful.key({ "Control", }, "Up", function () moc_control("stop") end), | ||
- | awful.key({ "Control", }, "Down", function () moc_control("play_pause") end), | ||
- | |||
- | -- Layout manipulation | ||
- | awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), | ||
- | awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), | ||
- | awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), | ||
- | awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), | ||
- | awful.key({ modkey, }, "u", awful.client.urgent.jumpto), | ||
- | awful.key({ modkey, }, "Tab", | ||
- | function () | ||
- | awful.client.focus.history.previous() | ||
- | if client.focus then | ||
- | client.focus:raise() | ||
- | end | ||
- | end), | ||
- | |||
- | -- Standard program | ||
- | awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), | ||
- | awful.key({ modkey, "Control" }, "r", awesome.restart), | ||
- | awful.key({ modkey, "Shift" }, "q", awesome.quit), | ||
- | |||
- | awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), | ||
- | awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), | ||
- | awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), | ||
- | awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), | ||
- | awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), | ||
- | awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), | ||
- | awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), | ||
- | awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), | ||
- | |||
- | -- Prompt | ||
- | awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), | ||
- | |||
- | 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) | ||
- | ) | ||
- | |||
- | clientkeys = awful.util.table.join( | ||
- | awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), | ||
- | awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), | ||
- | awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), | ||
- | awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), | ||
- | awful.key({ modkey, }, "o", awful.client.movetoscreen ), | ||
- | awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end), | ||
- | awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end), | ||
- | awful.key({ modkey, }, "m", | ||
- | function (c) | ||
- | c.maximized_horizontal = not c.maximized_horizontal | ||
- | c.maximized_vertical = not c.maximized_vertical | ||
- | end) | ||
- | ) | ||
- | |||
- | |||
- | -- Compute the maximum number of digit we need, limited to 9 | ||
- | keynumber = 0 | ||
- | for s = 1, screen.count() do | ||
- | keynumber = math.min(9, math.max(#tags[s], keynumber)); | ||
- | end | ||
- | |||
- | -- Bind all key numbers to tags. | ||
- | -- Be careful: we use keycodes to make it works on any keyboard layout. | ||
- | -- This should map on the top row of your keyboard, usually 1 to 9. | ||
- | for i = 1, keynumber do | ||
- | globalkeys = awful.util.table.join(globalkeys, | ||
- | awful.key({ modkey }, "#" .. i + 9, | ||
- | function () | ||
- | local screen = mouse.screen | ||
- | if tags[screen][i] then | ||
- | awful.tag.viewonly(tags[screen][i]) | ||
- | end | ||
- | end), | ||
- | awful.key({ modkey, "Control" }, "#" .. i + 9, | ||
- | function () | ||
- | local screen = mouse.screen | ||
- | if tags[screen][i] then | ||
- | awful.tag.viewtoggle(tags[screen][i]) | ||
- | end | ||
- | end), | ||
- | awful.key({ modkey, "Shift" }, "#" .. i + 9, | ||
- | function () | ||
- | if client.focus and tags[client.focus.screen][i] then | ||
- | awful.client.movetotag(tags[client.focus.screen][i]) | ||
- | end | ||
- | end), | ||
- | awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, | ||
- | function () | ||
- | if client.focus and tags[client.focus.screen][i] then | ||
- | awful.client.toggletag(tags[client.focus.screen][i]) | ||
- | end | ||
- | end)) | ||
- | end | ||
- | |||
- | clientbuttons = awful.util.table.join( | ||
- | awful.button({ }, 1, function (c) client.focus = c; c:raise() end), | ||
- | awful.button({ modkey }, 1, awful.mouse.client.move), | ||
- | awful.button({ modkey }, 3, awful.mouse.client.resize)) | ||
- | |||
- | -- Set keys | ||
- | root.keys(globalkeys) | ||
- | -- }}} | ||
- | |||
- | -- {{{ Rules | ||
- | awful.rules.rules = { | ||
- | -- All clients will match this rule. | ||
- | { rule = { }, | ||
- | properties = { border_width = beautiful.border_width, | ||
- | border_color = beautiful.border_normal, | ||
- | focus = true, | ||
- | keys = clientkeysl, | ||
- | floating = false, | ||
- | buttons = clientbuttons } }, | ||
- | { rule = { class = "MPlayer" }, | ||
- | properties = { floating = true } }, | ||
- | { rule = { class = "pinentry" }, | ||
- | properties = { floating = true } }, | ||
- | { rule = { class = "gimp" }, | ||
- | properties = { floating = true} }, | ||
- | -- Set Firefox to always map on tags number 4 of screen 1. | ||
- | { rule = { class = "Firefox" }, | ||
- | properties = { tag = tags[1][4], switchtotag = true } }, | ||
- | -- Set Pidgin to always map on tags number 5 of screen 1. | ||
- | { rule = { class = "Pidgin" }, | ||
- | properties = { tag = tags[1][5], switchtotag = true } }, | ||
- | -- Set Opera to always map on tags number 4 of screen 1. | ||
- | { rule = { class = "Opera" }, | ||
- | properties = { tag = tags[1][4], switchtotag = true } }, | ||
- | -- Set Okular to always map on tags number 2 of screen 1. | ||
- | { rule = { class = "Okular" }, | ||
- | properties = { tag = tags[1][2], switchtotag = true } }, | ||
- | } | ||
- | -- }}} | ||
- | |||
- | -- {{{ Signals | ||
- | -- Signal function to execute when a new client appears. | ||
- | client.add_signal("manage", function (c, startup) | ||
- | -- Add a titlebar | ||
- | -- awful.titlebar.add(c, { modkey = modkey }) | ||
- | |||
- | -- Enable sloppy focus | ||
- | c:add_signal("mouse::enter", function(c) | ||
- | if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier | ||
- | and awful.client.focus.filter(c) then | ||
- | client.focus = c | ||
- | end | ||
- | end) | ||
- | |||
- | if not startup then | ||
- | -- Set the windows at the slave, | ||
- | -- i.e. put it at the end of others instead of setting it master. | ||
- | -- awful.client.setslave(c) | ||
- | |||
- | -- Put windows in a smart way, only if they does not set an initial position. | ||
- | if not c.size_hints.user_position and not c.size_hints.program_position then | ||
- | awful.placement.no_overlap(c) | ||
- | awful.placement.no_offscreen(c) | ||
- | end | ||
- | end | ||
- | end) | ||
- | |||
- | client.add_signal("unfocus", function(c) c.border_color = beautiful.border_focus end) | ||
- | client.add_signal("focus", function(c) c.border_color = beautiful.border_normal end) | ||
- | -- }}} | ||
- | |||
- | -- Launch the network-manager applet | ||
- | awful.util.spawn('nm-applet') | ||
- | --awful.util.spawn('conky') | ||
- | </code> | ||
==== Astuce permettant de tester sans risques son rc.lua ==== | ==== Astuce permettant de tester sans risques son rc.lua ==== | ||
Ligne 1132: | Ligne 387: | ||
====Screenshots==== | ====Screenshots==== | ||
- | A venir, merci de ne pas envahir cette section ;) Elle aura simplement pour but de donner un apercu des possibilitées ;) | + | A venir, merci de ne pas envahir cette section ;) Elle aura simplement pour but de donner un apercu des possibilités ;) |
+ | |||
+ | === Avec ImageMagick === | ||
+ | |||
+ | Une astuce simple pour prendre un screenshot est d'utiliser ImageMagick en tapant dans votre console: | ||
+ | <code>import screenshot.png</code> | ||
+ | Cette commande va vous permettre de dessiner avec la souris le cadre du screenshot que vous voulez prendre et l'enregistrera dans un fichier (ici screenshot.png). | ||
===== Voir aussi ===== | ===== Voir aussi ===== | ||
Ligne 1141: | Ligne 402: | ||
* [[http://forum.malekal.com/awesome-window-manager-t21608.html|Tutoriel complet]] | * [[http://forum.malekal.com/awesome-window-manager-t21608.html|Tutoriel complet]] | ||
* **(en)** [[http://awesome.naquadah.org/wiki/Ubuntu_Hardy|Installation sous Hardy]] | * **(en)** [[http://awesome.naquadah.org/wiki/Ubuntu_Hardy|Installation sous Hardy]] | ||
- | * [[http://git.rolinh.ch/?p=precious.git&a=summary| widgets de Rolinh]] | + | * [[http://projects.gw-computing.net/projects/precious| Widgets Precious]] |
---- | ---- | ||
//Contributeurs : x0rg62, rhaamo, [[utilisateurs:zobi8225]],[[:utilisateurs:Sherwood51|Rolinh]], TraGiKomiK // | //Contributeurs : x0rg62, rhaamo, [[utilisateurs:zobi8225]],[[:utilisateurs:Sherwood51|Rolinh]], TraGiKomiK // |