* TODO type problem on speedbar and imenu. @ 2010-07-22 12:51 Osamu OKANO 2010-07-23 9:06 ` Noorul Islam K M ` (3 more replies) 0 siblings, 4 replies; 22+ messages in thread From: Osamu OKANO @ 2010-07-22 12:51 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 527 bytes --] Hi. I found a problem on speedbar and imenu. Reproducing date is here -8<---------------cut here---------------start------------->8--- * someday/maybe * SOMEDAY/maybe * SOMEDAY maybe * someday maybe * read/review * READ/review * conf #+TYP_TODO: SOMEDAY --8<---------------cut here---------------end--------------->8--- When a head line includes TODO state name, I am afraid that displayed head line names on speedbar are wrong. Because SOMEDAY is TODO type but "someday/maybe" and "SOMEDAY/maybe" is not TODO task. Regards. [-- Attachment #2: org-speedbar-bug2.jpg --] [-- Type: image/jpeg, Size: 79192 bytes --] [-- Attachment #3: Type: text/plain, Size: 201 bytes --] _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2010-07-22 12:51 TODO type problem on speedbar and imenu Osamu OKANO @ 2010-07-23 9:06 ` Noorul Islam K M 2010-07-24 21:38 ` Sébastien Vauban ` (2 subsequent siblings) 3 siblings, 0 replies; 22+ messages in thread From: Noorul Islam K M @ 2010-07-23 9:06 UTC (permalink / raw) To: Osamu OKANO; +Cc: emacs-orgmode Osamu OKANO <okano.osamu@gmail.com> writes: > Hi. > I found a problem on speedbar and imenu. > Reproducing date is here > * someday/maybe > * SOMEDAY/maybe > * SOMEDAY maybe > * someday maybe > * read/review > * READ/review > * conf > #+TYP_TODO: SOMEDAY > > When a head line includes TODO state name, > I am afraid that displayed head line names on speedbar are wrong. > Because SOMEDAY is TODO type but "someday/maybe" and "SOMEDAY/maybe" > is not TODO task. > I am not able to reproduce this on GNU Emacs 23.1.1 (i686-pc-linux-gnu, GTK+ Version 2.12.12) of 2010-01-30 on noorul Org-mode version 7.01trans (release_6.36.723.gaf9d) Thanks and Regards Noorul ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2010-07-22 12:51 TODO type problem on speedbar and imenu Osamu OKANO 2010-07-23 9:06 ` Noorul Islam K M @ 2010-07-24 21:38 ` Sébastien Vauban 2010-07-25 11:48 ` Osamu OKANO 2010-08-01 12:50 ` David Maus 2011-07-21 0:07 ` Nicolas Goaziou 3 siblings, 1 reply; 22+ messages in thread From: Sébastien Vauban @ 2010-07-24 21:38 UTC (permalink / raw) To: emacs-orgmode-mXXj517/zsQ Hi Osamu, > I found a problem on speedbar and imenu. > Reproducing date is here > * someday/maybe > * SOMEDAY/maybe > * SOMEDAY maybe > * someday maybe > * read/review > * READ/review > * conf > #+TYP_TODO: SOMEDAY > > When a head line includes TODO state name, > I am afraid that displayed head line names on speedbar are wrong. > Because SOMEDAY is TODO type but "someday/maybe" and "SOMEDAY/maybe" > is not TODO task. I won't answer your mail. Sorry. Just having a question: how do you have the red "V" after the file names? Is it some sort of versioning marker? Best regards, Seb -- Sébastien Vauban _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode-mXXj517/zsQ@public.gmane.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Re: TODO type problem on speedbar and imenu. 2010-07-24 21:38 ` Sébastien Vauban @ 2010-07-25 11:48 ` Osamu OKANO 0 siblings, 0 replies; 22+ messages in thread From: Osamu OKANO @ 2010-07-25 11:48 UTC (permalink / raw) To: Sébastien Vauban; +Cc: emacs-orgmode Hi. > I won't answer your mail. Sorry. Just having a question: how do you have the > red "V" after the file names? Is it some sort of versioning marker? I don't set by my effort, but I manage org files with git(vc-git). I can reproduce this on GNU Emacs 23.2.1 (i386-mingw-nt6.0.6002) of 2010-05-08 on PC Org-mode version 7.01trans (release_7.01g.22.gec034.dirty) ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2010-07-22 12:51 TODO type problem on speedbar and imenu Osamu OKANO 2010-07-23 9:06 ` Noorul Islam K M 2010-07-24 21:38 ` Sébastien Vauban @ 2010-08-01 12:50 ` David Maus 2011-07-21 0:07 ` Nicolas Goaziou 3 siblings, 0 replies; 22+ messages in thread From: David Maus @ 2010-08-01 12:50 UTC (permalink / raw) To: Osamu OKANO; +Cc: emacs-orgmode [-- Attachment #1.1: Type: text/plain, Size: 879 bytes --] Osamu OKANO wrote: >[1 <text/plain; ISO-8859-1 (7bit)>] >Hi. >I found a problem on speedbar and imenu. >Reproducing date is here >-8<---------------cut here---------------start------------->8--- >* someday/maybe >* SOMEDAY/maybe >* SOMEDAY maybe >* someday maybe >* read/review >* READ/review >* conf >#+TYP_TODO: SOMEDAY >--8<---------------cut here---------------end--------------->8--- >When a head line includes TODO state name, >I am afraid that displayed head line names on speedbar are wrong. >Because SOMEDAY is TODO type but "someday/maybe" and "SOMEDAY/maybe" >is not TODO task. I can confirm this with Org-mode version 7.01trans (release_7.01g.26.g24bb.dirty) on GNU Emacs 23.2.1 (i486-pc-linux-gnu, GTK+ Version 2.20.0) of 2010-05-16 on raven, modified by Debian. -- David -- OpenPGP... 0x99ADB83B5A4478E6 Jabber.... dmjena@jabber.org Email..... dmaus@ictsoc.de [-- Attachment #1.2: Type: application/pgp-signature, Size: 230 bytes --] [-- Attachment #2: Type: text/plain, Size: 201 bytes --] _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2010-07-22 12:51 TODO type problem on speedbar and imenu Osamu OKANO ` (2 preceding siblings ...) 2010-08-01 12:50 ` David Maus @ 2011-07-21 0:07 ` Nicolas Goaziou 2011-07-21 7:19 ` Sebastien Vauban 2011-07-24 19:00 ` Bastien 3 siblings, 2 replies; 22+ messages in thread From: Nicolas Goaziou @ 2011-07-21 0:07 UTC (permalink / raw) To: Osamu OKANO; +Cc: Bastien Guerry, emacs-orgmode Hello, Osamu OKANO <okano.osamu@gmail.com> writes: > I found a problem on speedbar and imenu. > Reproducing date is here > -8<---------------cut here---------------start------------->8--- > * someday/maybe > * SOMEDAY/maybe > * SOMEDAY maybe > * someday maybe > * read/review > * READ/review > * conf > #+TYP_TODO: SOMEDAY > --8<---------------cut here---------------end--------------->8--- > > When a head line includes TODO state name, > I am afraid that displayed head line names on speedbar are wrong. > Because SOMEDAY is TODO type but "someday/maybe" and "SOMEDAY/maybe" > is not TODO task. This is a regexp problem: `org-complex-heading-regexp' recognizes "someday" and a TODO keyword in both "someday/maybe" and "SOMEDAY/maybe". It is defined as the following (I let the concat form for better readability): #+begin_src emacs-lisp (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)" "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$") #+end_src The problem in at the "\\>" part. The following change may solve the problem. #+begin_src emacs-lisp (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") "\\)[ \t]+\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)" "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$") #+end_src I think it is better to enforce some whitespace after a TODO keyword than a word boundary. There are a few places where this could also be changed (i.e. `org-complex-heading-regexp-format'). Any opinion on this? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-07-21 0:07 ` Nicolas Goaziou @ 2011-07-21 7:19 ` Sebastien Vauban 2011-07-24 19:00 ` Bastien 1 sibling, 0 replies; 22+ messages in thread From: Sebastien Vauban @ 2011-07-21 7:19 UTC (permalink / raw) To: emacs-orgmode-mXXj517/zsQ Hi Nicolas, Nicolas Goaziou wrote: > I think it is better to enforce some whitespace after a TODO keyword than a > word boundary. There are a few places where this could also be changed (i.e. > `org-complex-heading-regexp-format'). > > Any opinion on this? I share your opinion. Best regards, Seb -- Sebastien Vauban ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-07-21 0:07 ` Nicolas Goaziou 2011-07-21 7:19 ` Sebastien Vauban @ 2011-07-24 19:00 ` Bastien 2011-08-13 10:16 ` Nicolas Goaziou 1 sibling, 1 reply; 22+ messages in thread From: Bastien @ 2011-07-24 19:00 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode, Osamu OKANO Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > I think it is better to enforce some whitespace after a TODO keyword > than a word boundary. There are a few places where this could also be > changed (i.e. `org-complex-heading-regexp-format'). > > Any opinion on this? Yep. When you have some free time (!), please suggest a patch and a small org test file so that we can test. Thanks! -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-07-24 19:00 ` Bastien @ 2011-08-13 10:16 ` Nicolas Goaziou 2011-08-16 14:47 ` Bastien 2011-08-16 21:07 ` Carsten Dominik 0 siblings, 2 replies; 22+ messages in thread From: Nicolas Goaziou @ 2011-08-13 10:16 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Osamu OKANO [-- Attachment #1: Type: text/plain, Size: 527 bytes --] Hello, Bastien <bzg@altern.org> writes: > Yep. When you have some free time (!), please suggest a patch and a > small org test file so that we can test. Here is an attempt to convert word boundaries into white spaces where it matters. I paste again the test file from Osamu Okano for reference. #+begin_src org #+TYP_TODO: SOMEDAY * someday/maybe * SOMEDAY/maybe * SOMEDAY maybe * someday maybe * read/review * READ/review * conf #+end_src Regards, -- Nicolas Goaziou [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Enforce-white-space-after-todo-keywords.patch --] [-- Type: text/x-patch, Size: 2819 bytes --] From 95709480975155387121fdd18cea144145b47e5c Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Mon, 25 Jul 2011 17:50:28 +0200 Subject: [PATCH] Enforce white space after todo keywords * lisp/org.el (org-set-regexps-and-options): enforce white space after todo keyword, as word boundary isn't sufficient (i.e. in matches * TODO/this) --- lisp/org.el | 28 +++++++++++++++------------- 1 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index a13730b..9fef2a8 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4537,38 +4537,40 @@ means to push this value onto the list in the variable.") org-not-done-heading-regexp (concat "^\\(\\*+\\)[ \t]+\\(" (mapconcat 'regexp-quote org-not-done-keywords "\\|") - "\\)\\>") + "\\)[ \t]+") org-todo-line-regexp (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)\\>\\)?[ \t]*\\(.*\\)") + "\\)[ \t]+\\)?\\(.*\\)") org-complex-heading-regexp (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)" + "\\)[ \t]+\\)?" + "\\(?:\\(\\[#.\\]\\)[ \t]+\\)?" + "\\(.*?\\)" "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$") org-complex-heading-regexp-format (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)\\>\\)?" - "\\(?:[ \t]*\\(\\[#.\\]\\)\\)?" - "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie - "[ \t]*\\(%s\\)" - "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie - "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?[ \t]*$") + "\\)[ \t]+\\)?" + "\\(?:\\(\\[#.\\]\\)[ \t]+\\)?" + "\\(?:\\(?:\\[[0-9%%/]+\\]\\)[ \t]+\\)?" ; stats cookie + "\\(%s\\)[ \t]*" + "\\(?:\\[[0-9%%/]+\\]\\)?" ; stats cookie + (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?[ \t]*$")) org-nl-done-regexp (concat "\n\\*+[ \t]+" "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|") - "\\)" "\\>") + "\\)" "[ \t]+") org-todo-line-tags-regexp (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - (org-re - "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:[ \t]*\\)?$\\)")) + "\\)[ \t]+\\)" + (org-re "\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:[ \t]*\\)?$\\)")) org-looking-at-done-regexp (concat "^" "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)" - "\\>") + "[ \t]+") org-deadline-regexp (concat "\\<" org-deadline-string) org-deadline-time-regexp (concat "\\<" org-deadline-string " *<\\([^>]+\\)>") -- 1.7.6 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-13 10:16 ` Nicolas Goaziou @ 2011-08-16 14:47 ` Bastien 2011-08-16 20:54 ` Nicolas Goaziou 2011-08-16 21:07 ` Carsten Dominik 1 sibling, 1 reply; 22+ messages in thread From: Bastien @ 2011-08-16 14:47 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode, Osamu OKANO Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > Bastien <bzg@altern.org> writes: > >> Yep. When you have some free time (!), please suggest a patch and a >> small org test file so that we can test. > > Here is an attempt to convert word boundaries into white spaces where it > matters. Thanks a lot -- I have tested the patch during the last two hours and didn't find any problem. Feel free to apply it. What about going one step further and removing the possibility of using tabs after TODO keywords? Best, -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-16 14:47 ` Bastien @ 2011-08-16 20:54 ` Nicolas Goaziou 2011-08-17 16:00 ` Bastien 0 siblings, 1 reply; 22+ messages in thread From: Nicolas Goaziou @ 2011-08-16 20:54 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Osamu OKANO Hello, Bastien <bzg@altern.org> writes: > Thanks a lot -- I have tested the patch during the last two hours and > didn't find any problem. Feel free to apply it. Done. > What about going one step further and removing the possibility of > using tabs after TODO keywords? There are quite a few places indeed using "[ \t]" which may use " " instead. Before TODO keywords, before priority cookies, before check-boxes, etc. We might remove any use of [ \t] but for indentation. Though, I don't use tabs, and there could well be corner cases that I can't see[1]. Regards, [1] Like "* TODO Headline :tag:" -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-16 20:54 ` Nicolas Goaziou @ 2011-08-17 16:00 ` Bastien 2011-08-17 18:16 ` Nicolas Goaziou 0 siblings, 1 reply; 22+ messages in thread From: Bastien @ 2011-08-17 16:00 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode, Osamu OKANO Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > There are quite a few places indeed using "[ \t]" which may use " " > instead. Before TODO keywords, before priority cookies, before > check-boxes, etc. Enforcing " " _before_ the places you mention would be good change. Feel free to commit such a change if you have some time. Thanks, -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-17 16:00 ` Bastien @ 2011-08-17 18:16 ` Nicolas Goaziou 2011-08-24 14:18 ` Bastien 0 siblings, 1 reply; 22+ messages in thread From: Nicolas Goaziou @ 2011-08-17 18:16 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Osamu OKANO Hello, Bastien <bzg@altern.org> writes: > Hi Nicolas, > > Nicolas Goaziou <n.goaziou@gmail.com> writes: > >> There are quite a few places indeed using "[ \t]" which may use " " >> instead. Before TODO keywords, before priority cookies, before >> check-boxes, etc. > > Enforcing " " _before_ the places you mention would be good change. > Feel free to commit such a change if you have some time. I don't mind providing a commit for this, but the list wasn't exhaustive. I'd rather have a set of rules which would be part of the Org format specification. What about : allow mixing tabs and spaces only when indenting or filling. One or more spaces everywhere[1] else. An heading regexp would then be: "^\\*\\+\\( +TODO\\)?\\( +\\[#.\\]\\)?\\( +.*?\\)?\\([ \t]+\\(:[[:alnum:]]_@#%:\\)\\)?[ \t]*$" Note the use of [ \t]+ to fill the tags to the right. Also note that regexp means "^***" is a valid regexp (which isn't the case actually). Regards, [1] As for every rule, some exceptions: check-boxes cookies and counters, which can be sticked to respectively the headline text and the check-box. -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-17 18:16 ` Nicolas Goaziou @ 2011-08-24 14:18 ` Bastien 2011-08-24 14:37 ` Carsten Dominik 2011-08-25 0:31 ` Nicolas Goaziou 0 siblings, 2 replies; 22+ messages in thread From: Bastien @ 2011-08-24 14:18 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode, Osamu OKANO Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > I don't mind providing a commit for this, but the list wasn't > exhaustive. I'd rather have a set of rules which would be part of the > Org format specification. Agreed. > What about : allow mixing tabs and spaces only when indenting or > filling. One or more spaces everywhere[1] else. If you feel confident this is flexible enough, please go ahead. We only need to make sure that a task like * TODO Task ^^^^^^ <= unintentional mixed tabs/spaces is okay. In other words: enforce a set of rules, but in a way that will not surprise users if they accidently hit spaces or tabs in position like the end of a line. > An heading regexp would then be: > > "^\\*\\+\\( +TODO\\)?\\( +\\[#.\\]\\)?\\( +.*?\\)?\\([ \t]+\\(:[[:alnum:]]_@#%:\\)\\)?[ \t]*$" > > Note the use of [ \t]+ to fill the tags to the right. Also note that > regexp means "^***" is a valid regexp (which isn't the case actually). Yes, I think keeping "^***" as a valid regexp is a good idea. > [1] As for every rule, some exceptions: check-boxes cookies and > counters, which can be sticked to respectively the headline text and the > check-box. Okay. Thanks for looking again into this when you have some time! -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-24 14:18 ` Bastien @ 2011-08-24 14:37 ` Carsten Dominik 2011-08-25 0:31 ` Nicolas Goaziou 1 sibling, 0 replies; 22+ messages in thread From: Carsten Dominik @ 2011-08-24 14:37 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Nicolas Goaziou, Osamu OKANO On Aug 24, 2011, at 4:18 PM, Bastien wrote: > Hi Nicolas, > > Nicolas Goaziou <n.goaziou@gmail.com> writes: > >> I don't mind providing a commit for this, but the list wasn't >> exhaustive. I'd rather have a set of rules which would be part of the >> Org format specification. > > Agreed. > >> What about : allow mixing tabs and spaces only when indenting or >> filling. One or more spaces everywhere[1] else. Hi Nicolas Org currently also uses \t before the tags, when it aligns them. - Carsten > > If you feel confident this is flexible enough, please go ahead. > We only need to make sure that a task like > > * TODO Task > ^^^^^^ <= unintentional mixed tabs/spaces > > is okay. In other words: enforce a set of rules, but in a way > that will not surprise users if they accidently hit spaces or tabs > in position like the end of a line. > >> An heading regexp would then be: >> >> "^\\*\\+\\( +TODO\\)?\\( +\\[#.\\]\\)?\\( +.*?\\)?\\([ \t]+\\(:[[:alnum:]]_@#%:\\)\\)?[ \t]*$" >> >> Note the use of [ \t]+ to fill the tags to the right. Also note that >> regexp means "^***" is a valid regexp (which isn't the case actually). > > Yes, I think keeping "^***" as a valid regexp is a good idea. > >> [1] As for every rule, some exceptions: check-boxes cookies and >> counters, which can be sticked to respectively the headline text and the >> check-box. > > Okay. > > Thanks for looking again into this when you have some time! > > -- > Bastien > - Carsten ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-24 14:18 ` Bastien 2011-08-24 14:37 ` Carsten Dominik @ 2011-08-25 0:31 ` Nicolas Goaziou 1 sibling, 0 replies; 22+ messages in thread From: Nicolas Goaziou @ 2011-08-25 0:31 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Osamu OKANO [-- Attachment #1: Type: text/plain, Size: 487 bytes --] Hello, Bastien <bzg@altern.org> writes: > Yes, I think keeping "^***" as a valid regexp is a good idea. In fact, it isn't. "^***" shouldn't match an headline. Not yet actually. If we want such headlines, org-outline-regexp and al. have to be set to something like "\\*+". That would break many things, and outline functions would match unexpected things, like *bold* at column 0. Anyway, here's another attempt to improve headline regexps consistency. Regards, -- Nicolas Goaziou [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: patch for headlines regexps --] [-- Type: text/x-patch, Size: 23395 bytes --] From 758f1342b01a0dd2b36873a1fa948c6cbf7b1ab0 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Thu, 25 Aug 2011 01:58:29 +0200 Subject: [PATCH] Provide more consistent regexps for headlines * lisp/org-agenda.el (org-search-view): simplify regexp. (org-agenda-get-todos): use new format string. * lisp/org-archive.el (org-archive-all-done): simplify regexp. * lisp/org-ascii.el (org-export-as-ascii): more accurate regexp. * lisp/org-colview-xemacs.el (org-columns-capture-view): use new format string and new string. * lisp/org-colview.el (org-columns-capture-view): use new format string and new string. * lisp/org-docbook.el (org-export-as-docbook): more accurate regexp. Also use new regexp to match generic headlines. * lisp/org-exp.el (org-export-protect-quoted-subtrees): more accurate regexp. Also use new regexp to match generic headlines. * lisp/org-html.el (org-export-as-html): more accurate regexp. Also use new regexp to match generic headlines. * lisp/org-mouse.el (org-mouse-match-todo-keyword): removed unused and now erroneous function. * lisp/org.el (org-heading-regexp, org-heading-keyword-regexp-format): new variables. (org-set-regexps-and-options): create regexps according to the following rule: use spaces only to separate elements from an headline, while allowing mixed tabs and spaces for any indentation job. (org-nl-done-regexp, org-looking-at-done-regexp): removed variables. (org-set-font-lock-defaults): fontify again headlines with a keyword and no other text. Use new format strings. (org-get-heading, org-toggle-comment, org-prepare-agenda-buffers, org-toggle-fixed-width-section): use new format string. (org-todo): more accurate regexps. (org-point-at-end-of-empty-headline): simplify regexp. This patch attempts to reduce the number of hard-coded headlines, by providing two format strings and one generic string to cover most of the cases of headline construction. --- lisp/org-agenda.el | 30 ++++--- lisp/org-archive.el | 2 +- lisp/org-ascii.el | 4 +- lisp/org-colview-xemacs.el | 5 +- lisp/org-colview.el | 5 +- lisp/org-docbook.el | 7 +- lisp/org-exp.el | 6 +- lisp/org-html.el | 7 +- lisp/org-mouse.el | 7 -- lisp/org.el | 179 +++++++++++++++++++++++++------------------- 10 files changed, 139 insertions(+), 113 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index b157d39..22d3ab7 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -3868,7 +3868,7 @@ in `org-agenda-text-search-extra-files'." (if (not regexps+) (setq regexp org-outline-regexp-bol) (setq regexp (pop regexps+)) - (if hdl-only (setq regexp (concat "^" org-outline-regexp ".*?" + (if hdl-only (setq regexp (concat org-outline-regexp-bol " .*?" regexp)))) (setq files (org-agenda-files nil 'ifmode)) (when (eq (car org-agenda-text-search-extra-files) 'agenda-archives) @@ -4574,15 +4574,19 @@ the documentation of `org-diary'." 'help-echo (format "mouse-2 or RET jump to org file %s" (abbreviate-file-name buffer-file-name)))) - (regexp (concat "^\\*+[ \t]+\\(" - (if org-select-this-todo-keyword - (if (equal org-select-this-todo-keyword "*") - org-todo-regexp - (concat "\\<\\(" - (mapconcat 'identity (org-split-string org-select-this-todo-keyword "|") "\\|") - "\\)\\>")) - org-not-done-regexp) - "[^\n\r]*\\)")) + (regexp (format org-heading-keyword-regexp-format + (cond + ((and org-select-this-todo-keyword + (equal org-select-this-todo-keyword "*")) + org-todo-regexp) + (org-select-this-todo-keyword + (concat "\\(" + (mapconcat 'identity + (org-split-string + org-select-this-todo-keyword + "|") + "\\|") "\\)")) + (t org-not-done-regexp)))) marker priority category tags todo-state ee txt beg end) (goto-char (point-min)) @@ -4596,11 +4600,11 @@ the documentation of `org-diary'." (goto-char (1+ beg)) (or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible)) (throw :skip nil))) - (goto-char (match-beginning 1)) + (goto-char (match-beginning 2)) (setq marker (org-agenda-new-marker (match-beginning 0)) category (org-get-category) category-pos (get-text-property (point) 'org-category-position) - txt (match-string 1) + txt (match-string 2) tags (org-get-tags-at (point)) txt (org-format-agenda-item "" txt category tags) priority (1+ (org-get-priority txt)) @@ -4612,7 +4616,7 @@ the documentation of `org-diary'." 'type "todo" 'todo-state todo-state) (push txt ee) (if org-agenda-todo-list-sublevels - (goto-char (match-end 1)) + (goto-char (match-end 2)) (org-end-of-subtree 'invisible)))) (nreverse ee))) diff --git a/lisp/org-archive.el b/lisp/org-archive.el index 16c35cf..c7a4049 100644 --- a/lisp/org-archive.el +++ b/lisp/org-archive.el @@ -404,7 +404,7 @@ sibling does not exist, it will be created at the end of the subtree." If the cursor is not on a headline, try all level 1 trees. If it is on a headline, try all direct children. When TAG is non-nil, don't move trees, but mark them with the ARCHIVE tag." - (let ((re (concat org-outline-regexp-bol "+" org-not-done-regexp)) re1 + (let ((re org-not-done-heading-regexp) re1 (rea (concat ".*:" org-archive-tag ":")) (begm (make-marker)) (endm (make-marker)) diff --git a/lisp/org-ascii.el b/lisp/org-ascii.el index 056f44b..2663886 100644 --- a/lisp/org-ascii.el +++ b/lisp/org-ascii.el @@ -283,7 +283,7 @@ publishing directory." "UNTITLED")) (email (plist-get opt-plist :email)) (language (plist-get opt-plist :language)) - (quote-re0 (concat "^[ \t]*" org-quote-string "\\>")) + (quote-re0 (concat "^\\(" org-quote-string "\\)\\( +\\|[ \t]*$\\)")) (todo nil) (lang-words nil) (region @@ -406,7 +406,7 @@ publishing directory." txt)) (setq txt (replace-match "" t t txt))) (if (string-match quote-re0 txt) - (setq txt (replace-match "" t t txt))) + (setq txt (replace-match "" t t txt 1))) (if org-export-with-section-numbers (setq txt (concat (org-section-number level) diff --git a/lisp/org-colview-xemacs.el b/lisp/org-colview-xemacs.el index b32e741..a85762f 100644 --- a/lisp/org-colview-xemacs.el +++ b/lisp/org-colview-xemacs.el @@ -1317,12 +1317,13 @@ of fields." (if (featurep 'xemacs) (save-excursion (let* ((title (mapcar 'cadr org-columns-current-fmt-compiled)) - (re-comment (concat "\\*+[ \t]+" org-comment-string "\\>")) + (re-comment (format org-heading-keyword-regexp-format + org-comment-string)) (re-archive (concat ".*:" org-archive-tag ":")) (n (length title)) row tbl) (goto-char (point-min)) - (while (re-search-forward "^\\(\\*+\\) " nil t) + (while (re-search-forward org-heading-regexp nil t) (catch 'next (when (and (or (null maxlevel) (>= maxlevel diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 829a134..0635419 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -1152,11 +1152,12 @@ containing the title row and all other rows. Each row is a list of fields." (save-excursion (let* ((title (mapcar 'cadr org-columns-current-fmt-compiled)) - (re-comment (concat "\\*+[ \t]+" org-comment-string "\\>")) + (re-comment (format org-heading-keyword-regexp-format + org-comment-string)) (re-archive (concat ".*:" org-archive-tag ":")) (n (length title)) row tbl) (goto-char (point-min)) - (while (re-search-forward "^\\(\\*+\\) " nil t) + (while (re-search-forward org-heading-regexp nil t) (catch 'next (when (and (or (null maxlevel) (>= maxlevel diff --git a/lisp/org-docbook.el b/lisp/org-docbook.el index f09740f..df8db64 100644 --- a/lisp/org-docbook.el +++ b/lisp/org-docbook.el @@ -498,8 +498,9 @@ publishing directory." ;; We will use HTML table formatter to export tables to DocBook ;; format, so need to set html-table-tag here. (html-table-tag (plist-get opt-plist :html-table-tag)) - (quote-re0 (concat "^[ \t]*" org-quote-string "\\>")) - (quote-re (concat "^\\(\\*+\\)\\([ \t]+" org-quote-string "\\>\\)")) + (quote-re0 (concat "^ *" org-quote-string "\\( +\\|[ \t]*$\\)")) + (quote-re (format org-heading-keyword-regexp-format + org-quote-string)) (inquote nil) (infixed nil) (inverse nil) @@ -969,7 +970,7 @@ publishing directory." (push (cons num 1) footref-seen)))))) (cond - ((string-match "^\\(\\*+\\)[ \t]+\\(.*\\)" line) + ((string-match org-heading-regexp line) ;; This is a headline (setq level (org-tr-level (- (match-end 1) (match-beginning 1) level-offset)) diff --git a/lisp/org-exp.el b/lisp/org-exp.el index f795fbd..e6185d1 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -1637,7 +1637,8 @@ from the buffer." (defun org-export-protect-quoted-subtrees () "Mark quoted subtrees with the protection property." - (let ((org-re-quote (concat "^\\*+[ \t]+" org-quote-string "\\>"))) + (let ((org-re-quote (format org-heading-keyword-regexp-format + org-quote-string))) (goto-char (point-min)) (while (re-search-forward org-re-quote nil t) (goto-char (match-beginning 0)) @@ -1925,7 +1926,8 @@ table line. If it is a link, add it to the line containing the link." (defun org-export-remove-comment-blocks-and-subtrees () "Remove the comment environment, and also commented subtrees." - (let ((re-commented (concat "^\\*+[ \t]+" org-comment-string "\\>")) + (let ((re-commented (format org-heading-keyword-regexp-format + org-comment-string)) case-fold-search) ;; Remove comment environment (goto-char (point-min)) diff --git a/lisp/org-html.el b/lisp/org-html.el index bf2d012..8c627fa 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -1172,8 +1172,9 @@ PUB-DIR is set, use this as the publishing directory." (plist-get opt-plist :link-home))) (dummy (setq opt-plist (plist-put opt-plist :title title))) (html-table-tag (plist-get opt-plist :html-table-tag)) - (quote-re0 (concat "^[ \t]*" org-quote-string "\\>")) - (quote-re (concat "^\\(\\*+\\)\\([ \t]+" org-quote-string "\\>\\)")) + (quote-re0 (concat "^ *" org-quote-string "\\( +\\|[ \t]*$\\)")) + (quote-re (format org-heading-keyword-regexp-format + org-quote-string)) (inquote nil) (infixed nil) (inverse nil) @@ -1643,7 +1644,7 @@ lang=\"%s\" xml:lang=\"%s\"> t t line)))))) (cond - ((string-match "^\\(\\*+\\)[ \t]+\\(.*\\)" line) + ((string-match org-heading-regexp line) ;; This is a headline (setq level (org-tr-level (- (match-end 1) (match-beginning 1) level-offset)) diff --git a/lisp/org-mouse.el b/lisp/org-mouse.el index 346ba6d..ba625d3 100644 --- a/lisp/org-mouse.el +++ b/lisp/org-mouse.el @@ -631,13 +631,6 @@ This means, between the beginning of line and the point." (set-match-data ',match) (apply ',function rest))))) -(defun org-mouse-match-todo-keyword () - (save-excursion - (org-back-to-heading) - (if (looking-at org-outline-regexp) (goto-char (match-end 0))) - (or (looking-at (concat " +" org-todo-regexp " *")) - (looking-at " \\( *\\)")))) - (defun org-mouse-yank-link (click) (interactive "e") ;; Give temporary modes such as isearch a chance to turn off. diff --git a/lisp/org.el b/lisp/org.el index 6ee3b4e..2fcc6cf 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4177,6 +4177,10 @@ collapsed state." ;;; Variables for pre-computed regular expressions, all buffer local +(defvar org-heading-regexp nil + "Matches an headline. +Stars are put in group 1 and the trimmed body in group 2.") +(make-variable-buffer-local 'org-heading-regexp) (defvar org-drawer-regexp nil "Matches first line of a hidden block.") (make-variable-buffer-local 'org-drawer-regexp) @@ -4200,22 +4204,28 @@ group 3: Priority cookie group 4: True headline group 5: Tags") (make-variable-buffer-local 'org-complex-heading-regexp) +(defvar org-heading-keyword-regexp-format nil + "Printf format to make regexp to match an headline with some keyword. +This regexp will match the headline of any node which has the +exact keyword that is put into the format. The keyword isn't in +any group by default, but the stars and the body are.") +(make-variable-buffer-local 'org-heading-keyword-regexp-format) +(defvar org-heading-keyword-maybe-regexp-format nil + "Printf format to make regexp to match an headline with some keyword. +This regexp can match any headline with the specified keyword, or +a without a keyword. The keyword isn't in any group by default, +but the stars and the body are.") +(make-variable-buffer-local 'org-heading-keyword-maybe-regexp-format) (defvar org-complex-heading-regexp-format nil "Printf format to make regexp to match an exact headline. -This regexp will match the headline of any node which hase the exact -headline text that is put into the format, but may have any TODO state, -priority and tags.") +This regexp will match the headline of any node which has the +exact headline text that is put into the format, but may have any +TODO state, priority and tags.") (make-variable-buffer-local 'org-complex-heading-regexp-format) (defvar org-todo-line-tags-regexp nil "Matches a headline and puts TODO state into group 2 if present. Also put tags into group 4 if tags are present.") (make-variable-buffer-local 'org-todo-line-tags-regexp) -(defvar org-nl-done-regexp nil - "Matches newline followed by a headline with the DONE keyword.") -(make-variable-buffer-local 'org-nl-done-regexp) -(defvar org-looking-at-done-regexp nil - "Matches the DONE keyword a point.") -(make-variable-buffer-local 'org-looking-at-done-regexp) (defvar org-ds-keyword-length 12 "Maximum length of the Deadline and SCHEDULED keywords.") (make-variable-buffer-local 'org-ds-keyword-length) @@ -4550,7 +4560,9 @@ means to push this value onto the list in the variable.") (assoc (car e) org-tag-alist)) (push e org-tag-alist))))) - ;; Compute the regular expressions and other local variables + ;; Compute the regular expressions and other local variables. + ;; Using `org-outline-regexp-bol' would complicate them much, + ;; because of the fixed white space at the end of that string. (if (not org-done-keywords) (setq org-done-keywords (and org-todo-keywords-1 (list (org-last org-todo-keywords-1))))) @@ -4565,49 +4577,48 @@ means to push this value onto the list in the variable.") org-not-done-keywords (org-delete-all org-done-keywords (copy-sequence org-todo-keywords-1)) org-todo-regexp - (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1 - "\\|") "\\)\\>") + (concat "\\(" + (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") + "\\)") org-not-done-regexp - (concat "\\<\\(" + (concat "\\(" (mapconcat 'regexp-quote org-not-done-keywords "\\|") - "\\)\\>") + "\\)") + org-heading-regexp + "\\(\\*+\\)\\(?: +\\(.*?\\)\\)?[ \t]*$" + org-heading-keyword-regexp-format + "\\(\\*+\\)\\(?: +%s\\)\\(?: +\\(.*?\\)\\)?[ \t]*$" + org-heading-keyword-maybe-regexp-format + "\\(\\*+\\)\\(?: +%s\\)?\\(?: +\\(.*?\\)\\)?[ \t]*$" org-not-done-heading-regexp - (concat "^\\(\\*+\\)[ \t]+\\(" - (mapconcat 'regexp-quote org-not-done-keywords "\\|") - "\\)[ \t]+") + (format org-heading-keyword-regexp-format org-not-done-regexp) org-todo-line-regexp - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)[ \t]+\\)?\\(.*\\)") + (format org-heading-keyword-maybe-regexp-format org-todo-regexp) org-complex-heading-regexp - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)[ \t]+\\)?" - "\\(?:\\(\\[#.\\]\\)[ \t]+\\)?" - "\\(.*?\\)" - "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$") + (concat "\\(\\*+\\)" + "\\(?: +" org-todo-regexp "\\)?" + "\\(?: +\\(\\[#.\\]\\)\\)?" + "\\( +:\\(.*?\\)\\)?" + (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?") + "[ \t]*$") org-complex-heading-regexp-format - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)[ \t]+\\)?" - "\\(?:\\(\\[#.\\]\\)[ \t]+\\)?" - "\\(?:\\(?:\\[[0-9%%/]+\\]\\)[ \t]+\\)?" ; stats cookie - "\\(%s\\)[ \t]*" - "\\(?:\\[[0-9%%/]+\\]\\)?" ; stats cookie - (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?[ \t]*$")) - org-nl-done-regexp - (concat "\n\\*+[ \t]+" - "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|") - "\\)" "[ \t]+") + (concat "\\(\\*+\\)" + "\\(?: +" org-todo-regexp "\\)?" + "\\(?: +\\(\\[#.\\]\\)\\)?" + "\\(?: +" + ;; Stats cookies can be sticked to body. + "\\(?:\\[[0-9%%/]+\\] *\\)?" + "\\(%s\\)" + "\\(?: *\\[[0-9%%/]+\\]\\)?" + "\\)" + (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?") + "[ \t]*$") org-todo-line-tags-regexp - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)[ \t]+\\)" - (org-re "\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:[ \t]*\\)?$\\)")) - org-looking-at-done-regexp - (concat "^" "\\(?:" - (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)" - "[ \t]+") + (concat "\\(\\*+\\)" + "\\(?: +" org-todo-regexp "\\)?" + "\\( +:\\(.*?\\)\\)?" + (org-re "\\(?:[ \t]+\\(:[[:alnum:]:_@#%]+:\\)\\)?") + "[ \t]*$") org-deadline-regexp (concat "\\<" org-deadline-string) org-deadline-time-regexp (concat "\\<" org-deadline-string " *<\\([^>]+\\)>") @@ -5658,13 +5669,16 @@ needs to be inserted at a specific position in the font-lock sequence.") '("^&?%%(.*\\|<%%([^>\n]*?>" (0 'org-sexp-date t)) '(org-hide-wide-columns (0 nil append)) ;; TODO lines - (list (concat "^\\*+[ \t]+" org-todo-regexp "\\([ \t]\\|$\\)") - '(1 (org-get-todo-face 1) t)) + (list (format org-heading-keyword-regexp-format + org-todo-regexp) + '(2 (org-get-todo-face 2) t)) ;; DONE (if org-fontify-done-headline - (list (concat "^[*]+ +\\<\\(" - (mapconcat 'regexp-quote org-done-keywords "\\|") - "\\)\\(.*\\)") + (list (format org-heading-keyword-regexp-format + (concat + "\\(" + (mapconcat 'regexp-quote org-done-keywords "\\|") + "\\)")) '(2 'org-headline-done t)) nil) ;; Priorities @@ -5702,8 +5716,8 @@ needs to be inserted at a specific position in the font-lock sequence.") ;; Code '(org-activate-code (1 'org-code t)) ;; COMMENT - (list (concat "^\\*+[ \t]+\\<\\(" org-comment-string - "\\|" org-quote-string "\\)\\>") + (list (format org-heading-keyword-regexp-format + "\\(" org-comment-string "\\|" org-quote-string "\\)") '(1 'org-special-keyword t)) '("^#.*" (0 'font-lock-comment-face t)) ;; Blocks and meta lines @@ -7027,14 +7041,15 @@ When NO-TODO is non-nil, don't include TODO keywords." (looking-at org-complex-heading-regexp) (match-string 4)) (no-tags - (looking-at "\\*+[ \t]+\\([^\n\r]*?\\)\\([ \t]+:[[:alnum:]:_@#%]+:[ \t]*\\)?$") + (looking-at (concat org-outline-regexp + "\\(.*?\\)" + "\\(?:[ \t]+:[[:alnum:]:_@#%]+:\\)?[ \t]*$")) (match-string 1)) (no-todo - (looking-at (concat "\\*+[ \t]+" org-todo-regexp " +" - "\\([^\n\r]*?[ \t]+:[[:alnum:]:_@#%]+:[ \t]*\\)?$")) - (match-string 2)) - (t (looking-at "\\*+[ \t]+\\([^\r\n]*\\)") - (match-string 1))))) + (looking-at org-todo-line-regexp) + (match-string 3)) + (t (looking-at org-heading-regexp) + (match-string 2))))) (defun org-heading-components () "Return the components of the current heading. @@ -10980,13 +10995,16 @@ expands them." (save-excursion (org-back-to-heading) (let (case-fold-search) - (if (looking-at (concat org-outline-regexp - "\\( *\\<" org-comment-string "\\>[ \t]*\\)")) - (replace-match "" t t nil 1) - (if (looking-at org-outline-regexp) - (progn - (goto-char (match-end 0)) - (insert org-comment-string " "))))))) + (cond + ((looking-at (format org-heading-keyword-regexp-format + org-comment-string)) + (goto-char (match-end 1)) + (looking-at (concat " +" org-comment-string)) + (replace-match "" t t) + (when (eolp) (insert " "))) + ((looking-at org-outline-regexp) + (goto-char (match-end 0)) + (insert org-comment-string " ")))))) (defvar org-last-todo-state-is-todo nil "This is non-nil when the last TODO state change led to a TODO state. @@ -11068,8 +11086,8 @@ For calling through lisp, arg is also interpreted in the following way: (catch 'exit (org-back-to-heading t) (if (looking-at org-outline-regexp) (goto-char (1- (match-end 0)))) - (or (looking-at (concat " +" org-todo-regexp "\\( +\\|$\\)")) - (looking-at " *")) + (or (looking-at (concat org-todo-regexp "\\( +\\|[ \t]*$\\)")) + (looking-at "\\( *\\|[ \t]*$\\)")) (let* ((match-data (match-data)) (startpos (point-at-bol)) (logging (save-match-data (org-entry-get nil "LOGGING" t t))) @@ -16285,7 +16303,8 @@ When a buffer is unmodified, it is just killed. When modified, it is saved (if (org-on-heading-p t) (add-text-properties (point-at-bol) (org-end-of-subtree t) pa)))) (goto-char (point-min)) - (setq re (concat org-outline-regexp-bol "+" org-comment-string "\\>")) + (setq re (format org-heading-keyword-regexp-format + org-comment-string)) (while (re-search-forward re nil t) (add-text-properties (match-beginning 0) (org-end-of-subtree t) pc))) @@ -19836,13 +19855,16 @@ this line is also exported in fixed-width font." (forward-line 1))) (save-excursion (org-back-to-heading) - (if (looking-at (concat org-outline-regexp - "\\( *\\<" org-quote-string "\\>[ \t]*\\)")) - (replace-match "" t t nil 1) - (if (looking-at org-outline-regexp) - (progn - (goto-char (match-end 0)) - (insert org-quote-string " ")))))))) + (cond + ((looking-at (format org-heading-keyword-regexp-format + org-quote-string)) + (goto-char (match-end 1)) + (looking-at (concat " +" org-quote-string)) + (replace-match "" t t) + (when (eolp) (insert " "))) + ((looking-at org-outline-regexp) + (goto-char (match-end 0)) + (insert org-quote-string " "))))))) (defun org-reftex-citation () "Use reftex-citation to insert a citation into the buffer. @@ -20158,8 +20180,9 @@ empty." (save-excursion (beginning-of-line 1) (let ((case-fold-search nil)) - (looking-at (concat "^\\(\\*+\\)[ \t]+\\(" org-todo-regexp - "\\)?[ \t]*$")))))) + (looking-at org-todo-line-regexp) + (not (match-string 3)))))) + (defun org-at-heading-or-item-p () (or (org-on-heading-p) (org-at-item-p))) -- 1.7.6 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-13 10:16 ` Nicolas Goaziou 2011-08-16 14:47 ` Bastien @ 2011-08-16 21:07 ` Carsten Dominik 2011-08-16 21:44 ` Nicolas Goaziou 1 sibling, 1 reply; 22+ messages in thread From: Carsten Dominik @ 2011-08-16 21:07 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, emacs-orgmode, Osamu OKANO On 13.8.2011, at 12:16, Nicolas Goaziou wrote: > Hello, > > Bastien <bzg@altern.org> writes: > >> Yep. When you have some free time (!), please suggest a patch and a >> small org test file so that we can test. > > Here is an attempt to convert word boundaries into white spaces where it > matters. I am not sure this is a good idea. With this patch, you always require the space to be there. So "* TODO" would not be a task. I am not sure, this might have side effects. - Carsten > > I paste again the test file from Osamu Okano for reference. > > #+begin_src org > #+TYP_TODO: SOMEDAY > * someday/maybe > * SOMEDAY/maybe > * SOMEDAY maybe > * someday maybe > * read/review > * READ/review > * conf > #+end_src > > > Regards, > > -- > Nicolas Goaziou > <0001-Enforce-white-space-after-todo-keywords.patch> ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-16 21:07 ` Carsten Dominik @ 2011-08-16 21:44 ` Nicolas Goaziou 2011-08-17 7:30 ` Carsten Dominik 2011-08-17 15:57 ` Bastien 0 siblings, 2 replies; 22+ messages in thread From: Nicolas Goaziou @ 2011-08-16 21:44 UTC (permalink / raw) To: Carsten Dominik; +Cc: Bastien, emacs-orgmode, Osamu OKANO Hello, Carsten Dominik <carsten.dominik@gmail.com> writes: > I am not sure this is a good idea. With this patch, you always > require the space to be there. So "* TODO" would not be a task. > I am not sure, this might have side effects. Notwithstanding the fontification problem, isn't "* TODO" considered as a valid task, whose text is "TODO" and without a keyword? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-16 21:44 ` Nicolas Goaziou @ 2011-08-17 7:30 ` Carsten Dominik 2011-08-17 16:07 ` Bastien 2011-08-17 15:57 ` Bastien 1 sibling, 1 reply; 22+ messages in thread From: Carsten Dominik @ 2011-08-17 7:30 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, emacs-orgmode, Osamu OKANO On Aug 16, 2011, at 11:44 PM, Nicolas Goaziou wrote: > Hello, > > Carsten Dominik <carsten.dominik@gmail.com> writes: > >> I am not sure this is a good idea. With this patch, you always >> require the space to be there. So "* TODO" would not be a task. >> I am not sure, this might have side effects. > > Notwithstanding the fontification problem, isn't "* TODO" considered as > a valid task, whose text is "TODO" and without a keyword? Well, the behavior is really undefined on these border cases. My worries also stem from the possibility that the match of these regexps now extends an additional character, and there may be places in the code which rely on (match-end 0) being right after (e.g.) the TODO keyword. I do not know if this is the case, but it is a definite possibility. - Carsten ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-17 7:30 ` Carsten Dominik @ 2011-08-17 16:07 ` Bastien 0 siblings, 0 replies; 22+ messages in thread From: Bastien @ 2011-08-17 16:07 UTC (permalink / raw) To: Carsten Dominik; +Cc: emacs-orgmode, Nicolas Goaziou, Osamu OKANO Hi Carsten and Nicolas, Carsten Dominik <carsten.dominik@gmail.com> writes: >> Notwithstanding the fontification problem, isn't "* TODO" considered as >> a valid task, whose text is "TODO" and without a keyword? > > Well, the behavior is really undefined on these border cases. There are side-effects to the current behavior. Basically, in headlines like "* TODO", the TODO keyword will not be matched correctly. So in column view, "TODO" will be displayed as the ITEM instead of the TODO keyword, which will certainly be confusing for users (see my other email). I suggest enforcing [ \t\n] instead of [ \t] to make sure those headlines are handled correctly. > My worries also stem from the possibility that the match > of these regexps now extends an additional character, and > there may be places in the code which rely on (match-end 0) > being right after (e.g.) the TODO keyword. > I do not know if this is the case, but it > is a definite possibility. Whether this is the case or not, I think the correct fix is to enforce [ \t\n] _outside_ the TODO keyword submatch. Nicolas, can you make the two suggested changes, i.e. using [ \t\n] and make sure this string is required outside the TODO keyword submatch? If you don't have time just let me know and I'll do it. Thanks! -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-16 21:44 ` Nicolas Goaziou 2011-08-17 7:30 ` Carsten Dominik @ 2011-08-17 15:57 ` Bastien 2011-08-17 17:45 ` Sebastien Vauban 1 sibling, 1 reply; 22+ messages in thread From: Bastien @ 2011-08-17 15:57 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Osamu OKANO, emacs-orgmode, Carsten Dominik Hi nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > Notwithstanding the fontification problem, isn't "* TODO" considered > as a valid task, whose text is "TODO" and without a keyword? FWIW, I'm not in favor of this -- I'd rather consider it a task with a todo keyword but with no "true headline". -- Bastien ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: TODO type problem on speedbar and imenu. 2011-08-17 15:57 ` Bastien @ 2011-08-17 17:45 ` Sebastien Vauban 0 siblings, 0 replies; 22+ messages in thread From: Sebastien Vauban @ 2011-08-17 17:45 UTC (permalink / raw) To: emacs-orgmode-mXXj517/zsQ Hi Bastien and Nicolas, Bastien wrote: > Nicolas Goaziou <n.goaziou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes: >> Notwithstanding the fontification problem, isn't "* TODO" considered >> as a valid task, whose text is "TODO" and without a keyword? > > FWIW, I'm not in favor of this -- I'd rather consider it a task with a > todo keyword but with no "true headline". FWIW bis, I would make the exact same interpretation as you do, Bastien. Best regards, Seb -- Sebastien Vauban ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2011-08-25 0:32 UTC | newest] Thread overview: 22+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-07-22 12:51 TODO type problem on speedbar and imenu Osamu OKANO 2010-07-23 9:06 ` Noorul Islam K M 2010-07-24 21:38 ` Sébastien Vauban 2010-07-25 11:48 ` Osamu OKANO 2010-08-01 12:50 ` David Maus 2011-07-21 0:07 ` Nicolas Goaziou 2011-07-21 7:19 ` Sebastien Vauban 2011-07-24 19:00 ` Bastien 2011-08-13 10:16 ` Nicolas Goaziou 2011-08-16 14:47 ` Bastien 2011-08-16 20:54 ` Nicolas Goaziou 2011-08-17 16:00 ` Bastien 2011-08-17 18:16 ` Nicolas Goaziou 2011-08-24 14:18 ` Bastien 2011-08-24 14:37 ` Carsten Dominik 2011-08-25 0:31 ` Nicolas Goaziou 2011-08-16 21:07 ` Carsten Dominik 2011-08-16 21:44 ` Nicolas Goaziou 2011-08-17 7:30 ` Carsten Dominik 2011-08-17 16:07 ` Bastien 2011-08-17 15:57 ` Bastien 2011-08-17 17:45 ` Sebastien Vauban
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).