Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Krejsa <dan.krejsa@gmail.com>2009-03-14 21:32:15 (GMT)
committer Dan Krejsa <dan.krejsa@gmail.com>2009-03-14 21:32:15 (GMT)
commitca0b4fac3c1aab739d6b73d4784ecb773a9ed013 (patch)
tree55b4bc30d4dc2ab9a725245b3b65b3410dd1aabb
parentbd2eb4f1b79f63a4217e08ee19822c75b74ac18d (diff)
Allow escaping from search back to original cursor position.
-rwxr-xr-xspock.py44
1 files changed, 33 insertions, 11 deletions
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')