You are not logged in.
Hey everybody,
So this is my first (non-virtualbox) arch install. I just switched over from crunchbang. I had awesome installed on crunchbang and used that as my primary window manager. So I saved all of my configs and everything so that I could use them on arch. I got arch installed and then awesome, and awesome works well. I am using it right now. But as soon as I started trying to add widgets it wouldn't let me. Every time I restart it awesome reverts to the rc.lua in /etc/xdg... and gives me a warning message saying:
Oops, there were errors during startup!
/home/nathan/.config/awesome/rc.lua:117: attempt to call global 'widget' (a nil value)
The line it is referring to is this:
separator = widget({ type = "textbox" })
Also, all of the requires at the top currently look like this:
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
-- Widget and layout library
wibox = require("wibox")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")
So I tried to google and search the awesome wiki and the arch wiki for how it is done on arch. From everything I have found I am doing it correctly, but I must be missing something. One thought was that it might be a result of the most recent awesome update. I think it was on the 4th. Any ideas?
Last edited by nhare330 (2013-01-09 00:21:05)
Offline
Configuration changed http://awesome.naquadah.org/wiki/Awesome_3.4_to_3.5
Offline
separator = wibox.widget.textbox()
Offline
So I tried to google and search the awesome wiki and the arch wiki for how it is done on arch. From everything I have found I am doing it correctly, but I must be missing something. One thought was that it might be a result of the most recent awesome update. I think it was on the 4th. Any ideas?
I see that gridcol and ilusi0n have pointed you in the right direction.
The Awesome wiki gives pretty vage instructions. but.
This is how I set up a simple vicious widget in 3.5:
-- {{{ CPU widget from vicious
local cpuwidget = wibox.widget.textbox()
vicious.register(cpuwidget, vicious.widgets.cpu, "$1%")
-- }}}
Far as I can make out, you can place that anywhere in your rc.lua, after you've "required" vicious. Then find the bit of rc.lua where the taglist/tasklist/systray widgetty wiboxes are created, and place it in your "layout":
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(mytextclock)
right_layout:add(mylayoutbox[s])
THIS: right_layout:add(cpuwidget)
-- Now bring it all together (with the tasklist in the middle)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_middle(mytasklist[s])
layout:set_right(right_layout)
The "THIS:" isn't part of the code -- just to show you where. Now you'll have a (not particularly attractive) cpu monitor widget at the very right of your systray. It's worth reading through this part of the rc.lua. I guess it's easier than Lisp.
Offline
Okay, Thanks a lot for your help everyone.
I ran into another problem though. I altered every widget in rc.lua to the new wibox.widget.textbox() method and it has stopped giving me errors about that. But now it gives me an error saying this:
Oops, there were errors during startup!
/usr/share/awesome/lib/wibox/widget/textbox.lua:54: bad argument #2 to 'parse_markup' (string expected. got table)
I thought maybe I had screwed it up while I was messing with it before so I deleted it and reinstalled awesome, therefore replacing the whole wibox folder with the newest version. But I still get the errors. Below is my textbox.lua. I marked line 54 with '----->' on either side. Any ideas?
---------------------------------------------------------------------------
-- @author Uli Schlachter
-- @author dodo
-- @copyright 2010, 2011 Uli Schlachter, dodo
-- @release v3.5
---------------------------------------------------------------------------
local base = require("wibox.widget.base")
local beautiful = require("beautiful")
local lgi = require("lgi")
local cairo = lgi.cairo
local Pango = lgi.Pango
local PangoCairo = lgi.PangoCairo
local type = type
local setmetatable = setmetatable
local pairs = pairs
local error = error
-- wibox.widget.textbox
local textbox = { mt = {} }
-- Setup a pango layout for the given textbox and cairo context
local function setup_layout(box, width, height)
local layout = box._layout
layout.width = Pango.units_from_double(width)
layout.height = Pango.units_from_double(height)
end
--- Draw the given textbox on the given cairo context in the given geometry
function textbox:draw(wibox, cr, width, height)
cr:update_layout(self._layout)
setup_layout(self, width, height)
local ink, logical = self._layout:get_pixel_extents()
local offset = 0
if self._valign == "center" then
offset = (height - logical.height) / 2
elseif self._valign == "bottom" then
offset = height - logical.height
end
cr:move_to(0, offset)
cr:show_layout(self._layout)
end
--- Fit the given textbox
function textbox:fit(width, height)
setup_layout(self, width, height)
local ink, logical = self._layout:get_pixel_extents()
return logical.width, logical.height
end
--- Set a textbox' text.
-- @param text The text to set. This can contain pango markup (e.g. <b>bold</b>)
function textbox:set_markup(text)
-----> local attr, parsed = Pango.parse_markup(text, -1, 0) <-----
-- In case of error, attr is false and parsed is an error message
if not attr then error(parsed) end
self._layout.text = parsed
self._layout.attributes = attr
self:emit_signal("widget::updated")
end
--- Set a textbox' text.
-- @param text The text to display. Pango markup is ignored and shown as-is.
function textbox:set_text(text)
self._layout.text = text
self._layout.attributes = nil
self:emit_signal("widget::updated")
end
--- Set a textbox' ellipsize mode.
-- @param mode Where should long lines be shortened? "start", "middle" or "end"
function textbox:set_ellipsize(mode)
local allowed = { none = "NONE", start = "START", middle = "MIDDLE", ["end"] = "END" }
if allowed[mode] then
self._layout:set_ellipsize(allowed[mode])
self:emit_signal("widget::updated")
end
end
--- Set a textbox' wrap mode.
-- @param mode Where to wrap? After "word", "char" or "word_char"
function textbox:set_wrap(mode)
local allowed = { word = "WORD", char = "CHAR", word_char = "WORD_CHAR" }
if allowed[mode] then
self._layout:set_wrap(allowed[mode])
self:emit_signal("widget::updated")
end
end
--- Set a textbox' vertical alignment
-- @param mode Where should the textbox be drawn? "top", "center" or "bottom"
function textbox:set_valign(mode)
local allowed = { top = true, center = true, bottom = true }
if allowed[mode] then
self._valign = mode
self:emit_signal("widget::updated")
end
end
--- Set a textbox' horizontal alignment
-- @param mode Where should the textbox be drawn? "left", "center" or "right"
function textbox:set_align(mode)
local allowed = { left = "LEFT", center = "CENTER", right = "RIGHT" }
if allowed[mode] then
self._layout:set_alignment(allowed[mode])
self:emit_signal("widget::updated")
end
end
--- Set a textbox' font
-- @param font The font description as string
function textbox:set_font(font)
self._layout:set_font_description(beautiful.get_font(font))
end
-- Returns a new textbox
local function new(text, ignore_markup)
local ret = base.make_widget()
for k, v in pairs(textbox) do
if type(v) == "function" then
ret[k] = v
end
end
local ctx = PangoCairo.font_map_get_default():create_context()
ret._layout = Pango.Layout.new(ctx)
ret:set_ellipsize("end")
ret:set_wrap("word_char")
ret:set_valign("center")
ret:set_align("left")
ret:set_font()
if text then
if ignore_markup then
ret:set_text(text)
else
ret:set_markup(text)
end
end
return ret
end
function textbox.mt:__call(...)
return new(...)
end
return setmetatable(textbox, textbox.mt)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
Last edited by nhare330 (2013-01-08 17:14:15)
Offline
The error is still in your config, not textbox.lua (it's just getting thrown in textbox.lua). Post your new rc.lua.
Steven [ web : git ]
GPG: 327B 20CE 21EA 68CF A7748675 7C92 3221 5899 410C
Do not email: honeypot@stebalien.com
Offline
Here it is. My rc.lua:
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
-- Widget and layout library
local wibox = require("wibox")
local vicious = require("vicious")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors })
end
-- Handle runtime errors after startup
do
local in_error = false
awesome.connect_signal("debug::error", function (err)
-- Make sure we don't go into an endless error loop
if in_error then return end
in_error = true
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = err })
in_error = false
end)
end
-- }}}
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/usr/share/awesome/themes/zenburn/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "lxterminal"
editor = os.getenv("EDITOR") or "nano"
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.
local 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
}
-- }}}
-- {{{ Wallpaper
if beautiful.wallpaper then
for s = 1, screen.count() do
gears.wallpaper.maximized(beautiful.wallpaper, s, true)
end
end
-- }}}
-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {
names = { "➊ ", "➋ ", "➌ ", "➍ ", "➎ ", "◌ " },
layout = { layouts[2], layouts[10], layouts[10], layouts[1], layouts[1], layouts[10]
}}
for s = 1, screen.count() do
-- Each screen has its own tag table.
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 .. " " .. awesome.conffile },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal }
}
})
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
menu = mymainmenu })
-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- }}}
-- {{{ Wibox
-- Separator
separator = wibox.widget.textbox()
separator:set_text(" | ")
-- Spacer
spacer = wibox.widget.textbox()
spacer:set_text(" ")
-- Network usage widget
netwidget = wibox.widget.textbox()
vicious.register(netwidget, vicious.widgets.net, '<span color="#CDBC73">${eth0 down_kb}</span> <span color="#7F9F7F">${eth0 up_kb}</span>', 3)
-- Memory widget
memwidget = wibox.widget.textbox()
memwidget_t = awful.tooltip({ objects = {memwidget}, })
vicious.register(memwidget, vicious.widgets.mem,
function (widget, args)
memwidget_t:set_text('<span color="#9868B1"> mem: ' ..args[2].. '/' ..args[3].. 'mb \n free: ' ..args[4].. 'mb \n swap: ' ..args[5].. '% > ' ..args[6].. '/' ..args[7].. 'mb \n free: ' ..args[8].. 'mb </span>')
return '<span color="#CDBC73">▣ ' ..args[1].. '%</span>'
end, 3)
-- Cpu widget
cpuwidget = wibox.widget.textbox()
cpuwidget_t = awful.tooltip({ objects = {cpuwidget}, })
vicious.register(cpuwidget, vicious.widgets.cpu,
function (widget, args)
cpuwidget_t:set_text('<span color="#9868B1"> cpu0: ' ..args[2].. '% \n cpu1: ' ..args[3].. '% </span>')
return '<span color="#CDBC73">◈ ' ..args[1].. '%</span>'
end, 3)
-- Battery widget
batwidget = wibox.widget.textbox()
batwidget_t = awful.tooltip({ objects = {batwidget}, })
vicious.register(batwidget, vicious.widgets.bat,
function (widget, args)
batwidget_t:set_text('<span color="#9868B1"> ' ..args[3].. ' </span>')
return '<span color="#CDBC73">↯ ' ..args[1].. '' ..args[2].. '</span>'
end, 14, "BAT0")
-- Keyboard widget
kbdcfg = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = { "us", "es" }
-- kbdcfg.us = "<span color='#CDBC73'>us</span>"
-- kbdcfg.es = "<span color='#CDBC73'>es</span>"
kbdcfg.current = 1
kbdcfg.widget = wibox.widget.textbox({ align = "right" })
kbdcfg.widget:set_text( kbdcfg.layout[kbdcfg.current] )
kbdcfg.switch = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
local t = kbdcfg.layout[kbdcfg.current]
kbdcfg.widget:set_text( t )
os.execute( kbdcfg.cmd .. t )
end
kbdcfg.widget:buttons(awful.util.table.join(
awful.button({ }, 1, function () kbdcfg.switch() end )
))
-- Wifi
wifiwidget = wibox.widget.textbox()
wifiwidget_t = awful.tooltip({ objects = {wifiwidget}, })
vicious.register (wifiwidget, vicious.widgets.wifi,
function (widget, args)
wifiwidget_t:set_text('<span color="#9868B1"> ' ..args["{ssid}"].. ' \n mode: ' ..args["{mode}"].. ' \n chan: ' ..args["{chan}"].. ' \n sign: ' ..args["{sign}"].. ' \n rate: ' ..args["{rate}"].. ' </span>')
-- ' \n rate: ' ..args["{rate}"].. ' \n linp: ' ..args["{linp}"]..
return '<span color="#CDBC73">⇄ ' ..args["{link}"].. '%</span>'
end, 7, "wlan0")
-- File System
fswidget = wibox.widget.textbox()
fswidget_t = awful.tooltip({ objects = {fswidget}, })
vicious.register(fswidget, vicious.widgets.fs,
function (widget, args)
fswidget_t:set_text('<span color="#9868B1">used: ' ..args["{/ used_gb}"].. '/' ..args["{/ size_gb}"].. 'gb </span>')
return '<span color="#CDBC73">◕ ' ..args["{/ avail_gb}"].. 'gb</span>'
end, 61)
-- Uptime
uptimewidget = wibox.widget.textbox()
uptimewidget_t = awful.tooltip({ objects = {uptimewidget}, })
vicious.register(uptimewidget, vicious.widgets.uptime,
function (widget, args)
uptimewidget_t:set_text('<span color="#9868B1"> ' ..args[1].. 'd ' ..args[2].. ':' ..args[3].. ' </span>')
return string.format('<span color="#CDBC73">⇑ ' ..args[1].. 'd</span>')
end, 61)
-- Volume Widget
volumecfg = {}
volumecfg.cardid = 0
volumecfg.channel = "Master"
volumecfg.widget = wibox.widget.textbox({ align = "right" })
-- volumecfg_t = awful.tooltip({ objects = { volumecfg.widget },})
-- volumecfg_t:set_text("volume")
-- command must start with a space!
volumecfg.mixercommand = function (command)
local fd = io.popen("amixer -c " .. volumecfg.cardid .. command)
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 = "<span color='#CDBC73'>◄ " .. volume .. "</span>"
else
volume = "<span color='#CDBC73'>⋪ " .. volume .. "</span>"
end
volumecfg.widget:set_text( volume )
end
volumecfg.update = function ()
volumecfg.mixercommand(" sget " .. volumecfg.channel)
end
volumecfg.up = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 1%+")
end
volumecfg.down = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 1%-")
end
volumecfg.toggle = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " toggle")
end
volumecfg.widget:buttons({
button({ }, 4, function () volumecfg.up() end),
button({ }, 5, function () volumecfg.down() end),
button({ }, 1, function () volumecfg.toggle() end)
})
volumecfg.update()
-- Date widget
datewidget = wibox.widget.textbox()
vicious.register(datewidget, vicious.widgets.date, '<span color="#D8D8D8"> %a. %b %d, %l:%M %p </span>', 5)
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })
-- Calendar widget to attach to the textclock
require('calendar2')
calendar2.addCalendarToWidget(datewidget)
-- Create a textclock widget
mytextclock = awful.widget.textclock()
-- 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, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
)
mytasklist = {}
mytasklist.buttons = awful.util.table.join(
awful.button({ }, 1, function (c)
if c == client.focus then
c.minimized = true
else
-- Without this, the following
-- :isvisible() makes no sense
c.minimized = false
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
-- This will also un-minimize
-- the client, if needed
client.focus = c
c:raise()
end
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()
-- 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.filter.all, mytaglist.buttons)
-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s })
-- Widgets that are aligned to the left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(mylauncher)
left_layout:add(mytaglist[s])
left_layout:add(mypromptbox[s])
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(mytextclock)
right_layout:add(mylayoutbox[s])
-- Now bring it all together (with the tasklist in the middle)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_middle(mytasklist[s])
layout:set_right(right_layout)
mywibox[s]:set_widget(layout)
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, }, "Down",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "Up",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "a", function () mymainmenu:show() end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "Down", function () awful.client.swap.byidx( 1) end),
awful.key({ modkey, "Shift" }, "Up", function () awful.client.swap.byidx( -1) end),
awful.key({ modkey, "Control" }, "Down", function () awful.screen.focus_relative( 1) end),
awful.key({ modkey, "Control" }, "Up", 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),
awful.key({ modkey, "Control" }, "n", awful.client.restore),
-- 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),
-- Menubar
awful.key({ modkey }, "p", function() menubar.show() end)
)
clientkeys = awful.util.table.join(
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, }, "w", 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, }, "t", function (c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "n",
function (c)
-- The client currently has the input focus, so it cannot be
-- minimized, since minimized clients can't have the focus.
c.minimized = true
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 = awful.client.focus.filter,
keys = clientkeys,
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 2 of screen 1.
-- { rule = { class = "Firefox" },
-- properties = { tag = tags[1][2] } },
}
-- }}}
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.connect_signal("manage", function (c, startup)
-- Enable sloppy focus
c:connect_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
local titlebars_enabled = false
if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
-- Widgets that are aligned to the left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(awful.titlebar.widget.iconwidget(c))
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
right_layout:add(awful.titlebar.widget.floatingbutton(c))
right_layout:add(awful.titlebar.widget.maximizedbutton(c))
right_layout:add(awful.titlebar.widget.stickybutton(c))
right_layout:add(awful.titlebar.widget.ontopbutton(c))
right_layout:add(awful.titlebar.widget.closebutton(c))
-- The title goes in the middle
local title = awful.titlebar.widget.titlewidget(c)
title:buttons(awful.util.table.join(
awful.button({ }, 1, function()
client.focus = c
c:raise()
awful.mouse.client.move(c)
end),
awful.button({ }, 3, function()
client.focus = c
c:raise()
awful.mouse.client.resize(c)
end)
))
-- Now bring it all together
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_right(right_layout)
layout:set_middle(title)
awful.titlebar(c):set_widget(layout)
end
end)
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
Last edited by nhare330 (2013-01-18 13:59:40)
Offline
So I went on the awesome IRC channel and asked around. They were helpful and one person looked through the whole rc.lua file for me. Turns out this usage of textbox is what caused the error:
kbdcfg.widget = wibox.widget.textbox({ align = "right" })
That one was line 164, but its in there online 208 and 250 as well. All I had to do was change it to:
kbdcfg.widget = wibox.widget.textbox()
and it was fine. I don't know how to maintain the align right (probably when you actually call it later) but I didn't need it anyway. Thanks everyone for your help!
Offline
EDIT: I used wibox as a variable name. So, wibox.whatever certainly wasn't going where I wanted it to. #FAIL
I was having the same issues as discussed above. After update to the new wibox.widget.textbox() changes, I am now having trouble with adding the widgets to my layout.
Here is the error:
~/.config/awesome/rc.lua:250: attempt to index field 'layout' (a nil value)
And here is line 250:
local left_layout = wibox.layout.fixed.horizontal()
I don't understand the error, it seems to me this is exactly what I should be doing.
Here is my config:
http://pastebin.com/QRYgPTzc
Thanks for any advice you can provide.
Last edited by knuckles (2013-01-18 01:38:48)
Offline