From e5b7bf56a25089a4ae27056f31d71d2b78dc1adf Mon Sep 17 00:00:00 2001 From: Theodor Thornhill Date: Fri, 17 Feb 2023 23:46:24 +0100 Subject: [PATCH] Add comment style toggle for c-ts-mode * lisp/progmodes/c-ts-mode.el (c-ts-mode-toggle-comment-style): New command. (c-ts-base-mode-map): Add binding. (c-ts-mode-set-modeline): New function. (c-ts-mode): Set modeline. (c++-ts-mode): Set modeline. --- lisp/progmodes/c-ts-mode.el | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index a60c464093..05875e9267 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -87,6 +87,25 @@ c-ts-mode-indent-offset :safe 'integerp :group 'c) +(defun c-ts-mode-toggle-comment-style () + "Toggle the comment style between block and line comments. +Optional numeric ARG, if supplied, switches to block comment +style when positive, to line comment style when negative, and +just toggles it when zero or left out." + (interactive) + (pcase-let ((`(,starter . ,ender) + (if (string= comment-start "// ") + (cons "/* " " */") + (cons "// " "")))) + (setq-local comment-start starter + comment-end ender)) + (c-ts-mode-set-modeline)) + +(defun c-ts-mode-set-modeline () + (setq mode-name + (concat (if (eq major-mode 'c-ts-mode) "C" "C++") comment-start)) + (force-mode-line-update)) + (defun c-ts-mode--indent-style-setter (sym val) "Custom setter for `c-ts-mode-set-style'. @@ -740,7 +759,8 @@ c-ts-base-mode-map :parent prog-mode-map "C-c C-q" #'c-ts-mode-indent-defun "C-c ." #'c-ts-mode-set-style - "C-c C-c" #'comment-region) + "C-c C-c" #'comment-region + "C-c C-k" #'c-ts-mode-toggle-comment-style) ;;;###autoload (define-derived-mode c-ts-base-mode prog-mode "C" @@ -824,6 +844,7 @@ c-ts-mode in your configuration." :group 'c + :after-hook (c-ts-mode-set-modeline) (when (treesit-ready-p 'c) (treesit-parser-create 'c) @@ -856,6 +877,7 @@ c++-ts-mode in your configuration." :group 'c++ + :after-hook (c-ts-mode-set-modeline) (when (treesit-ready-p 'cpp) (treesit-parser-create 'cpp) -- 2.34.1