[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Using comment characters for specific major modes
From: |
Omar Polo |
Subject: |
Re: Using comment characters for specific major modes |
Date: |
Sun, 06 Jun 2021 13:43:35 +0200 |
User-agent: |
mu4e 1.4.15; emacs 28.0.50 |
martin-kemp@brusseler.com writes:
> I would find it useful if there was a function that returns a list with the
> comment delimiter
>
> for the specific mode. Then one can select which one to get.
I don't have a deep knowledge (or any knowledge at all really).
Studiyng newcomment.el is probably the way to go, but as you can see
from comment-dwim there are two variables `comment-start' and
`comment-end' that holds the string for the start and end string of
comments.
They are respectively ";" and "" in elisp-mode, or "/*" and "*/" in
c-mode, and so on.
> From: Omar Polo <op@omarpolo.com>
> To: martin-kemp@brusseler.com
> Subject: Re: Using comment characters for specific major modes
> Date: 06/06/2021 10:34:12 Europe/Paris
> Cc: help-gnu-emacs@gnu.org
>
> I've seen only now the reply from Stefan Monnier, which is (of course
> :P) better than mine, apologies. His explanation is indeed better.
>
> Sorry for the noise.
>
> Omar Polo <op@omarpolo.com> writes:
>
>> martin-kemp@brusseler.com writes:
>>
>>> Am using the following expression to make a line composed of ";" of length
>>> lena.
>>>
>>>
>>>
>>> The first two semicolons ";;" are for when I use elisp code.
>>>
>>>
>>>
>>> (setq-local s (concat ";; " (make-string lena ?\;)))
>>>
>>>
>>>
>>> But I want to change the starting ";;" to be the comment character of the
>>> major mode I am working with.
>>>
>>>
>>>
>>> For texinfo I want "@c", and for fortran-mode I want "c", and "!!" for
>>> f90-mode.
>>
>> taking a look at how things like `comment-dwim' is quite educational.
>> The comment handling is easy but there are a few gotchas, like not all
>> major-modes have a single "comment string" (like ";" in Lisp), some have
>> starting and ending comment string (like C with /* and */)
>>
>> I've come up with the following
>>
>> --------8<--------
>> (defun insert-lena ()
>> (interactive)
>> (let* ((lena 8)
>> (s (make-string lena ?\;)))
>> ;; this bit is stolen from comment-dwim
>> (if comment-insert-comment-function
>> (funcall comment-insert-comment-function)
>> (let ((add (comment-add nil)))
>> (indent-according-to-mode)
>> (insert (comment-padright comment-start add))
>> (save-excursion
>> (unless (string= "" comment-end)
>> (insert (comment-padleft comment-end add)))
>> (indent-according-to-mode))))
>> ;; insert the string
>> (insert s)))
>> -------->8--------
>>
>> that seems to works.
>>
>> It uses comment-insert-comment-function or comment-start/end. I stolen
>> a bit from comment-dwim.
>>
>> In lisps buffer it inserts
>>
>> ;; ;;;;;;;;
>>
>> while in a C buffer it adds
>>
>> /* ;;;;;;;; */
>>
>> Probably it doesn't do exactly what you want, and there are probably
>> edge cases when there is a region active or things like that, but it's a
>> good start (I think).
>>
>> HTH
- Using comment characters for specific major modes, (continued)
- Using comment characters for specific major modes, martin-kemp, 2021/06/06
- Re: Using comment characters for specific major modes, Jean Louis, 2021/06/06
- Using comment characters for specific major modes, martin-kemp, 2021/06/06
- Re: Using comment characters for specific major modes, Jean Louis, 2021/06/06
- Re: Using comment characters for specific major modes, martin-kemp, 2021/06/08
- Re: Using comment characters for specific major modes, Stefan Monnier, 2021/06/05
- Using comment characters for specific major modes, martin-kemp, 2021/06/09
Re: Using comment characters for specific major modes, Omar Polo, 2021/06/06