Schrift
[thread]4785[/thread]

XTerm in Tk-Oberfläche

Leser: 1


<< >> 8 Einträge, 1 Seite
Crian
 2004-06-03 14:54
#42152 #42152
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Ein Snippet, wie man ein XTerm-Fenster in Tk einbettet, findet man hier:

embedding xterm into a Tk app

Ich hab den Code nochmal optisch etwas verschönert:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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("<Button-1>", \&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
# -----------------------------------------------------------------------------


Man müsste nur noch irgendwie ein exit im eingebetteten xterm abfangen und daraufhin ein neues starten. Aber ein sehr nettes Snippet :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-06-03 15:58
#42153 #42153
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die gleiche Frage habe ich auch bei perlmonks gestellt: warum kennen eure xterms die -into Option? Hier gibt es das nicht:
Code: (dl )
xterm:  bad command line option "-into"
Crian
 2004-06-03 16:43
#42154 #42154
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Hmmm ... ist das XTerm, was bei SuSE 9.0 dabei war, keine Ahnung :)

Soll ich das Quellcode-Package raussuchen und Dir schicken?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-06-03 17:23
#42155 #42155
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Unter der Annahme, dass xterm und Xserver zusammen gehoeren --- welche XFree86-Version verwendest du (das bekommt man ueber xdpyinfo heraus)? Bei mir ist es XFree86 version: 4.2.0.
Crian
 2004-06-06 07:27
#42156 #42156
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
XFree86-Version ist bei mir: 4.3.99.902
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-06-07 12:37
#42157 #42157
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Versionsnummer sieht sehr nach "in development" aus.
Crian
 2004-06-07 19:33
#42158 #42158
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Das will ich doch mal nicht hoffen, dass SuSE (9.1) für den X-Server eine development-Version verwendet :-O
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-06-07 19:50
#42159 #42159
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei RedHat 9.0 wird eine Perl-Version benutzt, die zwischen den Releases 5.8.0 und 5.8.1 liegt. Allerdings geschah das mit dem Segen der Perl-Entwickler, aber trotzdem war diese Version problematischer als das richtige 5.8.1-Release.

Ich habe das Gefuehl, dass die grossen Linux-Distributoren lieber das neueste verwenden als auf Stabilitaet achten.
<< >> 8 Einträge, 1 Seite



View all threads created 2004-06-03 14:54.