* Fwd: org-priority: allow customization of priority indicator [not found] <f198bab7-9ec6-4496-89cd-d84d0917506a@internet> @ 2022-10-18 8:28 ` drlkf 2022-10-18 12:35 ` Ihor Radchenko 0 siblings, 1 reply; 6+ messages in thread From: drlkf @ 2022-10-18 8:28 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 535 bytes --] Hello, I would like to submit a patch to allow users to change the priority tag's form entirely. While it has been working for my use-case i.e basic operations inside org buffers and org-agenda, it is not perfect and there are some bugs that remain when using more advanced features with different tag forms (mine is `_p' where `p' is `[1-9]'), that I am not competent enough to solve. However I believe there are no breaking changes if the user does not modify said tag form. If there's any precision I can add, please let me know. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: org-priority.patch --] [-- Type: text/x-diff, Size: 6579 bytes --] From 94117daef8fec4e214d9973a17c2ae4baba1d761 Mon Sep 17 00:00:00 2001 From: drlkf <drlkf@drlkf.net> Date: Thu, 9 Jun 2022 03:19:00 +0200 Subject: [PATCH] org-priority: allow customization of priority indicator * org.el (org-priority): Allow the user to set the prefix and suffix of the priority indicator so that it have a completely different form for them (e.g _A instead of [#A]). --- org-agenda.el | 4 ++-- org-element.el | 8 ++++++-- org.el | 40 ++++++++++++++++++++++++++++++++-------- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/org-agenda.el b/org-agenda.el index 71aac271f..cbbe5e4c6 100644 --- a/org-agenda.el +++ b/org-agenda.el @@ -3431,8 +3431,8 @@ This ensures the export commands can easily use it." (setq props (plist-put props 'day tmp)) (setq props (plist-put props 'agenda-day tmp))) (when (setq tmp (plist-get props 'txt)) - (when (string-match "\\[#\\([A-Z0-9]\\)\\] ?" tmp) - (plist-put props 'priority-letter (match-string 1 tmp)) + (when (string-match org-priority-regexp tmp) + (plist-put props 'priority-letter (match-string 3 tmp)) (setq tmp (replace-match "" t t tmp))) (when (and (setq re (plist-get props 'org-todo-regexp)) (setq re (concat "\\`\\.*" re " ?")) diff --git a/org-element.el b/org-element.el index 9db1406b3..2047e202b 100644 --- a/org-element.el +++ b/org-element.el @@ -1009,7 +1009,9 @@ Assume point is at beginning of the headline." (match-string 1)))) (todo-type (and todo (if (member todo org-done-keywords) 'done 'todo))) - (priority (and (looking-at "\\[#.\\][ \t]*") + (priority (and (looking-at (format "%s.%s[ \t]*" + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-prefix))) (progn (goto-char (match-end 0)) (aref (match-string 0) 2)))) (commentedp @@ -1158,7 +1160,9 @@ Assume point is at beginning of the inline task." (match-string 0)))) (todo-type (and todo (if (member todo org-done-keywords) 'done 'todo))) - (priority (and (looking-at "\\[#.\\][ \t]*") + (priority (and (looking-at (format "%s.%s[ \t]*" + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-prefix))) (progn (goto-char (match-end 0)) (aref (match-string 0) 2)))) (title-start (point)) diff --git a/org.el b/org.el index 06af12339..648eb840a 100644 --- a/org.el +++ b/org.el @@ -4468,14 +4468,18 @@ related expressions." org-complex-heading-regexp (concat "^\\(\\*+\\)" "\\(?: +" org-todo-regexp "\\)?" - "\\(?: +\\(\\[#.\\]\\)\\)?" + (format "\\(?: +\\(%s.%s\\)\\)?" + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-suffix)) "\\(?: +\\(.*?\\)\\)??" "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?" "[ \t]*$") org-complex-heading-regexp-format (concat "^\\(\\*+\\)" "\\(?: +" org-todo-regexp "\\)?" - "\\(?: +\\(\\[#.\\]\\)\\)?" + (format "\\(?: +\\(%s.%s\\)\\)?" + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-suffix)) "\\(?: +" ;; Stats cookies can be stuck to body. "\\(?:\\[[0-9%%/]+\\] *\\)*" @@ -5764,8 +5768,10 @@ needs to be inserted at a specific position in the font-lock sequence.") '(org-activate-code (1 'org-code t)) ;; COMMENT (list (format - "^\\*+\\(?: +%s\\)?\\(?: +\\[#[A-Z0-9]\\]\\)? +\\(?9:%s\\)\\(?: \\|$\\)" + "^\\*+\\(?: +%s\\)?\\(?: +%s[A-Z0-9]%s\\)? +\\(?9:%s\\)\\(?: \\|$\\)" org-todo-regexp + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-suffix) org-comment-string) '(9 'org-special-keyword t)) ;; Blocks and meta lines @@ -7144,7 +7150,7 @@ This is a list with the following elements: (list (length (match-string 1)) (org-reduced-level (length (match-string 1))) (match-string-no-properties 2) - (and (match-end 3) (aref (match-string 3) 2)) + (and (match-end 3) (aref (match-string 3) (length org-priority-prefix))) (match-string-no-properties 4) (match-string-no-properties 5))))) @@ -11269,13 +11275,29 @@ from the `before-change-functions' in the current buffer." ;;;; Priorities +(defvar org-priority-prefix "[#" + "Prefix to insert before a priority value to form the priority indicator. +It should be matched in accordance by `org-priority-regexp' in order +for priorities to work both-ways (inserting and extracting).") + +(defvar org-priority-suffix "]" + "Suffix to insert after a priority value to end the priority indicator. +It should be matched in accordance by `org-priority-regexp' in order +for priorities to work both-ways (inserting and extracting).") + (defvar org-priority-regexp ".*?\\(\\[#\\([A-Z0-9]+\\)\\] ?\\)" "Regular expression matching the priority indicator. A priority indicator can be e.g. [#A] or [#1]. This regular expression matches these groups: 0 : the whole match, e.g. \"TODO [#A] Hack\" 1 : the priority cookie, e.g. \"[#A]\" -2 : the value of the priority cookie, e.g. \"A\".") +2 : the value of the priority cookie, e.g. \"A\". + +This regexp should match `org-priority-prefix' and +`org-priority-suffix' values in order for priorities to work both-ways +(inserting and extracting). + +See also `org-mouse-priority-regexp'.") (defun org-priority-up () "Increase the priority of the current item." @@ -11389,9 +11411,9 @@ or a character." (if (match-end 2) (progn (goto-char (match-end 2)) - (insert " [#" news "]")) + (insert " " org-priority-prefix news org-priority-suffix)) (goto-char (match-beginning 3)) - (insert "[#" news "] ")))) + (insert org-priority-prefix news org-priority-suffix " ")))) (org-align-tags)) (if remove (message "Priority removed") @@ -18800,7 +18822,9 @@ and :keyword." (push (org-point-in-group p 4 :tags) clist)) (goto-char p) (skip-chars-backward "^[\n\r \t") (or (bobp) (backward-char 1)) - (when (looking-at "\\[#[A-Z0-9]\\]") + (when (looking-at (format "%s[A-Z0-9]%s" + (regexp-quote org-priority-prefix) + (regexp-quote org-priority-suffix))) (push (org-point-in-group p 0 :priority) clist))) ((org-at-item-p) -- 2.30.2 [-- Attachment #3.1: Type: text/plain, Size: 0 bytes --] [-- Attachment #3.2: signature.asc --] [-- Type: application/pgp-signature, Size: 832 bytes --] ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: Fwd: org-priority: allow customization of priority indicator 2022-10-18 8:28 ` Fwd: org-priority: allow customization of priority indicator drlkf @ 2022-10-18 12:35 ` Ihor Radchenko 2022-11-21 3:24 ` Ihor Radchenko 0 siblings, 1 reply; 6+ messages in thread From: Ihor Radchenko @ 2022-10-18 12:35 UTC (permalink / raw) To: drlkf; +Cc: emacs-orgmode drlkf <drlkf@drlkf.net> writes: > I would like to submit a patch to allow users to change the priority > tag's form entirely. While it has been working for my use-case i.e > basic operations inside org buffers and org-agenda, it is not perfect > and there are some bugs that remain when using more advanced features > with different tag forms (mine is `_p' where `p' is `[1-9]'), that I am > not competent enough to solve. However I believe there are no breaking > changes if the user does not modify said tag form. If there's any > precision I can add, please let me know. Thanks for the patch! In general, we do not intend to support changing basic elements of Org syntax. So, things like your _p may remain buggy because they clash with underscore emphasis. However, your patch is anyway useful because it makes the Org code cleaner and more modular. A side effect that users will be able to change the syntax at their own risk can also be considered as somewhat odd feature (apparently useful for you at least). As a general feedback to the patch, I suggest moving the old and new priority variables into org-element.el and change them to defconst (Elisp still allows altering defconsts). When moving, rename them to use org-element-* prefix, but keep old existing variables under defvaralias. More comments below. > Subject: [PATCH] org-priority: allow customization of priority indicator > > * org.el (org-priority): Allow the user to set the prefix and suffix > of the priority indicator so that it have a completely different form > for them (e.g _A instead of [#A]). Please word the patch more along the lines of "Refactor priority syntax". Org maintainers are not going to take an extra burden of resolving bugs coming from arbitrary changes in property syntax. > - (when (string-match "\\[#\\([A-Z0-9]\\)\\] ?" tmp) > - (plist-put props 'priority-letter (match-string 1 tmp)) > + (when (string-match org-priority-regexp tmp) > + (plist-put props 'priority-letter (match-string 3 tmp)) Do note that org-priority-regexp is not the same with the old regexp. Maybe we can introduce something like org-element-priority-regexp that does not do match groups. Just "[\\[#[A-Z0-9]+\\][ \t]*". Then, you can use it here instead of employing costly lazy matching in analytic org-priority-regexp. > - (priority (and (looking-at "\\[#.\\][ \t]*") > + (priority (and (looking-at (format "%s.%s[ \t]*" > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-prefix))) Better use org-element-priority-regexp as above. > - (priority (and (looking-at "\\[#.\\][ \t]*") > + (priority (and (looking-at (format "%s.%s[ \t]*" > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-prefix))) > (progn (goto-char (match-end 0)) > (aref (match-string 0) 2)))) same > - "\\(?: +\\(\\[#.\\]\\)\\)?" > + (format "\\(?: +\\(%s.%s\\)\\)?" > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-suffix)) > "\\(?: +\\(.*?\\)\\)??" > "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?" > "[ \t]*$") > org-complex-heading-regexp-format > (concat "^\\(\\*+\\)" > "\\(?: +" org-todo-regexp "\\)?" > - "\\(?: +\\(\\[#.\\]\\)\\)?" > + (format "\\(?: +\\(%s.%s\\)\\)?" > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-suffix)) same > "\\(?: +" > ;; Stats cookies can be stuck to body. > "\\(?:\\[[0-9%%/]+\\] *\\)*" > @@ -5764,8 +5768,10 @@ needs to be inserted at a specific position in the font-lock sequence.") > '(org-activate-code (1 'org-code t)) > ;; COMMENT > (list (format > - "^\\*+\\(?: +%s\\)?\\(?: +\\[#[A-Z0-9]\\]\\)? +\\(?9:%s\\)\\(?: \\|$\\)" > + "^\\*+\\(?: +%s\\)?\\(?: +%s[A-Z0-9]%s\\)? +\\(?9:%s\\)\\(?: \\|$\\)" > org-todo-regexp > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-suffix) same > ;;;; Priorities > > +(defvar org-priority-prefix "[#" > + "Prefix to insert before a priority value to form the priority indicator. > +It should be matched in accordance by `org-priority-regexp' in order > +for priorities to work both-ways (inserting and extracting).") > + > +(defvar org-priority-suffix "]" > + "Suffix to insert after a priority value to end the priority indicator. > +It should be matched in accordance by `org-priority-regexp' in order > +for priorities to work both-ways (inserting and extracting).") > + > (defvar org-priority-regexp ".*?\\(\\[#\\([A-Z0-9]+\\)\\] ?\\)" You can use org-priority-prefix and org-priority-suffix values here. > - (when (looking-at "\\[#[A-Z0-9]\\]") > + (when (looking-at (format "%s[A-Z0-9]%s" > + (regexp-quote org-priority-prefix) > + (regexp-quote org-priority-suffix))) org-element-priority-regexp -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fwd: org-priority: allow customization of priority indicator 2022-10-18 12:35 ` Ihor Radchenko @ 2022-11-21 3:24 ` Ihor Radchenko 2022-11-24 22:11 ` drlkf 0 siblings, 1 reply; 6+ messages in thread From: Ihor Radchenko @ 2022-11-21 3:24 UTC (permalink / raw) To: drlkf; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: > Thanks for the patch! > > In general, we do not intend to support changing basic elements of Org > syntax. So, things like your _p may remain buggy because they clash with > underscore emphasis. > ... > More comments below. > ... [I am following this up as more than one month passed since the last activity in the thread] Have you had a chance to look into my comments? If you have any objections or issues with addressing them, feel free to reply. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fwd: org-priority: allow customization of priority indicator 2022-11-21 3:24 ` Ihor Radchenko @ 2022-11-24 22:11 ` drlkf 2022-11-25 2:12 ` Ihor Radchenko 0 siblings, 1 reply; 6+ messages in thread From: drlkf @ 2022-11-24 22:11 UTC (permalink / raw) To: Ihor Radchenko; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 789 bytes --] Hi, Apologies, I've been quite busy and I haven't had time to dive more into this, but I have it written down somewhere and I'll make modifications as soon as I am able. I'll reply here with a new patch when I'm done. Ihor Radchenko <yantar92@posteo.net> wrote: > Ihor Radchenko <yantar92@posteo.net> writes: > >> Thanks for the patch! >> >> In general, we do not intend to support changing basic elements of Org >> syntax. So, things like your _p may remain buggy because they clash with >> underscore emphasis. >> ... >> More comments below. >> ... > > [I am following this up as more than one month passed since the last > activity in the thread] > > Have you had a chance to look into my comments? > If you have any objections or issues with addressing them, feel free to > reply. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 832 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fwd: org-priority: allow customization of priority indicator 2022-11-24 22:11 ` drlkf @ 2022-11-25 2:12 ` Ihor Radchenko 2023-04-04 12:59 ` Ihor Radchenko 0 siblings, 1 reply; 6+ messages in thread From: Ihor Radchenko @ 2022-11-25 2:12 UTC (permalink / raw) To: drlkf; +Cc: emacs-orgmode drlkf <drlkf@drlkf.net> writes: > Apologies, I've been quite busy and I haven't had time to dive more into > this, but I have it written down somewhere and I'll make modifications > as soon as I am able. I'll reply here with a new patch when I'm done. No problem. This email was not to push you. Rather just a reminder to make sure that you did not forget about this thread. Take your time. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fwd: org-priority: allow customization of priority indicator 2022-11-25 2:12 ` Ihor Radchenko @ 2023-04-04 12:59 ` Ihor Radchenko 0 siblings, 0 replies; 6+ messages in thread From: Ihor Radchenko @ 2023-04-04 12:59 UTC (permalink / raw) To: drlkf; +Cc: emacs-orgmode Canceled. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-04-04 12:57 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <f198bab7-9ec6-4496-89cd-d84d0917506a@internet> 2022-10-18 8:28 ` Fwd: org-priority: allow customization of priority indicator drlkf 2022-10-18 12:35 ` Ihor Radchenko 2022-11-21 3:24 ` Ihor Radchenko 2022-11-24 22:11 ` drlkf 2022-11-25 2:12 ` Ihor Radchenko 2023-04-04 12:59 ` Ihor Radchenko
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).