You are not logged in.
I keep getting this error periodically:
/usr/share/awesome/lib/wibox/widget/textbox.lua:61: Unknown tag 'Span' on line 1 char 68
This is the textbox.lua the error references:
---------------------------------------------------------------------------
-- @author Uli Schlachter
-- @author dodo
-- @copyright 2010, 2011 Uli Schlachter, dodo
-- @release v3.5.1-1-g2d31033
---------------------------------------------------------------------------
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()
if logical.width == 0 or logical.height == 0 then
return 0, 0
end
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
And this is my rc.lua:
--[[ ]]--
-- -
-- Steamburn Awesome WM 3.5.+ config --
-- github.com/copycat-killer --
-- -
--[[ ]]--
-- Required Libraries
gears = require("gears")
awful = require("awful")
awful.rules = require("awful.rules")
awful.autofocus = require("awful.autofocus")
wibox = require("wibox")
beautiful = require("beautiful")
naughty = require("naughty")
vicious = require("vicious")
scratch = require("scratch")
local menubar = require("menubar")
-- Run once function
function run_once(cmd)
findme = cmd
firstspace = cmd:find(" ")
if firstspace then
findme = cmd:sub(0, firstspace-1)
end
awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
end
-- autostart applications
run_once("urxvtd")
run_once("unclutter -idle 10")
-- Localization
os.setlocale(os.getenv("LANG"))
-- 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
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
home = os.getenv("HOME")
confdir = home .. "/.config/awesome"
scriptdir = confdir .. "/script/"
themes = confdir .. "/themes"
active_theme = themes .. "/steamburn"
beautiful.init(active_theme .. "/theme.lua")
terminal = "urxvtc"
editor = os.getenv("EDITOR")
editor_cmd = terminal .. " -e " .. editor
gui_editor = "subl"
browser = "firefox"
browser2 = "google-chrome"
chat = terminal .. " -e irssi "
tasks = terminal .. " -e htop "
wifi = terminal .. " -e sudo wicd-curses "
musicplr = terminal .. " -g 130x34-320+16 -e ncmpcpp "
modkey = "Mod4"
altkey = "Mod1"
layouts =
{
awful.layout.suit.floating, -- 1
awful.layout.suit.tile, -- 2
awful.layout.suit.tile.left, -- 3
awful.layout.suit.tile.bottom, -- 4
awful.layout.suit.tile.top, -- 5
awful.layout.suit.fair, -- 6
awful.layout.suit.fair.horizontal, -- 7
--awful.layout.suit.spiral, -- 8
--awful.layout.suit.spiral.dwindle, -- 9
awful.layout.suit.max, -- 10
--awful.layout.suit.max.fullscreen, -- 11
--awful.layout.suit.magnifier -- 12
}
-- Wallpaper
if beautiful.wallpaper then
for s = 1, screen.count() do
gears.wallpaper.maximized(beautiful.wallpaper, s, true)
end
end
-- Tags
tags = {
names = { "web", "term", "docs", "media", "down"},
layout = { layouts[1], layouts[3], layouts[4], layouts[1], layouts[7] }
}
for s = 1, screen.count() do
tags[s] = awful.tag(tags.names, s, tags.layout)
end
-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- Menu
myaccessories = {
{ "archives", "7zFM" },
{ "file manager", "pcmanfm" },
{ "editor", gui_editor },
}
myinternet = {
{ "browser", browser },
{ "irc client" , chat },
{ "torrent" , "deluge" },
}
mygraphics = {
{ "gimp" , "gimp" },
{ "inkscape", "inkscape" },
{ "dia", "dia" },
{ "image viewer" , "viewnior" }
}
myoffice = {
{ "writer" , "libreoffice -writer" },
{ "spreadsheet" , "libreoffice -calc" },
{ "impress" , "libreoffice -impress" },
}
mysystem = {
{ "appearance" , "lxappearance" },
{ "cleaning" , "bleachbit" },
{ "powertop" , terminal .. " -e sudo powertop " },
{ "task manager" , tasks }
}
mymainmenu = awful.menu({ items = {
{ "accessories" , myaccessories },
{ "graphics" , mygraphics },
{ "internet" , myinternet },
{ "office" , myoffice },
{ "system" , mysystem },
}
})
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
menu = mymainmenu })
-- Wibox
-- Colours
coldef = "</span>"
white = "<span color='#cdcdcd'>"
gray = "<span color='#94928f'>"
-- Textclock widget
clockicon = wibox.widget.imagebox()
clockicon:set_image(beautiful.widget_clock)
mytextclock = awful.widget.textclock(white .. "%H:%M" .. coldef)
-- Calendar attached to the textclock
local os = os
local string = string
local table = table
local util = awful.util
char_width = nil
text_color = theme.fg_normal or "#FFFFFF"
today_color = theme.tasklist_fg_focus or "#FF7100"
calendar_width = 21
local calendar = nil
local offset = 0
local data = nil
local function pop_spaces(s1, s2, maxsize)
local sps = ""
for i = 1, maxsize - string.len(s1) - string.len(s2) do
sps = sps .. " "
end
return s1 .. sps .. s2
end
local function create_calendar()
offset = offset or 0
local now = os.date("*t")
local cal_month = now.month + offset
local cal_year = now.year
if cal_month > 12 then
cal_month = (cal_month % 12)
cal_year = cal_year + 1
elseif cal_month < 1 then
cal_month = (cal_month + 12)
cal_year = cal_year - 1
end
local last_day = os.date("%d", os.time({ day = 1, year = cal_year,
month = cal_month + 1}) - 86400)
local first_day = os.time({ day = 1, month = cal_month, year = cal_year})
local first_day_in_week =
os.date("%w", first_day)
local result = "su mo tu we th fr sa\n"
for i = 1, first_day_in_week do
result = result .. " "
end
local this_month = false
for day = 1, last_day do
local last_in_week = (day + first_day_in_week) % 7 == 0
local day_str = pop_spaces("", day, 2) .. (last_in_week and "" or " ")
if cal_month == now.month and cal_year == now.year and day == now.day then
this_month = true
result = result ..
string.format('<span weight="bold" foreground = "%s">%s</span>',
today_color, day_str)
else
result = result .. day_str
end
if last_in_week and day ~= last_day then
result = result .. "\n"
end
end
local header
if this_month then
header = os.date("%A, %d de %B")
else
header = os.date("%B %Y", first_day)
end
return header, string.format('<span font="%s" foreground="%s">%s</span>',
theme.font, text_color, result)
end
local function calculate_char_width()
return beautiful.get_font_height(theme.font) * 0.555
end
function hide()
if calendar ~= nil then
naughty.destroy(calendar)
calendar = nil
offset = 0
end
end
function show(inc_offset)
inc_offset = inc_offset or 0
local save_offset = offset
hide()
offset = save_offset + inc_offset
local char_width = char_width or calculate_char_width()
local header, cal_text = create_calendar()
calendar = naughty.notify({ title = header,
text = cal_text,
timeout = 0, hover_timeout = 0.5,
})
end
function add_calendar(t_out)
hide()
local char_width = char_width or calculate_char_width()
local header, cal_text = create_calendar()
calendar = naughty.notify({ title = header,
text = cal_text,
timeout = t_out,
})
end
mytextclock:connect_signal("mouse::enter", function() show(0) end)
mytextclock:connect_signal("mouse::leave", hide)
mytextclock:buttons(util.table.join( awful.button({ }, 1, function() show(-1) end),
awful.button({ }, 3, function() show(1) end)))
-- Mpd widget
mpdwidget = wibox.widget.textbox()
mpdwidget:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn_with_shell(musicplr) end)))
curr_track = nil
vicious.register(mpdwidget, vicious.widgets.mpd,
function(widget, args)
if (args["{state}"] == "Play") then
if( args["{Title}"] ~= curr_track )
then
curr_track = args["{Title}"]
run_once(scriptdir .. "mpdinfo")
end
return gray .. args["{Title}"] .. coldef .. white .. " " .. args["{Artist}"] .. coldef
elseif (args["{state}"] == "Pause") then
return gray .. "mpd " .. coldef .. white .. "in pausa" .. coldef
else
return ""
end
end, 1)
-- MEM widget
memicon = wibox.widget.imagebox()
memicon:set_image(beautiful.widget_mem)
memwidget = wibox.widget.textbox()
vicious.register(memwidget, vicious.widgets.mem, gray .. "Mem " .. coldef .. white .. "$1% " .. coldef, 13) -- in Megabytes
-- CPU widget
cpuicon = wibox.widget.imagebox()
cpuicon:set_image(beautiful.widget_cpu)
cpuwidget = wibox.widget.textbox()
vicious.register(cpuwidget, vicious.widgets.cpu, gray .. "Cpu " .. coldef .. white .. "$1% " .. coldef, 3)
cpuicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn(tasks, false) end)))
-- Temp widget
tempicon = wibox.widget.imagebox()
tempicon:set_image(beautiful.widget_temp)
tempicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn(terminal .. " -e sudo powertop ", false) end)))
tempwidget = wibox.widget.textbox()
vicious.register(tempwidget, vicious.widgets.thermal, gray .. "Temp " .. coldef .. white .. "$1º " .. coldef, 9, {"coretemp.0", "core"} )
-- Battery widget
baticon = wibox.widget.imagebox()
baticon:set_image(beautiful.widget_battery)
function batstate()
local file = io.open("/sys/class/power_supply/BAT0/status", "r")
if (file == nil) then
return "Cable plugged"
end
local batstate = file:read("*line")
file:close()
if (batstate == 'Discharging' or batstate == 'Charging') then
return batstate
else
return "Fully charged"
end
end
batwidget = wibox.widget.textbox()
vicious.register(batwidget, vicious.widgets.bat,
function (widget, args)
-- plugged
if (batstate() == 'Cable plugged') then
baticon:set_image(beautiful.widget_ac)
return ''
-- critical
elseif (args[2] <= 5 and batstate() == 'Discharging') then
baticon:set_image(beautiful.widget_battery_empty)
naughty.notify({
text = "sto per spegnermi...",
title = "Carica quasi esaurita!",
position = "top_right",
timeout = 1,
fg="#000000",
bg="#ffffff",
screen = 1,
ontop = true,
})
-- low
elseif (args[2] <= 10 and batstate() == 'Discharging') then
baticon:set_image(beautiful.widget_battery_low)
naughty.notify({
text = "attacca il cavo!",
title = "Carica bassa",
position = "top_right",
timeout = 1,
fg="#ffffff",
bg="#262729",
screen = 1,
ontop = true,
})
else baticon:set_image(beautiful.widget_battery)
end
return gray .. "Bat " .. coldef .. white .. args[2] .. " " .. coldef
end, 1, 'BAT0', '%')
-- Volume widget
volicon = wibox.widget.imagebox()
volicon:set_image(beautiful.widget_vol)
volumewidget = wibox.widget.textbox()
vicious.register(volumewidget, vicious.widgets.volume,
function (widget, args)
if (args[2] ~= "♩" ) then
return gray .. "Vol " .. coldef .. white .. args[1] .. " " .. coldef
else
return gray .. "Vol " .. coldef .. white .. "mute " .. coldef
end
end, 1, "Master")
-- Net widget
netwidget = wibox.widget.textbox()
vicious.register(netwidget, vicious.widgets.net, gray .. "Net " .. coldef .. white .. "${wlp2s0 down_kb} " .. "<span font=\"Terminus 8\">↓↑ </span>" .. "${wlp2s0 up_kb} " .. coldef, 3)
neticon = wibox.widget.imagebox()
neticon:set_image(beautiful.widget_net)
netwidget:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn_with_shell(wifi) end)))
-- Weather widget
weatherwidget = wibox.widget.textbox()
vicious.register(weatherwidget, vicious.widgets.weather,
function (widget, args)
if args["{tempf}"] == "N/A" then
return gray .. "No " .. coldef .. white .. "Info " .. coldef
else
-- work in progress - ☂☔☃ ⛆⛇⛈ ?
if( args["{sky}"] == "N/A" or string.find(args["{sky}"], "Clear") ~= nil ) then args["{sky}"] = "<span font=\"Symbola 10\" rise=\"-1535\">☼</span>"
elseif( string.find(args["{sky}"], "Cloudy") ~= nil ) then args["{sky}"] = "<span font=\"Symbola 11\" rise=\"-1620\">☁</span>"
end
return gray .. args["{sky}"] .. coldef .. " " .. white .. args["{tempc}"] .. "º " .. coldef
end
end, 1800, "LPPT" )
-- Separators
spr = wibox.widget.textbox(' ')
leftbr = wibox.widget.textbox(' [')
rightbr = wibox.widget.textbox('] ')
-- Layout
-- 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()
-- 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 upper wibox
mywibox[s] = awful.wibox({ position = "top", screen = s, height = 18 })
-- Widgets that are aligned to the upper left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(spr)
left_layout:add(mytaglist[s])
left_layout:add(leftbr)
left_layout:add(mylayoutbox[s])
left_layout:add(rightbr)
left_layout:add(mypromptbox[s])
-- Widgets that are aligned to the upper right
local right_layout = wibox.layout.fixed.horizontal()
--if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(spr)
right_layout:add(mpdwidget)
right_layout:add(spr)
right_layout:add(cpuwidget)
right_layout:add(spr)
right_layout:add(memwidget)
right_layout:add(spr)
right_layout:add(tempwidget)
right_layout:add(spr)
right_layout:add(batwidget)
right_layout:add(spr)
right_layout:add(netwidget)
right_layout:add(spr)
right_layout:add(volumewidget)
right_layout:add(spr)
right_layout:add(weatherwidget)
right_layout:add(spr)
right_layout:add(mytextclock)
right_layout:add(spr)
if s == 1 then right_layout:add(wibox.widget.systray()) end
-- Now bring it all together (with the tasklist in the middle)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
ma = terminal .. " -e mutt "
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(
-- Capture a screenshot
awful.key({ altkey }, "p", function() awful.util.spawn("screenshot",false) end),
-- Move clients
awful.key({ altkey }, "Next", function () awful.client.moveresize( 1, 1, -2, -2) end),
awful.key({ altkey }, "Prior", function () awful.client.moveresize(-1, -1, 2, 2) end),
awful.key({ altkey }, "Down", function () awful.client.moveresize( 0, 1, 0, 0) end),
awful.key({ altkey }, "Up", function () awful.client.moveresize( 0, -1, 0, 0) end),
awful.key({ altkey }, "Left", function () awful.client.moveresize(-1, 0, 0, 0) end),
awful.key({ altkey }, "Right", function () awful.client.moveresize( 1, 0, 0, 0) end),
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, }, "k",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "j",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
-- Show/Hide Wibox
awful.key({ modkey }, "b", function ()
mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible
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),
awful.key({ modkey, "Control" }, "n", awful.client.restore),
-- Dropdown terminal
awful.key({ modkey, }, "z", function () scratch.drop(terminal) end),
-- Widgets popups
awful.key({ altkey, }, "c", function () add_calendar(7) end),
-- Volume control
awful.key({ }, "XF86AudioRaiseVolume", function ()
awful.util.spawn("amixer set Master playback 1%+", false )
vicious.force({ volumewidget })
end),
awful.key({ }, "XF86AudioLowerVolume", function ()
awful.util.spawn("amixer set Master playback 1%-", false )
vicious.force({ volumewidget })
end),
awful.key({ }, "XF86AudioMute", function ()
awful.util.spawn("amixer set Master playback toggle", false )
vicious.force({ volumewidget })
end),
-- Music control
awful.key({ altkey, "Control" }, "Up", function ()
awful.util.spawn( "mpc toggle", false )
vicious.force({ mpdwidget } )
end),
awful.key({ altkey, "Control" }, "Down", function ()
awful.util.spawn( "mpc stop", false )
vicious.force({ mpdwidget } )
end ),
awful.key({ altkey, "Control" }, "Left", function ()
awful.util.spawn( "mpc prev", false )
vicious.force({ mpdwidget } )
end ),
awful.key({ altkey, "Control" }, "Right", function ()
awful.util.spawn( "mpc next", false )
vicious.force({ mpdwidget } )
end ),
-- Copy to clipboard
awful.key({ modkey, }, "c", function () os.execute("xsel -p -o | xsel -i -b") end),
-- User programs
awful.key({ modkey, }, "q", function () awful.util.spawn( "google-chrome", false ) end),
awful.key({ modkey, }, "a", function () awful.util.spawn( "firefox", false ) end),
awful.key({ modkey, }, "s", function () awful.util.spawn(gui_editor) end),
awful.key({ modkey, }, "t", function () awful.util.spawn( "deluge", false ) end),
awful.key({ modkey, }, "d", function () awful.util.spawn( "pcmanfm", false ) 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),
-- 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, "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, }, "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 ()
screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, "#" .. i + 9,
function ()
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 = clientkeys,
buttons = clientbuttons,
size_hints_honor = false
}
},
{ rule = { class = "MPlayer" },
properties = { floating = true } },
{ rule = { class = "Dwb" },
properties = { tag = tags[1][1],
maximized_vertical=true,
maximized_horizontal=true } },
{ rule = { class = "Midori" },
properties = { tag = tags[1][1],
maximized_vertical=true,
maximized_horizontal=true } },
{ rule = { class = "Geany" },
properties = { tag = tags[1][2] } },
{ rule = { class = "Zathura" },
properties = { tag = tags[1][3] } },
{ rule = { class = "Thunderbird" },
properties = { tag = tags[1][3] } },
{ rule = { class = "Dia" },
properties = { tag = tags[1][4],
floating = true } },
{ rule = { class = "Gimp" },
properties = { tag = tags[1][4],
floating = true } },
{ rule = { class = "Inkscape" },
properties = { tag = tags[1][4],
floating = true } },
{ rule = { class = "Transmission-gtk" },
properties = { tag = tags[1][5] } },
{ rule = { class = "Torrent-search" },
properties = { tag = tags[1][5] } },
}
-- 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))
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)
Can anybody help me out with this? I don't even know where to start, since I can't find said 'Span' tag.
Last edited by miroslec (2013-04-18 02:01:01)
Offline
Trying to troubleshoot this problem I can confirm it happens with Awesome from community and Awesome-git from AUR.
I still can't find the elusive "Span" tag the error talks about.
Offline
I am the author, I used steamburn for a while without such problem.
Maybe it has to do with some setting in the rc that probably don't match with your system.
Tell me the exact moments the problem occurs, or post a screenshot.
Offline
I am the author, I used steamburn for a while without such problem.
Maybe it has to do with some setting in the rc that probably don't match with your system.
Tell me the exact moments the problem occurs, or post a screenshot.
First of all, thank you for the awesome themes. I've been using them as a base for my daily Awesome configs.
Unfortunately, the error occurs rather randomly, and I'm not able to pinpoint why it happens.
Here's a screenshot:
This happened during the night, while I wasn't using the laptop. Only Deluge and Dropbox were running (although it still happens if they aren't running).
Last edited by miroslec (2013-04-16 12:59:27)
Offline
I too can confirm I get this error message and I use your the Blackbird theme with the same config. I find that the error message comes up when my internet is really bogged down with other connections.
Offline
sardina wrote:I am the author, I used steamburn for a while without such problem.
Maybe it has to do with some setting in the rc that probably don't match with your system.
Tell me the exact moments the problem occurs, or post a screenshot.
First of all, thank you for the awesome themes. I've been using them as a base for my daily Awesome configs.
Unfortunately, the error occurs rather randomly, and I'm not able to pinpoint why it happens.Here's a screenshot:
http://i.imgur.com/qZloq9Ds.png?1
This happened during the night, while I wasn't using the laptop. Only Deluge and Dropbox were running (although it still happens if they aren't running).
I used your configuration for about 45 minutes, slice of time in wich every widget updates.
No problems.
Let's see if it is the weather widget causing your problem.
Modify it like this:
weatherwidget = wibox.widget.textbox()
sky_toshow = ""
vicious.register(weatherwidget, vicious.widgets.weather,
function (widget, args)
if args["{tempf}"] == "N/A" then
return gray .. "No " .. coldef .. white .. "Info " .. coldef
else
-- work in progress - ☂☔☃ ⛆⛇⛈ ?
if( args["{sky}"] == "N/A" or string.find(args["{sky}"], "Clear") ~= nil ) then sky_toshow = "<span font=\"Symbola 10\" rise=\"-1535\">☼</span>"
elseif( string.find(args["{sky}"], "Cloudy") ~= nil ) then sky_toshow = "<span font=\"Symbola 11\" rise=\"-1620\">☁</span>"
end
if sky_toshow ~= "" then return gray .. sky_toshow .. coldef .. " " .. white .. args["{tempc}"] .. " " .. coldef
else return gray .. args["{sky}"] .. coldef .. " " .. white .. args["{tempc}"] .. " " .. coldef
end
end
end, 1800, "LPPT" )
And install ttf-symbola and ttf-terminus, if you don't have them. (just in case)
If problem occurs again, remove the code from your config, to surely assert wether it the cause or not.
Let me know how it goes.
@z1lt0id same procedure: post a screenshot and your rc.lua
I updated my github.
Offline
Cheers Sardina, I've edited the code and I'll see how it goes. I'll give an update tomorrow morning.
Offline
miroslec wrote:sardina wrote:I am the author, I used steamburn for a while without such problem.
Maybe it has to do with some setting in the rc that probably don't match with your system.
Tell me the exact moments the problem occurs, or post a screenshot.
First of all, thank you for the awesome themes. I've been using them as a base for my daily Awesome configs.
Unfortunately, the error occurs rather randomly, and I'm not able to pinpoint why it happens.Here's a screenshot:
http://i.imgur.com/qZloq9Ds.png?1
This happened during the night, while I wasn't using the laptop. Only Deluge and Dropbox were running (although it still happens if they aren't running).
I used your configuration for about 45 minutes, slice of time in wich every widget updates.
No problems.
Let's see if it is the weather widget causing your problem.
Modify it like this:
weatherwidget = wibox.widget.textbox() sky_toshow = "" vicious.register(weatherwidget, vicious.widgets.weather, function (widget, args) if args["{tempf}"] == "N/A" then return gray .. "No " .. coldef .. white .. "Info " .. coldef else -- work in progress - ☂☔☃ ⛆⛇⛈ ? if( args["{sky}"] == "N/A" or string.find(args["{sky}"], "Clear") ~= nil ) then sky_toshow = "<span font=\"Symbola 10\" rise=\"-1535\">☼</span>" elseif( string.find(args["{sky}"], "Cloudy") ~= nil ) then sky_toshow = "<span font=\"Symbola 11\" rise=\"-1620\">☁</span>" end if sky_toshow ~= "" then return gray .. sky_toshow .. coldef .. " " .. white .. args["{tempc}"] .. " " .. coldef else return gray .. args["{sky}"] .. coldef .. " " .. white .. args["{tempc}"] .. " " .. coldef end end end, 1800, "LPPT" )
And install ttf-symbola and ttf-terminus, if you don't have them. (just in case)
If problem occurs again, remove the code from your config, to surely assert wether it the cause or not.
Let me know how it goes.
@z1lt0id same procedure: post a screenshot and your rc.lua
I updated my github.
Thanks for your help troubleshooting this. I've changed the code for the weather widget. Let's see how it goes.
EDIT - About two hours without the bug. Thanks for your help Sardina
Last edited by miroslec (2013-04-17 13:15:26)
Offline
Solved. No errors all day.
Thanks!
Offline
Offline