You are not logged in.
Hi.
I wanted to upgrade from awesome 2.3 to the newer version 3. Once again the configuration changed completely. Originally the reason why I chose awesome was that it didn't require you to learn lua to configure it (as Ion3 did). Nevertheless I wanted to do the step and so I began reading into the Awesome-Wiki and looking at other configuration files. It came out that with a bit of effort it wasn't that difficult to get a good result. At this point I really want to thank GGLucas for his almost perfect rc.lua (Dude, you're great!!! Your keybindings rock as well!)!
I really got most of the things done I wanted, and it works great. But there are some details that I didn't figure out how to get them working, probably one of you guys has an idea:
xcompmgr
I really liked the integration of the xcompmgr in awesome to make non focused clients transparent. I didn't found the method in the awful module to set the opacity.
Font Shadow
In the Styles section there was an option to set a shadow for the Fonts in awesome. The manpages state that this option is there, but I don't know how to apply it. I didn't see any examples in other config files, neither in the "theme"-files for beautiful.
That's it so far. I really like awesome 3, and I'll keep on using it... whether I get this to work or not. It just would be nice, and I hope that others can profit as well.
Thanks in advance (and speacial thanks to GGLucas).
Last edited by filou.linux (2008-10-16 14:52:31)
Offline
Okay I figured some things out... but still not everything.
Font Shadow
After reading the manpage again and again I tried some things out. In the markup section of GGLucas rc.lua you need to change the fg method to that:
function beautiful.markup.fg(color, text)
-- return '<span color="'..color..'">'..text..'</span>'
return '<text shadow="'..beautiful.shadow..'" shadow_offset="'..beautiful.shadow_offset..'">'..text..'</text>'
endHowever it doesn't apply shadows to all Texts in awesome. For some widgets it was easy to apply (like the clock). But I couldn't figure out how to apply the shadow to the taglist. Is there no way to apply a shadow generally?
xcompmgr
Still no progress here
Probably someone has an idea. I'd really appreciate. Thanks in advance!
Last edited by filou.linux (2008-09-05 16:03:55)
Offline
I would ask someone in the awesome IRC chat. It seems like an easy enough question that someone there is bound to know.
Offline
Wooohooo, I'm getting closer ![]()
After asking in the IRC Channel (Special thanks to Possum) and reading through the API Doc again I was able to solve the xcompmgr problem.
xcompmgr
In the API Documentation I found a Client Attribute called "opacity". Could it be any more obvious? After I found out about that, the rest was easy. Just add the Lines into the focus and unfocus hooks:
-- {{{ Focus hook
awful.hooks.focus.register(function (c)
-- Skip over my urxvtcnotify
if c.name and c.name:lower():find('urxvtcnotify') and awful.client.next(1) ~= c then
awful.client.focusbyidx(1)
return
end
-- Set border
c.border_color = beautiful.border_focus
c.opacity = 1
-- Raise the client
c:raise()
-- Set statusbar color
if settings.statusbar_highlight_focus and settings.statusbar_highlight_focus[1] then
if last_screen == nil or last_screen ~= c.screen then
mainstatusbar[settings.statusbar_highlight_focus[2]][c.screen].bg = beautiful.bg_sbfocus
if last_screen then
mainstatusbar[settings.statusbar_highlight_focus[2]][last_screen].bg = beautiful.bg_normal
end
end
last_screen = c.screen
end
end)
-- }}}
-- {{{ Unfocus hook
awful.hooks.unfocus.register(function (c)
-- Set border
c.border_color = beautiful.border_normal
c.opacity = 0.5
end)
-- }}}Font Shadow
No progress on that ![]()
Last edited by filou.linux (2008-09-08 16:08:15)
Offline
can you post your rc.lua?
www.msdarkici.wordpress.com (Spanish) All what i Do in the linux world!!!
Arch User... Feel Free... Feel Speed....
Offline
Sorry for letting you wait. Here you are:
-- Digi's Awesome-3 Lua Config (based on GGLucas'; Thank you!!!!)
-- Version 2.1
------
-- This config is for use with awesome 3.0.
------
-- If you have any suggestions or questions, feel free
-- to pass me a message, find me in #awesome on OFTC, or
-- email me at <lucas[at]glacicle.com>
------
-- I use both wicked and eminent, so to use it,
-- you'll need to get both those helper libraries too.
------
-- Note that I use all-custom keybindings, so you might
-- want to copy the default rc.lua's keybindings
-- into here if you wish to use those, although you might
-- find you like mine better :P
------
---- {{{ Require lua libraries
-- Shipped with awesome
require("awful")
require("beautiful")
-- External
require("wicked") -- Widgets
require("eminent") -- Dynamic tagging
-- }}}
---- {{{ 'Beautiful' theme settings
-- Font
--beautiful.font = "Terminus 7"
beautiful.font = "DejaVu Sans 7"
-- Background
beautiful.bg_normal = '#333333'
beautiful.bg_focus = '#269900'
beautiful.bg_sbfocus = '#444444'
beautiful.bg_urgent = '#992600'
-- Foreground
beautiful.fg_normal = '#CCCCCC'
beautiful.fg_focus = '#FFFFFF'
beautiful.fg_urgent = '#FFFFFF'
--beautiful.fg_shadow = '#111111'
-- Border
beautiful.border_width = 0
beautiful.border_normal = '#000000'
beautiful.border_focus = '#00330C'
beautiful.border_marked = '#33000C'
-- }}}
---- {{{ Modkeys
key = {}
key.none = {}
key.alt = {"Mod1"}
key.super = {"Mod4"}
key.shift = {"Shift"}
key.control = {"Control"}
key.super_alt = {key.super[1], key.alt[1]}
key.super_shift = {key.super[1], key.shift[1]}
key.super_control = {key.super[1], key.control[1]}
key.control_alt = {key.control[1], key.alt[1]}
key.shift_alt = {key.shift[1], key.alt[1]}
-- }}}
---- {{{ Settings
-- Initialise tables
settings = {}
settings.widget = {}
settings.apps = {}
settings.tag = {}
settings.bindings = {}
-- {{{ General
-- Widget spacer and separator
settings.widget_spacer = " "
settings.widget_separator = " "
-- Warp mouse
settings.warp_mouse = true
settings.sloppy_focus = false
-- New become master
settings.new_become_master = true
-- Tag mwfact
settings.tag.mwfact = 0.618033988769
-- }}}
-- {{{ Applications
settings.apps.terminal = 'urxvtc'
-- Command to lock the screen
settings.apps.lock_screen = 'xscreensaver-command -lock'
-- Browser
settings.apps.browser = 'firefox'
-- Add other default apps
-- }}}
-- {{{ Floating windows
settings.floating = {
["gimp"] = true,
["mplayer"] = true
}
-- }}}
-- {{{ Tags
settings.tags = {
[1] = '#',
[2] = 'Web',
[3] = 'Dev',
[4] = 'Sys',
[5] = 'Media',
[6] = 'Graph',
[7] = 'Game',
}
-- }}}
-- {{{ Client/Tag mapping
settings.client_tag =
{
["urxvt"] = 1,
["firefox"] = 2,
["minefield"] = 2,
["gran paradiso"] = 2,
["gimp"] = 6,
["sonata"] = 5,
["mplayer"] = 5,
["gmplayer"] = 4,
["eclipse"] = 3,
["monodevelop"] = 3,
["xmoto"] = 7,
["firestarter"] = 4,
["qt-curve"] = 4,
["lxappearance"] = 4,
["lxrandr"] = 4
}
-- }}}
-- {{{ Other
-- Check what widget mode to use
settings.widget_mode = 'laptop'
-- settings.widget_mode = 'desktop'
-- Highlight statusbar of focussed screen on multiple-monitor setups
if screen.count() > 1 then
settings.statusbar_highlight_focus = {true, 1}
end
-- }}}
-- }}}
---- {{{ Keybindings
-- Initialise table
settings.bindings.wm = {}
settings.bindings.mouse = {}
-- {{{ Run specific commands
settings.bindings.commands = {
-- Open Terminal
[settings.apps.terminal] = {key.super, "#49"},
-- Lock screen
[settings.apps.lock_screen] = {key.super, "l"},
}
-- }}}
-- {{{ Client keybindings
settings.bindings.wm.client = {
-- Super+: Close window
[function() client.focus:kill() end] = {key.super, "Escape"},
-- Mod+q: Focus previous window
[function() awful.client.focusbyidx(-1) end] = {key.super, "q"},
-- Mod+w: Focus next window
[function() awful.client.focusbyidx(1) end] = {key.super, "w"},
-- Mod+Shift+q: Swap with previous window
[function() awful.client.swap(-1) end] = {key.super_shift, "q"},
-- Mod+Shift+w: Swap with previous window
[function() awful.client.swap(1) end] = {key.super_shift, "w"},
-- Mod+t: Add Titlebar
[function() awful.titlebar.add(client.focus) end] = {key.super, "t"},
-- Mod+t: Remove Titlebar
[function() awful.titlebar.remove(client.focus) end] = {key.super_shift, "t"},
-- Mod+c: Toggle floating
--[awful.client.togglefloating] = {key.super, "c"},
-- Mod+\: Make window master
[function() local c = awful.client.master(); if c ~= client.focus then c:swap(client.focus) end end] =
{key.super, "Return"},
-- Mod+Shift+a: Move window to previous tag
[function () awful.client.movetotag(eminent.tag.getprev(mouse.screen)) end] =
{key.super_shift, "a"},
-- Mod+Shift+s: Move window to next tag
[function () awful.client.movetotag(eminent.tag.getnext(mouse.screen)) end] =
{key.super_shift, "s"},
-- Mod+Shift+e: Move window to next screen
[function () s = client.focus.screen+1; if s > screen.count() then s = 1 end; client.focus.screen = s end] =
{key.super_shift, "e"},
-- Mod+Shift+d: Move window to previous screen
[function () s = client.focus.screen-1; if s < 1 then s = screen.count() end; client.focus.screen = s end] =
{key.super_shift, "d"},
}
-- }}}
-- {{{ Tag bindings
settings.bindings.wm.tag = {
-- Mod+a: Switch to previous tag
[function() eminent.tag.prev(mouse.screen) end] = {key.super, "a"},
-- Mod+s: Switch to next tag
[function() eminent.tag.next(mouse.screen) end] = {key.super, "s"},
-- Alt+\: Switch to float layout
[function() awful.layout.set('floating') end] = {key.alt, "c"},
-- Alt+z: Switch to max layout
[function() awful.layout.set('max') end] = {key.alt, "z"},
-- Alt+x: Switch to tile layout
[function() awful.layout.set('tile') end] = {key.alt, "x"},
}
-- }}}
-- {{{ Prompt bindings
settings.bindings.prompt = {
-- Alt+w: Run prompt
[{awful.spawn, " Run: "}] = {key.super, "x"},
-- Mod+Alt+w: Lua eval prompt
[{awful.eval, " Run Lua: "}] = {key.super_alt, "x"},
}
-- }}}
-- {{{ Miscellaneous bindings
settings.bindings.wm.misc = {
-- Mod+Alt+r: Restart awesome
[awesome.restart] = {key.super_alt, "r"},
-- Mod+e: Switch focus to next screen
[function() awful.screen.focus(1) end] = {key.super, "e"},
-- Mod+d: Switch focus to previous screen
[function() awful.screen.focus(-1) end] = {key.super, "d"},
}
-- }}}
-- {{{ Keyboard digit bindings
settings.bindings.digits = {
-- Mod+##: View tag
[awful.tag.viewonly] = key.super,
-- Mod+Shift+##: Toggle tag view
[function(t) t.selected = not t.selected end] = key.super_shift,
-- Mod+Control+##: Move window to tag
[awful.client.movetotag] = key.super_control,
-- Mod+Alt+##: Toggle window on tag
[awful.client.toggletag] = key.super_alt,
}
-- }}}
-- {{{ Mouse bindings
settings.bindings.mouse.desktop = {
-- Right click on desktop: Open terminal
[function() awful.spawn(settings.apps.terminal) end] = {key.none, 3},
}
settings.bindings.mouse.client = {
-- Left: Focus window
[function(c) client.focus = c end] = {key.none, 1},
-- Super+Left: Move window
[function(c) c:mouse_move() end] = {key.super, 1},
-- Super+Right: Resize window
[function(c) c:mouse_resize({corner="bottomright"}) end] = {key.super, 3},
}
-- }}}
-- }}}
---- {{{ Markup helper functions
-- Inline markup is a tad ugly, so use these functions
-- to dynamically create markup, we hook them into
-- the beautiful namespace for clarity.
beautiful.markup = {}
function beautiful.markup.bg(color, text)
return '<bg color="'..color..'" />'..text
end
function beautiful.markup.fg(color, text)
return '<span color="'..color..'">'..text..'</span>'
end
function beautiful.markup.font(font, text)
return '<span font_desc="'..font..'">'..text..'</span>'
end
function beautiful.markup.title(t)
return t
end
function beautiful.markup.title_normal(t)
return beautiful.title(t)
end
function beautiful.markup.title_focus(t)
return beautiful.markup.bg(beautiful.bg_focus, beautiful.markup.fg(beautiful.fg_focus, beautiful.markup.title(t)))
end
function beautiful.markup.title_urgent(t)
return beautiful.markup.bg(beautiful.bg_urgent, beautiful.markup.fg(beautiful.fg_urgent, beautiful.markup.title(t)))
end
function beautiful.markup.bold(text)
return '<b>'..text..'</b>'
end
function beautiful.markup.heading(text)
return beautiful.markup.fg(beautiful.fg_focus, beautiful.markup.bold(text))
end
-- }}}
---- {{{ Widgets
settings.statusbars = {}
settings.widgets = {}
settings.statusbars[1] = {{
position = "top",
height = 15,
fg = beautiful.fg_normal,
bg = beautiful.bg_normal,
name = "mainstatusbar",
}, "all"}
settings.promptbar = {
position = "top",
height = 15,
fg = beautiful.fg_normal,
bg = beautiful.bg_normal,
name = "promptbar",
}
-- {{{ Taglist
maintaglist = widget({
type = 'taglist',
name = 'maintaglist'
})
function maintaglist.label(t)
return awful.widget.taglist.label.noempty(t)
end
maintaglist:mouse_add(mouse(key.none, 1, function (o, t) awful.tag.viewonly(t) end))
table.insert(settings.widgets, {1, maintaglist})
-- }}}
if settings.widget_mode == 'laptop' or settings.widget_mode == 'all' then
-- {{{ Battery Widget
batterywidget = widget({
type = 'textbox',
name = 'batterywidget',
align = 'right'
})
function read_battery_temp(format)
local f = io.open('/tmp/battery-temp')
if f == nil then
return {'n/a'}
end
local n = f:read()
if n == nil then
f:close()
return {'n/a'}
end
return {awful.escape(n)}
end
wicked.register(batterywidget, read_battery_temp,
settings.widget_spacer..beautiful.markup.heading('BAT')..': $1'..settings.widget_spacer..settings.widget_separator,
30)
-- Start timer to read the temp file
awful.hooks.timer.register(28, function ()
-- Call battery script to get batt%
command = "battery"
os.execute(command..' > /tmp/battery-temp &')
end, true)
table.insert(settings.widgets, {1, batterywidget})
-- }}}
end
if settings.widget_mode ~= 'none' then
-- {{{ CPU Usage Widget
cputextwidget = widget({
type = 'textbox',
name = 'cputextwidget',
align = 'right'
})
wicked.register(cputextwidget, wicked.widgets.cpu,
settings.widget_spacer..beautiful.markup.heading('CPU')..': $1%'..settings.widget_spacer..settings.widget_separator,
nil, nil, 2)
table.insert(settings.widgets, {1, cputextwidget})
-- }}}
-- {{{ CPU Graph Widget["firestarter"] = 4,
cpugraphwidget = widget({
type = 'graph',
name = 'cpugraphwidget',
align = 'right'
})
cpugraphwidget.height = 0.85
cpugraphwidget.width = 30
cpugraphwidget.bg = '#444444'
cpugraphwidget.border_color = '#0a0a0a'
cpugraphwidget.grow = 'left'
cpugraphwidget:plot_properties_set('cpu', {
fg = '#7F0000',
fg_center = '#AF0000',
fg_end = '#FF0000',
vertical_gradient = true
})
wicked.register(cpugraphwidget, wicked.widgets.cpu, '$1', 1, 'cpu')
table.insert(settings.widgets, {1, cpugraphwidget})
-- }}}
-- {{{ Memory Usage Widget
memtextwidget = widget({
type = 'textbox',
name = 'memtextwidget',
align = 'right'
})
wicked.register(memtextwidget, wicked.widgets.mem,
settings.widget_spacer..beautiful.markup.heading('MEM')..': '..
'$1% ($2/$3)'..settings.widget_spacer..settings.widget_separator,
3, nil, {2, 4, 4})
table.insert(settings.widgets, {1, memtextwidget})
-- }}}
-- {{{ Memory Graph Widget
memgraphwidget = widget({
type = 'graph',
name = 'memgraphwidget',
align = 'right'
})
memgraphwidget.height = 0.85
memgraphwidget.width = 30
memgraphwidget.bg = '#444444'
memgraphwidget.border_color = '#0a0a0a'
memgraphwidget.grow = 'left'
memgraphwidget:plot_properties_set('mem', {
fg = '#7F0000',
fg_center = '#AF0000',
fg_end = '#FF0000',
vertical_gradient = true
})
wicked.register(memgraphwidget, wicked.widgets.mem, '$1', 1, 'mem')
table.insert(settings.widgets, {1, memgraphwidget})
-- }}}
-- {{{ Clock widget
clockwidget = widget({
type = 'textbox',
name = 'clockwidget',
align = 'right'
})
wicked.register(clockwidget, wicked.widgets.date, settings.widget_spacer..settings.widget_separator..settings.widget_spacer..'%a %d. %b %X'..settings.widget_spacer..settings.widget_separator, 1)
table.insert(settings.widgets, {1, clockwidget})
-- }}}
end
-- }}}
-------------------------------------------------------
-- You shouldn't have to edit the code after this,
-- it takes care of applying the settings above.
-------------------------------------------------------
---- {{{ Initialisations
-- Register beautiful with awful
awful.beautiful.register(beautiful)
-- Set default colors
awesome.colors_set({
fg = beautiful.fg_normal,
bg = beautiful.bg_normal })
-- Set default font
awesome.font_set(beautiful.font)
-- Create new tags
for s=1, screen.count() do
for nr, name in pairs(settings.tags) do
eminent.tag.name(nr, s, name)
end
end
-- Spawn Default terminal
-- }}}
---- {{{ Create statusbars
local mainstatusbar = {}
for i, b in pairs(settings.statusbars) do
mainstatusbar[i] = {}
for s=1,screen.count() do
this_screen = false
if b[2] ~= "all" then
for sc in pairs(b[2]) do
if sc == s then
this_screen = true
break
end
end
end
if b[2] == "all" or this_screen then
mainstatusbar[i][s] = statusbar(b[1])
local widgets = {}
for ii, w in pairs(settings.widgets) do
if w[1] == i then
table.insert(widgets, w[2])
end
end
mainstatusbar[i][s]:widgets(widgets)
mainstatusbar[i][s].screen = s
end
end
end
-- }}}
---- {{{ Create prompt statusbar
local mainpromptbar = statusbar(settings.promptbar)
local mainpromptbox = widget({type = "textbox", align = "left", name = "mainpromptbox"})
mainpromptbar:widgets({mainpromptbox})
mainpromptbar.screen = nil
-- }}}
---- {{{ Useful functions
-- {{{ Mouse warp function
function mouse_warp(c, force)
-- Allow skipping a warp
if warp_skip then
warp_skip = false
return
end
-- Get vars
local sel = c or client.focus
if sel == nil then return end
local coords = sel:coords()
local m = mouse.coords()
-- Settings
mouse_padd = 6
border_area = 5
-- Check if mouse is not already inside the window
if (( m.x < coords.x-border_area or
m.y < coords.y-border_area or
m.x > coords.x+coords.width+border_area or
m.y > coords.y+coords.height+border_area
) and (
table.maxn(m.buttons) == 0
)) or force
then
mouse.coords({ x=coords.x+mouse_padd, y=coords.y+mouse_padd})
end
end
-- }}}
-- {{{ Prompt with statusbar
function prompt_statusbar(s, callback, prompt)
if not callback then callback = awful.spawn end
if not prompt then prompt = " Run: " end
for i, b in pairs(mainstatusbar) do
for ii, bb in pairs(b) do
if bb.screen == s then
bb.screen = nil
end
end
end
mainpromptbar.screen = s
awful.prompt.run({prompt = prompt}, mainpromptbox, callback,
awful.completion.bash, os.getenv("HOME") .. "/.cache/awesome_history", 50, function ()
mainpromptbar.screen = nil
for i, b in pairs(mainstatusbar) do
for ii, bb in pairs(b) do
if ii == s then
bb.screen = ii
end
end
end
end)
end
-- }}}
-- }}}
---- {{{ Create bindings
--- This reads the binding tables and turns them into actual keybindings
-- WM Bindings
for i,table in pairs(settings.bindings.wm) do
for f, keys in pairs(table) do
keybinding(keys[1], keys[2], f):add()
end
end
-- Keyboard digit bindings
for i=1,9 do
for f, mod in pairs(settings.bindings.digits) do
keybinding(mod, i, function()
t = eminent.tag.getn(i, nil, true)
if not t then return end
f(t)
end):add()
end
end
-- Prompt Bindings
for prompt, keys in pairs(settings.bindings.prompt) do
keybinding(keys[1], keys[2], function() prompt_statusbar(mouse.screen, unpack(prompt)) end):add()
end
-- Custom command bindings
for command, keys in pairs(settings.bindings.commands) do
keybinding(keys[1], keys[2], function() awful.spawn(command) end):add()
end
-- Desktop mouse bindings
for f, keys in pairs(settings.bindings.mouse.desktop) do
awesome.mouse_add(mouse(keys[1], keys[2], f))
end
-- }}}
---- {{{ Set hooks
-- {{{ Focus hook
awful.hooks.focus.register(function (c)
-- Set border
c.border_color = beautiful.border_focus
-- Raise the client
c:raise()
-- Set statusbar color
if settings.statusbar_highlight_focus and settings.statusbar_highlight_focus[1] then
if last_screen == nil or last_screen ~= c.screen then
mainstatusbar[settings.statusbar_highlight_focus[2]][c.screen].bg = beautiful.bg_sbfocus
if last_screen then
mainstatusbar[settings.statusbar_highlight_focus[2]][last_screen].bg = beautiful.bg_normal
end
end
last_screen = c.screen
end
end)
-- }}}
-- {{{ Unfocus hook
awful.hooks.unfocus.register(function (c)
-- Set border
c.border_color = beautiful.border_normal
end)
-- }}}
-- {{{ Mouseover hook
awful.hooks.mouseover.register(function (c)
-- Set focus for sloppy focus
if settings.sloppy_focus then
client.focus = c
end
end)
-- }}}
-- {{{ Manage hook
awful.hooks.manage.register(function (c)
local class = ""
local name = ""
if c.class then
class = c.class:lower()
end
if c.name then
name = c.name:lower()
end
-- Create border
c.border_width = beautiful.border_width
c.border_color = beautiful.border_normal
-- Add mouse bindings
for f, keys in pairs(settings.bindings.mouse.client) do
c:mouse_add(mouse(keys[1], keys[2], f))
end
-- Check if floating
for app, i in pairs(settings.floating) do
if class:find(app) or name:find(app) then
c.floating = i
break
end
end
-- Move Client to tags
for app, tag in pairs(settings.client_tag) do
if class:find(app) or name:find(app) then
t = eminent.tag.getn( tag, mouse.screen, true )
awful.client.movetotag( t, c)
awful.tag.viewonly(t)
break
end
end
-- Focus new clients
client.focus = c
-- Prevent new windows from becoming master
if not settings.new_become_master then
awful.client.swap(1, c)
end
-- Don't honor size hints
c.honorsizehints = false
end)
-- }}}
-- {{{ Arrange hook
awful.hooks.arrange.register(function(s)
-- Warp the mouse
if settings.warp_mouse then
mouse_warp()
end
-- Check focus
if not client.focus then
local c = awful.client.focus.history.get(s, 0)
if c then client.focus = c end
end
end)
-- }}}
-- }}}
-- vim: set filetype=lua fdm=marker tabstop=4 shiftwidth=4 expandtab smarttab autoindent smartindent nu:If you have any improvments, don't hesitate to post the here.
Offline