From 9759e77ff7564f06d9d690c7dd4139fbaf849bff Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sat, 19 Jul 2003 15:54:48 +0000 Subject: [PATCH] Added Advanced search and replace (regex). git-svn-id: https://rox.svn.sourceforge.net/svnroot/rox/trunk/Edit@2881 66de3db3-b00d-0410-b41b-f4738ad19bea --- search.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/search.py b/search.py index e5595b8..df9dfc4 100644 --- a/search.py +++ b/search.py @@ -123,21 +123,40 @@ class Replace(rox.Dialog): self.replace_entry = field('Replace:') self.with_entry = field('With:') + self.regex = g.CheckButton('Advanced search and replace') + self.regex.set_active(history.get('Advanced', False)) + def changed(toggle): history['Advanced'] = toggle.get_active() + self.regex.connect('toggled', changed) + vbox.pack_start(self.regex, False, True, 0) + self.vbox.show_all() def do_replace(self): + regex = self.regex.get_active() + replace = self.replace_entry.get_text() if not replace: rox.alert('You need to specify something to search for...') return with = self.with_entry.get_text() + changes = [0] - def do_line(line): - new = line.replace(replace, with) - if new == line: - return None - changes[0] += 1 - return new + if regex: + import re + prog = re.compile(replace) + def do_line(line): + new, n = prog.subn(with, line) + if n: + changes[0] += 1 + return new + else: + def do_line(line): + new = line.replace(replace, with) + if new == line: + return None + changes[0] += 1 + return new + self.edit_window.process_selected(do_line) if not changes[0]: rox.alert('Search string not found') -- 2.11.4.GIT