You can create a function and use it through the awesome client tool.
First, create a function and add it to your rc.lua file :
function spawn(command, class, tag, test)
local test = test or "class"
local callback
callback = function(c)
if test == "class" then
if c.class == class then
awful.client.movetotag(tag, c)
client.disconnect_signal("manage", callback)
end
elseif test == "instance" then
if c.instance == class then
awful.client.movetotag(tag, c)
client.disconnect_signal("manage", callback)
end
elseif test == "name" then
if string.match(c.name, class) then
awful.client.movetotag(tag, c)
client.disconnect_signal("manage", callback)
end
end
end
client.connect_signal("manage", callback)
awful.util.spawn_with_shell(command)
end
Then, restart your awesome session (generally through Ctrl+Super+r).
Then, as if you were writing a rule, choose the way to identify the client (window) to move. You can do it by class, by instance or by name. Use xprop
to get informations on windows, also see this FAQ.
Finally, create a simple bash script :
#!/usr/bin/env bash
cat <<EOF | awesome-client
spawn("/usr/bin/firefox", "Firefox", tags[1][1], "class")
EOF
You can add as many spawn action you want. I have wrotten multiple startup scripts that launch all programs I need depending on the task I intend to work on.
Hope this helps.