PA[Script] Simple window layout manager
Added by Per Amundsen over 7 years ago
Save all open status/channel window sizes and positions to a profile.
Restore saved window sizes and positions from a profile.
Changes
08/17/2020
Fixed a missing parenthese
04/18/2018
Added a check for empty/broken profile names
Fixed allow using spaces in profile names
Fixed restoring and removing layouts doesn't work properly
04/16/2018
Added option to activate windows on restore
Script
on *:START:{
if ($exists(windowlayout.ini)) {
var %s 0, %c $ini(windowlayout.ini, 0)
while (%s < %c) {
inc %s
var %section $ini(windowlayout.ini, %s)
hload -mi %section windowlayout.ini %section
}
}
}
menu * {
Save layout:savelayout $$input(Enter name, e)
Remove layout
.$submenu($removelayoutlist($1)))
Load layout
.$submenu($loadlayoutlist($1)))
Layout options
.Activate Windows $iif(%windowlayout_activate,$style(1),) :.set %windowlayout_activate $iif(%windowlayout_activate,0,1)
}
alias loadlayoutlist {
var %tok = $replace($gettok($listlayouts, $1, 44), windowlayout, )
return $iif(%tok && $1 isnum, %tok :loadlayout %tok,)
}
alias removelayoutlist {
var %tok = $replace($gettok($listlayouts, $1, 44), windowlayout, )
return $iif(%tok && $1 isnum, %tok :removelayout %tok,)
}
alias loadlayout {
var %layout windowlayout $+ $replace($1-, $chr(32), _)
if (!$hget(%layout)) {
return
}
var %window window $iif(%windowlayout_activate,$chr(32) -a,)
var %s 0
while (%s < $scon(0)) {
inc %s
scon %s
var %w 0
while (%w < $window(*,0)) {
inc %w
if ($window(*,%w).type == status) {
if ($hget(%layout, $network)) {
%window "Status Window" $hget(%layout, $network)
}
}
else if ($window(*,%w).type == channel) {
if ($hget(%layout, $network $+ $window(*, %w))) {
%window $window(*, %w) $hget(%layout, $network $+ $window(*, %w))
}
}
}
}
}
alias listlayouts {
var %text
var %s 0
while (%s < $hget(0)) {
inc %s
if (windowlayout isin $hget(%s) && $hget(%s) != windowlayout) {
%text = %text $+ $replace($hget(%s),_,$chr(32)) $+ ,
}
}
return %text
}
alias removelayout {
var %layout windowlayout $+ $replace($1-,$chr(32),_)
if ($hget(%layout)) {
hfree %layout
if ($exists(windowlayout.ini)) {
remini windowlayout.ini %layout
}
}
}
alias savelayout {
var %name = $replace($1-, $chr(32), _)
if (!%name) {
return
}
var %layout windowlayout $+ %name
if ($hget(%layout)) {
if (!$input(Overwrite $1- ?,y)) {
return
}
hfree %layout
}
hmake %layout
var %s 0
while (%s < $scon(0)) {
inc %s
scon %s
var %w 0
while (%w < $window(*,0)) {
inc %w
if ($window(*,%w).type == status) {
hadd %layout $network $window(*, %w).x $window(*, %w).y $window(*, %w).w $window(*, %w).h
}
else if ($window(*,%w).type == channel) {
hadd %layout $network $+ $window(*,%w) $window(*, %w).x $window(*, %w).y $window(*, %w).w $window(*, %w).h
}
}
}
hsave -i %layout windowlayout.ini %layout
}