changeset 93331:1edfec53a698

(print-diary-entries-hook, diary-list-entries): Doc fixes. (abbreviated-calendar-year): Move here from calendar.el. Doc fix. (diary-header-line-flag, diary-header-line-format): Declare. (diary-pull-attrs): Check for multiple matches. (diary-list-entries-2): Simplify finding start of date. (diary-show-all-entries, make-diary-entry): Respect non-nil values of pop-up-frames. (diary-mark-entries-1): Re-use offset in abbreviated-year case. (mark-sexp-diary-entries): Remove superfluous call to diary-pull-attrs.
author Glenn Morris <rgm@gnu.org>
date Fri, 28 Mar 2008 02:46:37 +0000
parents 1515466cea2b
children bf0cafc88be5
files lisp/calendar/diary-lib.el
diffstat 1 files changed, 57 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calendar/diary-lib.el	Fri Mar 28 02:46:13 2008 +0000
+++ b/lisp/calendar/diary-lib.el	Fri Mar 28 02:46:37 2008 +0000
@@ -192,19 +192,20 @@
   :group 'diary)
 
 (defcustom print-diary-entries-hook 'lpr-buffer
-  "List of functions called after a temporary diary buffer is prepared.
-The buffer shows only the diary entries currently visible in the diary
-buffer.  The default just does the printing.  Other uses might include, for
-example, rearranging the lines into order by day and time, saving the buffer
-instead of deleting it, or changing the function used to do the printing."
+  "Run by `print-diary-entries' after preparing a temporary diary buffer.
+The buffer shows only the diary entries currently visible in the
+diary buffer.  The default just does the printing.  Other uses
+might include, for example, rearranging the lines into order by
+day and time, saving the buffer instead of deleting it, or
+changing the function used to do the printing."
   :type 'hook
   :group 'diary)
 
 (defcustom diary-unknown-time -9999
   "Value returned by `diary-entry-time' when no time is found.
-The default value -9999 causes entries with no recognizable time to be placed
-before those with times; 9999 would place entries with no recognizable time
-after those with times."
+The default value -9999 causes entries with no recognizable time
+to be placed before those with times; 9999 would place entries
+with no recognizable time after those with times."
   :type 'integer
   :group 'diary
   :version "20.3")
@@ -237,6 +238,16 @@
   :type 'sexp
   :group 'diary)
 
+(defcustom abbreviated-calendar-year t
+  "Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
+This applies to the Gregorian, Hebrew, Islamic, and Baha'i calendars.
+When the current century is added to a two-digit year, if the result
+is more than 50 years in the future, the previous century is assumed.
+If the result is more than 50 years in the past, the next century is assumed.
+If this variable is nil, years must be written in full."
+  :type 'boolean
+  :group 'diary)
+
 (defcustom diary-outlook-formats
   '(
     ;; When: 11 October 2001 12:00-14:00 (GMT) Greenwich Mean Time : Dublin, ...
@@ -282,6 +293,8 @@
   :version "22.1"
   :group 'diary)
 
+(defvar diary-header-line-flag)
+(defvar diary-header-line-format)
 
 (defun diary-set-header (symbol value)
   "Set SYMBOL's value to VALUE, and redraw the diary header if necessary."
@@ -487,10 +500,12 @@
               attrname (nth 2 attr)
               type (nth 3 attr)
               attrvalue nil)
-        ;; FIXME multiple matches?
-        (if (string-match regexp entry)
-            (setq attrvalue (match-string-no-properties regnum entry)
-                  entry (replace-match "" t t entry)))
+        ;; If multiple matches, replace all, use the last (which may
+        ;; be the first instance in the line, if the regexp is
+        ;; anchored with $).
+        (while (string-match regexp entry)
+          (setq attrvalue (match-string-no-properties regnum entry)
+                entry (replace-match "" t t entry)))
         (and attrvalue
              (setq attrvalue (diary-attrtype-convert attrvalue type))
              (setq ret-attr (append ret-attr (list attrname attrvalue))))))
@@ -561,7 +576,6 @@
          (day (format "\\*\\|0*%d" day))
          (year (format "\\*\\|0*%d%s" year
                        (if abbreviated-calendar-year
-                           ;; FIXME was %d in non-greg case.
                            (format "\\|%02d" (% year 100))
                          "")))
         (case-fold-search t)
@@ -585,16 +599,11 @@
               (backward-char 1)
             ;; Found a nonempty diary entry--make it
             ;; visible and add it to the list.
+            (setq date-start (line-end-position 0))
             ;; Actual entry starts on the next-line?
-            ;; FIXME not a valid case AFAICS.
             (if (looking-at "[ \t]*\n[ \t]") (forward-line 1))
             (setq entry-found t
-                  entry-start (point)
-                  ;; If bolp, must have done (forward-line 1).
-                  ;; FIXME Why number > 1?
-                  ;; FIXME why not set before f-l 1?
-                  date-start (line-end-position (if (and (bolp) (> number 1))
-                                                    -1 0)))
+                  entry-start (point))
             (forward-line 1)
             (while (looking-at "[ \t]") ; continued entry
               (forward-line 1))
@@ -645,26 +654,22 @@
 is non-nil, this list includes a dummy diary entry consisting of the empty
 string for a date with no diary entries.
 
