70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
|
#!/usr/bin/python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import re
|
||
|
import sublime
|
||
|
import sublime_plugin
|
||
|
from datetime import datetime
|
||
|
|
||
|
|
||
|
class SublimeTasksBase(sublime_plugin.TextCommand):
|
||
|
def run(self, edit):
|
||
|
self.open_tasks_bullet = self.view.settings().get('open_tasks_bullet')
|
||
|
self.done_tasks_bullet = self.view.settings().get('done_tasks_bullet')
|
||
|
self.date_format = self.view.settings().get('date_format')
|
||
|
if self.view.settings().get('done_tag'):
|
||
|
self.done_tag = "@done"
|
||
|
else:
|
||
|
self.done_tag = ""
|
||
|
self.runCommand(edit)
|
||
|
|
||
|
|
||
|
class NewCommand(SublimeTasksBase):
|
||
|
def runCommand(self, edit):
|
||
|
for region in self.view.sel():
|
||
|
line = self.view.line(region)
|
||
|
line_contents = self.view.substr(line).rstrip()
|
||
|
has_bullet = re.match('^(\s*)[' + re.escape(self.open_tasks_bullet) + re.escape(self.done_tasks_bullet) + ']', self.view.substr(line))
|
||
|
current_scope = self.view.scope_name(self.view.sel()[0].b)
|
||
|
if has_bullet:
|
||
|
grps = has_bullet.groups()
|
||
|
line_contents = self.view.substr(line) + '\n' + grps[0] + self.open_tasks_bullet + ' '
|
||
|
self.view.replace(edit, line, line_contents)
|
||
|
elif 'header' in current_scope:
|
||
|
header = re.match('^(\s*)\S+', self.view.substr(line))
|
||
|
if header:
|
||
|
grps = header.groups()
|
||
|
line_contents = self.view.substr(line) + '\n' + grps[0] + ' ' + self.open_tasks_bullet + ' '
|
||
|
else:
|
||
|
line_contents = ' ' + self.open_tasks_bullet + ' '
|
||
|
self.view.replace(edit, line, line_contents)
|
||
|
end = self.view.sel()[0].b
|
||
|
pt = sublime.Region(end, end)
|
||
|
self.view.sel().clear()
|
||
|
self.view.sel().add(pt)
|
||
|
else:
|
||
|
has_space = re.match('^(\s+)(.*)', self.view.substr(line))
|
||
|
if has_space:
|
||
|
grps = has_space.groups()
|
||
|
spaces = grps[0]
|
||
|
line_contents = spaces + self.open_tasks_bullet + ' ' + grps[1]
|
||
|
self.view.replace(edit, line, line_contents)
|
||
|
else:
|
||
|
line_contents = ' ' + self.open_tasks_bullet + ' ' + self.view.substr(line)
|
||
|
self.view.replace(edit, line, line_contents)
|
||
|
end = self.view.sel()[0].b
|
||
|
pt = sublime.Region(end, end)
|
||
|
self.view.sel().clear()
|
||
|
self.view.sel().add(pt)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|