├── .python-version
├── CHANGELOG.md
├── Clojure (Sublimed).sublime-syntax
├── Clojure Sublimed Dark.sublime-color-scheme
├── Clojure Sublimed Light.sublime-color-scheme
├── Clojure Sublimed.sublime-settings
├── ClojureSymbols.tmPreferences
├── Comment.tmPreferences
├── Default (Linux).sublime-keymap
├── Default (OSX).sublime-keymap
├── Default (Windows).sublime-keymap
├── Default.sublime-commands
├── LICENSE.txt
├── Main.sublime-menu
├── README.md
├── cljfmt.edn
├── cs_bencode.py
├── cs_cljfmt.py
├── cs_colors.py
├── cs_comment.py
├── cs_common.py
├── cs_conn.py
├── cs_conn_nrepl_jvm.py
├── cs_conn_nrepl_raw.py
├── cs_conn_shadow_cljs.py
├── cs_conn_socket_repl.py
├── cs_eval.py
├── cs_eval_status.py
├── cs_indent.py
├── cs_parser.py
├── cs_printer.py
├── cs_progress.py
├── cs_warn.py
├── cs_watch.py
├── docs
└── protocol_socket.md
├── messages.json
├── messages
├── 2.4.0.txt
├── 2.8.0.txt
├── 2.9.0.txt
├── 3.0.0.txt
├── 3.4.0.txt
├── 3.6.0.txt
├── 3.7.0.txt
├── 4.0.0.txt
└── install.txt
├── src_clojure
└── clojure_sublimed
│ ├── core.clj
│ ├── middleware.clj
│ └── socket_repl.clj
├── test_comment
├── comment.txt
└── comment_reversible.txt
├── test_indent
└── indent.txt
└── test_scheme
├── color_scheme.clj
└── demo.clj
/.python-version:
--------------------------------------------------------------------------------
1 | 3.8
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ### 4.4.3 - May 9, 2025
2 |
3 | - Fixed `Align Cursors` not appearing in Command Palette #136
4 |
5 | ### 4.4.2 - Apr 28, 2025
6 |
7 | - Get settings from view, which merges in project and syntax settings on top of `Preferences.sublime-settings`
8 |
9 | ### 4.4.1 - Apr 5, 2025
10 |
11 | - Autoscroll on Enter #135
12 |
13 | ### 4.4.0 - Dec 30, 2024
14 |
15 | - New `Align Cursors` command
16 | - Color scheme adjustments
17 |
18 | ### 4.3.2 - Dec 9, 2024
19 |
20 | - Clarified some symbol/keyword edge cases in syntax
21 | - Add `clojure_sublimed_select_topmost_form` command
22 | - Add `|` to the allowed symbols chars #132
23 |
24 | ### 4.3.1 - Nov 4, 2024
25 |
26 | - Fixed evaluation of `()` #131
27 |
28 | ### 4.3.0 - Oct 31, 2024
29 |
30 | - Pretty print selection #123
31 | - Execute code from inside top-level `; ...` and `#_...` #124
32 | - `Toggle Comment` command that uses `#_` instead of `;;`
33 | - Remove background color on quoted strings inside metadata
34 | - Better handle eval of `#_` forms in nREPL JVM
35 | - Made line numbers much more transparent
36 |
37 | ### 4.2.2 - Sep 27, 2024
38 |
39 | - cljfmt correctly indents forms with custom rules - again
40 |
41 | ### 4.2.1 - Sep 27, 2024
42 |
43 | - cljfmt correctly indents forms with custom rules
44 |
45 | ### 4.2.0 - Sep 27, 2024
46 |
47 | - Simplified formatting rules: if list's first form is a symbol, indent next line by +2 spaces, in all other cases, indent to opening paren (1 space)
48 | - We now provide `cljfmt.edn` that tries to match our default formatting
49 | - Better handle selection after formatting with cljfmt
50 | - Highlight namespace name as `entity.name`, same as defs
51 | - No exceptions on disconnect
52 | - Removed background on unused symbols inside quotes
53 |
54 | ### 4.1.1 - Sep 6, 2024
55 |
56 | - Support Clojure 1.12 array type annotations
57 |
58 | ### 4.1.0 - Aug 30, 2024
59 |
60 | - Eval previous form at current level #118
61 | - Auto-detect UNIX sockets, support relative paths
62 | - Correctly parse escaped comma #120 via @oakmac
63 |
64 | ### 4.0.0 - Aug 23, 2024
65 |
66 | Syntax has been significantly reworked.
67 |
68 | - New syntax that can highlight reader comments `comment.reader` together with the following form
69 | - Highlight `(comment ...)` blocks as `comment.form`
70 | - Highlight namespaces in symbols as `meta.namespace.symbol`
71 | - Highlight unused symbols as `source.symbol.unused`
72 | - Properly highlight `entity.name` in `def*` forms only at second position, skipping all meta/comments
73 | - Quote & syntax quote highlight following form as `meta.quoted` and `meta.quoted.syntax`
74 | - Metadata highlights following form as `meta.metadata`
75 | - Octal & arbitrary radix integers #71
76 | - Better keyword detection
77 |
78 | Other changes:
79 |
80 | - Built-in color scheme to utilize REPL and new syntax features.
81 | - Allow using `cljfmt` for formatting (requires `cljfmt` binary on `$PATH`)
82 | - Removed separate EDN syntax, merged with main Clojure (Sublimed)
83 | - Settings can now be specified in main `Preferences.sublime-settings` as well. Just prepend `clojure_sublimed_` to each setting’s name.
84 | - REPL can detect namespaces with meta on ns form #116
85 | - Detect `.shadow-cljs/nrepl.port` and `.shadow-cljs/socket-repl.port` #114
86 | - Connect commands now accept `timeout` argument for automation scenarios like “start clojure, start trying to connect to REPL until port is available”
87 |
88 | ### 3.8.0 - Aug 8, 2024
89 |
90 | - `clojure_sublimed_reindent` command that reindents entire buffer if selection is empty and only selected lines if not
91 |
92 | ### 3.7.3 - June 16, 2024
93 |
94 | - Fixed Socket REPL not working on Windows #95
95 | - Fixed Exception in settings on first install #109
96 |
97 | ### 3.7.2 - May 5, 2024
98 |
99 | - Some defensive coding around default settings fallback #109
100 |
101 | ### 3.7.1 - Mar 15, 2024
102 |
103 | - Added `expand` argument to `clojure_sublimed_eval` command
104 |
105 | ### 3.7.0 - Mar 14, 2024
106 |
107 | - New feature: Watches! Added `Add Watch` command
108 | - Added `output.repl` panel for raw nREPL output #104
109 | - Added `Toggle Output Panel` command for raw nREPL connections #104
110 | - Fixed `Reconnect` command
111 | - Added optional `on_finish` argument to `cs_conn.eval`
112 | - Added `print_quota` as a setting and as an argument to `cs_conn.eval`
113 |
114 | ### 3.6.0 - Mar 5, 2024
115 |
116 | - Added optional `transform` argument to `clojure_sublimed_eval` #101 #102
117 | - Display failed test reports as red
118 | - Socket REPL: fixed escaping in `clojure_sublimed_eval_code` #103 via @KGOH
119 |
120 | ### 3.5.0 - Jan 22, 2023
121 |
122 | - Detect namespace from in-ns forms
123 |
124 | ### 3.4.1 - Dec 7, 2023
125 |
126 | - Fixed status eval not clearing on disconnect
127 |
128 | ### 3.4.0 - Nov 30, 2023
129 |
130 | - Support multiple windows, one connection per widnow
131 | - Support .repl-port files for Socket REPL
132 |
133 | ### 3.3.0 - Oct 26, 2023
134 |
135 | - Eval inside already evaled region re-evals same region instead of going to top form
136 | - Printer can display newlines
137 |
138 | ### 3.2.1 - Sep 10, 2023
139 |
140 | - Socket: Report number of reflection warnings in status bar
141 |
142 | ### 3.2.0 - Sep 10, 2023
143 |
144 | - Socket REPL: handle exceptions in lookup
145 | - Do not silence exception during lazy seq printing
146 |
147 | ### 3.1.3 - Aug 19, 2023
148 |
149 | - Show file/line/column information when `clojure_sublimed_eval_code` fails
150 |
151 | ### 3.1.2 - June 1, 2023
152 |
153 | - Fixed indenting of reader conditionals
154 |
155 | ### 3.1.1 - Apr 3, 2023
156 |
157 | - Fixed perf degradation on reindent #96
158 |
159 | ### 3.1.0 - Mar 13, 2023
160 |
161 | - Socket: Fixed status_eval, bind *1/*2/*3/*e for e.g. tools.namespace
162 | - Do not fail because of styles #91
163 |
164 | ### 3.0.0 - Mar 9, 2023
165 |
166 | - Huge refactoring, easier to add new REPLs
167 | - REPLs do not depend on syntax highlighting anymore, will work with any syntax
168 | - new REPL: Raw nREPL
169 | - new REPL: Socket REPL (no external dependencies, faster to start than nREPL)
170 | - Report results of different forms in the same selection separately (Socket REPL only)
171 | - Removed `clojure_sublimed_require_namespace` command
172 | - Implemented pretty-printing of expanded results in Python, removing clojure.pprint dependency
173 | - Added `wrap_width` setting
174 |
175 | ### 2.11.0 - Jan 5, 2023
176 |
177 | - Connect command accepts 'auto' (will look for `.nrepl-port` file) #82
178 |
179 | ### 2.10.0 - Jan 4, 2023
180 |
181 | - Do not move cursor if error region visible on screen #73
182 | - Fixed: Wrong highlight of the source of error #79
183 | - Render sequential spaces #78
184 | - Fixed: Exceptions from evaluating buffer without a file name are not processed #18
185 | - Special case when CompilerError has wrong location info
186 | - Select whole line on error
187 |
188 | ### 2.9.1 - Dec 3, 2022
189 |
190 | - Added Main.sublime-menu #85 via @wundervaflja
191 |
192 | ### 2.9.0 - Nov 21, 2022
193 |
194 | - Allow connection through UNIX domain socket #80 via @tribals
195 |
196 | ### 2.8.1 - Nov 2, 2022
197 |
198 | - Allow specifying `ns` in `clojure-sublimed-eval-code`
199 |
200 | ### 2.8.0 - Oct 17, 2022
201 |
202 | - Shadow-cljs support #43 #77 via @sainadh-d
203 |
204 | ### 2.7.0 - Sep 27, 2022
205 |
206 | - Added `eval_shared`
207 |
208 | ### 2.6.0 - Sep 27, 2022
209 |
210 | - Added `format_on_save` option #76 thx @sainadh-d
211 |
212 | ### 2.5.2 - May 24, 2022
213 |
214 | - Fixed clojure_sublimed_eval_code #75
215 | - Fixed clojure_sublimed_insert_newline with multicursor #72
216 |
217 | ### 2.5.1 - January 19, 2022
218 |
219 | - Fixed indent on Enter
220 |
221 | ### 2.5.0 - January 18, 2022
222 |
223 | - Pretty print returned values. Toggle with Toggle Info (Ctrl + I)
224 | - Do not reindent blank lines
225 |
226 | ### 2.4.1 - January 13, 2022
227 |
228 | - Proper `messages.json` and install message.
229 |
230 | ### 2.4.0 - January 12, 2022
231 |
232 | New commands:
233 |
234 | - Reindent Buffer
235 | - Reindent Lines
236 | - Insert Newline
237 |
238 | ### 2.3.0 - January 4, 2022
239 |
240 | - A command to require namespace of symbol #12 #59 via @jaihindhreddy
241 | - Fixed regions returning on undo #22 #60 via @jaihindhreddy
242 | - Fixed AttributeError: 'Connection' object has no attribute 'eval_in_session'
243 |
244 | ### 2.2.0 - December 29, 2021
245 |
246 | - Do clone, eval and close in a single middleware #20 via @jaihindhreddy and @tonsky
247 | - Auto-close sessions cloned by eval #48 #49 #50 via @tonsky
248 | - Interrupt pending eval when region is erased #16 #58 via @jaihindhreddy and @tonsky
249 |
250 | ### 2.1.0 - December 28, 2021
251 |
252 | - An option to use nREPL session for eval #9 #57 via @jaihindhreddy
253 | - Optimize region invalidation #19 #54 via @jaihindhreddy
254 | - Optimise iterating through evals by maintaining evals by view #23 #51 #55 #56 via @jaihindhreddy
255 | - Use ephemeral sessions instead of cloning for each eval #20 #48 #50 via @jaihindhreddy
256 |
257 | ### 2.0.0 - December 22, 2021
258 |
259 | - Renamed to Clojure Sublimed due to Package Control policy. Thanks @YurySolovyov for the name
260 |
261 | ### 1.0.7 - December 15, 2021
262 |
263 | - Toggle symbol info works on def/defn #44 #45
264 |
265 | ### 1.0.6 - December 14, 2021
266 |
267 | - Escape HTML in evaluation results #35 #38 thx @jaihindhreddy
268 | - Measure time-taken in nREPL middleware #13 #39 thx @jaihindhreddy
269 | - Eval form on the left if between forms #10 #42 thx @jaihindhreddy
270 | - Fixed Ctrl+I at the last position in the file #17
271 | - Copy evaluation result #37
272 |
273 | ### 1.0.5 - November 10, 2021
274 |
275 | - Fixed runtime error on startup #32
276 |
277 | ### 1.0.4 - November 10, 2021
278 |
279 | - Clear Eval Code status in non-active views #32
280 | - When evaluating buffer fails, scroll to error line #28
281 |
282 | ### 1.0.3 - November 9, 2021
283 |
284 | - Fixed exception in eval code command handling excetpion response
285 |
286 | ### 1.0.2 - November 4, 2021
287 |
288 | - Automatically detect port from .nrepl-port #5
289 |
290 | ### 1.0.1 - November 1, 2021
291 |
292 | - Do not bundle any key bindings by default
293 | - Bind keys to eval arbitrary code #25
294 | - Remove phantom if region is fully removed #21
295 |
296 | ### 1.0.0 - October 25, 2021
297 |
298 | - Initial release
299 |
300 | ### October 22, 2021
301 |
302 | - Renamed syntaxes to `Clojure (Sublime Clojure)` and `EDN (Sublime Clojure)`
303 | - Added nREPL client
304 |
305 | ### Jan 3, 2019
306 |
307 | - Clojure syntax: quotes, reader conditionals, operators, better whitespace handling.
308 |
309 | ### Jan 1, 2019
310 |
311 | - Clojure syntax: regexps.
312 |
313 | ### Dec 30, 2018
314 |
315 | - Supported namespaced `/` symbol.
316 | - Tokens can end directly with `;`, without any whitespace in between.
317 | - Content of `()[]{}` is marked with `meta.parens`/`.brackets`/`.braces`, making possible nested brackets highlighting.
318 | - Bracket/paren/braces classes replaced with `punctuation.section.(parens|brackets|braces).begin`/`...end`.
319 | - Keywords use `constant.other.keyword` instead of `constant.keyword`.
320 | - Beginning of Clojure syntax, highlighting `entity.name` in all `def*`/`ns` forms.
321 |
322 | ### Dec 24, 2018
323 |
324 | - Instants, uuids, custom reader tags;
325 | - punctuation class for colons and slashes in symbols/keywords, comma, backslash in strings/chars;
326 | - allow single quote in keywords;
327 | - more [conventional](https://macromates.com/manual/en/language_grammars) class names;
328 | - automated tests.
329 |
330 | ### Dec 23, 2018
331 |
332 | - Inital version.
333 |
--------------------------------------------------------------------------------
/Clojure Sublimed Dark.sublime-color-scheme:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Clojure Sublimed Dark",
3 | "author": "Nikita Prokopov",
4 | "variables":
5 | {
6 | "active": "#00BFFF",
7 | "fg": "#CECECE",
8 | "bg": "#0E1415",
9 | "blue": "#71ADE7",
10 | "green": "#95CB82",
11 | "green-bg": "#203028",
12 | "red": "#FF6060",
13 | "red-bg": "#2B1D1E",
14 | "magenta": "#CC8BC9",
15 | "yellow": "#FFF080",
16 | // "orange": "#FFBC5D",
17 | "gray": "#606060",
18 | },
19 | "globals":
20 | {
21 | "foreground": "var(fg)",
22 | "background": "var(bg)",
23 | "caret": "var(active)",
24 | "line_highlight": "#ffffff10",
25 | "misspelling": "#ff0000",
26 | "selection": "#293334",
27 | "inactive_selection": "#ffffff10",
28 | "selection_border_width": "0",
29 | "selection_corner_radius": "2",
30 | "highlight": "var(active)",
31 | "find_highlight_foreground": "#000",
32 | "find_highlight": "var(active)",
33 | "brackets_options": "underline",
34 | "brackets_foreground": "var(active)",
35 | "bracket_contents_options": "underline",
36 | "bracket_contents_foreground": "var(active)",
37 | "tags_options": "underline",
38 | "tags_foreground": "var(active)",
39 | "gutter": "#121819",
40 | "gutter_foreground": "#282828",
41 | "gutter_foreground_active": "#282828",
42 | },
43 | "rules":
44 | [
45 | {"name": "Strings",
46 | "scope": "string - meta.metadata, meta.quoted string - meta.metadata - comment",
47 | "foreground": "var(green)"},
48 |
49 | {"name": "Escapes",
50 | "scope": "constant.character.escape - meta.metadata, constant.other.placeholder - meta.metadata",
51 | "background": "var(green-bg)"},
52 |
53 | {"name": "Constants",
54 | "scope": "constant - constant.character.escape, punctuation.definition.constant, support.type",
55 | "foreground": "var(magenta)"},
56 |
57 | {"name": "Definitions",
58 | "scope": "entity.name - entity.name.tag - meta.metadata",
59 | "foreground": "var(blue)"},
60 |
61 | {"name": "Symbol namespaces",
62 | "scope": "meta.namespace.symbol, source.symbol punctuation.definition.namespace",
63 | "foreground": "var(gray)"},
64 |
65 | {"name": "Unused symbol",
66 | "scope": "source.symbol.unused",
67 | "foreground": "var(gray)"},
68 |
69 | {"name": "Punctuation",
70 | "scope": "punctuation - punctuation.section - punctuation.definition",
71 | "foreground": "var(gray)"},
72 |
73 | {"name": "Comma",
74 | "scope": "punctuation.definition.comma",
75 | "foreground": "var(gray)"},
76 |
77 | {"name": "Line Comments",
78 | "scope": "comment - comment.reader - comment.form, invalid comment, meta.quoted comment.line, meta.quoted comment.line punctuation.definition.comment, meta.metadata comment.line punctuation.definition.comment",
79 | "foreground": "var(yellow)"
80 | },
81 |
82 | {"name": "Reader comments",
83 | "scope": "comment.reader, comment.reader keyword.operator, comment.reader string, comment.reader constant, comment.reader punctuation.definition.constant, comment.reader punctuation, comment.reader constant.character.escape, comment.reader invalid.illegal.escape, comment.reader string invalid, comment.reader string invalid punctuation, comment.reader entity.name, comment.reader meta.quoted",
84 | "foreground": "var(gray)",
85 | "background": "var(bg)"},
86 |
87 | {"name": "Form comments",
88 | "scope": "comment.form, comment.form keyword.operator, comment.form string, comment.form constant, comment.form punctuation.definition.constant, comment.form punctuation, comment.form constant.character.escape, comment.form invalid.illegal.escape, comment.form string invalid, comment.form string invalid punctuation, comment.form entity.name, comment.form meta.quoted",
89 | "foreground": "var(gray)",
90 | "background": "var(bg)"},
91 |
92 | {"name": "Metadata",
93 | "scope": "meta.metadata, meta.metadata keyword.operator, meta.metadata string, meta.metadata constant, meta.metadata punctuation.definition.constant, meta.metadata punctuation",
94 | "foreground": "var(gray)"},
95 |
96 | {"scope": "meta.metadata meta.quoted",
97 | "background": "var(bg)"},
98 |
99 | {"name": "Quoted",
100 | "scope": "meta.quoted - meta.quoted meta.unquoted, meta.quoted meta.unquoted meta.quoted - meta.quoted meta.unquoted meta.quoted meta.unquoted, meta.quoted meta.unquoted meta.quoted meta.unquoted meta.quoted - meta.quoted meta.unquoted meta.quoted meta.unquoted meta.quoted meta.unquoted, meta.quoted comment.reader, meta.quoted punctuation.definition.comment, meta.quoted comment.form, meta.quoted comment.form punctuation",
101 | "background": "#FFFFFF10"},
102 |
103 | {"name": "Inner brackets",
104 | "scope": "meta.parens meta.parens punctuation.section, meta.parens meta.brackets punctuation.section, meta.parens meta.braces punctuation.section, meta.brackets meta.parens punctuation.section, meta.brackets meta.brackets punctuation.section, meta.brackets meta.braces punctuation.section, meta.braces meta.parens punctuation.section, meta.braces meta.brackets punctuation.section, meta.braces meta.braces punctuation.section",
105 | "foreground": "var(gray)"},
106 |
107 | {"name": "Mistakes",
108 | "scope": "invalid, invalid string, invalid constant, invalid entity.name, invalid punctuation, invalid source.symbol",
109 | "foreground": "var(red)",
110 | "background": "var(red-bg)"},
111 |
112 | // MARKUP
113 |
114 | {"scope": "markup.inserted",
115 | "foreground": "var(green)"},
116 |
117 | {"scope": "markup.deleted",
118 | "foreground": "hsl(2, 65%, 50%)"},
119 |
120 | {"scope": "markup.changed",
121 | "foreground": "hsl(30, 85%, 50%)"},
122 |
123 | {"scope": "markup.ignored",
124 | "foreground": "#aaa"},
125 |
126 | {"scope": "markup.untracked",
127 | "foreground": "#aaa"},
128 |
129 | // REGIONS
130 |
131 | {"scope": "region.eval.success",
132 | "foreground": "var(green)"},
133 |
134 | {"scope": "region.eval.exception",
135 | "foreground": "var(red)"},
136 |
137 | {"scope": "region.eval.pending",
138 | "foreground": "var(gray)"},
139 |
140 | {"scope": "region.watch",
141 | "foreground": "var(magenta)"},
142 |
143 | {"scope": "region.redish",
144 | "background": "#F04F5080"},
145 |
146 | {"scope": "region.orangish",
147 | "background": "#FF935680"},
148 |
149 | {"scope": "region.yellowish",
150 | "background": "#FFBC5D80"},
151 |
152 | {"scope": "region.greenish",
153 | "background": "#60CB0080"},
154 |
155 | {"scope": "region.cyanish",
156 | "background": "#00AACB80"},
157 |
158 | {"scope": "region.bluish",
159 | "background": "#017ACC80"},
160 |
161 | {"scope": "region.purplish",
162 | "background": "#C171FF80"},
163 |
164 | {"scope": "region.pinkish",
165 | "background": "#E64CE680"},
166 |
167 | {"scope": "region.greyish",
168 | "background": "#FFFFFF10"},
169 |
170 | // {"scope": "region.eval.lookup",
171 | // "foreground": "hsl(208, 100%, 50%)"},
172 | ]
173 | }
174 |
--------------------------------------------------------------------------------
/Clojure Sublimed Light.sublime-color-scheme:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Clojure Sublimed Light",
3 | "author": "Nikita Prokopov",
4 | "variables":
5 | {
6 | "active": "#43bef4",
7 | "fg": "#000",
8 | "bg": "#fff",
9 | "gray": "#A0A0A0",
10 | },
11 | "globals":
12 | {
13 | "foreground": "var(fg)",
14 | "background": "var(bg)",
15 | "caret": "var(active)",
16 | "line_highlight": "#00000008",
17 | "misspelling": "#f00",
18 | "selection": "#B4D8FD",
19 | "inactive_selection": "#E0E0E0",
20 | "selection_border_width": "0",
21 | "selection_corner_radius": "2",
22 | "highlight": "#FFBC5D",
23 | "find_highlight": "#FFBC5D",
24 | "find_highlight_foreground": "#000",
25 | "brackets_options": "underline",
26 | "brackets_foreground": "var(active)",
27 | "bracket_contents_options": "underline",
28 | "bracket_contents_foreground": "var(active)",
29 | "tags_options": "underline",
30 | "tags_foreground": "var(active)",
31 | // "gutter": "#E6E6E6",
32 | "gutter_foreground": "#CCC",
33 | "gutter_foreground_highlight": "#CCC",
34 | },
35 | "rules":
36 | [ {"name": "Strings",
37 | "scope": "string - meta.metadata, meta.quoted string - meta.metadata - comment",
38 | "background": "#eefbd9",
39 | "foreground": "#3c5c00"},
40 |
41 | {"name": "Escapes",
42 | "scope": "constant.character.escape - meta.metadata, constant.other.placeholder - meta.metadata",
43 | "background": "#DBECB6"},
44 |
45 | {"name": "Constants",
46 | "scope": "constant - constant.character.escape, punctuation.definition.constant, support.type",
47 | "foreground": "#8a3eb5"},
48 |
49 | {"name": "Definitions",
50 | "scope": "entity.name - entity.name.tag - meta.metadata",
51 | "background": "#DBF1FF",
52 | "foreground": "#195b7c"},
53 |
54 | {"name": "Symbol namespaces",
55 | "scope": "meta.namespace.symbol, source.symbol punctuation.definition.namespace",
56 | "foreground": "var(gray)"},
57 |
58 | {"name": "Unused symbol",
59 | "scope": "source.symbol.unused",
60 | "foreground": "var(gray)"},
61 |
62 | {"name": "Punctuation",
63 | "scope": "punctuation - punctuation.section - punctuation.definition",
64 | "foreground": "var(gray)"},
65 |
66 | {"name": "Comma",
67 | "scope": "punctuation.definition.comma",
68 | "foreground": "var(gray)"},
69 |
70 | {"name": "Line Comments",
71 | "scope": "comment - comment.reader - comment.form, invalid comment, meta.quoted comment.line, meta.quoted comment.line punctuation.definition.comment, meta.metadata comment.line punctuation.definition.comment",
72 | "foreground": "#6d6607",
73 | "background": "#FFFABC"},
74 |
75 | {"name": "Reader comments",
76 | "scope": "comment.reader, comment.reader keyword.operator, comment.reader string, comment.reader constant, comment.reader punctuation.definition.constant, comment.reader punctuation, comment.reader constant.character.escape, comment.reader invalid.illegal.escape, comment.reader string invalid, comment.reader string invalid punctuation, comment.reader entity.name, comment.reader meta.quoted",
77 | "foreground": "var(gray)",
78 | "background": "var(bg)"},
79 |
80 | {"name": "Form comments",
81 | "scope": "comment.form, comment.form keyword.operator, comment.form string, comment.form constant, comment.form punctuation.definition.constant, comment.form punctuation, comment.form constant.character.escape, comment.form invalid.illegal.escape, comment.form string invalid, comment.form string invalid punctuation, comment.form entity.name, comment.form meta.quoted",
82 | "foreground": "var(gray)",
83 | "background": "var(bg)"},
84 |
85 | {"name": "Metadata",
86 | "scope": "meta.metadata, meta.metadata keyword.operator, meta.metadata string, meta.metadata constant, meta.metadata punctuation.definition.constant, meta.metadata punctuation",
87 | "foreground": "var(gray)"},
88 |
89 | {"scope": "meta.metadata meta.quoted",
90 | "background": "var(bg)"},
91 |
92 | {"name": "Quoted",
93 | "scope": "meta.quoted - meta.quoted meta.unquoted, meta.quoted meta.unquoted meta.quoted - meta.quoted meta.unquoted meta.quoted meta.unquoted, meta.quoted meta.unquoted meta.quoted meta.unquoted meta.quoted - meta.quoted meta.unquoted meta.quoted meta.unquoted meta.quoted meta.unquoted, meta.quoted comment.reader, meta.quoted punctuation.definition.comment, meta.quoted comment.form, meta.quoted comment.form punctuation",
94 | "background": "#00000010"},
95 |
96 | {"name": "JSX",
97 | "scope": "meta.jsx - meta.jsx source.js.embedded, meta.jsx source.js.embedded meta.jsx - meta.jsx source.js.embedded meta.jsx source.js.embedded, meta.jsx source.js.embedded meta.jsx source.js.embedded meta.jsx - meta.jsx source.js.embedded meta.jsx source.js.embedded meta.jsx source.js.embedded",
98 | "background": "#00000010"},
99 |
100 | {"name": "Inner brackets",
101 | "scope": "meta.parens meta.parens punctuation.section, meta.parens meta.brackets punctuation.section, meta.parens meta.braces punctuation.section, meta.brackets meta.parens punctuation.section, meta.brackets meta.brackets punctuation.section, meta.brackets meta.braces punctuation.section, meta.braces meta.parens punctuation.section, meta.braces meta.brackets punctuation.section, meta.braces meta.braces punctuation.section",
102 | "foreground": "var(gray)"},
103 |
104 | // {"name": "Parens level 0",
105 | // "scope": "meta.parens punctuation.section",
106 | // "foreground": "hsl(0, 50%, 50%)"},
107 |
108 | // {"name": "Parens level 1",
109 | // "scope": "meta.parens meta.parens punctuation.section",
110 | // "foreground": "hsl(60, 50%, 50%)"},
111 |
112 | // {"name": "Parens level 2",
113 | // "scope": "meta.parens meta.parens meta.parens punctuation.section",
114 | // "foreground": "hsl(120, 50%, 50%)"},
115 |
116 | // {"name": "Parens level 3",
117 | // "scope": "meta.parens meta.parens meta.parens meta.parens punctuation.section",
118 | // "foreground": "hsl(180, 50%, 50%)"},
119 |
120 | // {"name": "Parens level 4",
121 | // "scope": "meta.parens meta.parens meta.parens meta.parens meta.parens punctuation.section",
122 | // "foreground": "hsl(240, 50%, 50%)"},
123 |
124 | // {"name": "Parens level 5",
125 | // "scope": "meta.parens meta.parens meta.parens meta.parens meta.parens meta.parens punctuation.section",
126 | // "foreground": "hsl(300, 50%, 50%)"},
127 |
128 | {"name": "Mistakes",
129 | "scope": "invalid, invalid string, invalid constant, invalid entity.name, invalid punctuation, invalid source.symbol",
130 | "foreground": "#c33",
131 | "background": "#FFE0E0"},
132 |
133 | // MARKUP
134 |
135 | {"scope": "markup.inserted",
136 | "foreground": "hsl(100, 50%, 50%)"},
137 |
138 | {"scope": "markup.deleted",
139 | "foreground": "hsl(2, 65%, 50%)"},
140 |
141 | {"scope": "markup.changed",
142 | "foreground": "hsl(30, 85%, 50%)"},
143 |
144 | {"scope": "markup.ignored",
145 | "foreground": "#aaa"},
146 |
147 | {"scope": "markup.untracked",
148 | "foreground": "#aaa"},
149 |
150 | // REGION
151 |
152 | {"scope": "region.eval.success",
153 | "foreground": "hsl(100, 50%, 50%)"},
154 |
155 | {"scope": "region.eval.exception",
156 | "foreground": "hsl(2, 65%, 50%)"},
157 |
158 | {"scope": "region.eval.pending",
159 | "foreground": "#CCCCCC"},
160 |
161 | {"scope": "region.watch",
162 | "foreground": "hsl(285, 50%, 50%)"},
163 |
164 | {"scope": "region.redish",
165 | "background": "#F04F5080"},
166 |
167 | {"scope": "region.orangish",
168 | "background": "#FF935680"},
169 |
170 | {"scope": "region.yellowish",
171 | "background": "#FFBC5D80"},
172 |
173 | {"scope": "region.greenish",
174 | "background": "#60CB0080"},
175 |
176 | {"scope": "region.cyanish",
177 | "background": "#00AACB80"},
178 |
179 | {"scope": "region.bluish",
180 | "background": "#017ACC80"},
181 |
182 | {"scope": "region.purplish",
183 | "background": "#C171FF80"},
184 |
185 | {"scope": "region.pinkish",
186 | "background": "#E64CE680"},
187 |
188 | {"scope": "region.greyish",
189 | "background": "#00000010"},
190 |
191 | // {"scope": "region.eval.lookup",
192 | // "foreground": "hsl(208, 100%, 50%)"},
193 | ]
194 | }
--------------------------------------------------------------------------------
/Clojure Sublimed.sublime-settings:
--------------------------------------------------------------------------------
1 | {
2 | // Enable debug logging in Sublime Text console
3 | "debug": false,
4 |
5 | // If evaluation takes longer than this, print elapsed time
6 | // Set to null to disable
7 | "elapsed_threshold_ms": 100,
8 |
9 | // Animation to display while waiting for evaluation to finish.
10 | //
11 | // Some ideas:
12 | //
13 | // ["\\", "|", "/", "-"]
14 | //
15 | // ["[=----]", "[-=---]", "[--=--]", "[---=-]",
16 | // "[----=]", "[---=-]", "[--=--]", "[-=---]"]
17 | //
18 | // ["▓░░░░", "░▓░░░", "░░▓░░", "░░░▓░",
19 | // "░░░░▓", "░░░▓░", "░░▓░░", "░▓░░░"]
20 | //
21 | // ["⠏", "⠛", "⠹", "⢸", "⣰", "⣤", "⣆", "⡇"]
22 | //
23 | // ["▁▂▃▄▅", "▂▁▂▃▄", "▃▂▁▂▃", "▄▃▂▁▂", "▅▄▃▂▁",
24 | // "▆▅▄▃▂", "▇▆▅▄▃", "█▇▆▅▄", "▇█▇▆▅", "▆▇█▇▆",
25 | // "▅▆▇█▇", "▄▅▆▇█", "▃▄▅▆▇", "▂▃▄▅▆"]
26 | //
27 | // Set to 1-element array to disable animation:
28 | //
29 | // ["..."]
30 | //
31 | "progress_phases": ["🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛"],
32 |
33 | // how often to update animation
34 | "progress_interval_ms": 100,
35 |
36 | // values larger than this will be truncated. Set to 0 to disable truncation
37 | "print_quota": 4096,
38 |
39 | // When true, all evals will happen in a single session. This makes
40 | // dynamic vars like `*e` or `*warn-on-reflection*` persistent, but also
41 | // makes all evaluations strictly sequential (new eval will not start until
42 | // all the previous ones have finished).
43 | //
44 | // False by default (enables parallel evals).
45 | "eval_in_session": false,
46 |
47 | // A form to be evaluated in shared session and inherited by all evals
48 | // E.g. (set! *warn-on-reflection* true)
49 | "eval_shared": "",
50 |
51 | // formatter, "sublimed" or "cljfmt". Latter requires `cljfmt` to be on $PATH
52 | "formatter": "sublimed",
53 |
54 | // reformat file on save, false by default
55 | "format_on_save": false
56 | }
--------------------------------------------------------------------------------
/ClojureSymbols.tmPreferences:
--------------------------------------------------------------------------------
1 |
2 |
" + line + "
" 93 | body += " 217 | {cs_common.basic_styles(view)} 218 | .dark body {{ background-color: color(var(--background) blend(#FFF 90%)); }} 219 | .light body {{ background-color: color(var(--background) blend(#000 95%)); }} 220 | a {{ text-decoration: none; }} 221 | .arglists {{ color: color(var(--foreground) alpha(0.5)); }} 222 | """ 223 | 224 | if not info: 225 | body += "Not found
" 226 | else: 227 | ns = info.get('ns') 228 | name = info['name'] 229 | file = info.get('file') 230 | arglists = info.get('arglists') 231 | forms = info.get('forms') 232 | doc = info.get('doc') 233 | 234 | body += "" 235 | if file: 236 | body += f"" 237 | if ns: 238 | body += html.escape(ns) + "/" 239 | body += html.escape(name) 240 | if file: 241 | body += f"" 242 | body += "
" 243 | 244 | if arglists: 245 | body += f'{html.escape(arglists.strip("()"))}
' 246 | 247 | if forms and isinstance(forms, str): 248 | body += f'{html.escape(forms.strip("[]"))}
' 249 | elif forms: 250 | def format_form(form): 251 | if isinstance(form, str): 252 | return form 253 | else: 254 | return "(" + " ".join([format_form(x) for x in form]) + ")" 255 | body += '' 256 | body += html.escape(" ".join([format_form(form) for form in forms])) 257 | body += "
" 258 | 259 | if doc: 260 | body += "" + "
".join(html.escape(doc).split("\n")) + "
" 261 | body += "