-After the list is prepared, the hooks `nongregorian-diary-listing-hook',
-`list-diary-entries-hook', `diary-display-hook', and `diary-hook' are run.
-These hooks have the following distinct roles:
+After the list is prepared, the following hooks are run:
 
-    `nongregorian-diary-listing-hook' can cull dates from the diary
-        and each included file, for example to process Islamic diary
-        entries.  Applied to *each* file.
+  `nongregorian-diary-listing-hook' can cull dates from the diary
+      and each included file, for example to process Islamic diary
+      entries.  Applied to *each* file.
 
-    `list-diary-entries-hook' adds or manipulates diary entries from
-        external sources.  Used, for example, to include diary entries
-        from other files or to sort the diary entries.  Invoked *once* only,
-        before the display hook is run.
+  `list-diary-entries-hook' adds or manipulates diary entries from
+      external sources.  Used, for example, to include diary entries
+      from other files or to sort the diary entries.  Invoked *once*
+      only, before the display hook is run.
 
-    `diary-display-hook' does the actual display of information.  If this is
-        nil, `simple-diary-display' will be used.  Use `add-hook' to use
-        `fancy-diary-display', if desired.  If you want no diary display, use
-        add-hook to set this to `ignore'.
+  `diary-display-hook' does the actual display of information.  If nil,
+      `simple-diary-display' is used.  Use `add-hook' to use
+      `fancy-diary-display', if desired, or `ignore' for no display.
 
-    `diary-hook' is run last.  This can be used for an appointment
-        notification function.
+  `diary-hook' is run last.  This is used e.g. by `appt-check'.
 
 Functions called by these hooks may use the variables ORIGINAL-DATE
 and NUMBER, which are the arguments with which this function was called.
@@ -705,7 +710,6 @@
         ;; d-s-p is passed to the diary display function.
         (let ((diary-saved-point (point)))
           (save-excursion
-            ;; FIXME move after goto? Syntax?
             (setq file-glob-attrs (cadr (diary-pull-attrs nil "")))
             (with-syntax-table diary-syntax-table
               (goto-char (point-min))
@@ -1024,7 +1028,8 @@
 is created."
   (interactive)
   (let ((d-file (diary-check-diary-file))
-        (pop-up-frames (window-dedicated-p (selected-window))))
+        (pop-up-frames (or pop-up-frames
+                           (window-dedicated-p (selected-window)))))
     (with-current-buffer (or (find-buffer-visiting d-file)
                              (find-file-noselect d-file t))
       (when (eq major-mode default-major-mode) (diary-mode))
@@ -1159,10 +1164,16 @@
                                           (calendar-current-date)))
                                       (calendar-current-date))))
                                   (y (+ (string-to-number y-str)
-                                        (* 100 (/ current-y 100)))))
-                             (if (> (- y current-y) 50)
+                                        ;; Current century, eg 2000.
+                                        (* 100 (/ current-y 100))))
+                                  (offset (- y current-y)))
+                             ;; Add 2-digit year to current century.
+                             ;; If more than 50 years in the future,
+                             ;; assume last century. If more than 50
+                             ;; years in the past, assume next century.
+                             (if (> offset 50)
                                  (- y 100)
-                               (if (> (- current-y y) 50)
+                               (if (< offset -50)
                                    (+ y 100)
                                  y)))
                          (string-to-number y-str)))))
@@ -1270,7 +1281,7 @@
       (setq marking-diary-entry (char-equal (preceding-char) ?\())
       (re-search-backward "(")
       (let ((sexp-start (point))
-            sexp entry entry-start marks)
+            sexp entry entry-start)
         (forward-sexp)
         (setq sexp (buffer-substring-no-properties sexp-start (point)))
         (forward-char 1)
@@ -1290,14 +1301,10 @@
           (when (setq mark (diary-sexp-entry
                             sexp entry
                             (calendar-gregorian-from-absolute date)))
-            ;; FIXME does this make sense?
-            (setq marks (diary-pull-attrs entry file-glob-attrs)
-                  marks (nth 1 (diary-pull-attrs entry file-glob-attrs)))
             (mark-visible-calendar-date
              (calendar-gregorian-from-absolute date)
-             (if (< 0 (length marks))
-                 marks
-               (if (consp mark) (car mark))))))))))
+             (or (cadr (diary-pull-attrs entry file-glob-attrs))
+                 (if (consp mark) (car mark))))))))))
 
 (defun mark-included-diary-files ()
   "Mark the diary entries from other diary files with those of the diary file.
@@ -1876,13 +1883,13 @@
   "Insert a diary entry STRING which may be NONMARKING in FILE.
 If omitted, NONMARKING defaults to nil and FILE defaults to
 `diary-file'."
-  (let ((pop-up-frames (window-dedicated-p (selected-window))))
+  (let ((pop-up-frames (or pop-up-frames
+                           (window-dedicated-p (selected-window)))))
     (find-file-other-window (substitute-in-file-name (or file diary-file))))
   (when (eq major-mode default-major-mode) (diary-mode))
   (widen)
   (diary-unhide-everything)
   (goto-char (point-max))
-  ;; FIXME cf hack-local-variables.
   (when (let ((case-fold-search t))
           (search-backward "Local Variables:"
                            (max (- (point-max) 3000) (point-min))