Add a new tag layout: corner
Closes https://github.com/awesomeWM/awesome/pull/251
|
@ -65,7 +65,11 @@ awful.layout.layouts = {
|
||||||
awful.layout.suit.spiral.dwindle,
|
awful.layout.suit.spiral.dwindle,
|
||||||
awful.layout.suit.max,
|
awful.layout.suit.max,
|
||||||
awful.layout.suit.max.fullscreen,
|
awful.layout.suit.max.fullscreen,
|
||||||
awful.layout.suit.magnifier
|
awful.layout.suit.magnifier,
|
||||||
|
awful.layout.suit.corner.nw,
|
||||||
|
-- awful.layout.suit.corner.ne,
|
||||||
|
-- awful.layout.suit.corner.sw,
|
||||||
|
-- awful.layout.suit.corner.se,
|
||||||
}
|
}
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,11 @@ layout.layouts = {
|
||||||
layout.suit.spiral.dwindle,
|
layout.suit.spiral.dwindle,
|
||||||
layout.suit.max,
|
layout.suit.max,
|
||||||
layout.suit.max.fullscreen,
|
layout.suit.max.fullscreen,
|
||||||
layout.suit.magnifier
|
layout.suit.magnifier,
|
||||||
|
layout.suit.corner.nw,
|
||||||
|
layout.suit.corner.ne,
|
||||||
|
layout.suit.corner.sw,
|
||||||
|
layout.suit.corner.se,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- This is a special lock used by the arrange function.
|
-- This is a special lock used by the arrange function.
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
-- Corner layout.
|
||||||
|
-- Display master client in a corner of the screen, and slaves in one
|
||||||
|
-- column and one row around the master.
|
||||||
|
-- See Pull Request for example : https://github.com/awesomeWM/awesome/pull/251
|
||||||
|
-- @module awful.layout.suit.corner
|
||||||
|
-- @author Alexis Brenon <brenon.alexis+awesomewm@gmail.com>
|
||||||
|
-- @copyright 2015 Alexis Brenon
|
||||||
|
-- @release @AWESOME_VERSION@
|
||||||
|
|
||||||
|
-- Grab environment we need
|
||||||
|
local ipairs = ipairs
|
||||||
|
local math = math
|
||||||
|
local tag = require("awful.tag")
|
||||||
|
|
||||||
|
--- Actually arrange clients of p.clients for corner layout
|
||||||
|
-- @param p Mandatory table containing required informations for layouts
|
||||||
|
-- (clients to arrange, workarea geometry, etc.)
|
||||||
|
-- @param orientation String indicating in which corner is the master window.
|
||||||
|
-- Available values are : NE, NW, SW, SE
|
||||||
|
local function do_corner(p, orientation)
|
||||||
|
local wa = p.workarea
|
||||||
|
local cls = p.clients
|
||||||
|
|
||||||
|
if #cls == 0 then return end
|
||||||
|
|
||||||
|
local master = {}
|
||||||
|
local column = {}
|
||||||
|
local row = {}
|
||||||
|
-- Use the nmaster field of the tag in a cheaty way
|
||||||
|
local row_privileged = ((tag.getnmaster(tag.selected(cls[1].screen)) % 2) == 0)
|
||||||
|
|
||||||
|
local master_factor = tag.getmwfact(tag.selected(cls[1].screen))
|
||||||
|
master.width = master_factor * wa.width
|
||||||
|
master.height = master_factor * wa.height
|
||||||
|
|
||||||
|
number_privileged_win = math.ceil((#cls - 1)/2)
|
||||||
|
number_unprivileged_win = (#cls - 1) - number_privileged_win
|
||||||
|
|
||||||
|
-- Define some obvious parameters
|
||||||
|
column.width = wa.width - master.width
|
||||||
|
column.x_increment = 0
|
||||||
|
row.height = wa.height - master.height
|
||||||
|
row.y_increment = 0
|
||||||
|
|
||||||
|
-- Place master at the right place and move row and column accordingly
|
||||||
|
column.y = wa.y
|
||||||
|
row.x = wa.x
|
||||||
|
if orientation:match('N.') then
|
||||||
|
master.y = wa.y
|
||||||
|
row.y = master.y + master.height
|
||||||
|
elseif orientation:match('S.') then
|
||||||
|
master.y = wa.y + wa.height - master.height
|
||||||
|
row.y = wa.y
|
||||||
|
end
|
||||||
|
if orientation:match('.W') then
|
||||||
|
master.x = wa.x
|
||||||
|
column.x = master.x + master.width
|
||||||
|
elseif orientation:match('.E') then
|
||||||
|
master.x = wa.x + wa.width - master.width
|
||||||
|
column.x = wa.x
|
||||||
|
end
|
||||||
|
-- At this point, master is in a corner
|
||||||
|
-- but row and column are overlayed in the opposite corner...
|
||||||
|
|
||||||
|
-- Reduce the unprivileged slaves to remove overlay
|
||||||
|
-- and define actual width and height
|
||||||
|
if row_privileged then
|
||||||
|
row.width = wa.width
|
||||||
|
row.number_win = number_privileged_win
|
||||||
|
column.y = master.y
|
||||||
|
column.height = master.height
|
||||||
|
column.number_win = number_unprivileged_win
|
||||||
|
else
|
||||||
|
column.height = wa.height
|
||||||
|
column.number_win = number_privileged_win
|
||||||
|
row.x = master.x
|
||||||
|
row.width = master.width
|
||||||
|
row.number_win = number_unprivileged_win
|
||||||
|
end
|
||||||
|
|
||||||
|
column.win_height = column.height/column.number_win
|
||||||
|
column.win_width = column.width
|
||||||
|
column.y_increment = column.win_height
|
||||||
|
column.win_idx = 0
|
||||||
|
|
||||||
|
row.win_width = row.width/row.number_win
|
||||||
|
row.win_height = row.height
|
||||||
|
row.x_increment = row.win_width
|
||||||
|
row.win_idx = 0
|
||||||
|
|
||||||
|
-- Extend master if there is only a few windows
|
||||||
|
if #cls < 3 then
|
||||||
|
if row_privileged then
|
||||||
|
master.x = wa.x
|
||||||
|
master.width = wa.width
|
||||||
|
else
|
||||||
|
master.y = wa.y
|
||||||
|
master.height = wa.height
|
||||||
|
end
|
||||||
|
if #cls < 2 then
|
||||||
|
master = wa
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, c in ipairs(cls) do
|
||||||
|
local g = nil
|
||||||
|
-- Handle master window
|
||||||
|
if i == 1 then
|
||||||
|
g = {
|
||||||
|
x = master.x,
|
||||||
|
y = master.y,
|
||||||
|
width = master.width - (2 * c.border_width),
|
||||||
|
height = master.height - (2 * c.border_width)
|
||||||
|
}
|
||||||
|
-- handle column windows
|
||||||
|
elseif i % 2 == 0 then
|
||||||
|
g = {
|
||||||
|
x = column.x + column.win_idx * column.x_increment,
|
||||||
|
y = column.y + column.win_idx * column.y_increment,
|
||||||
|
width = column.win_width - (2 * c.border_width),
|
||||||
|
height = column.win_height - (2 * c.border_width)
|
||||||
|
}
|
||||||
|
column.win_idx = column.win_idx + 1
|
||||||
|
else
|
||||||
|
g = {
|
||||||
|
x = row.x + row.win_idx * row.x_increment,
|
||||||
|
y = row.y + row.win_idx * row.y_increment,
|
||||||
|
width = row.win_width - (2 * c.border_width),
|
||||||
|
height = row.win_height - (2 * c.border_width)
|
||||||
|
}
|
||||||
|
row.win_idx = row.win_idx + 1
|
||||||
|
end
|
||||||
|
c:geometry(g)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local corner = {}
|
||||||
|
corner.row_privileged = false
|
||||||
|
corner.nw = {
|
||||||
|
name = "cornernw",
|
||||||
|
arrange = function (p) return do_corner(p, "NW") end
|
||||||
|
}
|
||||||
|
corner.ne = {
|
||||||
|
name = "cornerne",
|
||||||
|
arrange = function (p) return do_corner(p, "NE") end
|
||||||
|
}
|
||||||
|
corner.sw = {
|
||||||
|
name = "cornersw",
|
||||||
|
arrange = function (p) return do_corner(p, "SW") end
|
||||||
|
}
|
||||||
|
corner.se = {
|
||||||
|
name = "cornerse",
|
||||||
|
arrange = function (p) return do_corner(p, "SE") end
|
||||||
|
}
|
||||||
|
|
||||||
|
return corner
|
||||||
|
|
||||||
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
return
|
return
|
||||||
{
|
{
|
||||||
|
corner = require("awful.layout.suit.corner");
|
||||||
max = require("awful.layout.suit.max");
|
max = require("awful.layout.suit.max");
|
||||||
tile = require("awful.layout.suit.tile");
|
tile = require("awful.layout.suit.tile");
|
||||||
fair = require("awful.layout.suit.fair");
|
fair = require("awful.layout.suit.fair");
|
||||||
|
|
After Width: | Height: | Size: 451 B |
After Width: | Height: | Size: 409 B |
After Width: | Height: | Size: 439 B |
After Width: | Height: | Size: 381 B |
After Width: | Height: | Size: 424 B |
After Width: | Height: | Size: 411 B |
After Width: | Height: | Size: 424 B |
After Width: | Height: | Size: 423 B |
|
@ -88,6 +88,10 @@ theme.layout_tile = "@AWESOME_THEMES_PATH@/default/layouts/tilew.png"
|
||||||
theme.layout_tiletop = "@AWESOME_THEMES_PATH@/default/layouts/tiletopw.png"
|
theme.layout_tiletop = "@AWESOME_THEMES_PATH@/default/layouts/tiletopw.png"
|
||||||
theme.layout_spiral = "@AWESOME_THEMES_PATH@/default/layouts/spiralw.png"
|
theme.layout_spiral = "@AWESOME_THEMES_PATH@/default/layouts/spiralw.png"
|
||||||
theme.layout_dwindle = "@AWESOME_THEMES_PATH@/default/layouts/dwindlew.png"
|
theme.layout_dwindle = "@AWESOME_THEMES_PATH@/default/layouts/dwindlew.png"
|
||||||
|
theme.layout_cornernw = "@AWESOME_THEMES_PATH@/default/layouts/cornernww.png"
|
||||||
|
theme.layout_cornerne = "@AWESOME_THEMES_PATH@/default/layouts/cornernew.png"
|
||||||
|
theme.layout_cornersw = "@AWESOME_THEMES_PATH@/default/layouts/cornersww.png"
|
||||||
|
theme.layout_cornerse = "@AWESOME_THEMES_PATH@/default/layouts/cornersew.png"
|
||||||
|
|
||||||
theme.awesome_icon = "@AWESOME_ICON_PATH@/awesome16.png"
|
theme.awesome_icon = "@AWESOME_ICON_PATH@/awesome16.png"
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 238 B |
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 228 B |
After Width: | Height: | Size: 235 B |
|
@ -37,6 +37,10 @@ theme.layout_tile = "@AWESOME_THEMES_PATH@/sky/layouts/tile.png"
|
||||||
theme.layout_tiletop = "@AWESOME_THEMES_PATH@/sky/layouts/tiletop.png"
|
theme.layout_tiletop = "@AWESOME_THEMES_PATH@/sky/layouts/tiletop.png"
|
||||||
theme.layout_spiral = "@AWESOME_THEMES_PATH@/sky/layouts/spiral.png"
|
theme.layout_spiral = "@AWESOME_THEMES_PATH@/sky/layouts/spiral.png"
|
||||||
theme.layout_dwindle = "@AWESOME_THEMES_PATH@/sky/layouts/dwindle.png"
|
theme.layout_dwindle = "@AWESOME_THEMES_PATH@/sky/layouts/dwindle.png"
|
||||||
|
theme.layout_cornernw = "@AWESOME_THEMES_PATH@/sky/layouts/cornernw.png"
|
||||||
|
theme.layout_cornerne = "@AWESOME_THEMES_PATH@/sky/layouts/cornerne.png"
|
||||||
|
theme.layout_cornersw = "@AWESOME_THEMES_PATH@/sky/layouts/cornersw.png"
|
||||||
|
theme.layout_cornerse = "@AWESOME_THEMES_PATH@/sky/layouts/cornerse.png"
|
||||||
|
|
||||||
theme.awesome_icon = "@AWESOME_THEMES_PATH@/sky/awesome-icon.png"
|
theme.awesome_icon = "@AWESOME_THEMES_PATH@/sky/awesome-icon.png"
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 273 B |
After Width: | Height: | Size: 272 B |
After Width: | Height: | Size: 271 B |
After Width: | Height: | Size: 267 B |
|
@ -95,6 +95,10 @@ theme.layout_max = "@AWESOME_THEMES_PATH@/zenburn/layouts/max.png"
|
||||||
theme.layout_fullscreen = "@AWESOME_THEMES_PATH@/zenburn/layouts/fullscreen.png"
|
theme.layout_fullscreen = "@AWESOME_THEMES_PATH@/zenburn/layouts/fullscreen.png"
|
||||||
theme.layout_magnifier = "@AWESOME_THEMES_PATH@/zenburn/layouts/magnifier.png"
|
theme.layout_magnifier = "@AWESOME_THEMES_PATH@/zenburn/layouts/magnifier.png"
|
||||||
theme.layout_floating = "@AWESOME_THEMES_PATH@/zenburn/layouts/floating.png"
|
theme.layout_floating = "@AWESOME_THEMES_PATH@/zenburn/layouts/floating.png"
|
||||||
|
theme.layout_cornernw = "@AWESOME_THEMES_PATH@/zenburn/layouts/cornernw.png"
|
||||||
|
theme.layout_cornerne = "@AWESOME_THEMES_PATH@/zenburn/layouts/cornerne.png"
|
||||||
|
theme.layout_cornersw = "@AWESOME_THEMES_PATH@/zenburn/layouts/cornersw.png"
|
||||||
|
theme.layout_cornerse = "@AWESOME_THEMES_PATH@/zenburn/layouts/cornerse.png"
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- {{{ Titlebar
|
-- {{{ Titlebar
|
||||||
|
|