-- Zakladny konfiguracny subor Awesome WM. -- ~/.config/awesome/rc.lua -- http://linuxos.sk -- 2010 --################################################################################ -- Domovska stranka Awesome: http://awesome.naquadah.org/ -- Dokumentacia: http://awesome.naquadah.org/doc/api/ -- Wiki: http://awesome.naquadah.org/wiki/Main_Page -- -- Clanok o Awesome: http://linuxos.sk/clanky/359/index.html -- Autor: Fridolin Pokorny (fridex) -- Testovane na: Awesome v3.4.4 (Jet Sex), -- Awesome v3.4.5 (Close To You) -- -- Posledna zmena: 01.07.2010 -- Akekolvek pripomienky napiste ku komentarom k clanku. --################################################################################ --# INICIALIZACNA SEKCIA ########################################################## -- Zakladna kniznica awful. require("awful") require("awful.autofocus") require("awful.rules") -- Kniznica zabezpecujuca temu a vzhlad Awesome require("beautiful") -- Kniznica s notifikaciami require("naughty") -- Zakladna Awesome tema. Ak mate vlastnu, uvedte jej absolutne umiestnenie. beautiful.init("/usr/share/awesome/themes/default/theme.lua") -- Nastavenie zakladneho emulatoru terminalu. terminal = "xterm" -- Nastavenie preferovaneho textoveho editoru editor = os.getenv("EDITOR") or "vim" editor_cmd = terminal .. " -e " .. editor -- Premenna modkey predstavuje zakladnu klavesu pre pracu s klavesovymi skratkami. -- Mod4 je zvycajne klavesa s logom Windows. -- Je mozne namapovat inu klavesu, pozor na mozne krizenie s inymi klavesovymi skratkami. modkey = "Mod4" --# SEKCIA TAGY ################################################################### -- Tabulka rozlozenia dlazdicovych okien. -- Vyskusajte rozlozenie z beziaceho Awesome pre zistenie, ktory vam bude na akom tagu vyhovovat -- alebo pozrite obrazok k clanku (rozlozenie okien). layouts = { -- [1] - plavajuce okna awful.layout.suit.floating, -- [2] awful.layout.suit.tile, -- [3] awful.layout.suit.tile.left, -- [4] awful.layout.suit.tile.bottom, -- [5] awful.layout.suit.tile.top, -- [6] awful.layout.suit.fair, -- [7] awful.layout.suit.fair.horizontal, -- [8] awful.layout.suit.spiral, -- [9] awful.layout.suit.spiral.dwindle, -- [10] awful.layout.suit.max, -- [11] - zobrazi aktivne okno na celu obrazovku awful.layout.suit.max.fullscreen, -- [12] awful.layout.suit.magnifier } -- Do premennej tags si ulozime nastavenia k jednotlivym tagom. tags = { -- Definovanie nazvov tagov. Tieto nazvy sa budu zobrazovat na wiboxe. names = { "[term]", "[web]", "[chat]", "[work]", "[code]", "[other]" }, -- Zakladne rozlozenie okien na jednotlivych tagoch (podla poradia k "[term]" pripada layouts[3] atd.). -- Toto nastavenie je mozne dynamicky menit pocas prace s Awesome klavesovou skratkou Mod4 + Space, pripadne Mod4 + Shift + Space. -- Rozlozenia su vyberane z horeuvedenej tabulky. layout = { layouts[3], layouts[1], layouts[1], layouts[5], layouts[1], layouts[7] } } -- Teraz je nutne pridat nastavenia o tagoch na obrazovku. Clenska funkcia count() objektu screen vracia pocet aktivnych obrazovych vystupov. -- Nastavenia o tagoch budu na kazdom obrazovom vystupe rovnake. Samozrejme je mozne definovat na kazdy obrazovy vystup specificku konfiguraciu. for s = 1, screen.count() do tags[s] = awful.tag(tags.names, s, tags.layout) -- Funkcia awful.tag.set.property() umoznuje nastavenie rozlozenia okien. -- V tomto pripade nastavuje sirku hlavneho okna (master width fact - viac informacii v dokumentacii). -- Hlavne okno na 5. tagu bude zaberat 30% sirky obrazovky, zvysne okna 70%. awful.tag.setproperty(tags[s][5], "mwfact", 0.30) end --# SEKCIA MENU ################################################################### -- Nstavenie menu. Menu aktivujete pravym kliknutim na plochu, alebo kliknutim ikony v liste (neskor si ju tam pridame). --Podmenu v hlavnom menu myawesomemenu = { -- { "nazov polozky v menu", "prikaz, ktory sa vykona", ["ikona"]}, -- Zobrazi manualove stranky Awesome. { "manual", terminal .. " -e man awesome" }, -- Spusti preferovany textovy editor na upravu rc.lua. { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" }, -- Restartuje Awesome { "restart", awesome.restart }, -- Ukonci Awesome { "quit", awesome.quit } } -- Hlavna struktura menu. mymainmenu = awful.menu({ items = { --Podmenu v hlavnom menu { "awesome", myawesomemenu, beautiful.awesome_icon }, -- Spusti emulator terminalu { "open terminal", terminal } } } ) --# SEKCIA PANELY ################################################################# -- Ikona Awesome, ktora vyvola menu. -- Neskor si ju pridame na panel. mylauncher = awful.widget.launcher({ -- Ikona image = image(beautiful.awesome_icon), -- Hlavna struktura menu. menu = mymainmenu } ) -- Hodiny: mytextclock = awful.widget.textclock({ align = "right" }) -- Systray: mysystray = widget({ type = "systray" }) -- Teraz vytvorime 2 panely a pridame ich na kazdu oprazovku. -- Samozrejme je mozne pre kazdy obrazovy vystup nadefinovat vlastne panely. mywibox_up = {} -- Prvy panel - hore mywibox_down = {} -- Druhy panel - dole -- Zoznam tagov: mytaglist = {} -- Klavesove skratky pre pracu s tagmi (ponechane povodne). mytaglist.buttons = awful.util.table.join( -- Lave kliknutie na tag pre prepnutie do tagu. awful.button({ }, 1, awful.tag.viewonly), -- Podrzanie Mod4 a kliknutie lavym na tag sposobi presunutie aktivneho okna na dany tag. awful.button({ modkey }, 1, awful.client.movetotag), -- Kliknutie pravym na neaktivny tag sposobi spojenie aktivneho tagu s vybranym. awful.button({ }, 3, awful.tag.viewtoggle), -- Zobrazenie nasledovneho a predchadzajuceho tagu pre pri scrollovani na ploche -- Nasledujuci pri scrollovani smerom nahor awful.button({ }, 4, awful.tag.viewnext), -- Predchadzajuci pr scrollovani nadol awful.button({ }, 5, awful.tag.viewprev) ) -- mytasklist predstavuje zoznam okien spustenych aplikacii na danom tagu mytasklist = {} mytasklist.buttons = awful.util.table.join( -- Po kliknuti (lavym) na prislusnu polozku v zozname (resp. na panely) sa okno zobrazi (ak bolo minimalizovane) alebo sa aktivuje. awful.button({ }, 1, function (c) if not c:isvisible() then awful.tag.viewonly(c:tags()[1]) end client.focus = c c:raise() end ), -- Po kliknuti pravym tlacitkom na mysi sa zobrazi zoznam vsetkych okien spustenych aplikacii. awful.button({ }, 3, function () if instance then instance:hide() instance = nil else --sirka zoznamu v px instance = awful.menu.clients({ width=300 }) end end ), -- Scrollovanim smerom nahor nad zoznamom sa aktivuje nasledovne okno aplikacie awful.button({ }, 4, function () awful.client.focus.byidx(1) if client.focus then client.focus:raise() end end ), -- Scrollovanim smerom nadol nad zoznamom sa aktivuje predchadzajuce okno aplikacie awful.button({ }, 5, function () awful.client.focus.byidx(-1) if client.focus then client.focus:raise() end end ) ) -- Rychle spustenie aplikacii "Run:" na panely. -- Vyvolame klavesovou skratkou Mod4 + r mypromptbox = {} -- Ikona rozlozenia okien. mylayoutbox = {} for s = 1, screen.count() do -- Rychle spustenie aplikacii so zarovnanim vlavo. mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) -- Na kazdy obrazovy vystup potrebujeme jeden indikator rozlozenia okien (ikona). 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) ) ) -- Zoznam tagov: mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) -- Zoznam otvorenych okien aplikacii mytasklist[s] = awful.widget.tasklist(function(c) return awful.widget.tasklist.label.currenttags(c, s) end, mytasklist.buttons ) -- Vytvorime horny panel na kazdu obrazovku: mywibox_up[s] = awful.wibox({ position = "top", screen = s }) -- Pridame widgety na panel, ktore na nom chceme: mywibox_up[s].widgets = { { -- Ikona menu mylauncher, -- Zoznam tagov: mytaglist[s], -- Rychle spustenie aplikacii (zobrazene len po aktivacii - MOD4 + r): mypromptbox[s], -- Zarovnanie layout = awful.widget.layout.horizontal.leftright }, mylayoutbox[s], mytextclock, layout = awful.widget.layout.horizontal.rightleft } -- Vytvorenie dolneho panelu analogicky: mywibox_down[s] = awful.wibox({ position = "bottom", screen = s}) mywibox_down[s].widgets = { { mylaucher }, s == 1 and mysystray or nil, --systray zobrazime len na 1. obrazovom vystupe mytasklist[s], layout = awful.widget.layout.horizontal.rightleft } end --# GESTA MYSOU ################################################################## root.buttons(awful.util.table.join( -- Pri kliknutim pravym tlacitkom zobrazi menu awful.button({ }, 3, function () mymainmenu:toggle() end), -- Pri scrollovani smerom hore zobrazi nasledovny tag awful.button({ }, 4, awful.tag.viewnext), -- Pri scrollovani smerom dole zobrazi predchadzajuci tag awful.button({ }, 5, awful.tag.viewprev) )) -- Globalne klavesove skratky pre pracu s rozlozenim, usporiadanim a tagmi globalkeys = awful.util.table.join( -- MOD4 + lava sipka pre zobrazenie predchadzajuceho tagu v poradi. awful.key({ modkey, }, "Left", awful.tag.viewprev ), -- MOD4 + prava sipka pre zobrazenie nasledujuceho tagu v poradi. awful.key({ modkey, }, "Right", awful.tag.viewnext ), -- MOD4 + ESC zobrazi predchadzajuceho tagu (z ktoreho ste prepli na aktualny). awful.key({ modkey, }, "Escape", awful.tag.history.restore), -- MOD4 + j prepne na nasledujuce okno. awful.key({ modkey, }, "j", function () awful.client.focus.byidx( 1) if client.focus then client.focus:raise() end end ), -- MOD4 + k prepne na predchadzajuce okno. awful.key({ modkey, }, "k", function () awful.client.focus.byidx(-1) if client.focus then client.focus:raise() end end ), -- MOD4 + w zobrazi menu awful.key({ modkey, }, "w", function () mymainmenu:show(true) end), -- Skratky pre manipulaciu s rozlozenim -- MOD4 + SHIFT + j vymeni aktualne okno s nasledujucim awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), -- MOD4 + SHIFT + k vymeni aktualne okno s predchadzajucim awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), -- MOD4 + Ctrl + j prepne na nasledujuci obrazovy vystup awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), -- MOD4 + Ctrl + k prepne na predchadzajuci obrazovy vystup awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), -- MOD4 + u awful.key({ modkey, }, "u", awful.client.urgent.jumpto), -- MOD4 + Tab awful.key({ modkey, }, "Tab", function () awful.client.focus.history.previous() if client.focus then client.focus:raise() end end), -- Ostatne skratky -- MOD4 + Enter spusti prednastaveni terminal awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), -- MOD4 + Ctrl + r restartuje Awesome (znovu nacita konfiguracny subor) awful.key({ modkey, "Control" }, "r", awesome.restart), -- MOD4 + Shift + q ukonci Awesome awful.key({ modkey, "Shift" }, "q", awesome.quit), -- MOD4 + l zvacsi sirku okna o 5% awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), -- MOD$ + h zmensi sirku okna o 5% awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), -- MOD4 + Shift + h zvysi pocet hlavnych okien o 1 awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), -- MOD4 + Shift + l znizi pocet hlavnych okien o 1 awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), -- MOD4 + Ctrl + h zvysi pocet stlpcov okien o 1 na aktualnom tagu awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), -- MOD4 + Ctrl + h znizi pocet stlpcov okien o 1 na aktualnom tagu awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), -- MOD4 + Space prepne na nasledujuce rozlozenie okien na aktualnom tagu awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), -- MOD4 + Shift + Space prepne na predchadzajuce rozlozenie okien na aktualnom tagu awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), -- MOD4 + r zobrazi rychle spustenie programu "Run:" na panely awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end) ) -- Klavesove skratky pre pracu s oknami clientkeys = awful.util.table.join( -- MOD4 + f zobrazi aktualne okno na celu obrazovku awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), -- MOD4 + Shift +c zavrie aktualne okno awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), -- MOD4 + Ctrl + Space zobrazi aktualne okno ako plavajuce awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), -- MOD4 + Ctrl + Space nastavi aktualne okno ako hlavne awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), -- MOD4 + o premiestni aktualne okno aplikacie na dalsi obrazovy vystup awful.key({ modkey, }, "o", awful.client.movetoscreen ), -- MOD4 + Shift +r znovu vykresli aktualne okno awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end), -- MOD4 + n minimalizuje aktualne okno awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end), -- MOD4 + m maximalizuje aktualne okno awful.key({ modkey, }, "m", function (c) c.maximized_horizontal = not c.maximized_horizontal c.maximized_vertical = not c.maximized_vertical end) ) -- Zistenie poctu tagov na obrazovych vystupoch -- Ak sa lisia, zoberie sa hodnota, kde je tagov najviac -- Najvacsia mozna hodnota je 9 (pre skratky) -- Neskor poucite pre klavesove skratky keynumber = 0 for s = 1, screen.count() do keynumber = math.min(9, math.max(#tags[s], keynumber)); end -- Spocitanie poctu tagov a vytvorenie klavesovej skratky Mod4 + cislo pre prepnutie do tagu s danym poradovym cislom. 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 -- Prevedie nastaveni root.keys(globalkeys)