Skip to content

Commit f5f377a

Browse files
authored
Add defcustom for major-mode remapping (#64)
1 parent 842ddd6 commit f5f377a

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## main (unreleased)
44

55
- [[#62](https://github.com/clojure-emacs/clojure-ts-mode/issues/62)]: Define `list` "thing" to improve navigation in Emacs 31.
6+
- [#64]: Add defcustom `clojure-ts-auto-remap` to control remapping of `clojure-mode` buffers.
67

78
## 0.2.3 (2025-03-04)
89

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,16 @@ To see a list of available configuration options do `M-x customize-group <RET> c
143143

144144
Most configuration changes will require reverting any active `clojure-ts-mode` buffers.
145145

146+
### Remapping of `clojure-mode` buffers
147+
148+
By default, `clojure-ts-mode` assumes command over all buffers and file extensions previously associated with `clojure-mode` (and derived major modes like `clojurescript-mode`). To disable this remapping, set
149+
150+
``` emacs-lisp
151+
(setopt clojure-ts-auto-remap nil)
152+
```
153+
154+
You can also use the commands `clojure-ts-activate` / `clojure-ts-deactivate` to interactively change this behavior.
155+
146156
### Indentation
147157

148158
`clojure-ts-mode` currently supports 2 different indentation strategies:

clojure-ts-mode.el

+26-3
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ double quotes on the third column."
119119
:safe #'booleanp
120120
:package-version '(clojure-ts-mode . "0.2.3"))
121121

122+
(defcustom clojure-ts-auto-remap t
123+
"When non-nil, redirect all `clojure-mode' buffers to `clojure-ts-mode'."
124+
:safe #'booleanp
125+
:type 'boolean
126+
:package-version '(clojure-ts-mode . "0.2.4"))
127+
128+
(defvar clojure-ts-mode-remappings
129+
'((clojure-mode . clojure-ts-mode)
130+
(clojurescript-mode . clojure-ts-clojurescript-mode)
131+
(clojurec-mode . clojure-ts-clojurec-mode))
132+
"Alist of entries to `major-mode-remap-alist'.")
133+
122134
(defvar clojure-ts--debug nil
123135
"Enables debugging messages, shows current node in mode-line.
124136
Only intended for use at development time.")
@@ -1087,13 +1099,24 @@ See `clojure-ts--font-lock-settings' for usage of MARKDOWN-AVAILABLE."
10871099
(add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-ts-clojuredart-mode))
10881100
(add-to-list 'auto-mode-alist '("\\.jank\\'" . clojure-ts-jank-mode)))
10891101

1102+
(defun clojure-ts-activate ()
1103+
"Redirect all `clojure-mode' buffers to use `clojure-ts-mode'."
1104+
(interactive)
1105+
(dolist (entry clojure-ts-mode-remappings)
1106+
(add-to-list 'major-mode-remap-alist entry)))
1107+
1108+
(defun clojure-ts-deactivate ()
1109+
"Revert the redirecting of of `clojure-mode' buffers to `clojure-ts-mode'."
1110+
(interactive)
1111+
(dolist (entry clojure-ts-mode-remappings)
1112+
(setq major-mode-remap-alist (remove entry major-mode-remap-alist))))
1113+
10901114
(if (treesit-available-p)
10911115
;; Redirect clojure-mode to clojure-ts-mode if clojure-mode is present
10921116
(if (require 'clojure-mode nil 'noerror)
10931117
(progn
1094-
(add-to-list 'major-mode-remap-alist '(clojure-mode . clojure-ts-mode))
1095-
(add-to-list 'major-mode-remap-alist '(clojurescript-mode . clojure-ts-clojurescript-mode))
1096-
(add-to-list 'major-mode-remap-alist '(clojurec-mode . clojure-ts-clojurec-mode))
1118+
(when clojure-ts-auto-remap
1119+
(clojure-ts-activate))
10971120
(clojure-ts--register-novel-modes))
10981121
;; When Clojure-mode is not present, setup auto-modes ourselves
10991122
(progn

0 commit comments

Comments
 (0)