Last active
January 18, 2021 19:01
-
-
Save jamesmacaulay/5457344 to your computer and use it in GitHub Desktop.
Clojure stuff for Sublime Text 2. Files live in ~/Application Support/Sublime Text 2/Packages/User
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// installed Clojure packages: | |
// | |
// * BracketHighlighter | |
// * lispindent | |
// * SublimeREPL | |
// * sublime-paredit | |
{ | |
"word_separators": "/\\()\"',;!@$%^&|+=[]{}`~?", | |
"paredit_enabled": true, | |
"paredit_dont_match_single_quotes": true | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re, sublime, sublime_plugin, sublimerepl, text_transfer | |
class RefreshNamespacesInReplCommand(text_transfer.ReplTransferCurrent): | |
def run(self, edit): | |
text = "(clojure.tools.namespace.repl/refresh)" | |
self.view.window().run_command("repl_send", {"external_id": self.repl_external_id(), "text": text, "file_name": self.view.file_name()}) | |
class SwitchToCurrentNamespaceInReplCommand(text_transfer.ReplTransferCurrent): | |
def run(self, edit): | |
if sublimerepl.manager.repl_view(self.view): | |
return | |
ns = re.sub("ns\s*", "", self.view.substr(self.view.find("ns\s*\S+",0))) | |
text = "(in-ns '" + ns + ")" | |
self.view.window().run_command("repl_send", {"external_id": self.repl_external_id(), "text": text, "file_name": self.view.file_name()}) | |
class RunAllClojureTestsFromProjectInReplCommand(text_transfer.ReplTransferCurrent): | |
def run(self, edit): | |
form = "(do (clojure.tools.namespace.repl/refresh) (apply clojure.test/run-tests (clojure.tools.namespace.find/find-namespaces-in-dir (clojure.java.io/file \"test\"))))" | |
self.view.window().run_command("refresh_namespaces_in_repl") | |
self.view.window().run_command("repl_send", {"external_id": self.repl_external_id(), "text": form, "file_name": self.view.file_name()}) | |
class RunClojureTestsFromCurrentNamespaceInReplCommand(text_transfer.ReplTransferCurrent): | |
def run(self, edit): | |
if sublimerepl.manager.repl_view(self.view): | |
return | |
ns = re.sub("ns\s*", "", self.view.substr(self.view.find("ns\s*\S+",0))) | |
default_test_ns = re.sub("(.*)(?<!-test)\\Z","\\1-test", ns, 1) | |
alt_style_test_ns = re.sub("\A([^\\.]*\\.)(?!test)","\\1test.", ns, 1) | |
form = "(try (clojure.test/run-tests '" + default_test_ns + ")\n (catch Exception e\n (clojure.test/run-tests '" + alt_style_test_ns + ")))" | |
self.view.window().run_command("refresh_namespaces_in_repl") | |
self.view.window().run_command("repl_send", {"external_id": self.repl_external_id(), "text": form, "file_name": self.view.file_name()}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
{ "keys": ["escape"], "command": "auto_complete", "context": | |
[ | |
{ "key": "auto_complete_visible", "operator": "equal", "operand": false }, | |
{ "key": "overlay_visible", "operator": "equal", "operand": false }, | |
{ "key": "panel_visible", "operator": "equal", "operand": false }, | |
{ "key": "num_selections", "operator": "equal", "operand": 1 } | |
] | |
}, | |
{ "keys": ["super+shift+t"], "command": "reopen_last_file" }, | |
{ "keys": ["ctrl+super+r"], "command": "reveal_in_side_bar" }, | |
// SublimeREPL bindings: | |
// ===================== | |
{ "keys": ["alt+super+b"], "command": "repl_transfer_current", "args": {"scope": "block"}}, | |
{ "keys": ["alt+super+r"], "command": "refresh_namespaces_in_repl"}, | |
{ "keys": ["alt+super+i"], "command": "switch_to_current_namespace_in_repl"}, | |
{ "keys": ["alt+super+x"], "command": "run_clojure_tests_from_current_namespace_in_repl"}, | |
{ "keys": ["alt+super+a"], "command": "run_all_clojure_tests_from_project_in_repl"}, | |
// BracketHighlighter bindings: | |
// =========================== | |
// Swap bracket type | |
{ "keys": ["ctrl+shift+]"], | |
"command": "swap_brackets"}, | |
// Swap quotes (only goes boths ways in supported languages...) | |
{ "keys": ["ctrl+shift+'"], | |
"command": "bh_key", "args": {"lines" : true, "plugin": {"type": ["single_quote", "double_quote", "py_single_quote", "py_double_quote"], "command": "bh_modules.swapquotes"} }}, | |
// Select text between brackets | |
{ "keys": ["ctrl+alt+a"], | |
"command": "bh_key", "args": {"lines" : true, "plugin": {"type": ["__all__"], "command": "bh_modules.bracketselect"} } }, | |
// Select tag name of HTML/XML tag (both opening name and closing) | |
{ "keys": ["ctrl+alt+t"], | |
"command": "bh_key", "args": {"plugin": {"type": ["cfml", "html", "angle"], "command": "bh_modules.tagnameselect"} } }, | |
// Toggle high visibility mode | |
{ "keys": ["alt+super+="], | |
"command": "bh_toggle_high_visibility"}, | |
// sublime-paredit fixes: | |
// ====================== | |
// Don't constrain close-parens unless we're in paredit mode: | |
{ "keys": [")"], "command": "insert_snippet", "args": {"contents": ")"}, "context": | |
[{ "key": "setting.paredit_enabled", "operator": "equal", "operand": false }]}, | |
{ "keys": [")"], "command": "run_macro_file", "args": {"file": "Packages/sublime-paredit/Paredit Closing Bracket.sublime-macro_"}, "context": | |
[{ "key": "setting.paredit_enabled", "operator": "equal", "operand": true }]}, | |
{ "keys": [")"], "command": "move", "args": {"by": "characters", "forward": true}, "context": | |
[ | |
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, | |
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, | |
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true } | |
] | |
} | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"theme": "Flatland.sublime-theme", | |
"color_scheme": "Packages/Theme - Flatland/Flatland.tmTheme", | |
"font_face": "Inconsolata", | |
"font_size": 18.5, | |
"caret_style": "wide", | |
"highlight_line": true, | |
"match_brackets": false, // otherwise it gets confusing with BracketHighlighter installed | |
"draw_indent_guides": true, | |
"ignored_packages": ["Vintage", "PHP"], | |
"tab_size": 2, | |
"detect_indentation": false, | |
"translate_tabs_to_spaces": true | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"default_extend_env": {"PATH": "/opt/boxen/homebrew/bin:{PATH}:/usr/local/bin"} | |
} |
FYI : For the preference if you are using Flatland it should be:
"theme": "Flatland Dark.sublime-theme",
"color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme"
Everywhere this is used to get the namespace,
ns = re.sub("ns\s*", "", self.view.substr(self.view.find("ns\s*\S+",0)))
re.sub
needs the additional count parameter of 1
, otherwise it can munge your namespace if it contains "ns" (as in x.transforms
).
Fixed:
ns = re.sub("ns\s*", "", self.view.substr(self.view.find("ns\s*\S+",0)), 1)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For the life of me, I can't get this to work at all. I even changed to using @jasongilman update to ClojureHelpers.py but to no avail. Has everybody else just dropped this in and it worked?