-- Authors: Rico Schiekel , Canaan Hadley-Voth, Kevin Granade -- License: Unknown -- Last Changed: 2007-05-09 -- -- statusbar_workspace.lua -- -- Show current workspace name or number in the statusbar. -- -- Put any of these in cfg_statusbar.lua's template-line: -- %workspace_name -- %workspace_frame -- %workspace_pager -- %workspace_name_pager -- %workspace_num_name_pager -- -- This is an internal statusbar monitor and does NOT require -- a dopath statement (effective after a 2006-02-12 build). -- -- version 1 -- author: Rico Schiekel -- -- version 2 -- added 2006-02-14 by Canaan Hadley-Voth: -- * %workspace_pager shows a list of workspace numbers -- with the current one indicated: -- -- 1i 2i [3f] 4p 5c -- -- i=WIonWS, f=WFloatWS, p=WPaneWS, c=WClientWin/other -- -- * %workspace_frame - name of the active frame. -- -- * Added statusbar_ to the filename (since it *is* -- an internal statusbar monitor) so that it works without -- a "dopath" call. -- -- * Removed timer. Only needs to run on hook. -- Much faster this way. -- -- version 3 -- update for ion-3rc-20070506 on 2007-05-09 -- by Kevin Granade -- -- Updated to use new wx_ api -- Replaced region_activated_hook with region_notify_hook -- Added %workspace_name_pager, which works similarly to %workspace_pager, -- but instead displays the name of each workspace -- Added display for WGroupWS to %workspace_pager, displayed as 'g' -- local function update_frame() local fr ioncore.defer( function() fr=ioncore.current():name() mod_statusbar.inform('workspace_frame', fr) mod_statusbar.update() end) end local function update_workspace() local scr=ioncore.find_screen_id(0) local curws = scr:mx_current() local wstype, c local pager="" local name_pager="" local name_pager_plus="" local curindex = scr:get_index(curws)+1 n = scr:mx_count(1) for i=1,n do tmpws=scr:mx_nth(i-1) wstype=obj_typename(tmpws) if wstype=="WIonWS" then c="-I" elseif wstype=="WFloatWS" then c="-FL" elseif wstype=="WPaneWS" then c="-PA" elseif wstype=="WGroupWS" then c="" else c="-FS" end if i==curindex then name_pager_plus=name_pager_plus.." ["..tmpws:name().."]" name_pager=name_pager.." "..tmpws:name().." " pager=pager.."["..(i)..c.."]" else name_pager_plus=name_pager_plus.." "..(i)..":"..tmpws:name() name_pager=name_pager.." "..tmpws:name() pager=pager.." "..(i)..c.." " end end local fr,cur -- Older versions without an ioncore.current() should -- skip update_frame. -- update_frame() ioncore.defer( function() mod_statusbar.inform('workspace_pager', pager) -- mod_statusbar.inform('workspace_name', curws:name()) -- mod_statusbar.inform('workspace_name_pager', name_pager) -- mod_statusbar.inform('workspace_num_name_pager', name_pager_plus) mod_statusbar.update() end) end local function update_workspace_wrap(reg, how) -- if how ~= "name" then -- return -- end update_workspace() end ioncore.get_hook("region_notify_hook"):add(update_workspace_wrap) ioncore.get_hook("screen_managed_changed_hook"):add(update_workspace)