From 94117daef8fec4e214d9973a17c2ae4baba1d761 Mon Sep 17 00:00:00 2001 From: drlkf 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