emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Ihor Radchenko <yantar92@gmail.com>
To: Ignacio Casso <ignaciocasso@hotmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [BUG] org-complex-heading-regexp should consider COMMENT keywords [9.5.2 (release_9.5.2-25-gaf6f12 @ /home/ignacio/repos/emacs/lisp/org/)]
Date: Fri, 06 May 2022 18:52:19 +0800	[thread overview]
Message-ID: <87fsln6iho.fsf@localhost> (raw)
In-Reply-To: <PAXPR06MB7760A48B77AC11D27B9989D7C6C29@PAXPR06MB7760.eurprd06.prod.outlook.com>

Ignacio Casso <ignaciocasso@hotmail.com> writes:

>> Note that org-complex-heading-regexp-format does consider statistics
>> cookies, but only at the beginning/end of the headline title.
>> Unfortunately, it is impossible to provide generic printf format to
>> match a headline title with arbitrary statistics cookies inserted in the
>> middle of it.
>
> Could not something equivalent be done for COMMENT keywords and
> optionally match them at the beginning of the headline in
> `org-complex-heading-regexp-format'? Something like this:
>
>   (setq org-complex-heading-regexp-format
>         (concat "^\\(\\*+\\)"
>   	      "\\(?: +" org-todo-regexp "\\)?"
>   	      "\\(?: +\\(\\[#.\\]\\)\\)?"
>   	      "\\(?: +"
> +             ;; Headline might be commented
> +             "\\(COMMENT \\)?
>   	      ;; Stats cookies can be stuck to body.
>   	      "\\(?:\\[[0-9%%/]+\\] *\\)*"
>   	      "\\(%s\\)"
>   	      "\\(?: *\\[[0-9%%/]+\\]\\)*"
>   	      "\\)"
>   	      "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?"
>   	      "[ \t]*$"))
>
> This would fix the problem I really cared about: being able to use a
> headline as capture target regardless of whether it is commented or
> not. Getting the headline text was never important to me, so I don't
> really care that much about `org-complex-heading-regexp'.

Sounds reasonable. Could you prepare a patch?
COMMENT should be inside a shy group and note that there might be an
arbitrary number of space after COMMENT string.

>> I generally dislike the idea of the available plethora of analytic
>> regexps with numbered match groups.
>
> Do you mean that there is no way to specify an optional string in a
> regular expression without wrapping it in a parenthesized group, which
> would break the match group numbering backwards compatibility? I'm not
> that familiar with regular expressions, but if that's the case I
> completely agree with your last statement.

Not exactly. We could use shy (unnumbered) match group and not break the
group numbers. However, adding an extra optional match means that we can
break an old code that could be relying on the next group to contain
this optional match:

Old code:
(when (string-match-p "COMMENT" (match-string 1)) ...)

Before "\\(.+\\)"
After "\\(?:COMMENT\\)?\\(.+\\)"

The old code will never match COMMENT when the new regexp is used.

Best,
Ihor


  reply	other threads:[~2022-05-06 10:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-05 10:27 Ignacio Casso
2022-05-06 10:52 ` Ihor Radchenko [this message]
2022-05-06 12:14   ` Ignacio Casso
2022-05-07  5:27     ` Ihor Radchenko
2022-05-07 16:54       ` Ignacio Casso
2022-05-08 10:23         ` Ihor Radchenko
2022-05-08 11:15           ` Ignacio Casso
2022-05-08 11:51             ` Ihor Radchenko
2022-05-22  8:52               ` Bastien Guerry
  -- strict thread matches above, loose matches on Subject: below --
2022-03-22 11:41 Ignacio Casso

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=87fsln6iho.fsf@localhost \
    --to=yantar92@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=ignaciocasso@hotmail.com \
    /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).