# choose one of the two styles: # - gtktext_insert($textview, "My text.."); # - gtktext_insert($textview, [ [ 'first text', { 'foreground' => 'blue', 'background' => 'green', ... } ], # [ 'second text' ], # [ 'third', { 'font' => 'Serif 15', ... } ], # ... ]); sub gtktext_insert { my ($textview, $t, $opts) = @_; if (ref($t) eq 'ARRAY') { my $buffer = $textview->get_buffer; $opts->{append} or $buffer->set_text('', -1); foreach my $token (@$t) { my $c = $buffer->get_char_count; $buffer->insert($buffer->get_end_iter, $token->[0], -1); if ($token->[1]) { my $tag = $buffer->create_tag(undef); $tag->set(%{$token->[1]}); $buffer->apply_tag($tag, $buffer->get_iter_at_offset($c), $buffer->get_end_iter); } } } else { $textview->get_buffer->set_text($t, -1); } $textview->set_wrap_mode($opts->{wrap_mode} || 'word'); $textview->set_editable($opts->{editable} || 0); $textview->set_cursor_visible($opts->{visible} || 0); $textview; }