(if (looking-at "\\s<\\|\n")
(forward-line 1)))))
+(defun c-ts-mode-indent-defun ()
+ "Indent the current top-level declaration syntactically.
+
+`treesit-defun-type-regexp' defines what constructs to indent."
+ (interactive "*")
+ (let ((orig-point (point-marker)))
+ ;; If `treesit-beginning-of-defun' returns nil, we are not in a
+ ;; defun, so don't indent anything.
+ (when (treesit-beginning-of-defun)
+ (let ((start (point)))
+ (treesit-end-of-defun)
+ (indent-region start (point))))
+ (goto-char orig-point)))
+
+(defvar-keymap c-ts-mode-map
+ :doc "Keymap for the C language with tree-sitter"
+ :parent prog-mode-map
+ "C-c C-q" #'c-ts-mode-indent-defun)
+
;;;###autoload
(define-derived-mode c-ts-base-mode prog-mode "C"
- "Major mode for editing C, powered by tree-sitter."
+ "Major mode for editing C, powered by tree-sitter.
+
+\\{c-ts-mode-map}"
:syntax-table c-ts-mode--syntax-table
;; Navigation.