emacs-orgmode
[Top][All Lists]
Advanced

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

[O] [BUG?] subtle sequencing error when setting org-bbdb-old in org-bbdb


From: Nick Dokos
Subject: [O] [BUG?] subtle sequencing error when setting org-bbdb-old in org-bbdb.el
Date: Sat, 25 Feb 2012 04:20:10 -0500

I was bitten by this and it took me a while to figure out what was going
on, so maybe I can save somebody some time by recording the problem here.

I'm using bbdb 2.36devo (i.e. an old bbdb version - see below for my
3.0 troubles), and although org-bbdb-anniversaries was working fine,
bbdb links did not: C-c l on a bbdb entry would raise an error about
void function bbdb-record-get-field. Now org-bbdb-store-link contains
the following code

                    (if org-bbdb-old
                        (bbdb-record-getprop rec 'company)
                      (car (bbdb-record-get-field rec 'organization))

so clearly org-bbdb-old was nil - but why? It seemed to me that it should
be t since my bbdb was old.

It turns out that org-bbdb.el contains a line that sets org-bbdb-old
thus:

  (defvar org-bbdb-old (fboundp 'bbdb-record-get-field-internal))

Check whether an "old" bbdb function is present and if so, set
org-bbdb-old to t. Basically, the variable tells the rest of org-bbdb.el
whether one's bbdb is old (< 3.0) or not, so that it can use the proper
compatibility layer. This was not working in my case : the variable
resolutely held the value nil, no matter what requires/load-library/ etc
tricks I threw at it.

The problem was that org-bbdb is part of org-modules by default and that
was loading org-bbdb way too early, certainly before bbdb itself was
loaded.  That would set the value to nil and nothing I would do could
change it (short of whacking it with a setq).

My solution was to change the customization of org-modules to get rid of
org-bbdb there. I do things in the proper sequence in my initialization
files in any case, so there is no need to have it in org-modules.
But maybe there's a better solution?

Re: the bbdb 3.0 troubles. I have tried switching to bbdb 3.0
(specifically "BBDB version 3.02 ($Date: 2012/01/02 10:08:06 $)") but
I've been stymied so far with org-bbdb-anniversaries blowing up (a far
worse scenario than the link problem above - that's why I'm still using
2.36devo and went after the link fix first).

The error I get is "Debugger entered--Lisp error: (void-function
bbdb-record-getprop)" in org-bbdb-anniv-hash (see backtrace below),
but I haven't chased down that problem yet. But it seems there are
people using bbdb 3.0 so I'm wondering what's wrong with my setup.

Nick


---------------------------------------------------------------------------
Debugger entered--Lisp error: (void-function bbdb-record-getprop)
  (bbdb-record-getprop rec org-bbdb-anniversary-field)
  (setq annivs (bbdb-record-getprop rec org-bbdb-anniversary-field))
  (if (setq annivs (bbdb-record-getprop rec org-bbdb-anniversary-field)) (progn 
(setq annivs (bbdb-split annivs "\n")) (while annivs (setq split 
(org-bbdb-anniv-split (pop annivs))) (multiple-value-bind (m d y) (values-list 
(funcall org-bbdb-extract-date-fun (car split))) (setq tmp (gethash (list m d) 
org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y (bbdb-record-name rec) 
(cadr split)) tmp) org-bbdb-anniv-hash)))))
  (when (setq annivs (bbdb-record-getprop rec org-bbdb-anniversary-field)) 
(setq annivs (bbdb-split annivs "\n")) (while annivs (setq split 
(org-bbdb-anniv-split (pop annivs))) (multiple-value-bind (m d y) (values-list 
(funcall org-bbdb-extract-date-fun (car split))) (setq tmp (gethash (list m d) 
org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y (bbdb-record-name rec) 
(cadr split)) tmp) org-bbdb-anniv-hash))))
  (while --cl-dolist-temp-- (setq rec (car --cl-dolist-temp--)) (when (setq 
annivs (bbdb-record-getprop rec org-bbdb-anniversary-field)) (setq annivs 
(bbdb-split annivs "\n")) (while annivs (setq split (org-bbdb-anniv-split (pop 
annivs))) (multiple-value-bind (m d y) (values-list (funcall 
org-bbdb-extract-date-fun (car split))) (setq tmp (gethash (list m d) 
org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y (bbdb-record-name rec) 
(cadr split)) tmp) org-bbdb-anniv-hash)))) (setq --cl-dolist-temp-- (cdr 
--cl-dolist-temp--)))
  (let ((--cl-dolist-temp-- (bbdb-records)) rec) (while --cl-dolist-temp-- 
(setq rec (car --cl-dolist-temp--)) (when (setq annivs (bbdb-record-getprop rec 
org-bbdb-anniversary-field)) (setq annivs (bbdb-split annivs "\n")) (while 
annivs (setq split (org-bbdb-anniv-split (pop annivs))) (multiple-value-bind (m 
d y) (values-list (funcall org-bbdb-extract-date-fun (car split))) (setq tmp 
(gethash (list m d) org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y ... 
...) tmp) org-bbdb-anniv-hash)))) (setq --cl-dolist-temp-- (cdr 
--cl-dolist-temp--))))
  (catch (quote --cl-block-nil--) (let ((--cl-dolist-temp-- (bbdb-records)) 
rec) (while --cl-dolist-temp-- (setq rec (car --cl-dolist-temp--)) (when (setq 
annivs (bbdb-record-getprop rec org-bbdb-anniversary-field)) (setq annivs 
(bbdb-split annivs "\n")) (while annivs (setq split (org-bbdb-anniv-split (pop 
annivs))) (multiple-value-bind (m d y) (values-list (funcall 
org-bbdb-extract-date-fun ...)) (setq tmp (gethash ... org-bbdb-anniv-hash)) 
(puthash (list m d) (cons ... tmp) org-bbdb-anniv-hash)))) (setq 
--cl-dolist-temp-- (cdr --cl-dolist-temp--)))))
  (cl-block-wrapper (catch (quote --cl-block-nil--) (let ((--cl-dolist-temp-- 
(bbdb-records)) rec) (while --cl-dolist-temp-- (setq rec (car 
--cl-dolist-temp--)) (when (setq annivs (bbdb-record-getprop rec 
org-bbdb-anniversary-field)) (setq annivs (bbdb-split annivs "\n")) (while 
annivs (setq split (org-bbdb-anniv-split ...)) (multiple-value-bind (m d y) 
(values-list ...) (setq tmp ...) (puthash ... ... org-bbdb-anniv-hash)))) (setq 
--cl-dolist-temp-- (cdr --cl-dolist-temp--))))))
  (block nil (let ((--cl-dolist-temp-- (bbdb-records)) rec) (while 
--cl-dolist-temp-- (setq rec (car --cl-dolist-temp--)) (when (setq annivs 
(bbdb-record-getprop rec org-bbdb-anniversary-field)) (setq annivs (bbdb-split 
annivs "\n")) (while annivs (setq split (org-bbdb-anniv-split (pop annivs))) 
(multiple-value-bind (m d y) (values-list (funcall org-bbdb-extract-date-fun 
...)) (setq tmp (gethash ... org-bbdb-anniv-hash)) (puthash (list m d) (cons 
... tmp) org-bbdb-anniv-hash)))) (setq --cl-dolist-temp-- (cdr 
--cl-dolist-temp--)))))
  (dolist (rec (bbdb-records)) (when (setq annivs (bbdb-record-getprop rec 
org-bbdb-anniversary-field)) (setq annivs (bbdb-split annivs "\n")) (while 
annivs (setq split (org-bbdb-anniv-split (pop annivs))) (multiple-value-bind (m 
d y) (values-list (funcall org-bbdb-extract-date-fun (car split))) (setq tmp 
(gethash (list m d) org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y 
(bbdb-record-name rec) (cadr split)) tmp) org-bbdb-anniv-hash)))))
  (let (split tmp annivs) (clrhash org-bbdb-anniv-hash) (dolist (rec 
(bbdb-records)) (when (setq annivs (bbdb-record-getprop rec 
org-bbdb-anniversary-field)) (setq annivs (bbdb-split annivs "\n")) (while 
annivs (setq split (org-bbdb-anniv-split (pop annivs))) (multiple-value-bind (m 
d y) (values-list (funcall org-bbdb-extract-date-fun (car split))) (setq tmp 
(gethash (list m d) org-bbdb-anniv-hash)) (puthash (list m d) (cons (list y ... 
...) tmp) org-bbdb-anniv-hash))))))
  org-bbdb-make-anniv-hash()
  (progn (org-bbdb-make-anniv-hash))
  (if (or org-bbdb-updated-p (= 0 (hash-table-count org-bbdb-anniv-hash))) 
(progn (org-bbdb-make-anniv-hash)))
  (when (or org-bbdb-updated-p (= 0 (hash-table-count org-bbdb-anniv-hash))) 
(org-bbdb-make-anniv-hash))
  org-bbdb-anniversaries()



reply via email to

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