-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLastModifiedIndicator.py
More file actions
107 lines (82 loc) · 3.13 KB
/
LastModifiedIndicator.py
File metadata and controls
107 lines (82 loc) · 3.13 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import sublime_plugin
import sublime
import os
BASE_PATH = os.path.basename(os.path.abspath(os.path.dirname(__file__))).replace('.sublime-package', '')
if int(sublime.version()) < 3014:
PATH = '..'
EXT = ''
else:
PATH = 'Packages'
EXT = '.png'
ICONS_PATH = '{0}/{1}/{2}'.format(PATH, BASE_PATH, 'icons')
ALL_SETTINGS = [
'last_modified_indicator',
'last_modified_indicator_multiline',
'last_modified_indicator_file_save_clear',
]
user_settings = None
lmi_settings = None
settings = {}
def init_settings():
globals()['user_settings'] = sublime.load_settings('Preferences.sublime-settings')
globals()['lmi_settings'] = sublime.load_settings('LastModifiedIndicator.sublime-settings')
lmi_settings.clear_on_change(__name__)
lmi_settings.add_on_change(__name__, settings_changed)
user_settings.clear_on_change(__name__)
user_settings.add_on_change(__name__, settings_changed)
settings_changed()
def settings_changed():
for value in ALL_SETTINGS:
user_value = user_settings.get(value)
settings[value] = user_value if user_value is not None else lmi_settings.get(value)
for window in sublime.windows():
for view in window.views():
reload_settings(view)
erase_regions(view)
def reload_settings(view):
view_settings = view.settings()
for value in ALL_SETTINGS:
if settings.get(value) is not None:
view_settings.set(value, settings.get(value))
if view_settings.get('last_modified_indicator') is None:
view_settings.set('last_modified_indicator', True)
def plugin_loaded():
init_settings()
def erase_regions(view):
for i in range(-3, 4):
view.erase_regions('lmi-outline-{0}'.format(i))
class LastModifiedIndicator(object):
def __init__(self, view):
self.view = view
self.sel = self.view.sel()
self.has_sel = len(self.sel) == 1
@property
def _range(self):
return range(-3, 4) if settings.get('last_modified_indicator_multiline', True) else range(0, 1)
def run(self):
if self.has_sel:
line = self.view.rowcol(self.view.sel()[0].begin())[0]
erase_regions(self.view)
for i in self._range:
_line = line + i
if _line < 0:
continue
point = self.view.full_line(self.view.text_point(_line, 0))
self.view.add_regions(
'lmi-outline-{0}'.format(i), [point, ],
'lmi.outline.{0}'.format(i),
'{0}/{1}'.format(ICONS_PATH, format(abs(i)) + EXT),
sublime.HIDDEN)
class LastModifiedIndicatorEventHandler(sublime_plugin.EventListener):
def on_load(self, view):
reload_settings(view)
def on_new(self, view):
reload_settings(view)
def on_clone(self, view):
reload_settings(view)
def on_modified(self, view):
if settings.get('last_modified_indicator', True):
LastModifiedIndicator(view).run()
def on_post_save(self, view):
if settings.get('last_modified_indicator_file_save_clear', False):
erase_regions(view)