emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Using orgstruct-mode to structure source code


From: Tassilo Horn
Subject: Re: [Orgmode] Using orgstruct-mode to structure source code
Date: Wed, 03 Sep 2008 12:20:32 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

Carsten Dominik <address@hidden> 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 via email to

[Prev in Thread] Current Thread [Next in Thread]