/
achievement.py
197 lines (167 loc) · 9.36 KB
/
achievement.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sublime
import sublime_plugin
from os.path import join
from .libs.override_shortcutkey import *
from .libs.achievement_functions import achievement_dialog, achievement_function, count_achievement_function
class EventAchievementChecker(sublime_plugin.EventListener):
def on_post_save_async(self, view):
setting = sublime.load_settings("achievement.sublime-settings")
# save_count achievement
setting_name = "save_count"
count = setting.get(setting_name, 0) + 1
count_achievement_function(setting_name, count, (1,), "Hello Save World!")
count_achievement_function(setting_name, count, (10, 100, 300, 500, 1000, 10000, 100000), "Save {num} times!")
count_achievement_function(setting_name, count, (99999999,), "Oversave!!! (Save 99999999 times!!!)")
setting.set(setting_name, count)
# filename achievement
setting_name = "filename"
filename = view.file_name().split("/")[-1].lower()
if "hoge" in filename:
message = "new file contains 'hoge' in filename"
achievement_function(setting_name, message)
if "fuga" in filename:
message = "new file contains 'fuga' in filename"
achievement_function(setting_name, message)
if "piyo" in filename:
message = "new file contains 'piyo' in filename"
achievement_function(setting_name, message)
if "foo" in filename:
message = "new file contains 'foo' in filename"
achievement_function(setting_name, message)
if "bar" in filename:
message = "new file contains 'bar' in filename"
achievement_function(setting_name, message)
if "baz" in filename:
message = "new file contains 'baz' in filename"
achievement_function(setting_name, message)
if "xyzzy" in filename:
message = "new file contains 'xyzzy' in filename"
achievement_function(setting_name, message)
if "the answer to the ultimate question of life, the universe, and everything" == filename:
setting_name = "easter_egg"
message = "42"
achievement_function(setting_name, message)
# file_type achievement
setting = self._file_type_achievement(view, setting)
# easter_egg
if view.settings().get("font_size", 0) >= 50:
setting_name = "easter_egg"
message = "Eyes are bad? (Font size greater than 50)"
achievement_function(setting_name, message)
sublime.save_settings("achievement.sublime-settings")
def on_load_async(self, view):
setting = sublime.load_settings("achievement.sublime-settings")
# load_count achievement
count = setting.get("load_count", 0) + 1
count_achievement_function("load_count", count, (1,), "Helload World!")
count_achievement_function("load_count", count, (10, 100, 300, 500, 1000, 10000, 100000), "Load {num} times!")
count_achievement_function("load_count", count, (99999999,), "Overload!!!")
setting.set("load_count", count)
# file_type achievement
setting = self._file_type_achievement(view, setting)
sublime.save_settings("achievement.sublime-settings")
def on_new_async(self, view):
setting = sublime.load_settings("achievement.sublime-settings")
# new_file_count achievement
count = setting.get("new_file_count", 0) + 1
count_achievement_function("new_file_count", count, (1,), "Hello World!")
count_achievement_function("new_file_count", count, (10, 100, 300, 500, 1000, 10000, 100000), "Create new file {num} times!")
count_achievement_function("new_file_count", count, (99999999,), "THE MAKER")
setting.set("new_file_count", count)
sublime.save_settings("achievement.sublime-settings")
def on_clone_async(self, view):
setting = sublime.load_settings("achievement.sublime-settings")
# clone_file_count achievement
count = setting.get("clone_file_count", 0) + 1
count_achievement_function("clone_file_count", count, (1,), "Duplicate Window!")
count_achievement_function("clone_file_count", count, (10, 100, 300, 500, 1000, 10000, 100000), "Duplicate file {num} times!")
count_achievement_function("clone_file_count", count, (99999999,), "Cloned Human")
setting.set("clone_file_count", count)
sublime.save_settings("achievement.sublime-settings")
def on_selection_modified_async(self, view):
count_achievement_function("selector_count", len(view.sel()), (2,), "multi selector!")
count_achievement_function("selector_count", len(view.sel()), (15, 30, 50, 100), "select {num} place one time")
count_achievement_function("selector_count", len(view.sel()), (200,), "THE SELECTOR")
def on_text_command(self, view, command_name, args):
# print("TEXT")
# print(view, command_name, args)
thread = threading.Thread(target=self._on_text_command_achievement_thread, args=(view, command_name, args))
thread.setDaemon(True)
thread.start()
def _on_text_command_achievement_thread(self, view, command_name, args):
if command_name == "drag_select":
# easter egg achievement
if args["event"]["x"] < 10 and args["event"]["y"] < 10:
setting_name = "easter_egg"
message = "click corner x < 10, y < 10"
achievement_function(setting_name, message)
elif command_name == "view_achievement":
# view_achievement_count achievement
setting = sublime.load_settings("achievement.sublime-settings")
count = setting.get("view_achievement_count", 0) + 1
count_achievement_function("view_achievement_count", count, (1,), "Checking!")
count_achievement_function("view_achievement_count", count, (10, 100, 300, 500, 1000, 10000, 100000), "View achievements {num} times!")
count_achievement_function("view_achievement_count", count, (99999999,), "Loiterer")
setting.set("view_achievement_count", count)
sublime.save_settings("achievement.sublime-settings")
def on_window_command(self, window, command_name, args):
pass
# print("WINDOW")
# print(window, command_name, args)
def on_query_context(self, view, key, operator, operand, match_all):
pass
# print("QUERY_CONTEXT")
# print(key, operator, operand, match_all)
def _file_type_achievement(self, view, setting):
# file_type achievement
setting_name = "file_type"
current_syntax = view.settings().get("syntax")
syntaxes = setting.get(setting_name, [])
if current_syntax not in syntaxes:
syntaxes.append(current_syntax)
setting.set(setting_name, syntaxes)
if len(syntaxes) == 10:
message = "Multilingual (Use 10 kinds of language syntax)"
achievement_function(setting_name, message)
elif len(syntaxes) == 20:
message = "Multibilingual (Use 20 kinds of language syntax)"
achievement_function(setting_name, message)
elif len(syntaxes) == 30:
message = "Multitrilingual (Use 30 kinds of language syntax)"
achievement_function(setting_name, message)
elif len(syntaxes) == 40:
message = "Multiquadrilingual (Use 40 kinds of language syntax)"
achievement_function(setting_name, message)
elif len(syntaxes) >= 50:
message = "THE TRANSLATOR (Over 50 language syntaxes used)"
achievement_function(setting_name, message)
return setting
class ViewAchievementCommand(sublime_plugin.TextCommand):
def run(self, edit):
size = 50
window = self.view.window()
achievement_window = window.new_file()
achievement_window.set_name("achievements")
achievement_window.set_scratch(True)
# write unlocked achievement
unlocked_settings = sublime.load_settings("unlocked.sublime-settings")
unlocked_titles = unlocked_settings.get("unlocked_titles", [])
for unlocked_title in sorted(unlocked_titles):
for unlock in reversed(unlocked_settings.get(unlocked_title, [])):
line = "{unlock}".format(unlock=unlock).center(size) + "\n"
achievement_window.insert(edit, 0, line)
line = "\n" + "+=+=+=+=+=+=+=+ {unlocked_title} +=+=+=+=+=+=+=+".format(unlocked_title=unlocked_title).center(size) + "\n"
achievement_window.insert(edit, 0, line)
message = "*=*=*=*=*=*=*=* UNLOCKED ACHIEVEMENTS *=*=*=*=*=*=*=*".center(size) + "\n"
achievement_window.insert(edit, 0, message)
achievement_window.set_read_only(True)
window.focus_view(self.view)
class ClearAchievementCommand(sublime_plugin.TextCommand):
def run(self, edit):
if sublime.ok_cancel_dialog("Do you realy want to clear Achievements?"):
if sublime.ok_cancel_dialog("DO YOU REALY WANT TO CLEAR ACHIEVEMENTS?"):
os.remove(os.path.join(sublime.packages_path(), "User", "achievement.sublime-settings"))
os.remove(os.path.join(sublime.packages_path(), "User", "unlocked.sublime-settings"))
sublime.message_dialog("All Achievements cleared.")