Skip to content

Commit 4dc853d

Browse files
committed
Create derived major modes for clojure(c|script|dart)
Addresses ticket #12
1 parent 00a92af commit 4dc853d

File tree

1 file changed

+49
-5
lines changed

1 file changed

+49
-5
lines changed

clojure-ts-mode.el

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,21 @@ See `clojure-ts--standard-definition-node-name' for the implementation used.")
546546
;(set-keymap-parent map clojure-mode-map)
547547
map))
548548

549+
(defvar clojurescript-ts-mode-map
550+
(let ((map (make-sparse-keymap)))
551+
(set-keymap-parent map clojure-ts-mode-map)
552+
map))
553+
554+
(defvar clojurec-ts-mode-map
555+
(let ((map (make-sparse-keymap)))
556+
(set-keymap-parent map clojure-ts-mode-map)
557+
map))
558+
559+
(defvar clojure-dart-ts-mode-map
560+
(let ((map (make-sparse-keymap)))
561+
(set-keymap-parent map clojure-ts-mode-map)
562+
map))
563+
549564
;;;###autolaod
550565
(add-to-list
551566
'treesit-language-source-alist
@@ -585,21 +600,50 @@ Requires Emacs 29 and libtree-sitter-clojure.so available somewhere in
585600
(treesit-inspect-mode))
586601
(treesit-major-mode-setup)))
587602

603+
604+
;;;###autoload
605+
(define-derived-mode clojurescript-ts-mode clojure-ts-mode "ClojureScript[TS]"
606+
"Major mode for editing ClojureScript code.
607+
608+
\\{clojurescript-ts-mode-map}")
609+
610+
;;;###autoload
611+
(define-derived-mode clojurec-ts-mode clojure-ts-mode "ClojureC[TS]"
612+
"Major mode for editing ClojureC code.
613+
614+
\\{clojurec-ts-mode-map}")
615+
616+
;;;###autoload
617+
(define-derived-mode clojure-dart-ts-mode clojure-ts-mode "ClojureDart[TS]"
618+
"Major mode for editing Clojure Dart code.
619+
620+
\\{clojure-dart-ts-mode-map}")
621+
622+
(defun clojure-ts--register-novel-modes ()
623+
"Set up Clojure modes not present in progenitor clojure-mode.el."
624+
(add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-dart-ts-mode)))
625+
588626
;; Redirect clojure-mode to clojure-ts-mode if clojure-mode is present
589627
(if (require 'clojure-mode nil 'noerror)
590628
(progn
591629
(add-to-list 'major-mode-remap-alist '(clojure-mode . clojure-ts-mode))
592-
(add-to-list 'major-mode-remap-alist '(clojurescript-mode . clojure-ts-mode))
593-
(add-to-list 'major-mode-remap-alist '(clojurec-mode . clojure-ts-mode)))
594-
;; clojure-mode is not present
630+
(add-to-list 'major-mode-remap-alist '(clojurescript-mode . clojurescript-ts-mode))
631+
(add-to-list 'major-mode-remap-alist '(clojurec-mode . clojurec-ts-mode))
632+
(clojure-ts--register-novel-modes))
633+
;; Clojure-mode is not present, setup auto-modes ourselves
634+
;; Regular clojure/edn files
635+
;; I believe dtm is for datomic queries and datoms, which are just edn.
595636
(add-to-list 'auto-mode-alist
596-
'("\\.\\(clj\\|cljd\\|cljc\\|cljs\\|dtm\\|edn\\)\\'" . clojure-ts-mode))
637+
'("\\.\\(clj\\|dtm\\|edn\\)\\'" . clojure-ts-mode))
638+
(add-to-list 'auto-mode-alist '("\\.cljs\\'" . clojurescript-ts-mode))
639+
(add-to-list 'auto-mode-alist '("\\.cljc\\'" . clojurec-ts-mode))
597640
;; boot build scripts are Clojure source files
598641
(add-to-list 'auto-mode-alist '("\\(?:build\\|profile\\)\\.boot\\'" . clojure-ts-mode))
599642
;; babashka scripts are Clojure source files
600643
(add-to-list 'interpreter-mode-alist '("bb" . clojure-ts-mode))
601644
;; nbb scripts are ClojureScript source files
602-
(add-to-list 'interpreter-mode-alist '("nbb" . clojure-ts-mode)))
645+
(add-to-list 'interpreter-mode-alist '("nbb" . clojurescript-ts-mode))
646+
(clojure-ts--register-novel-modes))
603647

604648
(provide 'clojure-ts-mode)
605649

0 commit comments

Comments
 (0)