mirror of
https://github.com/vincentbernat/i3wm-configuration.git
synced 2025-07-05 15:54:20 +02:00
tags: switch to shifty
This commit is contained in:
parent
a780d481c2
commit
ea09188897
10 changed files with 139 additions and 477 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -0,0 +1,3 @@
|
|||
[submodule "shifty"]
|
||||
path = shifty
|
||||
url = http://bioe007@github.com/bioe007/awesome-shifty.git
|
|
@ -44,11 +44,6 @@ Here some of the things you may be interested in:
|
|||
also using notifications to change xrandr setup. This is pretty
|
||||
cool.
|
||||
|
||||
- I am sharing tags between screen with
|
||||
[sharetags](http://awesome.naquadah.org/wiki/Shared_tags). I am
|
||||
also giving names to tags: I access them with something like
|
||||
`config.tags.emacs`. I need to try out shifty.
|
||||
|
||||
- Keybindings are "autodocumented". See `lib/keydoc.lua` to see how
|
||||
this works. The list of key bindings can be accessed with Mod4 +
|
||||
F1.
|
||||
|
|
|
@ -1,356 +0,0 @@
|
|||
-- functions to share tags on multiple screens
|
||||
|
||||
--{{{ Grab environment we need
|
||||
local capi = { widget = widget,
|
||||
screen = screen,
|
||||
image = image,
|
||||
client = client,
|
||||
button = button }
|
||||
local setmetatable = setmetatable
|
||||
local math = math
|
||||
local type = type
|
||||
local pcall = pcall
|
||||
local util = require("awful.util")
|
||||
local tag = require("awful.tag")
|
||||
local beautiful = require("beautiful")
|
||||
local layout = require("awful.widget.layout")
|
||||
|
||||
local awful = require("awful")
|
||||
local mouse = mouse
|
||||
|
||||
local pairs = pairs
|
||||
local ipairs = ipairs
|
||||
--}}}
|
||||
|
||||
module("vbe/sharetags")
|
||||
|
||||
--{{{ Private structures
|
||||
tagwidgets = setmetatable({}, { __mode = 'k' })
|
||||
local cachedtags = {}
|
||||
label = {}
|
||||
--}}}
|
||||
|
||||
--{{{ Functions
|
||||
|
||||
--{{{ create_tags: create a table of tags and bind them to screens
|
||||
-- @param names : list to label the tags
|
||||
-- @param layouts : list of layouts for the tags
|
||||
-- @return table of tag objects
|
||||
function create_tags(names, layouts)
|
||||
local tags = {}
|
||||
local count = #names
|
||||
if capi.screen.count() >= #names then
|
||||
count = capi.screen.count() + 1
|
||||
end
|
||||
for tagnumber = 1, count do
|
||||
tags[tagnumber] = awful.tag.add(names[tagnumber], {})
|
||||
tag.setproperty(tags[tagnumber], "number", tagnumber)
|
||||
-- Add tags to screen one by one
|
||||
tags[tagnumber].screen = 1
|
||||
awful.layout.set(layouts[tagnumber], tags[tagnumber])
|
||||
end
|
||||
for s = 1, capi.screen.count() do
|
||||
-- I'm sure you want to see at least one tag.
|
||||
tags[s].screen = s
|
||||
tags[s].selected = true
|
||||
end
|
||||
cachedtags = tags
|
||||
return tags
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ tag_move: move a tag to a screen
|
||||
-- @param t : the tag object to move
|
||||
-- @param scr : the screen object to move to
|
||||
function tag_move(t, scr)
|
||||
local ts = t or awful.tag.selected()
|
||||
local screen_target = scr or awful.util.cycle(capi.screen.count(), ts.screen + 1)
|
||||
|
||||
if ts.screen and screen_target ~= ts.screen then
|
||||
-- switch for tag
|
||||
ts.screen = screen_target
|
||||
-- switch for all clients on tag
|
||||
if #ts:clients() > 0 then
|
||||
for _ , c in ipairs(ts:clients()) do
|
||||
if not c.sticky then
|
||||
c.screen = screen_target
|
||||
c:tags( {ts} )
|
||||
else
|
||||
awful.client.toggletag(ts,c)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ tag_to_screen: move a tag to a screen if its not already there
|
||||
-- @param t : the tag object to move
|
||||
-- @param scr : the screen object to move to
|
||||
function tag_to_screen(t, scr)
|
||||
local ts = t or awful.tag.selected()
|
||||
local screen_origin = ts.screen
|
||||
local screen_target = scr or awful.util.cycle(capi.screen.count(), ts.screen + 1)
|
||||
|
||||
awful.tag.history.restore(ts.screen,1)
|
||||
-- move the tag only if we are on a different screen
|
||||
if screen_origin ~= screen_target then
|
||||
tag_move(ts, screen_target)
|
||||
end
|
||||
|
||||
awful.tag.viewonly(ts)
|
||||
mouse.screen = ts.screen
|
||||
if #ts:clients() > 0 then
|
||||
local c = ts:clients()[1]
|
||||
capi.client.focus = c
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ Return labels for a taglist widget with all tag from screen.
|
||||
-- It returns the tag name and set a special
|
||||
-- foreground and background color for selected tags.
|
||||
-- @param t The tag.
|
||||
-- @param args The arguments table.
|
||||
-- bg_focus The background color for selected tag.
|
||||
-- fg_focus The foreground color for selected tag.
|
||||
-- bg_urgent The background color for urgent tags.
|
||||
-- fg_urgent The foreground color for urgent tags.
|
||||
-- squares_sel Optional: a user provided image for selected squares.
|
||||
-- squares_unsel Optional: a user provided image for unselected squares.
|
||||
-- squares_resize Optional: true or false to resize squares.
|
||||
-- @return A string to print, a background color, a background image and a
|
||||
-- background resize value.
|
||||
function label.all(t, args)
|
||||
if not args then args = {} end
|
||||
local theme = beautiful.get()
|
||||
local fg_focus = args.fg_focus or theme.taglist_fg_focus or theme.fg_focus
|
||||
local bg_focus = args.bg_focus or theme.taglist_bg_focus or theme.bg_focus
|
||||
local fg_urgent = args.fg_urgent or theme.taglist_fg_urgent or theme.fg_urgent
|
||||
local bg_urgent = args.bg_urgent or theme.taglist_bg_urgent or theme.bg_urgent
|
||||
local bg_occupied = args.bg_occupied or theme.taglist_bg_occupied
|
||||
local fg_occupied = args.fg_occupied or theme.taglist_fg_occupied
|
||||
local taglist_squares_sel = args.squares_sel or theme.taglist_squares_sel
|
||||
local taglist_squares_unsel = args.squares_unsel or theme.taglist_squares_unsel
|
||||
local taglist_squares_resize = theme.taglist_squares_resize or args.squares_resize or "true"
|
||||
local font = args.font or theme.taglist_font or theme.font or ""
|
||||
local text = "<span font_desc='"..font.."'>"
|
||||
local sel = capi.client.focus
|
||||
local bg_color = nil
|
||||
local fg_color = nil
|
||||
local bg_image
|
||||
local icon
|
||||
local bg_resize = false
|
||||
local is_selected = false
|
||||
if not args.screen then
|
||||
args.screen = t.screen
|
||||
end
|
||||
if t.selected and t.screen == args.screen then
|
||||
bg_color = bg_focus
|
||||
fg_color = fg_focus
|
||||
end
|
||||
if sel and sel.type ~= "desktop" then
|
||||
if taglist_squares_sel then
|
||||
-- Check that the selected clients is tagged with 't'.
|
||||
local seltags = sel:tags()
|
||||
for _, v in ipairs(seltags) do
|
||||
if v == t then
|
||||
bg_image = capi.image(taglist_squares_sel)
|
||||
bg_resize = taglist_squares_resize == "true"
|
||||
is_selected = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not is_selected then
|
||||
local cls = t:clients()
|
||||
if #cls > 0 then
|
||||
if taglist_squares_unsel then
|
||||
bg_image = capi.image(taglist_squares_unsel)
|
||||
bg_resize = taglist_squares_resize == "true"
|
||||
end
|
||||
if bg_occupied then bg_color = bg_occupied end
|
||||
if fg_occupied then fg_color = fg_occupied end
|
||||
end
|
||||
for k, c in pairs(cls) do
|
||||
if c.urgent then
|
||||
if bg_urgent then bg_color = bg_urgent end
|
||||
if fg_urgent then fg_color = fg_urgent end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if not tag.getproperty(t, "icon_only") then
|
||||
if fg_color then
|
||||
text = text .. "<span color='"..util.color_strip_alpha(fg_color).."'>"
|
||||
text = " " .. text.. (util.escape(t.name) or "") .." </span>"
|
||||
else
|
||||
text = text .. " " .. (util.escape(t.name) or "") .. " "
|
||||
end
|
||||
end
|
||||
text = text .. "</span>"
|
||||
if tag.geticon(t) and type(tag.geticon(t)) == "image" then
|
||||
icon = tag.geticon(t)
|
||||
elseif tag.geticon(t) then
|
||||
icon = capi.image(tag.geticon(t))
|
||||
end
|
||||
|
||||
return text, bg_color, bg_image, icon
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ list_update: update a list of widgets
|
||||
-- @param screen : the screen to draw the taglist for
|
||||
-- @param w : the widget container
|
||||
-- @param label : label function to use
|
||||
-- @param buttons : a table with button bindings to set
|
||||
-- @param widgets : a table with widget style parameters
|
||||
-- @param objects : the list of tags to be displayed
|
||||
-- @param scr : the current screen
|
||||
local function list_update(w, buttons, label, data, widgets, objects, scr)
|
||||
-- Hack: if it has been registered as a widget in a wibox,
|
||||
-- it's w.len since __len meta does not work on table until Lua 5.2.
|
||||
-- Otherwise it's standard #w.
|
||||
local len = (w.len or #w) / 2
|
||||
-- Add more widgets
|
||||
if len < #objects then
|
||||
for i = len * 2 + 1, #objects * 2, 2 do
|
||||
local ib = capi.widget({ type = "imagebox", align = widgets.imagebox.align })
|
||||
local tb = capi.widget({ type = "textbox", align = widgets.textbox.align })
|
||||
|
||||
w[i] = ib
|
||||
w[i + 1] = tb
|
||||
w[i + 1]:margin({ left = widgets.textbox.margin.left, right = widgets.textbox.margin.right })
|
||||
w[i + 1].bg_resize = widgets.textbox.bg_resize or false
|
||||
w[i + 1].bg_align = widgets.textbox.bg_align or ""
|
||||
|
||||
if type(objects[math.floor(i / 2) + 1]) == "tag" then
|
||||
tagwidgets[ib] = objects[math.floor(i / 2) + 1]
|
||||
tagwidgets[tb] = objects[math.floor(i / 2) + 1]
|
||||
end
|
||||
end
|
||||
-- Remove widgets
|
||||
elseif len > #objects then
|
||||
for i = #objects * 2 + 1, len * 2, 2 do
|
||||
w[i] = nil
|
||||
w[i + 1] = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- update widgets text
|
||||
for k = 1, #objects * 2, 2 do
|
||||
local o = objects[(k + 1) / 2]
|
||||
if not o then
|
||||
o = objects[(k-1) / 2]
|
||||
end
|
||||
if buttons then
|
||||
-- Use a local variable so that the garbage collector doesn't strike
|
||||
-- between now and the :buttons() call.
|
||||
local btns = data[o]
|
||||
if not btns then
|
||||
btns = {}
|
||||
data[o] = btns
|
||||
for kb, b in ipairs(buttons) do
|
||||
-- Create a proxy button object: it will receive the real
|
||||
-- press and release events, and will propagate them the the
|
||||
-- button object the user provided, but with the object as
|
||||
-- argument.
|
||||
local btn = capi.button { modifiers = b.modifiers, button = b.button }
|
||||
btn:add_signal("press", function () b:emit_signal("press", o) end)
|
||||
btn:add_signal("release", function () b:emit_signal("release", o) end)
|
||||
btns[#btns + 1] = btn
|
||||
end
|
||||
end
|
||||
w[k]:buttons(btns)
|
||||
w[k + 1]:buttons(btns)
|
||||
end
|
||||
|
||||
args = { screen = scr }
|
||||
local text, bg, bg_image, icon = label(o, args)
|
||||
|
||||
-- Check if we got a valid text here, it might contain e.g. broken utf8.
|
||||
if not pcall(function() w[k + 1].text = text end) then
|
||||
w[k + 1].text = "<i>Invalid</i>"
|
||||
end
|
||||
|
||||
w[k + 1].bg, w[k + 1].bg_image = bg, bg_image
|
||||
w[k].bg, w[k].image = bg, icon
|
||||
if not w[k + 1].text then
|
||||
w[k+1].visible = false
|
||||
else
|
||||
w[k+1].visible = true
|
||||
end
|
||||
if not w[k].image then
|
||||
w[k].visible = false
|
||||
else
|
||||
w[k].visible = true
|
||||
end
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ taglist_update: update the taglist widget
|
||||
-- @param screen : the screen to draw the taglist for
|
||||
-- @param w : the taglist widget
|
||||
-- @param label : label function to use
|
||||
-- @param buttons : a table with button bindings to set
|
||||
-- @param widgets : a table with widget style parameters
|
||||
-- @param objects : the list of tags to be displayed
|
||||
local function taglist_update (screen, w, label, buttons, data, widgets)
|
||||
list_update(w, buttons, label, data, widgets, cachedtags, screen)
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ taglist: create a taglist widget for the shared tags
|
||||
-- @param screen : the screen to draw the taglist for
|
||||
-- @param label : label function to use
|
||||
-- @param buttons : a table with button bindings to set
|
||||
function taglist(screen, label, buttons)
|
||||
local w = {
|
||||
layout = layout.horizontal.leftright
|
||||
}
|
||||
local widgets = { }
|
||||
widgets.imagebox = { }
|
||||
widgets.textbox = { ["margin"] = { ["left"] = 0,
|
||||
["right"] = 0},
|
||||
["bg_resize"] = true
|
||||
}
|
||||
local data = setmetatable({}, { __mode = 'kv' })
|
||||
local u = function (s)
|
||||
if s == screen then
|
||||
taglist_update(s, w, label, buttons, data, widgets)
|
||||
end
|
||||
end
|
||||
local uc = function (c) return u(c.screen) end
|
||||
capi.client.add_signal("focus", uc)
|
||||
capi.client.add_signal("unfocus", uc)
|
||||
tag.attached_add_signal(screen, "property::selected", uc)
|
||||
tag.attached_add_signal(screen, "property::icon", uc)
|
||||
tag.attached_add_signal(screen, "property::hide", uc)
|
||||
tag.attached_add_signal(screen, "property::name", uc)
|
||||
capi.screen[screen]:add_signal("tag::attach", function(screen, tag)
|
||||
u(screen.index)
|
||||
end)
|
||||
capi.screen[screen]:add_signal("tag::detach", function(screen, tag)
|
||||
u(screen.index)
|
||||
end)
|
||||
capi.client.add_signal("new", function(c)
|
||||
c:add_signal("property::urgent", uc)
|
||||
c:add_signal("property::screen", function(c)
|
||||
-- If client change screen, refresh it anyway since we don't from
|
||||
-- which screen it was coming :-)
|
||||
u(screen)
|
||||
end)
|
||||
c:add_signal("tagged", uc)
|
||||
c:add_signal("untagged", uc)
|
||||
end)
|
||||
capi.client.add_signal("unmanage", uc)
|
||||
u(screen)
|
||||
return w
|
||||
end
|
||||
--}}}
|
||||
|
||||
--}}}
|
||||
|
||||
-- vim: fdm=marker:
|
12
rc.lua
12
rc.lua
|
@ -49,16 +49,8 @@ config.layouts = {
|
|||
awful.layout.suit.fair,
|
||||
awful.layout.suit.floating,
|
||||
}
|
||||
config.tags = {
|
||||
{ layout = awful.layout.suit.fair, icon = "main" }, -- 1
|
||||
{ name = "emacs", mwfact = 0.6, icon = "dev" },
|
||||
{ name = "www", mwfact = 0.7, icon = "web" },
|
||||
{ name = "im" , mwfact = 0.2, icon = "im" },
|
||||
{ }, -- 5
|
||||
{ }, -- 6
|
||||
{ }, -- 7
|
||||
}
|
||||
config.hostname = awful.util.pread('uname -n'):gsub('\n', '')
|
||||
config.browser = "conkeror"
|
||||
|
||||
-- Remaining modules
|
||||
loadrc("xrun") -- xrun function
|
||||
|
@ -68,8 +60,8 @@ loadrc("debug") -- debugging primitive `dbg()`
|
|||
loadrc("start") -- programs to run on start
|
||||
loadrc("bindings") -- keybindings
|
||||
loadrc("wallpaper") -- wallpaper settings
|
||||
loadrc("tags") -- tags handling
|
||||
loadrc("widgets") -- widgets configuration
|
||||
loadrc("tags") -- tags handling
|
||||
loadrc("xlock") -- lock screen
|
||||
loadrc("signals") -- window manager behaviour
|
||||
loadrc("rules") -- window rules
|
||||
|
|
|
@ -3,7 +3,6 @@ config.mouse = {}
|
|||
local volume = loadrc("volume", "vbe/volume")
|
||||
local brightness = loadrc("brightness", "vbe/brightness")
|
||||
local keydoc = loadrc("keydoc", "vbe/keydoc")
|
||||
local sharetags = loadrc("sharetags", "vbe/sharetags")
|
||||
|
||||
local function screenshot(client)
|
||||
if not client then
|
||||
|
@ -32,13 +31,8 @@ local function toggle_window(filter)
|
|||
-- So, we have a client.
|
||||
if not cl:isvisible() then
|
||||
-- But it is not visible. So we will add it to the current
|
||||
-- tag of the current screen.
|
||||
local t = assert(awful.tag.selected(s))
|
||||
-- Before adding the tag to the client, we should ensure it
|
||||
-- is on the same screen.
|
||||
if s ~= cl.screen then
|
||||
sharetags.tag_move(cl:tags()[1], s)
|
||||
end
|
||||
-- tag of the screen where it currently is
|
||||
local t = assert(awful.tag.selected(cl.screen))
|
||||
-- Add our tag to the client
|
||||
undo[#undo + 1] = { cl, t }
|
||||
awful.client.toggletag(t, cl)
|
||||
|
|
|
@ -8,14 +8,9 @@ awful.rules.rules = {
|
|||
focus = true,
|
||||
maximized_vertical = false,
|
||||
maximized_horizontal = false,
|
||||
keys = config.keys.client,
|
||||
buttons = config.mouse.client }},
|
||||
-- Emacs
|
||||
{ rule = { class = "Emacs" },
|
||||
properties = { tag = config.tags.emacs }},
|
||||
-- Browser stuff
|
||||
{ rule = { role = "browser" },
|
||||
properties = { tag = config.tags.www },
|
||||
callback = function(c)
|
||||
if not c.icon then
|
||||
local icon = icons.lookup({ name = "web-browser",
|
||||
|
@ -36,9 +31,6 @@ awful.rules.rules = {
|
|||
{ rule = { instance = "exe", class="Exe", instance="exe" },
|
||||
properties = { floating = true }}, -- Flash with Chromium
|
||||
-- Pidgin
|
||||
{ rule = { class = "Pidgin" },
|
||||
except = { type = "dialog" },
|
||||
properties = { tag = config.tags.im }},
|
||||
{ rule = { class = "Pidgin" },
|
||||
except = { role = "buddy_list" }, -- buddy_list is the master
|
||||
properties = { }, callback = awful.client.setslave },
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
-- Startup
|
||||
local browser = "conkeror"
|
||||
|
||||
-- Setup display
|
||||
local xrandr = {
|
||||
naruto = "--output VGA1 --auto --output DVI1 --auto --left-of VGA1",
|
||||
|
@ -23,8 +20,8 @@ local execute = {
|
|||
-- Read resources
|
||||
"xrdb -merge " .. awful.util.getdir("config") .. "/Xresources",
|
||||
-- Default browser
|
||||
"xdg-mime default " .. browser .. ".desktop x-scheme-handler/http",
|
||||
"xdg-mime default " .. browser .. ".desktop x-scheme-handler/https"
|
||||
"xdg-mime default " .. config.browser .. ".desktop x-scheme-handler/http",
|
||||
"xdg-mime default " .. config.browser .. ".desktop x-scheme-handler/https"
|
||||
}
|
||||
|
||||
-- Keyboard/Mouse configuration
|
||||
|
@ -66,8 +63,6 @@ xrun("polkit-gnome-authentication-agent-1",
|
|||
xrun("Bluetooth Applet",
|
||||
"bluetooth-applet")
|
||||
xrun("pidgin", "pidgin -n")
|
||||
xrun("emacs")
|
||||
xrun(browser)
|
||||
|
||||
if config.hostname == "neo" then
|
||||
xrun("keepassx", "keepassx -min -lock")
|
||||
|
|
207
rc/tags.lua
207
rc/tags.lua
|
@ -1,98 +1,141 @@
|
|||
-- Tags
|
||||
|
||||
sharetags = loadrc("sharetags", "vbe/sharetags")
|
||||
require("shifty")
|
||||
keydoc = loadrc("keydoc", "vbe/keydoc")
|
||||
|
||||
local otags = config.tags
|
||||
config.tags = {}
|
||||
|
||||
local names = {}
|
||||
local layouts = {}
|
||||
for i, v in ipairs(otags) do
|
||||
names[i] = v.name or i
|
||||
layouts[i] = v.layout or config.layouts[1]
|
||||
local tagicon = function(icon)
|
||||
return beautiful.icons .. "/taglist/" .. icon .. ".png"
|
||||
end
|
||||
|
||||
tags = sharetags.create_tags(names, layouts)
|
||||
shifty.config.tags = {
|
||||
["3↭www"] = {
|
||||
mwfact = 0.7,
|
||||
exclusive = true,
|
||||
max_clients = 1,
|
||||
position = 3,
|
||||
spawn = browser,
|
||||
icon = tagicon("web")
|
||||
},
|
||||
["2↭emacs"] = {
|
||||
mwfact = 0.6,
|
||||
exclusive = true,
|
||||
position = 2,
|
||||
spawn = "emacs",
|
||||
icon = tagicon("dev"),
|
||||
},
|
||||
["1↭xterm"] = {
|
||||
layout = awful.layout.suit.fair,
|
||||
exclusive = true,
|
||||
position = 1,
|
||||
slave = true,
|
||||
spawn = config.terminal,
|
||||
icon = tagicon("main"),
|
||||
},
|
||||
["4↭im"] = {
|
||||
mwfact = 0.2,
|
||||
exclusive = true,
|
||||
position = 4,
|
||||
icon = tagicon("im"),
|
||||
nopopup = true
|
||||
}
|
||||
}
|
||||
|
||||
-- Compute the maximum number of digit we need, limited to 9
|
||||
keynumber = math.min(9, #tags)
|
||||
-- Also, see rules.lua
|
||||
shifty.config.apps = {
|
||||
{
|
||||
match = {
|
||||
"Iceweasel",
|
||||
"Firefox",
|
||||
"Chromium",
|
||||
"Conkeror",
|
||||
"Xulrunner-15.0"
|
||||
},
|
||||
tag = "3↭www",
|
||||
},
|
||||
{
|
||||
match = { "emacs" },
|
||||
tag = "2↭emacs",
|
||||
},
|
||||
{
|
||||
match = { "Pidgin" },
|
||||
tag = "4↭im",
|
||||
},
|
||||
{
|
||||
match = { "URxvt" },
|
||||
-- tag = "1↭xterm",
|
||||
intrusive = true, -- Display even on exclusive tags
|
||||
},
|
||||
}
|
||||
|
||||
shifty.config.defaults = {
|
||||
layout = config.layouts[1],
|
||||
floatBars = false,
|
||||
mwfact = 0.6,
|
||||
ncol = 1,
|
||||
guess_name = true,
|
||||
guess_position = true,
|
||||
}
|
||||
shifty.config.sloppy = false
|
||||
|
||||
shifty.taglist = config.taglist -- Set in widget.lua
|
||||
shifty.config.modkey = modkey
|
||||
shifty.config.clientkeys = config.keys.client
|
||||
shifty.init()
|
||||
|
||||
config.keys.global = awful.util.table.join(
|
||||
config.keys.global,
|
||||
keydoc.group("Tag management"),
|
||||
awful.key({ modkey }, "Escape", awful.tag.history.restore, "Switch to previous tag"))
|
||||
awful.key({ modkey }, "Escape", awful.tag.history.restore, "Switch to previous tag"),
|
||||
awful.key({ modkey }, "Left", awful.tag.viewprev, "View previous tag"),
|
||||
awful.key({ modkey }, "Right", awful.tag.viewnext, "View next tag"),
|
||||
awful.key({ modkey, "Shift"}, "o",
|
||||
function()
|
||||
local t = awful.tag.selected()
|
||||
local s = awful.util.cycle(screen.count(), t.screen + 1)
|
||||
awful.tag.history.restore()
|
||||
t = shifty.tagtoscr(s, t)
|
||||
awful.tag.viewonly(t)
|
||||
end,
|
||||
"Send tag to next screen"))
|
||||
|
||||
|
||||
-- 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, #tags do
|
||||
-- Name
|
||||
config.tags[tags[i].name] = tags[i]
|
||||
if tags[i].name ~= tostring(i) then
|
||||
if screen.count() > 1 then
|
||||
tags[i].name = tostring(i) .. "↭" .. tags[i].name
|
||||
else
|
||||
tags[i].name = tostring(i)
|
||||
end
|
||||
end
|
||||
|
||||
-- Properties
|
||||
for pname, pvalue in pairs(otags[i]) do
|
||||
if pname == "icon" then
|
||||
awful.tag.seticon(beautiful.icons .. "/taglist/" .. pvalue .. ".png", tags[i])
|
||||
elseif pname ~= "name" and pname ~= "layout" then
|
||||
awful.tag.setproperty(tags[i], pname, pvalue)
|
||||
end
|
||||
end
|
||||
|
||||
-- Key bindings
|
||||
if i <= keynumber then
|
||||
config.keys.global = awful.util.table.join(
|
||||
config.keys.global,
|
||||
keydoc.group("Tag management"),
|
||||
awful.key({ modkey }, "#" .. i + 9,
|
||||
function ()
|
||||
local t = tags[i]
|
||||
if t.screen ~= mouse.screen then
|
||||
if t.selected then
|
||||
-- This tag is selected on another screen, let's swap
|
||||
local currents = awful.tag.selectedlist(mouse.screen)
|
||||
for _,current in pairs(currents) do
|
||||
sharetags.tag_move(current, t.screen)
|
||||
end
|
||||
awful.tag.viewmore(currents, t.screen)
|
||||
end
|
||||
sharetags.tag_move(t, mouse.screen)
|
||||
end
|
||||
awful.tag.viewonly(tags[i])
|
||||
end, i == 5 and "Display only this tag" or nil),
|
||||
awful.key({ modkey, "Control" }, "#" .. i + 9,
|
||||
function ()
|
||||
local t = tags[i]
|
||||
if t then
|
||||
if t.screen ~= mouse.screen then
|
||||
sharetags.tag_move(t, mouse.screen)
|
||||
if not t.selected then
|
||||
awful.tag.viewtoggle(t)
|
||||
end
|
||||
else
|
||||
awful.tag.viewtoggle(t)
|
||||
end
|
||||
end
|
||||
end, i == 5 and "Toggle display of this tag" or nil),
|
||||
awful.key({ modkey, "Shift" }, "#" .. i + 9,
|
||||
function ()
|
||||
if client.focus and tags[i] then
|
||||
awful.client.movetotag(tags[i])
|
||||
end
|
||||
end, i == 5 and "Move window to this tag" or nil),
|
||||
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
|
||||
function ()
|
||||
if client.focus and tags[i] then
|
||||
awful.client.toggletag(tags[i])
|
||||
end
|
||||
end, i == 5 and "Toggle this tag on this window" or nil),
|
||||
keydoc.group("Misc"))
|
||||
end
|
||||
for i = 1, (shifty.config.maxtags or 9) do
|
||||
config.keys.global = awful.util.table.join(
|
||||
config.keys.global,
|
||||
keydoc.group("Tag management"),
|
||||
awful.key({ modkey }, i,
|
||||
function ()
|
||||
local t = shifty.getpos(i)
|
||||
local s = t.screen
|
||||
local c = awful.client.focus.history.get(s, 0)
|
||||
awful.tag.viewonly(t)
|
||||
mouse.screen = s
|
||||
if c then client.focus = c end
|
||||
end,
|
||||
i == 5 and "Display only this tag" or nil),
|
||||
awful.key({ modkey, "Control" }, i,
|
||||
function ()
|
||||
local t = shifty.getpos(i)
|
||||
t.selected = not t.selected
|
||||
end,
|
||||
i == 5 and "Toggle display of this tag" or nil),
|
||||
awful.key({ modkey, "Shift" }, i,
|
||||
function ()
|
||||
if client.focus then
|
||||
local t = shifty.getpos(i)
|
||||
awful.client.movetotag(t)
|
||||
end
|
||||
end,
|
||||
i == 5 and "Move window to this tag" or nil),
|
||||
awful.key({ modkey, "Control", "Shift" }, i,
|
||||
function ()
|
||||
if client.focus then
|
||||
awful.client.toggletag(shifty.getpos(i))
|
||||
end
|
||||
end,
|
||||
i == 5 and "Toggle this tag on this window" or nil),
|
||||
keydoc.group("Misc"))
|
||||
end
|
||||
|
|
|
@ -250,7 +250,8 @@ for s = 1, screen.count() do
|
|||
end, tasklist.buttons)
|
||||
|
||||
-- Create the taglist
|
||||
taglist[s] = sharetags.taglist(s, sharetags.label.all)
|
||||
taglist[s] = awful.widget.taglist.new(s,
|
||||
awful.widget.taglist.label.all)
|
||||
-- Create the wibox
|
||||
wibox[s] = awful.wibox({ screen = s,
|
||||
fg = beautiful.fg_normal,
|
||||
|
@ -299,3 +300,5 @@ config.keys.global = awful.util.table.join(
|
|||
config.keys.global,
|
||||
awful.key({ modkey }, "r", function () promptbox[mouse.screen]:run() end,
|
||||
"Prompt for a command"))
|
||||
|
||||
config.taglist = taglist
|
||||
|
|
1
shifty
Submodule
1
shifty
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 48a220fd9435518e66f1e308ea3f5b7565105134
|
Loading…
Add table
Add a link
Reference in a new issue