App-ClusterSSH
view release on metacpan or search on metacpan
lib/App/ClusterSSH.pm view on Meta::CPAN
if ( $hotkey eq "key_localname" );
$self->send_text_to_all_servers(
$self->config->{macro_username} )
if ( $hotkey eq "key_username" );
$self->add_host_by_name()
if ( $hotkey eq "key_addhost" );
$self->retile_hosts("force")
if ( $hotkey eq "key_retilehosts" );
$self->show_history() if ( $hotkey eq "key_history" );
$self->exit_prog() if ( $hotkey eq "key_quit" );
}
return;
}
}
}
# look for a <Control>-d and no hosts, so quit
$self->exit_prog()
if ( $state =~ /Control/ && $keysym eq "d" and !%servers );
$self->update_display_text( $keycodetosym{$keysymdec} )
if ( $event eq "KeyPress" && $keycodetosym{$keysymdec} );
# for all servers
foreach ( keys(%servers) ) {
# if active
if ( $servers{$_}{active} == 1 ) {
$self->debug( 3,
"Sending event $event with code $keycode (state=$state) to window $servers{$_}{wid}"
);
$xdisplay->SendEvent(
$servers{$_}{wid},
0,
$xdisplay->pack_event_mask($event),
$xdisplay->pack_event(
'name' => $event,
'detail' => $keycode,
'state' => $state,
'event' => $servers{$_}{wid},
'root' => $xdisplay->root(),
'same_screen' => 1,
)
) || warn("Error returned from SendEvent: $!");
}
}
$xdisplay->flush();
return $self;
}
sub create_menubar() {
my ($self) = @_;
$self->debug( 2, "create_menubar: started" );
$menus{bar} = $windows{main_window}->Menu();
$windows{main_window}->configure( -menu => $menus{bar}, )
unless $self->config->{hide_menu};
$menus{file} = $menus{bar}->cascade(
-label => 'File',
-menuitems => [
[ "command",
"Show History",
-command => sub { $self->show_history; },
-accelerator => $self->config->{key_history},
],
[ "command",
"Exit",
-command => sub { $self->exit_prog },
-accelerator => $self->config->{key_quit},
]
],
-tearoff => 0,
);
my $host_menu_items = [
[ "command",
"Retile Windows",
-command => sub { $self->retile_hosts },
-accelerator => $self->config->{key_retilehosts},
],
# [ "command", "Capture Terminal", -command => sub { $self->capture_terminal), ],
[ "command",
"Set all active",
-command => sub { $self->set_all_active() },
],
[ "command",
"Set half inactive",
-command => sub { $self->set_half_inactive() },
],
[ "command",
"Toggle active state",
-command => sub { $self->toggle_active_state() },
],
[ "command",
"Close inactive sessions",
-command => sub { $self->close_inactive_sessions() },
],
[ "command",
"Add Host(s) or Cluster(s)",
-command => sub { $self->add_host_by_name, },
-accelerator => $self->config->{key_addhost},
],
[ "command",
"Re-add closed session(s)",
-command => sub { $self->re_add_closed_sessions() },
],
'' # this is needed as build_host_menu always drops the
# last item
];
$menus{hosts} = $menus{bar}->cascade(
-label => 'Hosts',
-tearoff => 1,
-menuitems => $host_menu_items
);
$host_menu_static_items = scalar( @{$host_menu_items} );
$menus{send} = $menus{bar}->cascade(
-label => 'Send',
-tearoff => 1,
);
$self->populate_send_menu();
$menus{help} = $menus{bar}->cascade(
-label => 'Help',
-menuitems => [
[ 'command', "About", -command => sub { $windows{help}->Show } ],
[ 'command', "Documentation",
-command => sub { $windows{manpage}->Show }
],
],
-tearoff => 0,
);
$windows{main_window}->bind( '<KeyPress>' => [ $self => 'key_event' ], );
$windows{main_window}
->bind( '<KeyRelease>' => [ $self => 'key_event' ], );
$self->debug( 2, "create_menubar: completed" );
}
sub populate_send_menu_entries_from_xml {
my ( $self, $menu, $menu_xml ) = @_;
foreach my $menu_ref ( @{ $menu_xml->{menu} } ) {
if ( $menu_ref->{menu} ) {
$menus{ $menu_ref->{title} }
= $menu->cascade( -label => $menu_ref->{title}, );
$self->populate_send_menu_entries_from_xml(
$menus{ $menu_ref->{title} }, $menu_ref, );
if ( $menu_ref->{detach} && $menu_ref->{detach} =~ m/y/i ) {
$menus{ $menu_ref->{title} }->menu->tearOffMenu()->raise;
}
}
else {
my $accelerator = undef;
if ( $menu_ref->{accelerator} ) {
$accelerator = $menu_ref->{accelerator};
}
if ( $menu_ref->{toggle} ) {
$menus{send}->checkbutton(
-label => 'Use Macros',
-variable => \$self->config->{macros_enabled},
-offvalue => 'no',
-onvalue => 'yes',
-accelerator => $accelerator,
);
}
else {
my $command = undef;
if ( $menu_ref->{command} ) {
$command = sub {
$self->send_text_to_all_servers(
$menu_ref->{command}[0] );
};
}
$menu->command(
-label => $menu_ref->{title},
-command => $command,
-accelerator => $accelerator,
);
}
}
}
return $self;
}
sub populate_send_menu {
my ($self) = @_;
# my @menu_items = ();
if ( !-r $self->config->{send_menu_xml_file} ) {
$self->debug( 2, 'Using default send menu' );
$menus{send}->checkbutton(
-label => 'Use Macros',
-variable => \$self->config->{macros_enabled},
-offvalue => 'no',
-onvalue => 'yes',
-accelerator => $self->config->{key_macros_enable},
);
$menus{send}->command(
-label => 'Remote Hostname',
-command => sub {
$self->send_text_to_all_servers(
$self->config->{macro_servername} );
( run in 1.759 second using v1.01-cache-2.11-cpan-9581c071862 )