Skip to content

Commit a6f1a02

Browse files
dannyfreemanjasonjckn
authored andcommitted
Add preliminary support for jank
This creates a new derived mode for the clojure dialect jank https://jank-lang.org/ See issue clojure-emacs#23 for future work and jank-lang/jank#24 for the expressed desire to support nested c++
1 parent b8ff460 commit a6f1a02

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

clojure-ts-mode.el

+13-1
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,11 @@ forms like deftype, defrecord, reify, proxy, etc."
890890
(set-keymap-parent map clojure-ts-mode-map)
891891
map))
892892

893+
(defvar clojure-jank-ts-mode-map
894+
(let ((map (make-sparse-keymap)))
895+
(set-keymap-parent map clojure-ts-mode-map)
896+
map))
897+
893898
(defun clojure-ts-mode-display-version ()
894899
"Display the current `clojure-mode-version' in the minibuffer."
895900
(interactive)
@@ -985,9 +990,16 @@ See `clojure-ts--font-lock-settings' for usage of MARKDOWN-AVAILABLE."
985990
986991
\\{clojure-dart-ts-mode-map}")
987992

993+
;;;###autoload
994+
(define-derived-mode clojure-jank-ts-mode clojure-ts-mode "Jank[TS]"
995+
"Major mode for editing Jank code.
996+
997+
\\{clojure-jank-ts-mode-map}")
998+
988999
(defun clojure-ts--register-novel-modes ()
9891000
"Set up Clojure modes not present in progenitor clojure-mode.el."
990-
(add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-dart-ts-mode)))
1001+
(add-to-list 'auto-mode-alist '("\\.cljd\\'" . clojure-dart-ts-mode))
1002+
(add-to-list 'auto-mode-alist '("\\.jank\\'" . clojure-jank-ts-mode)))
9911003

9921004
;; Redirect clojure-mode to clojure-ts-mode if clojure-mode is present
9931005
(if (require 'clojure-mode nil 'noerror)

test/native.jank

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
(defn create-vertex-shader! []
2+
(native/raw "__value = make_box(glCreateShader(GL_VERTEX_SHADER));"))
3+
4+
(defn set-shader-source! [shader source]
5+
(native/raw "auto const shader(detail::to_int(~{ shader }));
6+
auto const &source(detail::to_string(~{ source }));
7+
__value = make_box(glShaderSource(shader, 1, &source.data, nullptr));"))
8+
9+
(defn compile-shader! [shader]
10+
(native/raw "__value = make_box(glCompileShader(detail::to_int(~{ shader })));"))

0 commit comments

Comments
 (0)