[O] Completely hide the :PROPERTIES: drawer in org-mode.

2019-02-07 Thread Keith David Bershatsky
A few years ago, I wrote up an answer to my own question on Stackoverflow to 
completely hide the :PROPERTIES: drawer, including the line that says 
:PROPERTIES:.  Since then, it has received nearly 5,000 views, 11 stars, 17 
upvotes on the initial question, and 15 upvotes on the answer.

Today, a forum participant posted a comment underneath my answer asking why not 
send this upstream.  So, here is the link to the answer:

https://stackoverflow.com/a/17492723/2112489

Thanks,

Keith



[O] org-agenda-highlight-todo may erroneously pickup icon 'display property.

2017-01-19 Thread Keith David Bershatsky
Depending upon a user's `org-agenda-prefix-format` (e.g., "%i %-10:c% t%s"), 
`org-agenda-highlight-todo` may erroneously pickup an icon `'display` property 
and then include/duplicate that icon in a new space between the todo-keyword 
and the priority.  I chose tho fix this in my own setup with `org-plist-delete` 
to remove the `'display` pair of PROPERTY / VALUE from the plist of text 
properties that are copied to the new space " " that is concatenated between 
the todo-keyword and the priority.

Thanks,

Keith



[O] `org-agenda-sorting-strategy` -- missing text properties.

2015-06-06 Thread Keith David Bershatsky
There are nine (9) places in org-version 8.2.10 (which is included within Emacs 
public release 24.5.1) that could use some attention by the org-mode team.  I 
have fixed it in my own custom version of org-mode, but I have seen a couple of 
questions recently on the Emacs forums by users wondering why the sorting 
strategy does not always work in various situations.  The reason why users are 
having problems is because not all of the text properties are added during the 
data gathering process that are needed for `org-entries-lessp` to do its job.  
I would suggest that the org-mode team look at all nine (9) locations where 
`org-add-props txt props` is used and try to add as many additional text 
properties as possible for members of the `org-agenda-sorting-strategy`.  Of 
course, the org-mode team will need to make decisions and code will need to be 
added to gather/assign the applicable values before the text-properties can be 
assigned.  In a nutshell, if the `org-agenda-sorting-strategy` of
 fers a sorting type, then an effort should be made within the code to assign 
those corresponding text properties when the data is gathered.  Decisions by 
the org-mode team, include, but are not limited to, which timestamp will be 
used for a sorting date when both deadline and scheduled are present -- perhaps 
even a new sorting thing-a-ma-jig to deal with that special situation should be 
created.

Thanks,

Keith



[O] `invalid face reference nil` caused by `org-agenda-fontify-properties`

2015-05-09 Thread Keith David Bershatsky
I had a little free time today and was finally able to track down the invalid 
face reference when generating an org-agenda buffer.  It is caused because the 
`car` of the `cons` cell created by `org-agenda-fontify-properties` is 
sometimes `nil`.  I threw in `bold` as a catch-all and the error is gone.

