-
Notifications
You must be signed in to change notification settings - Fork 1
/
SublimeReadOnlyBuffer.py
118 lines (89 loc) · 3.67 KB
/
SublimeReadOnlyBuffer.py
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
108
109
110
111
112
113
114
115
116
117
118
# -*- encoding: utf-8 -*-
import sublime
import sublime_plugin
class ReadOnlyBuffer():
def get_plugin_settings(self):
return sublime.load_settings("SublimeReadOnlyBuffer.sublime-settings")
def set_plugin_settings(self):
sublime.save_settings("SublimeReadOnlyBuffer.sublime-settings")
def get_plugin_file_cache(self):
settings = self.get_plugin_settings()
return settings.get("cache", {})
class SetReadOnlyBufferCommand(ReadOnlyBuffer, sublime_plugin.TextCommand):
def __init__(self, view):
self.view = view
self.settings = self.get_plugin_settings()
self.debug = self.settings.get("debug", False)
def is_enabled(self):
return not self.view.is_read_only()
def description():
return "Sets the buffer to read-only state (saving the unsaved contents is still possible)"
def run(self, edit):
cache = self.get_plugin_file_cache()
if(self.view.is_read_only()):
self.view.set_status("buffer-status", "Read Only")
return
self.view.set_read_only(True)
if(self.view.file_name() is not None):
cache[self.view.file_name()] = True
self.settings.set("cache", cache)
self.set_plugin_settings()
self.view.set_status("buffer-status", "Read Only")
class SetReadWriteBufferCommand(ReadOnlyBuffer, sublime_plugin.TextCommand):
def __init__(self, view):
self.view = view
self.settings = self.get_plugin_settings()
self.debug = self.settings.get("debug", False)
def is_enabled(self):
return self.view.is_read_only()
def description():
return "Sets the buffer to read-write state"
def run(self, edit):
cache = self.get_plugin_file_cache()
if(not self.view.is_read_only()):
self.view.set_status("buffer-status", "")
return
self.view.set_read_only(False)
if(self.view.file_name() is not None):
cache[self.view.file_name()] = False
self.settings.set("cache", cache)
self.set_plugin_settings()
self.view.set_status("buffer-status", "")
class ReadOnlyEventListener(ReadOnlyBuffer, sublime_plugin.EventListener):
def set_status(self, state, view):
if(state):
view.set_status("buffer-status", "Read Only")
else:
view.set_status("buffer-status", "")
def on_clone(self, view):
cache = self.get_plugin_file_cache()
if(view.file_name() is not None):
file_name = view.file_name()
if(file_name in cache):
state = cache.get(file_name)
view.set_read_only(state)
self.set_status(state, view)
def on_load(self, view):
cache = self.get_plugin_file_cache()
if(view.file_name() is not None):
file_name = view.file_name()
if(file_name in cache):
state = cache.get(file_name)
view.set_read_only(state)
self.set_status(state, view)
def on_new(self, view):
self.set_status(view.is_read_only(), view)
def on_close(self, view):
self.set_status(view.is_read_only(), view)
def on_pre_save(self, view):
self.set_status(view.is_read_only(), view)
def on_post_save(self, view):
self.set_status(view.is_read_only(), view)
def on_modified(self, view):
self.set_status(view.is_read_only(), view)
def on_selection_modified(self, view):
self.set_status(view.is_read_only(), view)
def on_activated(self, view):
self.set_status(view.is_read_only(), view)
def on_deactivated(self, view):
self.set_status(view.is_read_only(), view)