From: Yuan Fu Date: Sat, 24 Dec 2022 08:16:45 +0000 (-0800) Subject: ; * lisp/progmodes/c-ts-mode.el: Add outline section headers. X-Git-Tag: emacs-29.0.90~1021 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a42b20dd95e4ca522c090f9edf110dcd132b616f;p=emacs.git ; * lisp/progmodes/c-ts-mode.el: Add outline section headers. --- diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 10f7bf58403..471d9a3dec0 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -39,6 +39,8 @@ (declare-function treesit-node-child-by-field-name "treesit.c") (declare-function treesit-node-type "treesit.c") +;;; Custom variables + (defcustom c-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `c-ts-mode'." :version "29.1" @@ -91,6 +93,8 @@ follows the form of `treesit-simple-indent-rules'." table) "Syntax table for `c++-ts-mode'.") +;;; Indent + (defun c-ts-mode--indent-styles (mode) "Indent rules supported by `c-ts-mode'. MODE is either `c' or `cpp'." @@ -381,6 +385,8 @@ MODE is either `c' or `cpp'." @c-ts-mode--fontify-defun) (:match "^DEFUN$" @fn))))) +;;; Font-lock helpers + (defun c-ts-mode--fontify-declarator (node override start end &rest args) "Fontify a declarator (whatever under the \"declarator\" field). For NODE, OVERRIDE, START, END, and ARGS, see @@ -473,6 +479,8 @@ For NODE, OVERRIDE, START, and END, see (t 'font-lock-warning-face)) override start end))) +;;; Imenu + (defun c-ts-mode--imenu-1 (node) "Helper for `c-ts-mode--imenu'. Find string representation for NODE and set marker, then recurse @@ -537,6 +545,8 @@ the subtrees." (when var-index `(("Variable" . ,var-index))) (when func-index `(("Function" . ,func-index)))))) +;;; Defun navigation + (defun c-ts-mode--end-of-defun () "`end-of-defun-function' of `c-ts-mode'." ;; A struct/enum/union_specifier node doesn't include the ; at the @@ -582,6 +592,8 @@ the semicolon. This function skips the semicolon." (treesit-node-end node)) (goto-char orig-point))) +;;; Filling + (defun c-ts-mode--fill-paragraph (&optional arg) "Fillling function for `c-ts-mode'. ARG is passed to `fill-paragraph'." @@ -646,6 +658,8 @@ ARG is passed to `fill-paragraph'." ;; itself. t))) +;;; Modes + (defvar-keymap c-ts-mode-map :doc "Keymap for the C language with tree-sitter" :parent prog-mode-map