dotfiles/.notion/statusbar_workspace.lua

118 lines
3.4 KiB
Lua

-- Authors: Rico Schiekel <fire@paranetic.de>, Canaan Hadley-Voth, Kevin Granade <kevin.granade@gmail.com>
-- 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 <fire at paranetic dot de>
--
-- 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 <kevin dot granade at gmail dot com>
--
-- 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)