On a different note, the help mode buffer (C-u C-x =) doesn't seem to be able 
to follow the link of the cons cell to the face in the source code -- this 
should also be fixed (but I don't have a solution for that today).

(defun org-agenda-fontify-priorities ()
  "Make highest priority lines bold, and lowest italic."
  (interactive)
  (mapc (lambda (o) (if (eq (overlay-get o 'org-type) 'org-priority)
  (delete-overlay o)))
  (overlays-in (point-min) (point-max)))
  (save-excursion
(let (b e p ov h l)
  (goto-char (point-min))
  (while (re-search-forward "\\[#\\(.\\)\\]" nil t)
  (setq h (or (get-char-property (point) 'org-highest-priority)
org-highest-priority)
l (or (get-char-property (point) 'org-lowest-priority)
org-lowest-priority)
p (string-to-char (match-string 1))
b (match-beginning 0)
e (if (eq org-agenda-fontify-priorities 'cookies)
(match-end 0)
  (point-at-eol))
ov (make-overlay b e))
  (overlay-put
   ov 'face
   (cons
 (cond
   ((org-face-from-face-or-color
'priority nil
(cdr (assoc p org-priority-faces
   ((and (listp org-agenda-fontify-priorities)
  (org-face-from-face-or-color
   'priority nil
   (cdr (assoc p org-agenda-fontify-priorities)
   ((equal p l) 'italic)
   ((equal p h) 'bold)
   (t 'bold)) ;; Here is a temporary fix!
 'org-priority))
  (overlay-put ov 'org-type 'org-priority)

Thanks,

Keith

;;;

Emacs  : GNU Emacs 25.0.50.1 (x86_64-apple-darwin10.8.0, NS appkit-1038.36 
Version 10.6.8 (Build 10K549))
 of 2014-10-01 on MP.local
Package: Org-mode version 8.2.6 (release_8.2.6-1 @ 
/Users/HOME/.0.data/.0.emacs/Emacs_10_01_2014.app/Contents/Resources/lisp/org/)

current state:
==
(setq
 org-tab-first-hook '(org-hide-block-toggle-maybe 
org-src-native-tab-command-maybe
  org-babel-hide-result-toggle-maybe
  org-babel-header-arg-expand)
 org-speed-command-hook '(org-speed-command-default-hook
  org-babel-speed-command-hook)
 org-occur-hook '(org-first-headline-recenter)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-confirm-shell-link-function 'yes-or-no-p
 org-startup-folded nil
 org-support-shift-select 'always
 org-agenda-custom-commands '(("1" "Events" agenda
   "excludes:  * Active | * Next Action"
   ((org-agenda-span (quote month))
(org-agenda-time-grid nil)
(org-agenda-outline-show-all-dates nil)
(org-agenda-entry-types (quote (:deadline)))
(org-agenda-skip-function
 (quote
  (org-agenda-skip-entry-if (quote regexp)
   "\\* Active\\|\\* Next Action")
  )
 )
(org-deadline-warning-days 0))
   )
  ("2"
   "TODAY:  Events (week) + Tasks (day) + Undated 
(all)"
   ((agenda
 

   "Events"
 

   ((org-agenda-span

 

 

 

  

 (quote week)

 

 

 

  

 )
  

[O] Programmatically add birthdays/holidays to the Agenda View.

2015-04-24 Thread Keith David Bershatsky
The following is a full working draft to programmatically add 
birthdays/holidays to the Agenda View without making entries in the diary or 
org files.  It is modeled after what `calendar-mode` presently offers.  I have 
posted the code on the Emacs beta stackexchange.  Please feel free to modify / 
incorporate that new feature into org-mode.  I have added limited support for 
text properties -- there are undoubtedly some additional text properties that 
the org-mode maintainers will want to add for sorting by name / date / 
priority, etc., and, perhaps whatever should appear when clicking on a link 
(e.g., the source code for birthday/holiday list, or something that might be 
useful).  In addition, the org-mode maintainers may wish to have the entries 
look more like standard headings with stars and so forth.

http://emacs.stackexchange.com/questions/10871/programmatically-add-birthdays-holidays-to-agenda-view-in-org-mode

;;;

(require 'org-agenda)
(require 'holidays)

(add-to-list 'org-agenda-custom-commands '(
  "Y" "365 Days -- holidays/birthdays" agenda "Year View" (
  (org-agenda-span 365)
  (org-agenda-time-grid nil)
  (org-agenda--show-holidays-birthdays t) )))

(defcustom org-agenda--show-holidays-birthdays nil
  "When non-`nil`, show holidays/birthdays in the agenda view."
  :group 'holidays)

(defcustom org-agenda--birthday-list (mapcar 'purecopy '(
  (holiday-fixed 1 2 "Jane Doe -- 01/02/1940")
  (holiday-fixed 2 15 "John Doe -- 02/15/1963")
  (holiday-fixed 3 2 "Seymoure Hersh -- 03/03/1999")
  (holiday-fixed 3 3 "Jashua Smith -- 03/03/1964")
  (holiday-fixed 3 5 "Frederick Holmes -- 03/05/1966")
  (holiday-fixed 4 7 "Fannie Mae -- 04/07/1970")
  (holiday-fixed 4 25 "Freddie Mack -- 04/25/1952")
  (holiday-float 5 0 2 "Mother's Day -- the second Sunday in May")
  (holiday-fixed 5 11 "George Lucas -- 05/11/1976")
  (holiday-fixed 5 18 "Harry Potter -- 05/18")
  (holiday-fixed 5 30 "Darth Vader -- 05/30/1972")
  (holiday-fixed 6 7 "Jabba the Hut -- 06/07/2007")
  (holiday-fixed 6 19 "Princess Lea -- 06/19/1983")
  (holiday-fixed 7 14 "Super Man -- 07/14/1970")
  (holiday-fixed 7 18 "Wonder Woman -- 07/18/1993")
  (holiday-fixed 10 3 "Jenifer Lopez (DOB:  10/03/2011)")
  (holiday-fixed 10 8 "Samuel Jacks (10/08/1965)")
  (holiday-fixed 10 25 "C3PO -- 10/25/2007")
  (holiday-fixed 11 14 "R2D2 -- 11/14/1981")
  (holiday-fixed 12 21 "Yoda -- 12/21/1958")
  (holiday-fixed 12 22 "Wookie -- 12/22/1967") ))
  "Birthdays."
  :type 'sexp
  :group 'holidays)

(defcustom org-agenda--holiday-list (mapcar 'purecopy '(
  (holiday-fixed 1 1 "New Year's Day")
  (holiday-float 1 1 3 "Martin Luther King Day")
  (holiday-float 2 1 3 "President's Day")
  (holiday-float 5 1 -1 "Memorial Day")
  (holiday-fixed 7 4 "Independence Day")
  (holiday-float 9 1 1 "Labor Day")
  (holiday-float 10 1 2 "Columbus Day")
  (holiday-fixed 11 11 "Veteran's Day")
  (holiday-float 11 4 4 "Thanksgiving")
  (holiday-fixed 12 25 "Christmas") ))
  "Custom holidays defined by the user."
  :type 'sexp
  :group 'holidays)

(defface org-agenda--holiday-face
  '((t (:foreground "red")))
  "Face for `org-agenda--holiday-face`."
  :group 'org-agenda)

(defface org-agenda--birthday-face
  '((t (:foreground "magenta")))
  "Face for `org-agenda--birthday-face`."
  :group 'org-agenda)

(defun org-agenda-list (&optional arg start-day span with-hour)
  "Produce a daily/weekly view from all files in variable 
`org-agenda-files'.
The view will be for the current day or week, but from the overview buffer
you will be able to go to other days/weeks.

With a numeric prefix argument in an interactive call, the agenda will
span ARG days.  Lisp programs should instead specify SPAN to change
the number of days.  SPAN defaults to `org-agenda-span'.

START-DAY defaults to TODAY, or to the most recent match for the weekday
given in `org-agenda-start-on-weekday'.

When WITH-HOUR is non-nil, only include scheduled and deadline
items if they have an hour specification like [h]h:mm."
  (interactive "P")
  (if org-agenda-overriding-arguments
  (setq arg (car org-agenda-overriding-arguments)
  start-day (nth 1 org-agenda-overriding-arguments)
  span (nth 2 org-agenda-overriding-arguments)))
  (if (and (integerp arg) (> arg 0))
  (setq span arg arg nil))
  (catch 'exit
(setq org-agenda-buffer-name
(or org-agenda-buffer-tmp-name
(if org-agenda-sticky
  (cond ((and org-keys (stringp org-match))
   (format "*Org Agenda(%s:%s)*" org-keys org-match))
  (org-keys
   (format "*Org Agenda(%s)*" org-keys))
  (t "*Org Agenda(a)*")))
   

[O] bug#16265: 24.3.50; re-search-forward (error "Invalid search bound (wrong side of point)")

2014-01-01 Thread Keith David Bershatsky
Yes, the issue has indeed been resolved in the latest version of Emacs Trunk 
that I built today.  I used my example to conduct the test, and it works now 
with `cache-long-scans` enabled.

Great job -- thank you Eli, and thanks again Nicolas!

Keith

;;;

At Wed, 01 Jan 2014 19:50:12 +0200,
Eli Zaretskii wrote:
> 
> > Date: Tue, 31 Dec 2013 09:37:15 -0800
> > From: Keith David Bershatsky 
> > Cc: 16...@debbugs.gnu.org
> > 
> > So my recommendation would be that the Emacs team return the default value 
> > of `cache-long-scans` to `nil`
> 
> Unlikely to happen.
> 
> > or, fix it somehow so that it doesn't interfere with popular functions like 
> > `re-search-forward` and `re-search-backward` after calling `org-capture`.
> 
> I think I fixed this in trunk revision 115826, please try the latest
> version of the code.  (I only verified that the simplified test case
> works after the fix.)
> 
> Thanks.





[O] bug#16265: 24.3.50; re-search-forward (error "Invalid search bound (wrong side of point)")

2013-12-31 Thread Keith David Bershatsky
Nicolas:

Yes, `(setq-default cache-long-scans nil)` does indeed fix the problem.  In a 
version of Emacs Trunk built on October 5, 2013, the default value for 
`cache-long-scans` is `nil`.  In the recent version of Emacs Trunk built on 
December 23, 2013, the default value for `cache-long-scans` is `t`.

I would suspect that anyone who uses `org-capture` will have significant 
problems performing various operations on the `org-agenda-files` subsequent to 
the initial call.  So my recommendation would be that the Emacs team return the 
default value of `cache-long-scans` to `nil`; or, fix it somehow so that it 
doesn't interfere with popular functions like `re-search-forward` and 
`re-search-backward` after calling `org-capture`.

Thank you very much for your hard work tracking down the issue.

Keith

;;;

At Tue, 31 Dec 2013 15:16:40 +0100,
Nicolas Richard wrote:
> 
> Nicolas Richard  writes:
> > I'll bisect this (I tested 24.3, it works there) and post the result
> 
> bisection is done.
> # first bad commit: [f56f1e3993fd79240e03666cf8390f489b4a2435] Switch 
> cache-long-scans to t by default.
> 
> and indeed, running
> emacs -Q --batch --eval '(setq-default cache-long-scans nil)' -l filenamehere
> worked for me.
> 
> Keith, can you test if it fixes the problems your are seeing as well ?
> (If it doesn't then I guess we'll need another bug report.) If it does,
> the next step is to understand why things break when the caching
> mechanism is enabled -- I give up there.
> 
> -- 
> Nico.





[O] bug#16265: 24.3.50; re-search-forward (error "Invalid search bound (wrong side of point)")

2013-12-28 Thread Keith David Bershatsky
Nicolas:

This example demonstrates the problem caused when `org-capture` damages the 
line numbers in the `org-agenda-files`, making it impossible to go to the 
bottom of the buffer with (goto-char (point-max))  --  consequently, 
re-search-backward fails -- other functions fail also, e.g., `org-sort-entries`.

(defun example ()
(interactive)
   (let* (
  (org-todo-keywords '((sequence "Active(a)" "Next Action(n)" 
"Reference(r)"  "Someday(s)" "Delegated(d)" "|" "None(N)") ))
  (sample-todo (concat
"* TASKS\n\n"
"** Active [#A] smith @ drawer-one (fishing) | drawer-two (tennis). 
:lawlist:\n"
"   DEADLINE: <2013-12-21 Sat 17:00>  SCHEDULED: <2013-12-21 Sat>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  fishing\n"
"   :DRAWER-TWO:  tennis\n"
"   :END:\n\n"
"** Next-Action [#B] doe @ drawer-one (football) | drawer-two 
(bowling). :fred:\n"
"   DEADLINE: <2013-12-22 Sun 08:30>  SCHEDULED: <2013-12-22 Sun>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  football\n"
"   :DRAWER-TWO:  bowling\n"
"   :END:\n\n"
"* EVENTS\n\n"
"** Reference [#C] john @ drawer-one (fishing) | drawer-two 
(sky-diving). :george:\n"
"   DEADLINE: <2013-12-23 Mon 10:15>  SCHEDULED: <2013-12-23 Mon>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  fishing\n"
"   :DRAWER-TWO:  sky-diving\n"
"   :END:\n\n"
"* UNDATED\n\n"
"** Someday [#D] jane @ drawer-one (basket-ball) | drawer-two 
(bowling). :sam:\n"
"   DEADLINE: <2013-12-24 Tues 12:00>  SCHEDULED: <2013-12-24 Tues>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  basket-ball\n"
"   :DRAWER-TWO:  bowling\n"
"   :END:")))
  (if (get-buffer "foo.org")
(progn
  (switch-to-buffer "foo.org")
  (erase-buffer)
  (delete-other-windows))
(switch-to-buffer (get-buffer-create "foo.org")))
  (org-mode)
  (linum-mode 1)
  (insert sample-todo)
  (goto-char (point-min))
  (or (y-or-n-p (format "For this example work, you must save this buffer 
as a file.  Proceed with example?"))
  (error "Canceled."))
  (write-file "~/Desktop/foo.org" t)
  (let* (
  (filename (buffer-file-name))
  (org-agenda-files (list filename))
  (org-capture-templates '(("n" "Next Action" entry (file+headline 
filename "TASKS")
  "** Next Action [#A] %?\n   DEADLINE: <%<%Y-%m-%d %a>>\n   :PROPERTIES:\n 
  :ToodledoID:\n   :ToodledoFolder: TASKS\n   :Hash:\n   :END:"
  :empty-lines 1
(search-backward-example)
(org-capture nil "n")
(message "-")
(message "Here we can see that the line numbers in 'foo.org' got messed up.")
(sit-for 5)
(insert "Hello World! :lawlist:")
(org-capture-finalize)
(search-backward-example)
(message "-")
(message "Here is where things really went wrong.  It's searching the WRONG 
todo.")
(message "-")
(switch-to-buffer "*Messages*"


(defun search-backward-example ()
(require 'org-element)
  (let* (element todo-state title deadline scheduled day month year
(org-todo-keywords '((sequence "Active(a)" "Next Action(n)" 
"Reference(r)"  "Someday(s)" "Delegated(d)" "|" "None(N)") )))
(goto-char (point-max))
(while (re-search-backward "^\*\* \\(Reference\\)" nil t)
  (setq element (org-element-at-point))
  (setq todo-state (org-element-property :todo-keyword element))
  (setq title (org-element-property :title element))
  (setq deadline (ignore-errors (org-element-property :deadline element) ))
  (setq scheduled (ignore-errors (org-element-property :scheduled element) 
))
  (setq day (ignore-errors (org-element-property :day-start scheduled)))
  (setq month (ignore-errors (org-element-property :month-start scheduled)))
  (setq year (ignore-errors (org-element-property :year-start scheduled)))
  (message "-")
  (message "todo-state:  %s" todo-state)
  (message "deadline:  %s" deadline)
  (message "scheduled:  %s" scheduled)
  (message "title:  %s" title)
  (message "day:  %s" day)
  (message "month:  %s" month)
  (message "year:  %s" year)
  (message "-") )))





[O] property drawer search -- org-element-headline-parser

2013-12-24 Thread Keith David Bershatsky
The property drawer search (which was working with Org version 7.9.3f) is no 
longer working with Org version 8.2.3a.  The following 'example' function works 
correctly when using the prior version of org-element-headline-parser.  Emacs 
Trunk (built today) comes with Org version 8.2.3a.

(require 'org)

(require 'org-element)

(defun example ()
  "For this example to work, it will need to create a file -- 'org-agenda-files'
You may adjust the location of the file.  The file will not be deleted 
automatically."
(interactive)
   (let ((sample-todo (concat
"** Active [#A] smith @ drawer-one (fishing) | drawer-two (tennis). 
:lawlist:\n"
"   DEADLINE: <2013-12-21 Sat 17:00>  SCHEDULED: <2013-12-21 Sat>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  fishing\n"
"   :DRAWER-TWO:  tennis\n"
"   :END:\n\n"
"** Next-Action [#B] doe @ drawer-one (football) | drawer-two 
(bowling). :fred:\n"
"   DEADLINE: <2013-12-22 Sun 08:30>  SCHEDULED: <2013-12-22 Sun>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  football\n"
"   :DRAWER-TWO:  bowling\n"
"   :END:\n\n"
"** Reference [#C] john @ drawer-one (fishing) | drawer-two 
(sky-diving). :george:\n"
"   DEADLINE: <2013-12-23 Mon 10:15>  SCHEDULED: <2013-12-23 Mon>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  fishing\n"
"   :DRAWER-TWO:  sky-diving\n"
"   :END:\n\n"
"** Someday [#D] jane @ drawer-one (basket-ball) | drawer-two 
(bowling). :sam:\n"
"   DEADLINE: <2013-12-24 Tues 12:00>  SCHEDULED: <2013-12-24 Tues>\n"
"   :PROPERTIES:\n"
"   :DRAWER-ONE:  basket-ball\n"
"   :DRAWER-TWO:  bowling\n"
"   :END:")))
  (if (get-buffer "foo.org")
(progn
  (switch-to-buffer "foo.org")
  (erase-buffer)
  (delete-other-windows))
(switch-to-buffer (get-buffer-create "foo.org")))
  (org-mode)
  (insert sample-todo)
  (goto-char (point-min))
  (or (y-or-n-p (format "For this example work, you must save this buffer 
as a file.  Proceed with example?"))
  (error "Canceled."))
  (write-file "~/Desktop/foo.org" t)
  (let* (
  (display-buffer-alist nil) ;; lawlist custom setting
  (filename (buffer-file-name))
  (org-agenda-files (list filename))
  (org-agenda-only-exact-dates t)
  (org-agenda-show-all-dates nil)
  (org-deadline-warning-days 0)
  (org-agenda-time-grid nil)
  (org-agenda-span 'month)
  (org-agenda-entry-types '(:deadline))
  (month "12")
  (year "2013")
  (org-agenda-start-day (concat year "-" month "-" "01"))
  (drawer-content (read-string "basket-ball | bowling | fishing | 
football | sky-diving | tennis:  " nil))
  (org-agenda-skip-function (lambda ()
(org-back-to-heading t)
(let* (
(element (org-element-at-point))
(drawer-one (org-element-property :drawer-one element))
(drawer-two (org-element-property :drawer-two element)))
  (cond
((not (or
  (equal drawer-one drawer-content)
  (equal drawer-two drawer-content)))
  (message "drawer-one:  %s" drawer-one)
  (message "drawer-two:  %s" drawer-two)
  (org-end-of-subtree t))
(t nil) )) )))
  (org-agenda-list)) ))

(defalias 'org-element-headline-parser 'lawlist-org-element-headline-parser)
(defun lawlist-org-element-headline-parser (limit &optional raw-secondary-p)
  "Parse an headline.

Return a list whose CAR is `headline' and CDR is a plist
containing `:raw-value', `:title', `:begin', `:end',
`:pre-blank', `:hiddenp', `:contents-begin' and `:contents-end',
`:level', `:priority', `:tags', `:todo-keyword',`:todo-type',
`:scheduled', `:deadline', `:timestamp', `:clock', `:category',
`:quotedp', `:archivedp', `:commentedp' and `:footnote-section-p'
keywords.

The plist also contains any property set in the property drawer,
with its name in lowercase, the underscores replaced with hyphens
and colons at the beginning (i.e. `:custom-id').

When RAW-SECONDARY-P is non-nil, headline's title will not be
parsed as a secondary string, but as a plain string instead.

Assume point is at beginning of the headline."
  (save-excursion
(let* ((components (org-heading-components))
   (level (nth 1 components))
   (todo (nth 2 components))
   (todo-type
(and todo (if (member todo org-done-keywords) 'done 'todo)))
   (tags (let ((raw-tags (nth 5 components)))
   (and raw-tags (org-split-string raw-tags ":"
   (raw-value (or (nth 4 components) ""))
   (quotedp
(let ((case-fold-search nil))
  (string-match (format "^%s\\( \\|$\\)" org-quote-string)
raw

[O] Fwd: property drawer search -- org-element-headline-parser

2013-12-24 Thread Keith David Bershatsky
Between the version 7.9.3f and 8.2.3a, the org team changed the property drawer 
from lowercase to capital letters for the org-element-headline-parser -- this 
resulted in several hours of lost time tracking down the issue.  The issue is 
now resolved -- I hope there was a good reason for changing it.

Keith

---

Begin forwarded message:

> From: Keith David Bershatsky 
> Date: December 23, 2013 6:46:57 PM PST
> To: emacs-orgmode@gnu.org
> Subject: property drawer search -- org-element-headline-parser
> 
> The property drawer search (which was working with Org version 7.9.3f) is no 
> longer working with Org version 8.2.3a.  The following 'example' function 
> works correctly when using the prior version of org-element-headline-parser.  
> Emacs Trunk (built today) comes with Org version 8.2.3a.
> 
> (require 'org)
> 
> (require 'org-element)
> 
> (defun example ()
>  "For this example to work, it will need to create a file -- 
> 'org-agenda-files'
> You may adjust the location of the file.  The file will not be deleted 
> automatically."
> (interactive)
>   (let ((sample-todo (concat
>"** Active [#A] smith @ drawer-one (fishing) | drawer-two (tennis). 
> :lawlist:\n"
>"   DEADLINE: <2013-12-21 Sat 17:00>  SCHEDULED: <2013-12-21 Sat>\n"
>"   :PROPERTIES:\n"
>"   :DRAWER-ONE:  fishing\n"
>"   :DRAWER-TWO:  tennis\n"
>"   :END:\n\n"
>"** Next-Action [#B] doe @ drawer-one (football) | drawer-two 
> (bowling). :fred:\n"
>"   DEADLINE: <2013-12-22 Sun 08:30>  SCHEDULED: <2013-12-22 Sun>\n"
>"   :PROPERTIES:\n"
>"   :DRAWER-ONE:  football\n"
>"   :DRAWER-TWO:  bowling\n"
>"   :END:\n\n"
>"** Reference [#C] john @ drawer-one (fishing) | drawer-two 
> (sky-diving). :george:\n"
>"   DEADLINE: <2013-12-23 Mon 10:15>  SCHEDULED: <2013-12-23 Mon>\n"
>"   :PROPERTIES:\n"
>"   :DRAWER-ONE:  fishing\n"
>"   :DRAWER-TWO:  sky-diving\n"
>"   :END:\n\n"
>"** Someday [#D] jane @ drawer-one (basket-ball) | drawer-two 
> (bowling). :sam:\n"
>"   DEADLINE: <2013-12-24 Tues 12:00>  SCHEDULED: <2013-12-24 Tues>\n"
>"   :PROPERTIES:\n"
>"   :DRAWER-ONE:  basket-ball\n"
>"   :DRAWER-TWO:  bowling\n"
>"   :END:")))
>  (if (get-buffer "foo.org")
>(progn
>  (switch-to-buffer "foo.org")
>  (erase-buffer)
>  (delete-other-windows))
>(switch-to-buffer (get-buffer-create "foo.org")))
>  (org-mode)
>  (insert sample-todo)
>  (goto-char (point-min))
>  (or (y-or-n-p (format "For this example work, you must save this buffer 
> as a file.  Proceed with example?"))
>  (error "Canceled."))
>  (write-file "~/Desktop/foo.org" t)
>  (let* (
>  (display-buffer-alist nil) ;; lawlist custom setting
>  (filename (buffer-file-name))
>  (org-agenda-files (list filename))
>  (org-agenda-only-exact-dates t)
>  (org-agenda-show-all-dates nil)
>  (org-deadline-warning-days 0)
>  (org-agenda-time-grid nil)
>  (org-agenda-span 'month)
>  (org-agenda-entry-types '(:deadline))
>  (month "12")
>  (year "2013")
>  (org-agenda-start-day (concat year "-" month "-" "01"))
>  (drawer-content (read-string "basket-ball | bowling | fishing | 
> football | sky-diving | tennis:  " nil))
>  (org-agenda-skip-function (lambda ()
>(org-back-to-heading t)
>(let* (
>(element (org-element-at-point))
>(drawer-one (org-element-property :drawer-one element))
>(drawer-two (org-element-property :drawer-two element)))
>  (cond
>((not (or
>  (equal drawer-one drawer-content)
>  (equal drawer-two drawer-content)))
>  (message "drawer-one:  %s" drawer-one)
>  (message "drawer-two:  %s" drawer-two)
>  (org-end-of-subtree t))
>(t nil) )) )))
>  (org-agenda-list)) ))
> 
> (defalias 'org-element-headline-parser 'lawlis