emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Tassilo Horn <tassilo@member.fsf.org>
To: Carsten Dominik <dominik@science.uva.nl>
Cc: emacs-orgmode@gnu.org
Subject: Re: Using orgstruct-mode to structure source code
Date: Wed, 03 Sep 2008 12:20:32 +0200	[thread overview]
Message-ID: <87k5dtfs3z.fsf@thinkpad.tsdh.de> (raw)
In-Reply-To: <A08442C1-E228-4EEF-9C4B-A63B89583C86@uva.nl> (Carsten Dominik's message of "Wed, 3 Sep 2008 11:36:59 +0200")

Carsten Dominik <dominik@science.uva.nl> writes:

Hi Carsten,

> "?..." is not a correct regular expression in Emacs.  You are using
> wildcard synax, it seems.

No, I used (concat comment-starter "?...") to make the comment starter
optional.  But that's not fully correct.  In elisp the comment starter
may be there multiple times.  So now I go with this:

--8<---------------cut here---------------start------------->8---
(defun org-context-p (&rest contexts)
  (let* ((pos (point))
         (comment-starter (replace-regexp-in-string "[ ]+$" "" (or comment-start "")))
         (regexp-start (if (string= "" comment-start)
                           ""
                         (concat comment-start "*"))))
    (goto-char (point-at-bol))
    (let ((ret (prog1
                   (or (and (memq 'table contexts)
                            (looking-at (concat regexp-start "[ \t]*|")))
                       (and (memq 'headline contexts)
                            (looking-at (concat regexp-start "\\*+")))
                       (and (memq 'item contexts)
                            (looking-at (concat regexp-start
                                                "[ \t]*\\([-+*] \\|[0-9]+[.)] \\)"))))
                 (goto-char pos))))
      (message "org-context-p with regexp-start = %s ==> %s" regexp-start ret))))
--8<---------------cut here---------------end--------------->8---

Here's a short elisp test file:

--8<---------------cut here---------------start------------->8---
;;* First Headline    ; org-context-p ==> t, no visible action
                      ; org-context-p ==> nil, no visible action
(defun foo ()
  nil)                ; org-context-p ==> nil, TAB deletes indentation!
                      ; org-context-p ==> nil, TAB indents to nil's column
;;** Level2           ; org-context-p ==> t, TAB indents heading to nil's column

(+ 1 2 3)

;;** Another Level2

(- 1 1)

;;*** Three

;;* Second part

(progn
  (list 1 2 3)        ; org-context-p ==> nil, TAB deletes indentation!
  (* 1 2 3))          ; org-context-p ==> nil, TAB deletes indentation!

;;* Third part        ; org-context-p ==> t, TAB indents heading to
                      ; column of (* 1 2 3)
--8<---------------cut here---------------end--------------->8---

Behind the lines I've written what my redefinition of `org-context-p'
returns and what TAB does (*without* these comments).  As you can see
`org-context-p' seems to work correctly, but TAB doesn't cycle through
the visibility states but instead breakes indentation.

And if I invoke `M-x org-cycle' on a headline nothing happens.  As it
seems, `org-context-p' is not the only function which has to be adapted
to do the right thing if headlines are inside comments.

> If you want to allow extra characters # and ; at the begin of the line, try
> something like
>
> "[;#]*..."

Yes, see the code above.

> I am not sure if this will work, in particular if it will make
> structure editing work.

Sadly, it's not that easy.

> Give it a try and send us a report, ok?

Done!

Bye,
Tassilo

  reply	other threads:[~2008-09-03 10:22 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-03  8:32 Using orgstruct-mode to structure source code Tassilo Horn
2008-09-03  9:36 ` Carsten Dominik
2008-09-03 10:20   ` Tassilo Horn [this message]
2008-09-03 14:39     ` Eric Schulte
2008-09-03 15:39       ` Tassilo Horn
2008-09-05  7:15     ` Carsten Dominik
2008-09-05  8:02       ` Tassilo Horn
2008-09-05  9:07         ` Carsten Dominik
2008-09-05  9:41           ` Tassilo Horn

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.orgmode.org/

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

  git send-email \
    --in-reply-to=87k5dtfs3z.fsf@thinkpad.tsdh.de \
    --to=tassilo@member.fsf.org \
    --cc=dominik@science.uva.nl \
    --cc=emacs-orgmode@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/org-mode.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).