#!/usr/bin/perl # # This is just a simple demo of how to embed an xterm into a Tk application. # This one puts it into a canvas, which opens the possibilities of using # various backgrounds. I got the idea from a posting on the Tk::Zinc maillist # by Christophe Mertz. # # von zentara (Perlmonks) # "schön" gemacht von Crian # use strict; use warnings; use Tk; # Idea ripped from a script by Christophe Mertz of the # Tk::Zinc module, to work with a plain canvas. # The Zinc module has much more flexibility in how # you can hide windows. I had to mask the xterm with a # toplevel to hide it in the plain old canvas. # my $mw = new MainWindow; my $canv = $mw->Canvas(-bg => 'lightsteelblue', -relief => 'sunken', -width => 550, -height => 350, ) ->pack(-expand => 1, -fill => 'both', ); my $xtermWidth = 400; my $xtermHeight = 300; ## this Frame is needed for including the xterm in Tk::Canvas my $xtermContainer = $canv->Frame(-container => 1); my $xtid = $xtermContainer->id(); # converting the id from HEX to decimal as xterm requires a decimal Id my ($xtId) = sprintf hex $xtid; my $dcontitem = $canv->createWindow(275, 175, -window => $xtermContainer, -width => $xtermWidth+100, -height => $xtermHeight, -state => 'normal', ); my $label = $canv->createText(275, 10, -text => "Hide xterm", ); $canv->Tk::bind("", \&hide_show); my $width = $xtermWidth; my $height = $xtermHeight; $mw->Button(-text => 'Exit', -command => [ sub{ Tk::exit } ], ) ->pack(); my $tl; #used to mask xterm system("xterm -into $xtId &"); MainLoop(); # ----------------------------------------------------------------------------- sub hide_show { if ($canv->itemcget($label, -text) =~ /Hide/) { $canv->itemconfigure($label, -fill => 'white', -text => "Show xterm"); $tl = $mw->Toplevel(-use=>$xtId ); } else { $canv->itemconfigure($label, -fill => 'black', -text => "Hide xterm"); $tl->withdraw; } } # sub hide_show # -----------------------------------------------------------------------------