#################################### IMPORTS ###################################
import sublime
import sublimeplugin
############################### HELPER FUNCTIONS ###############################
def find_all(view, search, start, end, flags=0):
regions = [sublime.Region(start, start)]
while True:
regions.append(view.find(search, regions[-1].end(), flags))
if not regions[-1] or regions[-1].begin() > end:
break
return regions[1:-1]
################################### COMMANDS ###################################
class BookmarkArea(sublimeplugin.TextCommand):
def run(self, view, args):
sels = view.sel()
start = sels[0].begin()
end = sels[-1].end()
sels.clear()
for pos in (start, end):
sels.add(sublime.Region(pos, pos))
view.runCommand('toggleBookmark')
sels.clear()
sels.add(sublime.Region(start, start))
class SearchBetweenBookmarks(sublimeplugin.TextCommand):
def run(self, view, args):
if len(view.sel()) == 3:
start, search_sel, end = view.sel()
else:
search_sel = view.sel()[0]
view.runCommand('prevBookmark')
start = view.sel()[0]
view.runCommand('nextBookmark')
end = view.sel()[-1]
full_word = view.word(search_sel)
search_sel = search_sel or full_word
search = view.substr(search_sel)
if search_sel == full_word:
search = r'\b%s\b' % search
finds = find_all(view, search, start.begin(), end.end())
view.sel().clear()
for sel in [search_sel] + finds:
view.sel().add(sel)
################################################################################