I found following solution, that works so far:
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,
tag = tags[1][9] } },
This is placed before the other rules, matching specific applications.
I'm just going to paste my excerpts here. These are confirmed working as of 3.4.10+.
...
62 -- {{{ Tags
63 -- Define a tag table which will hold all screen tags.
64 tags = {
65 names = { "1www", "2 @ ", "3trm", "4off", "5msg", "6vmr", 7, "8tom", "9log" },
66 layout = { layouts[1], layouts[2], layouts[3], layouts[2], layouts[3],
67 layouts[3], layouts[3], layouts[3], layouts[3] }
68 }
69 for s = 1, screen.count() do
70 -- Each screen has its own tag table.
71 tags[s] = awful.tag(tags.names, s, tags.layout)
72 end
73 -- }}}
...
408 -- {{{ Rules
409 awful.rules.rules = {
410 -- All clients will match this rule.
411 { rule = { },
412 properties = { border_width = beautiful.border_width,
413 border_color = beautiful.border_normal,
414 focus = true,
415 keys = clientkeys,
416 buttons = clientbuttons } },
417 -- Set Firefox to always map on tags number 1 of screen 1.
418 { rule = { class = "Firefox" },
419 properties = { tag = tags[1][1] } },
420 { rule = { class = "Gvim" },
421 properties = { size_hints_honor = false } },
422 { rule = { class = "KeePass.exe" },
423 properties = { maximized_vertical = true, maximized_horizontal = true } },
424 { rule = { class = "Mirage" },
425 properties = { maximized_vertical = true, maximized_horizontal = true } },
426 { rule = { class = "Navigator" },
427 properties = { tag = tags[1][1], maximized_vertical = true, maximized_horizontal = true } },
428 { rule = { class = "pinentry" },
429 properties = { floating = true } },
430 { rule = { class = "Skype" },
431 properties = { tag = tags[1][5] } },
432 { rule = { class = "Thunderbird" },
433 properties = { tag = tags[1][2] } },
434 { rule = { class = "Tomboy" },
435 properties = { tag = tags[1][8] } },
436 { rule = { class = "URxvt" },
437 properties = { size_hints_honor = false } },
438 { rule = { class = "Vncviewer" },
439 properties = { maximized_vertical = true, maximized_horizontal = true } },
440 { rule = { class = "XMind" },
441 properties = { maximized_vertical = true, maximized_horizontal = true } },
442 { rule = { class = "XTerm" },
443 properties = { size_hints_honor = false } },
444 { rule = { instance = "XTerm-logs" },
445 properties = { tag = tags[1][9] } },
446 }
447 -- }}}
I have no idea how Lua deals with whitespace, I do notice your curly braces and whitespaces are inconsistent.
Best Answer
I figured it out so I will answer my own question. This might not be the best or most efficient way, but it gets the job done. This question might fit more on stackoverflow since it is more focussed on programming.
I wrote this function, which grabs focus on the first client on screen (except for Conky, the system monitor I use).
I now call this function in rc.lua where the numbered keys are mapped: