Umlaute in Perl/Tk text-Widget

Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
ohne Umlaute schreibe und editiere klappt alles ganz gut.

Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendwie
scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
zusammenzupassen, sonald Umlaute drin sind.

Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026

Was kann man dagegen machen?

Viele grüße
jens
bsterix [ So, 27 Mai 2007 12:52 ] [ ID #1724191 ]

Re: Umlaute in Perl/Tk text-Widget

Hallo Jens

bsterix [at] gmail.com schrieb:
> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>
> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendw=
ie
> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
> zusammenzupassen, sonald Umlaute drin sind.
>
> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>
> Was kann man dagegen machen?
>

Ich habe das bisher nur mit Entry benutzt, und da funktioniert es
bei mir. Verhält sich Entry bei Dir richtig?

--
Schönen Gruß aus dem Bergischen Land
Robert
Robert Berghaus [ Mo, 28 Mai 2007 16:25 ] [ ID #1724741 ]

Re: Umlaute in Perl/Tk text-Widget

Hallo Robert,
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es
> bei mir. Verhält sich Entry bei Dir richtig?
Bei Entry sieht alles OK aus. Ich hab hier mal ein kleines
Codebeispiel:

#! /usr/bin/perl -w
use strict;
use Tk;

my $mw =3D MainWindow->new;

my $txt =3D $mw -> Text(-width=3D>60, -height=3D>10) -> pack();
my $entr =3D $mw -> Entry(-width=3D>60) -> pack();

MainLoop;

wenn ich z.B. im "text"

test öäüabc

eintippe, verhält sich der Cursor recht seltsam (er steht nicht am
Ende, bzw wo er hingehört)

der gleiche text im "Entry" passt. Irgendwie schenen mir die Umlaute
in die Berechnung der Cursorposition nicht einzugehen.
bsterix [ Mo, 28 Mai 2007 18:02 ] [ ID #1724742 ]

Re: Umlaute in Perl/Tk text-Widget

"Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
news:c1.2bm.35QhWf$LSt [at] TPA31p-os2.robe-edv.lokal...
> Hallo Jens
>
> bsterix [at] gmail.com schrieb:
>> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
>> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>>
>> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
>> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
>> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendwie
>> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
>> zusammenzupassen, sonald Umlaute drin sind.
>>
>> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>>
>> Was kann man dagegen machen?
>>
>
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es bei mir.
> Verhält sich Entry bei Dir richtig?

Hallo Jens,

bei mir verhält sich das Textwidget beim Editieren (auch Löschen von Text
mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
"normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen Umlaut, so
wird erst ab der Cursorpos. markiert. Schreib doch mal für ein einfaches
Beispiel genauer, was wann schiefgeht.

Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk 804.027.

Gruß

Klaus
KWittrock [ Mo, 28 Mai 2007 18:39 ] [ ID #1724743 ]

Re: Umlaute in Perl/Tk text-Widget

<bsterix [at] gmail.com> schrieb im Newsbeitrag
news:1180368120.400475.306910 [at] o5g2000hsb.googlegroups.com...

>
> wenn ich z.B. im "text"
>
> test öäüabc
>
> eintippe, verhält sich der Cursor recht seltsam (er steht nicht am
> Ende, bzw wo er hingehört)
>
> der gleiche text im "Entry" passt. Irgendwie schenen mir die Umlaute
> in die Berechnung der Cursorposition nicht einzugehen.
>
Bei mir ist die Cursorposition ok.

Gruß

Klaus
KWittrock [ Mo, 28 Mai 2007 18:50 ] [ ID #1724744 ]

Re: Umlaute in Perl/Tk text-Widget

>
> Bei mir ist die Cursorposition ok.
>
Welche Perl bzw. TK-version hast du?

Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
installiert zu haben.

Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
und einmal 804.026 in "site" welches mir der ppm als "update zum
anderen" verkaufen wollte.

Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
bsterix [ Mo, 28 Mai 2007 18:56 ] [ ID #1724745 ]

Re: Umlaute in Perl/Tk text-Widget

> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> installiert zu haben.
>
> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> und einmal 804.026 in "site" welches mir der ppm als "update zum
> anderen" verkaufen wollte.
>
> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.

Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
sieht wieder alles normal aus.
Mein ppm zeigt mir aber bei folgendes an (der mit GUI)

Package name: Tk
Area: perl
Installed: 804.027-r6
Available: 804.026

Sollten bei Available eigentlich nicht eher "Updates" stehen, als
ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
r6 da evtl. eine eigene dabei???
bsterix [ Mo, 28 Mai 2007 19:02 ] [ ID #1724746 ]

Re: Umlaute in Perl/Tk text-Widget

Robert Berghaus schrieb:
> Hallo Jens
>
> bsterix [at] gmail.com schrieb:
>> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
>> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>>
>> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
>> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
>> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgend=
wie
>> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
>> zusammenzupassen, sonald Umlaute drin sind.
>>
>> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>>
>> Was kann man dagegen machen?
>>
>
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es bei
> mir. Verhält sich Entry bei Dir richtig?
>

Entry und Widget verhalten sich hier unterschiedlich. Der
Cursorsteuerung nach zu urteilen scheint das Textwidget bei
Umlauten auf Unifont umzustellen (2 Bytes pro Zeichen).
Vielleicht liegt da ja der Lösungsansatz.

--
Schönen Gruß aus dem Bergischen Land
Robert
Robert Berghaus [ Di, 29 Mai 2007 10:52 ] [ ID #1725619 ]

Re: Umlaute in Perl/Tk text-Widget

<bsterix [at] gmail.com> schrieb im Newsbeitrag
news:1180371765.006440.54530 [at] p77g2000hsh.googlegroups.com...
>> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
>> installiert zu haben.
>>
>> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
>> und einmal 804.026 in "site" welches mir der ppm als "update zum
>> anderen" verkaufen wollte.
>>
>> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>
> Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> sieht wieder alles normal aus.
> Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>
> Package name: Tk
> Area: perl
> Installed: 804.027-r6
> Available: 804.026
>
> Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> r6 da evtl. eine eigene dabei???
>

Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man das
separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG ist auch
dabei.

Gruß

Klaus
KWittrock [ Di, 29 Mai 2007 19:08 ] [ ID #1725623 ]

Re: Umlaute in Perl/Tk text-Widget

"K. Wittrock" <KWittrock [at] web.de> writes:

> <bsterix [at] gmail.com> schrieb im Newsbeitrag
> news:1180371765.006440.54530 [at] p77g2000hsh.googlegroups.com...
> >> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> >> installiert zu haben.
> >>
> >> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> >> und einmal 804.026 in "site" welches mir der ppm als "update zum
> >> anderen" verkaufen wollte.
> >>
> >> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
> >
> > Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> > sieht wieder alles normal aus.
> > Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
> >
> > Package name: Tk
> > Area: perl
> > Installed: 804.027-r6
> > Available: 804.026
> >
> > Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> > ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> > r6 da evtl. eine eigene dabei???
> >
>
> Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man
> das separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG
> ist auch dabei.
>

Nope, Tk ist nur bei ActivePerl im Core, beim "richtigen" Perl aber
nicht.

--
Slaven Rezic - slaven <at> rezic <dot> de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net
Slaven Rezic [ Di, 29 Mai 2007 20:43 ] [ ID #1725624 ]

Re: Umlaute in Perl/Tk text-Widget

bsterix [at] gmail.com writes:

> > Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> > installiert zu haben.
> >
> > Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> > und einmal 804.026 in "site" welches mir der ppm als "update zum
> > anderen" verkaufen wollte.
> >
> > Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>
> Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> sieht wieder alles normal aus.
> Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>
> Package name: Tk
> Area: perl
> Installed: 804.027-r6
> Available: 804.026
>
> Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> r6 da evtl. eine eigene dabei???

Ja. Tk::JPEG ist seit Tk804 gebündelt, zumindest im Standard-Tk.
ActiveState hat ja die Freiheit, Sachen in den Distributionen zu
ändern.

Gruß,
Slaven

--
Slaven Rezic - slaven <at> rezic <dot> de

tknotes - A knotes clone, written in Perl/Tk.
http://ptktools.sourceforge.net/#tknotes
Slaven Rezic [ Di, 29 Mai 2007 20:43 ] [ ID #1725625 ]

Re: Umlaute in Perl/Tk text-Widget

K. Wittrock schrieb:
>
>
> Hallo Jens,
>
> bei mir verhält sich das Textwidget beim Editieren (auch Löschen von
> Text mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
> Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
> markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
> "normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen
> Umlaut, so wird erst ab der Cursorpos. markiert.

> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
> 804.027.

Hallo,

Die index-modifier 'wordstart' und 'wordend' scheinen nicht mit Umlauten umgehen
zu können.
Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein die
Wortmarkierung) reparieren kann:



use warnings;
use strict;
use Tk;
use Tk::Text;

package Tk::Text;
no warnings 'redefine';
sub SelectTo{
my ($w, $index, $mode)= [at] _;
$Tk::selectMode = $mode if defined ($mode);
my $cur = $w->index($index);
my $anchor = Tk::catch { $w->index('anchor') };
if (!defined $anchor) {
$w->markSet('anchor',$anchor = $cur);
$Tk::mouseMoved = 0;
} elsif ($w->compare($cur,'!=',$anchor)) {
$Tk::mouseMoved = 1;
}
$Tk::selectMode = 'char' unless (defined $Tk::selectMode);
$mode = $Tk::selectMode;
my ($first,$last);
if ($mode eq 'char') {
if ($w->compare($cur,'<','anchor')) {
$first = $cur;
$last = 'anchor';
} else {
$first = 'anchor';
$last = $cur
}
# change:
} elsif ($mode eq 'word') {
if ($w->compare($cur,'<','anchor')) {
$first = $w->wordstart ($cur);
$last = $w->wordend('anchor');
} else {
$first = $w->wordstart('anchor');
$last = $w->wordend($cur);
}
# end
} elsif ($mode eq 'line') {
if ($w->compare($cur,'<','anchor')) {
$first = $w->index("$cur linestart");
$last = $w->index('anchor - 1c lineend + 1c')
} else {
$first = $w->index('anchor linestart');
$last = $w->index("$cur lineend + 1c")
}
}
if ($Tk::mouseMoved || $Tk::selectMode ne 'char') {
$w->tagRemove('sel','1.0',$first);
$w->tagAdd('sel',$first,$last);
$w->tagRemove('sel',$last,'end');
$w->idletasks;
}
}



sub wordstart{
my ($w,$index) = [at] _;
my $cur = $w->index($index);
my ($line,$pos) = $cur =~ /(\d*)\.(\d*)$/;

my $string = $w->get("$index linestart","$index lineend");
$string = substr($string,0,$pos);
$string =~ s/\S*$//;
return "$line.".length $string;
}

sub wordend{
my ($w,$index) = [at] _;
my $cur = $w->index($index);
my ($line,$pos) = $cur =~ /(\d*)\.(\d*)$/;

my $string = $w->get("$index linestart","$index lineend");
$string = substr($string,$pos) . ' ' ;
$string =~ m/^\S*(.)/g;
my $off = pos($string) - 1 ;
return "$line.". ($pos + $off);
}


package main;
my $mw = tkinit;
$mw->Text->pack;
$mw->Entry->pack;

MainLoop;

Grüße, Christoph

--
use Tk;use Tk::GraphItems;$c=tkinit->Canvas->pack;push [at] i,Tk::GraphItems ->
TextBox(text=>$_,canvas=>$c,x=>$x+=70,y=>100)for(Just=>anoth er=>Perl=>Hacker);
Tk::GraphItems->Connector(source=>$i[$_],target=>$i[$_+1])fo r(0..2);
$c->repeat(30,sub{$_->move(0,4*cos($d+=3.16))for( [at] i)});MainL oop
Ch Lamprecht [ Di, 29 Mai 2007 23:27 ] [ ID #1725627 ]

Re: Umlaute in Perl/Tk text-Widget

"Ch Lamprecht" <ch.l.ngre [at] online.de> schrieb im Newsbeitrag
news:f3i5r6$h4v$1 [at] online.de...
> K. Wittrock schrieb:
>>
>>
>> Hallo Jens,
>>
>> bei mir verhält sich das Textwidget beim Editieren (auch Löschen von Text
>> mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
>> Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
>> markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
>> "normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen Umlaut,
>> so wird erst ab der Cursorpos. markiert.
>
>> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
>> 804.027.
>
> Hallo,
>
> Die index-modifier 'wordstart' und 'wordend' scheinen nicht mit Umlauten
> umgehen zu können.
> Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein die
> Wortmarkierung) reparieren kann:
>
> .........................................


Danke, Christoph. Ich werde deinen Kode in meine Trickkiste stecken, bis ich
mal wieder ein Textwidget verwende.

Ich hoffe, Slaven hat deine Antwort gelesen.

Gruß

Klaus
KWittrock [ Mi, 30 Mai 2007 10:15 ] [ ID #1726512 ]

Re: Umlaute in Perl/Tk text-Widget

"Slaven Rezic" <slaven [at] rezic.de> schrieb im Newsbeitrag
news:87veebqxlm.fsf [at] biokovo-amd64.herceg.de...
> "K. Wittrock" <KWittrock [at] web.de> writes:
>
>> <bsterix [at] gmail.com> schrieb im Newsbeitrag
>> news:1180371765.006440.54530 [at] p77g2000hsh.googlegroups.com...
>> >> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
>> >> installiert zu haben.
>> >>
>> >> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
>> >> und einmal 804.026 in "site" welches mir der ppm als "update zum
>> >> anderen" verkaufen wollte.
>> >>
>> >> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>> >
>> > Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
>> > sieht wieder alles normal aus.
>> > Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>> >
>> > Package name: Tk
>> > Area: perl
>> > Installed: 804.027-r6
>> > Available: 804.026
>> >
>> > Sollten bei Available eigentlich nicht eher "Updates" stehen, als
>> > ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
>> > r6 da evtl. eine eigene dabei???
>> >
>>
>> Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man
>> das separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG
>> ist auch dabei.
>>
>
> Nope, Tk ist nur bei ActivePerl im Core, beim "richtigen" Perl aber
> nicht.

Ich dachte, ppm wäre ActiveState-spezifisch, und nahm daher an, dass Jens
eine ActiveState-Installation hat. Und im Ursprungsposting steht

| Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026

Gruß

Klaus
KWittrock [ Mi, 30 Mai 2007 10:30 ] [ ID #1726513 ]

Re: Umlaute in Perl/Tk text-Widget

K. Wittrock schrieb:
>
> "Ch Lamprecht" <ch.l.ngre [at] online.de> schrieb im Newsbeitrag
> news:f3i5r6$h4v$1 [at] online.de...
>
>> K. Wittrock schrieb:

>>> Aufgefallen ist mir nur das Verhalten
>>> beim Doppelklick. Nach hinten wird bis einschließlich zum nächsten
>>> Umlaut markiert, nach vorn so weit, dass hinter dem vorigen Umlaut
>>> noch drei "normale" Buchstaben unmarkiert bleiben.
>>> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
>>> 804.027.

>> Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein
>> die Wortmarkierung) reparieren kann:
>>
>> .........................................

>
> Ich hoffe, Slaven hat deine Antwort gelesen.

Slaven hatte das schon längst gefixt, es ist nur noch nicht bis in die Active
State Version vorgedrungen...

Grüße,



--
use Tk;use Tk::GraphItems;$c=tkinit->Canvas->pack;push [at] i,Tk::GraphItems ->
TextBox(text=>$_,canvas=>$c,x=>$x+=70,y=>100)for(Just=>anoth er=>Perl=>Hacker);
Tk::GraphItems->Connector(source=>$i[$_],target=>$i[$_+1])fo r(0..2);
$c->repeat(30,sub{$_->move(0,4*cos($d+=3.16))for( [at] i)});MainL oop
Ch Lamprecht [ Mi, 30 Mai 2007 14:19 ] [ ID #1726515 ]
Perl » de.comp.lang.perl.misc » Umlaute in Perl/Tk text-Widget

Vorheriges Thema: nested regex
Nächstes Thema: Re: Zähler zählt nicht :-(