-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfilter.py
More file actions
49 lines (38 loc) · 1.34 KB
/
filter.py
File metadata and controls
49 lines (38 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import sublime
import sublime_plugin
import subprocess
class FilterCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.window().show_input_panel("Filter", "", self.end, self.filter, self.end)
def filter(self, filterstr, opts=sublime.LITERAL):
self.view.unfold(sublime.Region(0, self.view.size()))
self.view.erase_regions("FILTER")
if len(filterstr) == 0:
return
regs_f = self.view.find_all(filterstr, opts)
self.view.window().status_message("%i matches" % len(regs_f))
regs = []
cur_r = 0
for reg in regs_f:
reg_line = self.view.full_line(reg)
if cur_r < reg_line.begin():
regs.append(sublime.Region(cur_r, reg_line.begin()))
cur_r = reg_line.end()
end = self.view.size()
if cur_r < end:
regs.append(sublime.Region(cur_r, end))
self.view.fold(regs)
self.view.add_regions("FILTER", regs_f, "comment")
self.view.show(0)
def end(self, arg=None):
self.view.erase_regions("FILTER")
self.view.unfold(sublime.Region(0, self.view.size()))
s = 0
sel = self.view.sel()
if len(sel) != 0:
self.view.show_at_center(self.view.sel()[0])
class FilterReCommand(FilterCommand):
def run(self, edit):
self.view.window().show_input_panel("Filter (RE)", "", self.end, self.filter, self.end)
def filter(self, filterstr):
super().filter(filterstr, 0)