App-ClusterSSH
view release on metacpan or search on metacpan
lib/App/ClusterSSH.pm view on Meta::CPAN
}
}
sub update_display_text($) {
my ( $self, $char ) = @_;
return if ( !$self->config->{show_history} );
$self->debug( 2, "Dropping :$char: into display" );
SWITCH: {
foreach ($char) {
/^Return$/ && do {
$windows{history}->insert( 'end', "\n" );
last SWITCH;
};
/^BackSpace$/ && do {
$windows{history}->delete('end - 2 chars');
last SWITCH;
};
/^(:?Shift|Control|Alt)_(:?R|L)$/ && do {
last SWITCH;
};
length($char) > 1 && do {
$windows{history}
->insert( 'end', chr( $keysymtocode{$char} ) )
if ( $keysymtocode{$char} );
last SWITCH;
};
do {
$windows{history}->insert( 'end', $char );
last SWITCH;
};
}
}
return $self;
}
sub substitute_macros {
my ( $self, $svr, $text ) = @_;
return $text unless ( $self->config->{macros_enabled} eq 'yes' );
{
my $macro_servername = $self->config->{macro_servername};
( my $servername = $svr ) =~ s/\s+//;
$text =~ s!$macro_servername!$servername!xsmg;
}
{
my $macro_hostname = $self->config->{macro_hostname};
my $hostname = $servers{$svr}{givenname};
$text =~ s!$macro_hostname!$hostname!xsmg;
}
{
my $macro_username = $self->config->{macro_username};
my $username = $servers{$svr}{username};
$username ||= getpwuid($UID);
$text =~ s!$macro_username!$username!xsmg;
}
{
my $macro_newline = $self->config->{macro_newline};
$text =~ s!$macro_newline!\n!xsmg;
}
{
my $macro_version = $self->config->{macro_version};
$text =~ s/$macro_version/$VERSION/xsmg;
}
return $text;
}
sub send_text($@) {
my $self = shift;
my $svr = shift;
my $text = join( "", @_ );
$self->debug( 2, "servers{$svr}{wid}=$servers{$svr}{wid}" );
$self->debug( 3, "Sending to '$svr' text:$text:" );
$text = $self->substitute_macros( $svr, $text );
foreach my $char ( split( //, $text ) ) {
next if ( !defined($char) );
my $ord = ord($char);
$ord = 65293 if ( $ord == 10 ); # convert 'Return' to sym
if ( !defined( $keycodetosym{$ord} ) ) {
warn("Unknown character in xmodmap keytable: $char ($ord)\n");
next;
}
my $keysym = $keycodetosym{$ord};
my $keycode = $keysymtocode{$keysym};
$self->debug( 2, "Looking for char :$char: with ord :$ord:" );
$self->debug( 2, "Looking for keycode :$keycode:" );
$self->debug( 2, "Looking for keysym :$keysym:" );
$self->debug( 2, "Looking for keyboardmap :",
$keyboardmap{$keysym}, ":" );
my ( $state, $code ) = $self->get_keycode_state($keysym);
$self->debug( 2, "Got state :$state: code :$code:" );
for my $event (qw/KeyPress KeyRelease/) {
$self->debug( 2,
"sending event=$event code=:$code: state=:$state:" );
$xdisplay->SendEvent(
$servers{$svr}{wid},
0,
$xdisplay->pack_event_mask($event),
$xdisplay->pack_event(
'name' => $event,
'detail' => $code,
'state' => $state,
'event' => $servers{$svr}{wid},
'root' => $xdisplay->root(),
'same_screen' => 1,
),
);
( run in 1.570 second using v1.01-cache-2.11-cpan-6aa56a78535 )