emacs-diffs
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]