X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=ioncore%2Fioncore_misc.lua;h=17817659ff5a3af12f153570f443c37acdce2d54;hb=ae4260bb64817c11f9a7140324cd3e3ba113e297;hp=fd72b4d96b0af1ee620d4637f2bbbbae5c3b71df;hpb=8366314611bf30a0f31d25bf5f5023186fa87692;p=ion3.git diff --git a/ioncore/ioncore_misc.lua b/ioncore/ioncore_misc.lua index fd72b4d..1781765 100644 --- a/ioncore/ioncore_misc.lua +++ b/ioncore/ioncore_misc.lua @@ -1,26 +1,59 @@ -- -- ion/share/ioncore_misc.lua -- --- Copyright (c) Tuomo Valkonen 2004-2006. +-- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- +local group_tmpl = { type="WGroupWS" } -local group_tmpl={type="WGroupWS", switchto=true} +local default_tmpl = { switchto=true } + +local empty = { type="WGroupWS", managed={} } + +local layouts={ + empty = empty, + default = empty, +} + +--DOC +-- Define a new workspace layout with name \var{name}, and +-- attach/creation parameters given in \var{tab}. The layout +-- "empty" may not be defined. +function ioncore.deflayout(name, tab) + assert(layout ~= "empty") + + if name=="default" and not tab then + layouts[name] = empty + else + layouts[name] = table.join(tab, group_tmpl) + end +end + +--DOC +-- Get named layout (or all of the latter parameter is set, +-- but this is for internal use only). +function ioncore.getlayout(name, all) + if all then + return layouts + else + return layouts[name] + end +end + +ioncore.set{_get_layout=ioncore.getlayout} --DOC -- Create new workspace on screen \var{scr}. The table \var{tmpl} --- may be used to override parts of \code{default_ws_params}, --- and \var{no_default} may be set to \code{true} to complete ignore it. -function ioncore.create_ws(scr, tmpl, no_default) - local dflt=(not no_default and ioncore.get().default_ws_params) or {} - local t=table.join(table.join(tmpl or {}, dflt), group_tmpl) +-- may be used to override parts of the layout named with \code{layout}. +-- If no \var{layout} is given, "default" is used. +function ioncore.create_ws(scr, tmpl, layout) + local lo=ioncore.getlayout(layout or "default") - return scr:attach_new(t) + assert(lo, TR("Unknown layout")) + + return scr:attach_new(table.join(tmpl or default_tmpl, lo)) end @@ -44,10 +77,24 @@ function ioncore.TR(s, ...) end ---[[DOC --- Run \var{cmd} with the environment variable DISPLAY set to point to the --- root window of the X screen \var{reg} is on. -function ioncore.exec_on(reg, cmd) - return ioncore.do_exec_rw(reg:rootwin_of(), cmd) +--DOC +-- Attach tagged regions to \var{reg}. The method of attach +-- depends on the types of attached regions and whether \var{reg} +-- implements \code{attach_framed} and \code{attach}. If \var{param} +-- is not set, the default of \verb!{switchto=true}! is used. +function ioncore.tagged_attach(reg, param) + if not param then + param={switchto=true} + end + local tagged=function() return ioncore.tagged_first(true) end + for r in tagged do + local fn=((not obj_is(r, "WWindow") and reg.attach_framed) + or reg.attach) + + if not (fn and fn(reg, r, param)) then + return false + end + end + return true end ---]] +