I actually went and tried out shifty, but I didn't really like it. In
addition to being another layer of complexity, the tags don't start off
being created - they're created as you access them, which isn't really what
I'm looking for. I'd like them all to be visible on wibox as soon as awesome
starts up.

So you're saying you did actually test this and it works? I've made both of
the changes suggested here and I still have no luck. What command are you
using to launch the window itself?

Oh, and I have a little script that checks if an app is running before
launching it - I'm just waiting until it's working to tweak it like that.

Thanks so much for all your help,

Eliot

On 2 September 2010 16:58, Vitor Eiji Justus Sakaguti
<vitorei...@gmail.com>wrote:

> On Thu, Sep 2, 2010 at 6:33 PM, Vitor Eiji Justus Sakaguti
> <vitorei...@gmail.com> wrote:
> > Hi Eliot,
> >
> > On Thu, Sep 2, 2010 at 5:14 PM, Eliot Frost <el...@stillinbeta.com>
> wrote:
> >> Hello all,
> >>
> >> I'm very new to awesome (discovered it just a few days ago) and I'm
> really
> >> liking it so far. One thing I'm trying to do that I haven't so far been
> able
> >> to is thus: Have a specific application launch whenever I focus on a tag
> (by
> >> keyboard or by clicking its label or whatever)
> >>
> >> I have this at the end of my rc.lua:
> >>
> >> tags[2].add_signal("property::selected", function(t)
> >> awful.util.spawn("firefox",0,1) end)
> >
> > I did not test this, but I'm guessing tags[1][2] would solve your
> problem.
> > HTH
>
> Argh, just tested it. You'll need tags[1][2]:add_signal(...) for it to
> work. Not sure why the "." won't work...
> Also, this will be executed whenever the tag's selected state changes,
> so your funtion will be called when you leave the tag, so you should
> probably set some conditionals in it before spawning stuff.
> Additionally, the function will be called every time you enter or
> leave the tag, so you migh want to check for running clients too.
> Or just use shifty :P
>
> >
> >>
> >>
> >> I feel as though this ought to to work, though if I had to hazard a
> guess as
> >> to why it was't, I guess that either "property::selected" doesn't mean
> what
> >> I think it does, or awful.util.spawn doesn't work how I think it does.
> >>
> >> Anyone have any ideas? Am I going about this completely the wrong way?
> Do
> >> tell. I'm not familiar with Lua, but I am a programmer and I'm very
> >> comfortable on the command line. Any help would be very appreciated.
> >>
> >> Eliot
> >>
> >> other that removing a couple layouts, my rc.lua is pretty much th
> default:
> >>
> >> -- standard awesome library
> >> require("awful")
> >> require("awful.autofocus")
> >> require("awful.rules")
> >> -- Theme handling library
> >> require("beautiful")
> >> -- Notification library
> >> require("naughty")
> >>
> >> -- Load Debian menu entries
> >> require("debian.menu")
> >>
> >> -- {{{ Variable definitions
> >> -- Themes define colours, icons, and wallpapers
> >> beautiful.init("/usr/share/awesome/themes/sky/theme.lua")
> >>
> >> -- This is used later as the default terminal and editor to run.
> >> terminal = "gnome-terminal"
> >> editor = os.getenv("EDITOR") or "editor"
> >> editor_cmd = terminal .. " -e " .. editor
> >>
> >> -- Default modkey.
> >> -- Usually, Mod4 is the key with a logo between Control and Alt.
> >> -- If you do not like this or do not have such a key,
> >> -- I suggest you to remap Mod4 to another key using xmodmap or other
> tools.
> >> -- However, you can use another modifier like Mod1, but it may interact
> with
> >> others.
> >> modkey = "Mod4"
> >>
> >> -- Table of layouts to cover with awful.layout.inc, order matters.
> >> layouts =
> >> {
> >>     awful.layout.suit.floating,
> >>     awful.layout.suit.tile,
> >> --    awful.layout.suit.tile.left,
> >>     awful.layout.suit.tile.bottom,
> >> --    awful.layout.suit.tile.top,
> >> --    awful.layout.suit.fair,
> >> --    awful.layout.suit.fair.horizontal,
> >> --    awful.layout.suit.spiral,
> >> --    awful.layout.suit.spiral.dwindle,
> >>     awful.layout.suit.max,
> >> --    awful.layout.suit.max.fullscreen
> >> --    awful.layout.suit.magnifier
> >> }
> >> -- }}}
> >>
> >> -- {{{ Tags
> >> -- Define a tag table which hold all screen tags.
> >> tags = {
> >>     names= {"etc","web","vi","shell","im","gimp","media" },
> >>     layout = {
> >>
> layouts[1],layouts[2],layouts[2],layouts[2],layouts[1],layouts[2],layouts[1]
> >> }
> >> }
> >> for s = 1, screen.count() do
> >>     -- Each screen has its own tag table.
> >> --    tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
> >>       tags[s] = awful.tag(tags.names, s, tags.layout)
> >>
> >> end
> >> -- }}}
> >>
> >> -- {{{ Menu
> >> -- Create a laucher widget and a main menu
> >> myawesomemenu = {
> >>    { "manual", terminal .. " -e man awesome" },
> >>    { "edit config", editor_cmd .. " " .. awful.util.getdir("config") ..
> >> "/rc.lua" },
> >>    { "restart", awesome.restart },
> >>    { "quit", awesome.quit }
> >> }
> >>
> >> mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu,
> >> beautiful.awesome_icon },
> >>                                     { "Debian",
> >> debian.menu.Debian_menu.Debian },
> >>                                     { "open terminal", terminal }
> >>                                   }
> >>                         })
> >>
> >> mylauncher = awful.widget.launcher({ image =
> image(beautiful.awesome_icon),
> >>                                      menu = mymainmenu })
> >> -- }}}
> >>
> >> -- {{{ Wibox
> >> -- Create a textclock widget
> >> mytextclock = awful.widget.textclock({ align = "right" })
> >>
> >> -- Create a systray
> >> mysystray = widget({ type = "systray" })
> >>
> >> -- Create a wibox for each screen and add it
> >> mywibox = {}
> >> mypromptbox = {}
> >> mylayoutbox = {}
> >> mytaglist = {}
> >> mytaglist.buttons = awful.util.table.join(
> >>                     awful.button({ }, 1, awful.tag.viewonly),
> >>                     awful.button({ modkey }, 1, awful.client.movetotag),
> >>                     awful.button({ }, 3, awful.tag.viewtoggle),
> >>                     awful.button({ modkey }, 3, awful.client.toggletag),
> >>                     awful.button({ }, 4, awful.tag.viewnext),
> >>                     awful.button({ }, 5, awful.tag.viewprev)
> >>                     )
> >> mytasklist = {}
> >> mytasklist.buttons = awful.util.table.join(
> >>                      awful.button({ }, 1, function (c)
> >>                                               if not c:isvisible() then
> >>
> >> awful.tag.viewonly(c:tags()[1])
> >>                                               end
> >>                                               client.focus = c
> >>                                               c:raise()
> >>                                           end),
> >>                      awful.button({ }, 3, function ()
> >>                                               if instance then
> >>                                                   instance:hide()
> >>                                                   instance = nil
> >>                                               else
> >>                                                   instance =
> >> awful.menu.clients({ width=250 })
> >>                                               end
> >>                                           end),
> >>                      awful.button({ }, 4, function ()
> >>
> awful.client.focus.byidx(1)
> >>                                               if client.focus then
> >> client.focus:raise() end
> >>                                           end),
> >>                      awful.button({ }, 5, function ()
> >>
> awful.client.focus.byidx(-1)
> >>                                               if client.focus then
> >> client.focus:raise() end
> >>                                           end))
> >>
> >> for s = 1, screen.count() do
> >>     -- Create a promptbox for each screen
> >>     mypromptbox[s] = awful.widget.prompt({ layout =
> >> awful.widget.layout.horizontal.leftright })
> >>     -- Create an imagebox widget which will contains an icon indicating
> >> which layout we're using.
> >>     -- We need one layoutbox per screen.
> >>     mylayoutbox[s] = awful.widget.layoutbox(s)
> >>     mylayoutbox[s]:buttons(awful.util.table.join(
> >>                            awful.button({ }, 1, function ()
> >> awful.layout.inc(layouts, 1) end),
> >>                            awful.button({ }, 3, function ()
> >> awful.layout.inc(layouts, -1) end),
> >>                            awful.button({ }, 4, function ()
> >> awful.layout.inc(layouts, 1) end),
> >>                            awful.button({ }, 5, function ()
> >> awful.layout.inc(layouts, -1) end)))
> >>     -- Create a taglist widget
> >>     mytaglist[s] = awful.widget.taglist(s,
> awful.widget.taglist.label.all,
> >> mytaglist.buttons)
> >>
> >>     -- Create a tasklist widget
> >>     mytasklist[s] = awful.widget.tasklist(function(c)
> >>                                               return
> >> awful.widget.tasklist.label.currenttags(c, s)
> >>                                           end, mytasklist.buttons)
> >>
> >>     -- Create the wibox
> >>     mywibox[s] = awful.wibox({ position = "top", screen = s })
> >>     -- Add widgets to the wibox - order matters
> >>     mywibox[s].widgets = {
> >>         {
> >>             mylauncher,
> >>             mytaglist[s],
> >>             mypromptbox[s],
> >>             layout = awful.widget.layout.horizontal.leftright
> >>         },
> >>         mylayoutbox[s],
> >>         mytextclock,
> >>         s == 1 and mysystray or nil,
> >> --        mytasklist[s],
> >>         layout = awful.widget.layout.horizontal.rightleft
> >>     }
> >> end
> >> -- }}}
> >>
> >> -- {{{ Mouse bindings
> >> root.buttons(awful.util.table.join(
> >>     awful.button({ }, 3, function () mymainmenu:toggle() end),
> >>     awful.button({ }, 4, awful.tag.viewnext),
> >>     awful.button({ }, 5, awful.tag.viewprev)
> >> ))
> >> -- }}}
> >>
> >> -- {{{ Key bindings
> >> globalkeys = awful.util.table.join(
> >>     awful.key({ modkey,           }, "Left",   awful.tag.viewprev
> ),
> >>     awful.key({ modkey,           }, "Right",  awful.tag.viewnext
> ),
> >>     awful.key({ modkey,           }, "Escape",
> awful.tag.history.restore),
> >>
> >>     awful.key({ modkey,           }, "j",
> >>         function ()
> >>             awful.client.focus.byidx( 1)
> >>             if client.focus then client.focus:raise() end
> >>         end),
> >>     awful.key({ modkey,           }, "k",
> >>         function ()
> >>             awful.client.focus.byidx(-1)
> >>             if client.focus then client.focus:raise() end
> >>         end),
> >>     awful.key({ modkey,           }, "w", function ()
> >> mymainmenu:show(true)        end),
> >>
> >>     -- Layout manipulation
> >>     awful.key({ modkey, "Shift"   }, "j", function ()
> >> awful.client.swap.byidx(  1)    end),
> >>     awful.key({ modkey, "Shift"   }, "k", function ()
> >> awful.client.swap.byidx( -1)    end),
> >>     awful.key({ modkey, "Control" }, "j", function ()
> >> awful.screen.focus_relative( 1) end),
> >>     awful.key({ modkey, "Control" }, "k", function ()
> >> awful.screen.focus_relative(-1) end),
> >>     awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
> >>     awful.key({ modkey,           }, "Tab",
> >>         function ()
> >>             awful.client.focus.history.previous()
> >>             if client.focus then
> >>                 client.focus:raise()
> >>             end
> >>         end),
> >>
> >>     -- Standard program
> >>     awful.key({ modkey,           }, "Return", function ()
> >> awful.util.spawn(terminal) end),
> >>     awful.key({ modkey, "Control" }, "r", awesome.restart),
> >>     awful.key({ modkey, "Shift"   }, "q", awesome.quit),
> >>
> >>     awful.key({ modkey,           }, "l",     function ()
> >> awful.tag.incmwfact( 0.05)    end),
> >>     awful.key({ modkey,           }, "h",     function ()
> >> awful.tag.incmwfact(-0.05)    end),
> >>     awful.key({ modkey, "Shift"   }, "h",     function ()
> >> awful.tag.incnmaster( 1)      end),
> >>     awful.key({ modkey, "Shift"   }, "l",     function ()
> >> awful.tag.incnmaster(-1)      end),
> >>     awful.key({ modkey, "Control" }, "h",     function ()
> awful.tag.incncol(
> >> 1)         end),
> >>     awful.key({ modkey, "Control" }, "l",     function ()
> >> awful.tag.incncol(-1)         end),
> >>     awful.key({ modkey,           }, "space", function ()
> >> awful.layout.inc(layouts,  1) end),
> >>     awful.key({ modkey, "Shift"   }, "space", function ()
> >> awful.layout.inc(layouts, -1) end),
> >>
> >>     -- Prompt
> >>     awful.key({ modkey },            "r",     function ()
> >> mypromptbox[mouse.screen]:run() end),
> >>
> >>     awful.key({ modkey }, "x",
> >>               function ()
> >>                   awful.prompt.run({ prompt = "Run Lua code: " },
> >>                   mypromptbox[mouse.screen].widget,
> >>                   awful.util.eval, nil,
> >>                   awful.util.getdir("cache") .. "/history_eval")
> >>               end)
> >> )
> >>
> >> clientkeys = awful.util.table.join(
> >>     awful.key({ modkey,           }, "f",      function (c) c.fullscreen
> =
> >> not c.fullscreen  end),
> >>     awful.key({ modkey, "Shift"   }, "c",      function (c)
> >> c:kill()                         end),
> >>     awful.key({ modkey, "Control" }, "space",
> >> awful.client.floating.toggle                     ),
> >>     awful.key({ modkey, "Control" }, "Return", function (c)
> >> c:swap(awful.client.getmaster()) end),
> >>     awful.key({ modkey,           }, "o",
> >> awful.client.movetoscreen                        ),
> >>     awful.key({ modkey, "Shift"   }, "r",      function (c)
> >> c:redraw()                       end),
> >> --    awful.key({ modkey,           }, "n",      function (c)
> c.minimized =
> >> not c.minimized    end), --min is icky.
> >>     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,
> >>              maximized_vertical   = false, --ensure no window
> >>                      maximized_horizontal = false, --starts maximized
> >>                      focus = true,
> >>                      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 1 of screen 1.
> >>        { rule = { class = "firefox" },
> >>       properties = { tag = tags[1]} },
> >> }
> >> -- }}}
> >>
> >> -- {{{ Signals
> >> -- Signal function to execute when a new client appears.
> >> client.add_signal("manage", function (c, startup)
> >>     -- Add a titlebar
> >>     -- awful.titlebar.add(c, { modkey = modkey })
> >>
> >>     -- Enable sloppy focus
> >>     c:add_signal("mouse::enter", function(c)
> >>         if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
> >>             and awful.client.focus.filter(c) then
> >>             client.focus = c
> >>         end
> >>     end)
> >>
> >>     if not startup then
> >>         -- Set the windows at the slave,
> >>         -- i.e. put it at the end of others instead of setting it
> master.
> >>         -- awful.client.setslave(c)
> >>
> >>         -- Put windows in a smart way, only if they does not set an
> initial
> >> position.
> >>         if not c.size_hints.user_position and not
> >> c.size_hints.program_position then
> >>             awful.placement.no_overlap(c)
> >>             awful.placement.no_offscreen(c)
> >>         end
> >>     end
> >> end)
> >>
> >> client.add_signal("focus", function(c) c.border_color =
> >> beautiful.border_focus end)
> >> client.add_signal("unfocus", function(c) c.border_color =
> >> beautiful.border_normal end)
> >>
> >> tags[2].add_signal("property::selected", function(t)
> >> awful.util.spawn("firefox",0,1) end)
> >>
> >>
> >>
> >> -- }}}
> >>
> >>
> >>
> >
>

Reply via email to