emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] [misc-new-features 3/5] Add an option to sort tags automat


From: Bastien
Subject: Re: [Orgmode] [misc-new-features 3/5] Add an option to sort tags automatically.
Date: Tue, 14 Jul 2009 13:59:11 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Thanks James.

Can people try this and give some feedback if they find it useful?

James TD Smith <address@hidden> writes:

> ---
>  lisp/ChangeLog |    3 +++
>  lisp/org.el    |   17 ++++++++++++++++-
>  2 files changed, 19 insertions(+), 1 deletions(-)
>
> diff --git a/lisp/ChangeLog b/lisp/ChangeLog
> index 348ade3..9ce7a17 100755
> --- a/lisp/ChangeLog
> +++ b/lisp/ChangeLog
> @@ -11,6 +11,9 @@
>       SINCE_IA. These give the time since any active or inactive
>       timestamp in an entry.
>       (org-special-properties): Add SINCE, SINCE_IA.
> +     (org-tags-sort-function): Add custom declaration for tags
> +     sorting function.
> +     (org-set-tags): Sort tags if org-tags-sort-function is set
>  
>  2009-07-08  Carsten Dominik  <address@hidden>
>  
> diff --git a/lisp/org.el b/lisp/org.el
> index d08155a..854d09c 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -2337,6 +2337,15 @@ is better to limit inheritance to certain tags using 
> the variables
>         (const :tag "Yes, do list them" t)
>         (const :tag "List them, indented with leading dots" indented)))
>  
> +(defcustom org-tags-sort-function nil
> +  "When set, tags are sorted using this function as a comparator"
> +  :group 'org-tags
> +  :type '(choice
> +       (const :tag "No sorting" nil)
> +       (const :tag "Alphabetical" string<)
> +       (const :tag "Reverse alphabetical" string>)
> +       (function :tag "Custom function" nil)))
> +
>  (defvar org-tags-history nil
>    "History of minibuffer reads for tags.")
>  (defvar org-last-tags-completion-table nil
> @@ -10840,11 +10849,17 @@ With prefix ARG, realign all tags in headings in 
> the current buffer."
>         ;; No boolean logic, just a list
>         (setq tags (replace-match ":" t t tags))))
>  
> +      (if org-tags-sort-function
> +       (setq tags (mapconcat 'identity
> +                             (sort (org-split-string tags (org-re 
> "[^[:alnum:address@hidden"))
> +                                   org-tags-sort-function) ":")))
> +
>        (if (string-match "\\`[\t ]*\\'" tags)
> -          (setq tags "")
> +       (setq tags "")
>       (unless (string-match ":$" tags) (setq tags (concat tags ":")))
>       (unless (string-match "^:" tags) (setq tags (concat ":" tags))))
>  
> +
>        ;; Insert new tags at the correct column
>        (beginning-of-line 1)
>        (cond

-- 
 Bastien




reply via email to

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