From: oxman Date: 2005-01-16T04:16:10+09:00 Subject: Re: ruby-gnome2 : problem with signal "insert-text" I prefer a more generic way, such as : buffer.signal_connect_after('insert-text') do |a,iter,text,length| color(buffer, iter) end def color (buffer, iter) first_char = iter first_char.offset -= iter.line_offset last_char = buffer.get_iter_at_offset(first_char.offset) last_char.forward_to_line_end line_text = first_char.get_visible_text(last_char) f = File.open("ruby.color") f.each_line do |pattern| pattern.strip! if (match = Regexp.new(pattern).match(line_text)) length = match.pre_match.length start_iter = buffer.get_iter_at_offset(first_char.offset + length) length = match.post_match.length end_iter = buffer.get_iter_at_offset(last_char.offset - length) 2.times {buffer.apply_tag(buffer.tag_table.lookup("blue"), start_iter, end_iter)} end end end sentinel% cat ruby.color #.+$ if else Joao Pedrosa wrote: > Hi, > > On Sun, 16 Jan 2005 03:21:10 +0900, oxman wrote: > >>This : >> 2.times{ >> buffer.apply_tag(buffer.tag_table.lookup("blue"), iter, >>limit_iter) >> } >> >>Perfect. >>Thanks :) > > > No problem. :-) > > I just created another one, a little better: > > require 'gtk2' > Gtk.init > window = Gtk::Window.new > window.signal_connect("destroy") { Gtk.main_quit } > textviewer = Gtk::TextView.new > window.add(textviewer) > window.set_default_size(600,400) > window.show_all > buffer = textviewer.buffer > buffer.create_tag("blue", {"foreground" => "blue"}) > buffer.signal_connect_after('insert-text') do |a,iter,text,length| > orig_iter = buffer.get_iter_at_offset(iter.offset - 1) > iter.forward_to_line_end > limit_iter = buffer.get_iter_at_offset(iter.offset) > iter.line_offset = 0 > iter.offset = iter.offset - 1 > if a = iter.forward_search('#', Gtk::TextIter::SEARCH_TEXT_ONLY, > limit_iter) or text == '#' > if a > iter, = a > else > iter = orig_iter > end > 2.times{ > buffer.apply_tag(buffer.tag_table.lookup("blue"), iter, limit_iter) > } > end > end > Gtk.main > > Cheers, > Joao > >