aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-10-16 20:55:54 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-10-16 20:55:54 +0200
commiteb8c7a1d75181d1f2cd7b979e5df558b680ea128 (patch)
treede819fa80c029f0e3c76a341a00cf3a66a52ddb6
parentc533545d159497b2ed6762b3af37d6f8808ad440 (diff)
Integrate with ‘electric-indent-mode’
-rw-r--r--gsp-ts-mode.el21
1 files changed, 20 insertions, 1 deletions
diff --git a/gsp-ts-mode.el b/gsp-ts-mode.el
index 8650452..91967cf 100644
--- a/gsp-ts-mode.el
+++ b/gsp-ts-mode.el
@@ -99,6 +99,20 @@ See the documentation for `treesit-simple-indent-rules' and
`treesit-simple-indent-presets' for more information.")
+;;; Integration with ‘electric-indent-mode’
+
+(defun gsp-ts-mode-electric-should-try-indent (char)
+ "Electric indentation hook for `gsp-ts-mode'.
+This function is a hook for `electric-indent-functions' to trigger
+automatic indentation as you type.
+
+See the documentation for `electric-indent-mode' and
+`electric-indent-functions' for more information."
+ ;; The documentation for ‘electric-indent-functions’ specifies that
+ ;; this should return ‘t’ and not some arbitrary non-nil value.
+ (and (= char ?\}) t))
+
+
;;; Major Mode Setup
(defun gsp-ts--setup ()
@@ -123,7 +137,12 @@ See the documentation for `treesit-simple-indent-rules' and
(unless (treesit-ready-p 'gsp)
(error "Tree-Sitter for GSP isn’t available"))
(treesit-parser-create 'gsp)
- (gsp-ts--setup))
+ (gsp-ts--setup)
+
+ (with-eval-after-load 'electric
+ (add-hook 'electric-indent-functions
+ #'gsp-ts-mode-electric-should-try-indent
+ nil :local)))
(provide 'gsp-ts-mode)
;;; gsp-ts-mode.el ends here