[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 c83c95634e7 4/4: Add c-ts-mode-indent-defun (bug#59662)
From: |
Yuan Fu |
Subject: |
emacs-29 c83c95634e7 4/4: Add c-ts-mode-indent-defun (bug#59662) |
Date: |
Wed, 7 Dec 2022 15:02:38 -0500 (EST) |
branch: emacs-29
commit c83c95634e7a8d0f334ac5d45eebf357e413906c
Author: Theodor Thornhill <theo@thornhill.no>
Commit: Yuan Fu <casouri@gmail.com>
Add c-ts-mode-indent-defun (bug#59662)
Add in this function to mimic 'c-indent-defun'.
* lisp/progmodes/c-ts-mode.el (c-ts-mode-indent-defun): New function.
(c-ts-mode-map): New mode map that uses said function.
---
lisp/progmodes/c-ts-mode.el | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 862d8766e0b..0b17541a0a2 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -520,9 +520,30 @@ the subtrees."
(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.