Skip to content

Commit

Permalink
new format `%t' for bbdb-anniv-alist
Browse files Browse the repository at this point in the history
  • Loading branch information
mcweeny committed Dec 18, 2011
1 parent 2e1ef24 commit c81dc33
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 14 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
@@ -1,3 +1,9 @@
2011-12-18 Roland Winkler <winkler@gnu.org>
* lisp/bbdb-anniv.el (bbdb-anniv-alist): New format specification
`%t'.
(bbdb-anniv-diary-entries): Use it. Handle diary's backup forms
in better a way.

2011-12-11 Roland Winkler <winkler@gnu.org> 2011-12-11 Roland Winkler <winkler@gnu.org>
* INSTALL, Makefile.in, aclocal.m4, configure.ac, install-sh: * INSTALL, Makefile.in, aclocal.m4, configure.ac, install-sh:
* lisp/Makefile.in, doc/Makefil.in, doc/bbdb.texi: * lisp/Makefile.in, doc/Makefil.in, doc/bbdb.texi:
Expand Down
2 changes: 2 additions & 0 deletions TODO
Expand Up @@ -44,6 +44,8 @@ See the end of the file for license conditions.


** Allow splitting of bbdb-file into multiple files ** Allow splitting of bbdb-file into multiple files


** bbdb-narrow-display: Inverse of bbdb-append-display

* Internals * Internals


** Remove bbdb-auto-notes-rules-expanded? ** Remove bbdb-auto-notes-rules-expanded?
Expand Down
37 changes: 23 additions & 14 deletions lisp/bbdb-anniv.el
Expand Up @@ -26,7 +26,6 @@
;; In particular, `calendar-date-style' is obeyed via `diary-date-forms'. ;; In particular, `calendar-date-style' is obeyed via `diary-date-forms'.
;; If `bbdb-anniv-alist' has a non-nil FORM for this type of anniversary, ;; If `bbdb-anniv-alist' has a non-nil FORM for this type of anniversary,
;; FORM is used to display the anniversary entry in the diary buffer. ;; FORM is used to display the anniversary entry in the diary buffer.
;; In this case TEXT is ignored.
;; If FORM is nil, TEXT is used instead to display the anniversary entry ;; If FORM is nil, TEXT is used instead to display the anniversary entry
;; in the diary buffer. ;; in the diary buffer.
;; ;;
Expand All @@ -50,6 +49,7 @@ FORM is a format string with the following substitutions:
%n name of the record %n name of the record
%d number of years %d number of years
%s ordinal suffix (st, nd, rd, th) for the year. %s ordinal suffix (st, nd, rd, th) for the year.
%t the optional text following the date string in an anniversary field.
If FORM is nil, the format string is taken from the anniversary field If FORM is nil, the format string is taken from the anniversary field
of each record." of each record."
:type '(repeat (cons :tag "Rule" :type '(repeat (cons :tag "Rule"
Expand Down Expand Up @@ -126,23 +126,32 @@ To enable this feature, put the following into your .emacs:
(dolist (rule bbdb-anniv-alist) (dolist (rule bbdb-anniv-alist)
(dolist (anniv (bbdb-record-note-split record (car rule))) (dolist (anniv (bbdb-record-note-split record (car rule)))
(let ((date-forms date-forms) (let ((date-forms date-forms)
(anniv-string (concat anniv " XX")) ; for backup forms (anniv-string (concat anniv " X")) ; for backup forms
(case-fold-search t) (case-fold-search t)
form yy text) form yy text)
(while (setq form (pop date-forms)) (while (setq form (pop date-forms))
(if (string-match (car form) anniv-string) (when (string-match (car form) anniv-string)
(setq date-forms nil (setq date-forms nil
yy (match-string 1 anniv-string) yy (match-string 1 anniv-string)
yy (if (and yy (string-match-p "[0-9]+" yy)) yy (if (and yy (string-match-p "[0-9]+" yy))
(- current-year (string-to-number yy)) (- current-year (string-to-number yy))
100) ; as in `diary-anniversary' 100) ; as in `diary-anniversary'
text (or (cdr rule) ;; For backup forms we should search backward in
(substring anniv-string ;; anniv-string from (match-end 0) for "\\<".
(if (cdr form) (1- (match-end 0)) ;; That gets too complicated here!
(match-end 0)) ;; Yet for the default value of `diary-date-forms'
-3))))) ;; this would matter only if anniv-string started
;; with a time. That is rather rare for anniversaries.
;; Then we may simply step backward by one character.
text (substring anniv-string (if (cdr form) ; backup
(1- (match-end 0))
(match-end 0)) -1))
(if (cdr rule)
(setq text (replace-regexp-in-string "%t" text (cdr rule))))
(setq text (replace-regexp-in-string "\\`[ \t]+" "" text)
text (replace-regexp-in-string "[ \t]+\\'" "" text))))
;; Add the anniversaries to `diary-entries-list'. ;; Add the anniversaries to `diary-entries-list'.
(if (and yy (> yy 0)) (if (and yy (> yy 0) (< 0 (length text)))
(diary-add-to-list (diary-add-to-list
date date
(format (format
Expand Down

0 comments on commit c81dc33

Please sign in to comment.