diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c6bc7b..3ce4774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## main (unreleased) - [[#62](https://github.com/clojure-emacs/clojure-ts-mode/issues/62)]: Define `list` "thing" to improve navigation in Emacs 31. +- [#64]: Add defcustom `clojure-ts-auto-remap` to control remapping of `clojure-mode` buffers. ## 0.2.3 (2025-03-04) diff --git a/README.md b/README.md index 982cc2a..fafc6ba 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,16 @@ To see a list of available configuration options do `M-x customize-group c Most configuration changes will require reverting any active `clojure-ts-mode` buffers. +### Remapping of `clojure-mode` buffers + +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 + +``` emacs-lisp +(setopt clojure-ts-auto-remap nil) +``` + +You can also use the commands `clojure-ts-activate` / `clojure-ts-deactivate` to interactively change this behavior. + ### Indentation `clojure-ts-mode` currently supports 2 different indentation strategies: diff --git a/clojure-ts-mode.el b/clojure-ts-mode.el index 7480cb9..ac89814 100644 --- a/clojure-ts-mode.el +++ b/clojure-ts-mode.el @@ -119,6 +119,18 @@ double quotes on the third column." :safe #'booleanp :package-version '(clojure-ts-mode . "0.2.3")) +(defcustom clojure-ts-auto-remap t + "When non-nil, redirect all `clojure-mode' buffers to `clojure-ts-mode'." + :safe #'booleanp + :type 'boolean + :package-version '(clojure-ts-mode . "0.2.4")) + +(defvar clojure-ts-mode-remappings + '((clojure-mode . clojure-ts-mode) + (clojurescript-mode . clojure-ts-clojurescript-mode) + (clojurec-mode . clojure-ts-clojurec-mode)) + "Alist of entries to `major-mode-remap-alist'.") + (defvar clojure-ts--debug nil "Enables debugging messages, shows current node in mode-line. Only intended for use at development time.") @@ -1087,13 +1099,24 @@ See `clojure-ts--font-lock-settings' for usage of MARKDOWN-AVAILABLE." (add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-ts-clojuredart-mode)) (add-to-list 'auto-mode-alist '("\\.jank\\'" . clojure-ts-jank-mode))) +(defun clojure-ts-activate () + "Redirect all `clojure-mode' buffers to use `clojure-ts-mode'." + (interactive) + (dolist (entry clojure-ts-mode-remappings) + (add-to-list 'major-mode-remap-alist entry))) + +(defun clojure-ts-deactivate () + "Revert the redirecting of of `clojure-mode' buffers to `clojure-ts-mode'." + (interactive) + (dolist (entry clojure-ts-mode-remappings) + (setq major-mode-remap-alist (remove entry major-mode-remap-alist)))) + (if (treesit-available-p) ;; Redirect clojure-mode to clojure-ts-mode if clojure-mode is present (if (require 'clojure-mode nil 'noerror) (progn - (add-to-list 'major-mode-remap-alist '(clojure-mode . clojure-ts-mode)) - (add-to-list 'major-mode-remap-alist '(clojurescript-mode . clojure-ts-clojurescript-mode)) - (add-to-list 'major-mode-remap-alist '(clojurec-mode . clojure-ts-clojurec-mode)) + (when clojure-ts-auto-remap + (clojure-ts-activate)) (clojure-ts--register-novel-modes)) ;; When Clojure-mode is not present, setup auto-modes ourselves (progn