From ca0b4fac3c1aab739d6b73d4784ecb773a9ed013 Mon Sep 17 00:00:00 2001 From: Dan Krejsa Date: Sat, 14 Mar 2009 21:32:15 +0000 Subject: Allow escaping from search back to original cursor position. --- diff --git a/spock.py b/spock.py index a94fd20..de46159 100755 --- a/spock.py +++ b/spock.py @@ -170,6 +170,7 @@ class Spock: self.gh.curdir = self.curdir self.gh.file = self.current_file + self.search_stop(True) # if searching, stop & restore original position self.clear_error() # Hmm, could make Spock support the Scanner API's (i.e. get_token()) @@ -369,22 +370,35 @@ class Spock: it = self.source_buffer.get_iter_at_offset(self.good_offset) sv.scroll_to_iter(it, 0.0) - def find(self): + def search_stop(self, restorePos=False): + if self.searching: + self.searching = False + self.source_buffer.search_end() + if restorePos: + sb = self.source_buffer + sb.place_cursor(self.search_start_pos) + self.search_start_pos = None + + def search_start(self): if not self.searching: self.searching = True + sb = self.source_buffer + self.search_start_pos = sb.get_iter_at_mark(sb.get_insert()) self.statuslabel.set_text("") + + def find(self): + if not self.searching: self.search_entry.grab_focus() else: - self.searching = False - self.source_buffer.search_end() + self.search_stop() self.source_view.grab_focus() def search_op(self, forward): - self.searching = True + self.search_start() + sb = self.source_buffer self.statuslabel.set_text("") self.search_entry.grab_focus() self.search_dir_forward = forward - sb = self.source_buffer res = sb.search(self.search_entry.get_text(), forward) self.source_view.scroll_mark_onscreen(sb.get_insert()) if not res: @@ -395,12 +409,19 @@ class Spock: self.search_op(self.search_dir_forward) def search_lose_focus_callback(self, widget, event): - self.searching = False - self.source_buffer.search_end() + self.search_stop() + + def search_gain_focus_callback(self, widget, event): + self.search_start() -# def search_key_press_callback(self, widget, event): -# if event.string == '\x1b': -# self.source_view.grab_focus() + def search_key_press_callback(self, widget, event): + # The ESC key terminates the search, returning to the + # starting position. + if event.string == '\x1b': + self.search_stop(True) # stop & restore original position + sb = self.source_buffer + self.source_view.scroll_mark_onscreen(sb.get_insert()) + self.source_view.grab_focus() def addShortcutButton(self, box, name, expansion): button = gtk.Button(name) @@ -555,8 +576,9 @@ class Spock: entry.set_width_chars (10) entry.show() entry.connect('activate', self.search_activate_callback) + entry.connect('focus-in-event', self.search_gain_focus_callback) entry.connect('focus-out-event', self.search_lose_focus_callback) -# entry.connect('key-press-event', self.search_key_press_callback) + entry.connect('key-press-event', self.search_key_press_callback) hbox.pack_start (entry, expand=False) self.statuslabel = gtk.Label('OK') -- cgit v0.9.1