unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Thorsten Jolitz <tjolitz@gmail.com>
To: emacs-devel@gnu.org
Subject: Re: awesome feature (yet to be added?)
Date: Sat, 31 May 2014 12:46:55 +0200	[thread overview]
Message-ID: <87lhti444g.fsf@gmail.com> (raw)
In-Reply-To: jwv1tvaeobv.fsf-monnier+emacs@gnu.org

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> Emacs. My use case is outorg.el that converts programming language
>> buffers
>> (structured the outshine way, i.e. with outcommented Org-mode
>> headers)
>> temporarily to org-mode for text editing and then back to the
>> programming major-mode.
>
> After uncommenting, how do you know which lines should be recommented?
> Do you remember them in some variable?  Or do you wrap the code parts
> in
> those (ugly) +begin...+end "brackets"?

Yes, ugly or not, the +begin...+end "brackets (i.e. code-blocks) are
quite convenient since they allows easy conversion between source code
buffers and org buffers: in source code buffers, code is code and text
is hidden behind comment chars, in org buffers text is text and source
code is hidden in those code blocks. Just two views on the same (well
structured) file, and in each view all buffer content is in one of only
two 'states': hidden (as comment or code block) or not.

> Do you uncomment all comments, or only those that "look like Org
> stuff"?

only comments that start at beginning of line, all other comments
(indented, at the end of line ...) are usually part of the code and
should not be touched (i.e. should go into the code-blocks together with
the code).

>> the original major-mode. I do this linewise, and in fact outorg
>> can't
>> handle those special multiline comments like in C or Java.
>
> Why do it line-wise?

Because it was easy and major-mode agnostic (I just mark the line and
call comment-region and uncomment-region on it), although I needed a few
variables to keep track of the current context (inside comment-section?
inside code-section?). Would comment-search-forward be much faster? But
it would probably find all kinds of comments not only those that start
at the beginning of line. 

>> A robust generic (= major-mode agnostic) `invert-comment' function
>> as
>> part of Emacs that knows how to handle multiline comments too would
>> come
>> very handy.
>
> It looks like the exact meaning of such a function is slightly different
> for every one, so such a function would need lots of hooks and config
> vars to cover all cases.
>
> But you can write your own function starting with
>
>    (defun my-uncomment-region (beg end)
>      (let (spt)
>        (while (and (< (point) end)
>                    (setq spt (comment-search-forward end t)))
>          (let ((ept (progn
> 		      (goto-char spt)
> 		      (unless (or (comment-forward)
> 			          ;; Allow non-terminated comments.
> 			          (eobp))
> 		        (error "Can't find the comment end"))
> 		      (point))))
>            (uncomment-region spt ept)))))
>

Thanks, thats indeed a good starting point.

-- 
cheers,
Thorsten




  reply	other threads:[~2014-05-31 10:46 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-03 18:47 awesome feature (yet to be added?) Bric
2014-05-04  1:23 ` Bric
2014-05-04 11:12   ` Stephen Berman
2014-05-04 18:33   ` Andreas Röhler
2014-05-06  2:32 ` Le Wang
2014-05-06  2:45   ` Davis Herring
2014-05-06  8:19     ` Stephen J. Turnbull
2014-05-06 22:27     ` Robert Thorpe
2014-05-30 21:35     ` Thorsten Jolitz
2014-05-31  1:30       ` Stefan Monnier
2014-05-31 10:46         ` Thorsten Jolitz [this message]
2014-06-09 11:01         ` Thorsten Jolitz
2014-06-09 15:30           ` Stefan Monnier
2014-05-31  6:26       ` Andreas Röhler
2014-05-31 10:52         ` Thorsten Jolitz
2014-05-31 17:20           ` Andreas Röhler
2014-05-31 20:04             ` Thorsten Jolitz
2014-06-01  7:00               ` Andreas Röhler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lhti444g.fsf@gmail.com \
    --to=tjolitz@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).