App-ClusterSSH
view release on metacpan or search on metacpan
lib/App/ClusterSSH.pm view on Meta::CPAN
) / $self->config->{internal_rows}
);
$self->config->{internal_terminal_height} = (
$height > $self->config->{internal_terminal_height}
? $self->config->{internal_terminal_height}
: $height
);
}
else {
$self->config->{internal_terminal_height} = int(
( ( $self->config->{internal_screen_height}
- $self->config->{screen_reserve_top}
- $self->config->{screen_reserve_bottom}
) - (
$self->config->{internal_rows} * (
$self->config->{terminal_reserve_top}
+ $self->config->{terminal_reserve_bottom}
)
)
) / $self->config->{internal_rows}
);
$self->config->{internal_terminal_width} = int(
( ( $self->config->{internal_screen_width}
- $self->config->{screen_reserve_left}
- $self->config->{screen_reserve_right}
) - (
$self->config->{internal_columns} * (
$self->config->{terminal_reserve_left}
+ $self->config->{terminal_reserve_right}
)
)
) / $self->config->{internal_columns}
);
}
$self->debug( 2, "Terminal h: ",
$self->config->{internal_terminal_height},
", w: ", $self->config->{internal_terminal_width} );
$self->config->dump("noexit") if ( $self->options->debug_level > 1 );
# now find the size of the window decorations
if ( !exists( $self->config->{internal_terminal_wm_decoration_left} ) ) {
# Debian #842965 (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=842965)
# disable behavior added in https://github.com/duncs/clusterssh/pull/66
# unless explicitly enabled with auto_wm_decoration_offsets => yes
if ( $self->config->{auto_wm_decoration_offsets} =~ /yes/i ) {
# use the first window as exemplary
my ($wid) = $servers{ ( keys(%servers) )[0] }{wid};
if ( defined($wid) ) {
# get the WM decoration sizes
( $self->config->{internal_terminal_wm_decoration_left},
$self->config->{internal_terminal_wm_decoration_right},
$self->config->{internal_terminal_wm_decoration_top},
$self->config->{internal_terminal_wm_decoration_bottom}
)
= X11::Protocol::WM::get_net_frame_extents( $xdisplay,
$wid );
}
}
# in case the WM call failed we set some defaults
slash_slash_equal(
$self->config->{internal_terminal_wm_decoration_left}, 0 );
slash_slash_equal(
$self->config->{internal_terminal_wm_decoration_right}, 0 );
slash_slash_equal(
$self->config->{internal_terminal_wm_decoration_top}, 0 );
slash_slash_equal(
$self->config->{internal_terminal_wm_decoration_bottom}, 0 );
}
# now we have the info, plot first window position
my @hosts;
my ( $current_x, $current_y, $current_row, $current_col ) = 0;
if ( $self->config->{window_tiling_direction} =~ /right/i ) {
$self->debug( 2, "Tiling top left going bot right" );
@hosts = $sort->( keys(%servers) );
$current_x = $self->config->{screen_reserve_left}
+ $self->config->{terminal_reserve_left};
$current_y = $self->config->{screen_reserve_top}
+ $self->config->{terminal_reserve_top};
$current_row = 0;
$current_col = 0;
}
else {
$self->debug( 2, "Tiling bot right going top left" );
@hosts = reverse( $sort->( keys(%servers) ) );
$current_x
= $self->config->{screen_reserve_right}
- $self->config->{internal_screen_width}
- $self->config->{terminal_reserve_right}
- $self->config->{internal_terminal_width};
$current_y
= $self->config->{screen_reserve_bottom}
- $self->config->{internal_screen_height}
- $self->config->{terminal_reserve_bottom}
- $self->config->{internal_terminal_height};
$current_row = $self->config->{internal_rows} - 1;
$current_col = $self->config->{internal_columns} - 1;
}
# Unmap windows (hide them)
# Move windows to new locatation
# Remap all windows in correct order
foreach my $server (@hosts) {
$self->debug( 3,
"x:$current_x y:$current_y, r:$current_row c:$current_col" );
# sf tracker 3061999
# $xdisplay->req( 'UnmapWindow', $servers{$server}{wid} );
if ( $self->config->{unmap_on_redraw} =~ /yes/i ) {
$xdisplay->req( 'UnmapWindow', $servers{$server}{wid} );
}
( run in 2.545 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )