emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carsten Dominik <carsten.dominik@gmail.com>
To: Martin Pohlack <mp26@os.inf.tu-dresden.de>
Cc: org-mode <emacs-orgmode@gnu.org>
Subject: Re: Best way to implement Keywords feature
Date: Fri, 20 Nov 2009 19:06:26 +0100	[thread overview]
Message-ID: <D021293F-5E21-43E3-B66A-001F42F97A07@gmail.com> (raw)
In-Reply-To: <4AF97D04.8050304@os.inf.tu-dresden.de>

Hi Martin,

I have finally applied a modified version of you patch.  Thanks!

What I modified is this:

1. Your patch did remove the matching tags from the tag list itself,  
and not
    only from the agenda display line.  Tis had the consequence that  
secondary
    tag filtering on such tags would no longer work.  I think it is  
better
    if that still does work.

2. You can now both add the inherited tags, and remove some tags, not
    just one or the other.

Thanks!

- Carsten

On Nov 10, 2009, at 3:47 PM, Martin Pohlack wrote:

> Hi All,
>
> Martin Pohlack wrote:
>> Alan E. Davis wrote:
>>> In some cases, a single headword entry can relate to a large  
>>> number of
>>> topics.  I have tried dealing with longer tag lists: automatic
>>> adjustment of tags column (on this list a little utility was posted:
>>> org-adjust-tags-column-reset-tags.  I THINK that a keyword list may
>>> allow more freedom to cross-index, especially if it is easy to use.
>>>
>>> Can someone suggest a way to implement a keywording system,  
>>> perhaps with
>>> a custom agenda search?  Or have others dealt with this issue in
>>> innovative ways?
>>>
>>> I would appreciate any ideas.
>>
>> I still have the feeling that tags are the way to go.  Searching etc.
>> already works with tags.  Their disadvantage seems to be that lines  
>> get
>> cluttered if many tags are used.
>>
>> Maybe this can be solved with two approaches:
>> * In agendas, one could have a filter for which tags to show / hide.
>>  This would be useful otherwise too, as it would allow to hide  
>> context
>>  tags in already defined agendas.
>>
>>  org-agenda-hide-tags-regex
>>
>>  For example, all my contexts start with "@", so I would set it to be
>>  "^@work$" to hide redundant information in my work agendas, or use
>>  "^@" to remove all context information from a specific agenda.
>>
>> * For plain view, could we have a soft newline between tags and  
>> content
>>  for an item (like in long-lines-mode)?
>>  Tags would be shown on a new line (with indentation etc.) but  
>> would be
>>  stored on the same line in files?
>>
>>  For example, the file content ("\" added by me, should be one long
>>  line):
>
> Please find attached a patch that implements tag filtering for  
> agenda views.
>
> Feedback welcome.
>
> Cheers,
> Martin
> diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
> index 708b193..e146bc0 100644
> --- a/lisp/org-agenda.el
> +++ b/lisp/org-agenda.el
> @@ -1202,6 +1202,14 @@ When non-nil, this must be the number of  
> minutes, e.g. 60 for one hour."
>   :group 'org-agenda-line-format
>   :type 'boolean)
>
> +(defcustom org-agenda-hide-tags-regexp nil
> +  "Regular expression used to fitler away specific tags in agenda  
> views.
> +Nil means hide no tags."
> +  :group 'org-agenda-line-format
> +  :type '(choice
> +	  (const  :tag "Hide none" nil)
> +	  (string :tag "Regexp   ")))
> +
> (defcustom org-agenda-remove-tags nil
>   "Non-nil means, remove the tags from the headline copy in the  
> agenda.
> When this is the symbol `prefix', only remove tags when
> @@ -4507,9 +4515,20 @@ Any match of REMOVE-RE will be removed from  
> TXT."
>   (save-match-data
>     ;; Diary entries sometimes have extra whitespace at the beginning
>     (if (string-match "^ +" txt) (setq txt (replace-match "" nil nil  
> txt)))
> -    (when org-agenda-show-inherited-tags
> -      ;; Fix the tags part in txt
> -      (setq txt (org-agenda-add-inherited-tags txt tags)))
> +    ;; filter tags here
> +    (when org-agenda-hide-tags-regexp
> +      (setq tags (apply 'append (mapcar
> +                                 (lambda (x)
> +                                   (if (string-match org-agenda- 
> hide-tags-regexp x)
> +                                       nil
> +                                     (list x)))
> +                                 tags))))
> +    ;; Fix the tags part in txt
> +    (if org-agenda-show-inherited-tags
> +        (setq txt (org-agenda-add-inherited-tags txt tags))
> +      (when org-agenda-hide-tags-regexp
> +        (setq txt (org-agenda-add-local-tags txt tags))))
> +
>     (let* ((category (or category
> 			 org-category
> 			 (if buffer-file-name
> @@ -4640,6 +4659,24 @@ Any match of REMOVE-RE will be removed from  
> TXT."
> 	'extra extra
> 	'dotime dotime))))
>
> +(defun org-agenda-add-local-tags (txt tags)
> +  "Remove tags string from TXT, and add non-inherited list of tags.
> +Inherited tags in TAGS are ignored."
> +  (if (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\) 
> [ \t]*$") txt)
> +      (setq txt (substring txt 0 (match-beginning 0))))
> +  (when tags
> +    ;; drop inherited tags
> +    (let ((mytags (apply 'append (mapcar
> +                                  (lambda (x)
> +                                    (if (get-text-property 0  
> 'inherited x)
> +                                        nil
> +                                      (list x)))
> +                                  tags))))
> +      ;; continue with remainder
> +      (when (> (length mytags) 0)
> +        (setq txt (concat txt " :" (mapconcat (lambda (x) x) mytags  
> ":") ":" )))))
> +  txt)
> +
> (defun org-agenda-add-inherited-tags (txt tags)
>   "Remove tags string from TXT, and add complete list of tags.
> The new list includes inherited tags.  If any inherited tags are  
> present,
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

- Carsten

      reply	other threads:[~2009-11-20 18:06 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-05 22:42 Best way to implement Keywords feature Alan E. Davis
2009-11-05 22:58 ` Samuel Wales
2009-11-05 23:25   ` Alan E. Davis
2009-11-05 23:40     ` Samuel Wales
2009-11-06 11:48       ` Alan E. Davis
2009-11-06 13:28         ` Renzo Been :-)
2009-11-06 13:46           ` Giovanni Ridolfi
2009-11-06  9:09 ` Giovanni Ridolfi
2009-11-08 11:24   ` Paul Mead
2009-11-08 12:03     ` Matt Lundin
2009-11-08 18:18       ` Paul Mead
2009-11-08 18:51         ` Matthew Lundin
2009-11-09  0:00           ` Paul Mead
2009-11-09 12:27             ` Matthew Lundin
2009-11-09 13:05               ` Paul Mead
2009-11-09 14:26               ` Darlan Cavalcante Moreira
2009-11-09 14:52 ` Martin Pohlack
2009-11-10 14:47   ` Martin Pohlack
2009-11-20 18:06     ` Carsten Dominik [this message]

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=D021293F-5E21-43E3-B66A-001F42F97A07@gmail.com \
    --to=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=mp26@os.inf.tu-dresden.de \
    /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).