in reply to selecting all occurences in tk::text

Just search in a loop adding the highlighting as you go. Something like this: (untested)

my $index = '1.0'; while (my $result = $text->search(-nocase => "$word_search", $index, ' +end')){ $text->tagAdd('color', "$result wordstart", "$result wordend") $index = "$result wordend"; }

If it is a large file, it may take a while to churn through; you may want to update your main window inside the loop so it doesn't "lock-up" while its working. This will add extra time to the process however.

Replies are listed 'Best First'.
Re^2: selecting all occurences in tk::text
by fanticla (Scribe) on May 26, 2010 at 20:51 UTC

    I found that I can select all istances at a time with FindAll. According to the manual, all matches are tagged with the sel tag. But how can I add the tag "color" to all matches?

    #formatting $text->tagConfigure('color', -foreground =>"red",-font => "Courier $fo +nt_kwic bold"); #search $text->FindAll(-exact, -nocase, $word_search); #Need here to tag all matches

    Thanks

      Hi,
      use Tk; my $mw = tkinit; my $t = $mw->Text()->pack; $t->tagConfigure('foo', -background => 'yellow'); $t->insert('end',"foo\nbar\nbaz\nfoo\n"); $t->FindAll(qw/-exact -case foo/); $t->tagAdd('foo',$t->tagRanges('sel')); MainLoop;

      See the tagRanges() and tagAdd() methods documented in Tk::Text

      Cheers, Christoph
      update: Added example