1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-25 10:47:00 +00:00

See ChangeLog

This commit is contained in:
John Wiegley 2001-03-20 20:26:13 +00:00
parent 7194219dd3
commit 341c19b9d0
7 changed files with 699 additions and 50 deletions

View File

@ -1,3 +1,15 @@
2001-03-20 John Wiegley <johnw@gnu.org>
* calendar/calendar.el (nongregorian-diary-listing-hook): Added
:options to cover the possible values.
(nongregorian-diary-marking-hook): ditto
* cal-bahai.el, cal-menu.el, calendar.el, diary-lib.el,
holidays.el: Added support for the Baha'i calendar system.
* pcvs-util.el (cvs-bury-buffer): Bodiless `if' statements cause
problems for the interpreter.
2001-03-20 Gerd Moellmann <gerd@gnu.org>
* follow.el (follow-avoid-tail-recenter): Doc fix.

486
lisp/calendar/cal-bahai.el Normal file
View File

@ -0,0 +1,486 @@
;;; cal-bahai.el --- calendar functions for the Baha'i calendar.
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@gnu.org>
;; Keywords: calendar
;; Human-Keywords: Baha'i calendar, Baha'i, Bahai, calendar, diary
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; This collection of functions implements the features of calendar.el
;; and diary.el that deal with the Baha'i calendar.
;; Note: The days of Ayyam-i-Ha are encoded as zero and negative
;; offsets from the first day of the final month. So, (19 -3 157) is
;; the first day of Ayyam-i-Ha, in the year 157 BE.
;;; Code:
(require 'cal-julian)
(defvar bahai-calendar-month-name-array
["Baha" "Jalal" "Jamal" "`Azamat" "Nur" "Rahmat" "Kalimat" "Kamal"
"Asma" "`Izzat" "Mashiyyat" "`Ilm" "Qudrat" "Qawl" "Masa'il"
"Sharaf" "Sultan" "Mulk" "`Ala"])
(defvar calendar-bahai-epoch (calendar-absolute-from-gregorian '(3 21 1844))
"Absolute date of start of Baha'i calendar = March 19, 622 A.D. (Julian).")
(defun bahai-calendar-leap-year-p (year)
"True if YEAR is a leap year on the Baha'i calendar."
(calendar-leap-year-p (+ year 1844)))
(defvar bahai-calendar-leap-base
(+ (/ 1844 4) (- (/ 1844 100)) (/ 1844 400)))
(defun calendar-absolute-from-bahai (date)
"Compute absolute date from Baha'i date DATE.
The absolute date is the number of days elapsed since the (imaginary)
Gregorian date Sunday, December 31, 1 BC."
(let* ((month (extract-calendar-month date))
(day (extract-calendar-day date))
(year (extract-calendar-year date))
(prior-years (+ (1- year) 1844))
(leap-days (- (+ (/ prior-years 4) ; Leap days in prior years.
(- (/ prior-years 100))
(/ prior-years 400))
bahai-calendar-leap-base)))
(+ (1- calendar-bahai-epoch) ; Days before epoch
(* 365 (1- year)) ; Days in prior years.
leap-days
(calendar-sum m 1 (< m month) 19)
(if (= month 19) 4 0)
day))) ; Days so far this month.
(defun calendar-bahai-from-absolute (date)
"Baha'i year corresponding to the absolute DATE."
(if (< date calendar-bahai-epoch)
(list 0 0 0) ;; pre-Baha'i date
(let* ((greg (calendar-gregorian-from-absolute date))
(year (+ (- (extract-calendar-year greg) 1844)
(if (or (> (extract-calendar-month greg) 3)
(and (= (extract-calendar-month greg) 3)
(>= (extract-calendar-day greg) 21)))
1 0)))
(month ;; Search forward from Baha.
(1+ (calendar-sum m 1
(> date
(calendar-absolute-from-bahai
(list m 19 year)))
1)))
(day ;; Calculate the day by subtraction.
(- date
(1- (calendar-absolute-from-bahai (list month 1 year))))))
(list month day year))))
(defun calendar-bahai-date-string (&optional date)
"String of Baha'i date of Gregorian DATE.
Defaults to today's date if DATE is not given."
(let* ((bahai-date (calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(or date (calendar-current-date)))))
(y (extract-calendar-year bahai-date))
(m (extract-calendar-month bahai-date))
(d (extract-calendar-day bahai-date)))
(let ((monthname
(if (and (= m 19)
(<= d 0))
"Ayyam-i-Ha"
(aref bahai-calendar-month-name-array (1- m))))
(day (int-to-string
(if (<= d 0)
(if (bahai-calendar-leap-year-p y)
(+ d 5)
(+ d 4))
d)))
(dayname nil)
(month (int-to-string m))
(year (int-to-string y)))
(mapconcat 'eval calendar-date-display-form ""))))
(defun calendar-print-bahai-date ()
"Show the Baha'i calendar equivalent of the selected date."
(interactive)
(message "Baha'i date: %s"
(calendar-bahai-date-string (calendar-cursor-to-date t))))
(defun calendar-goto-bahai-date (date &optional noecho)
"Move cursor to Baha'i date DATE.
Echo Baha'i date unless NOECHO is t."
(interactive (bahai-prompt-for-date))
(calendar-goto-date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai date)))
(or noecho (calendar-print-bahai-date)))
(defun bahai-prompt-for-date ()
"Ask for a Baha'i date."
(let* ((today (calendar-current-date))
(year (calendar-read
"Baha'i calendar year (not 0): "
'(lambda (x) (/= x 0))
(int-to-string
(extract-calendar-year
(calendar-bahai-from-absolute
(calendar-absolute-from-gregorian today))))))
(completion-ignore-case t)
(month (cdr (assoc
(completing-read
"Baha'i calendar month name: "
(mapcar 'list
(append bahai-calendar-month-name-array nil))
nil t)
(calendar-make-alist bahai-calendar-month-name-array
1))))
(day (calendar-read "Baha'i calendar day (1-19): "
'(lambda (x) (and (< 0 x) (<= x 19))))))
(list (list month day year))))
(defun diary-bahai-date ()
"Baha'i calendar equivalent of date diary entry."
(format "Baha'i date: %s" (calendar-bahai-date-string date)))
(defun holiday-bahai (month day string)
"Holiday on MONTH, DAY (Baha'i) called STRING.
If MONTH, DAY (Baha'i) is visible, the value returned is corresponding
Gregorian date in the form of the list (((month day year) STRING)). Returns
nil if it is not visible in the current calendar window."
(let* ((bahai-date (calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(list displayed-month 15 displayed-year))))
(m (extract-calendar-month bahai-date))
(y (extract-calendar-year bahai-date))
(date))
(if (< m 1)
nil ;; Baha'i calendar doesn't apply.
(increment-calendar-month m y (- 10 month))
(if (> m 7) ;; Baha'i date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai (list month day y)))))
(if (calendar-date-is-visible-p date)
(list (list date string))))))))
(defun list-bahai-diary-entries ()
"Add any Baha'i date entries from the diary file to `diary-entries-list'.
Baha'i date diary entries must be prefaced by an
`bahai-diary-entry-symbol' (normally a `B'). The same diary date
forms govern the style of the Baha'i calendar entries, except that the
Baha'i month names must be given numerically. The Baha'i months are
numbered from 1 to 19 with Baha being 1 and 19 being `Ala. If a
Baha'i date diary entry begins with a `diary-nonmarking-symbol', the
entry will appear in the diary listing, but will not be marked in the
calendar. This function is provided for use with the
`nongregorian-diary-listing-hook'."
(if (< 0 number)
(let ((buffer-read-only nil)
(diary-modified (buffer-modified-p))
(gdate original-date)
(mark (regexp-quote diary-nonmarking-symbol)))
(calendar-for-loop i from 1 to number do
(let* ((d diary-date-forms)
(bdate (calendar-bahai-from-absolute
(calendar-absolute-from-gregorian gdate)))
(month (extract-calendar-month bdate))
(day (extract-calendar-day bdate))
(year (extract-calendar-year bdate)))
(while d
(let*
((date-form (if (equal (car (car d)) 'backup)
(cdr (car d))
(car d)))
(backup (equal (car (car d)) 'backup))
(dayname
(concat
(calendar-day-name gdate) "\\|"
(substring (calendar-day-name gdate) 0 3) ".?"))
(calendar-month-name-array
bahai-calendar-month-name-array)
(monthname
(concat
"\\*\\|"
(calendar-month-name month)))
(month (concat "\\*\\|0*" (int-to-string month)))
(day (concat "\\*\\|0*" (int-to-string day)))
(year
(concat
"\\*\\|0*" (int-to-string year)
(if abbreviated-calendar-year
(concat "\\|" (int-to-string (% year 100)))
"")))
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)" mark "?"
(regexp-quote bahai-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)"))
(case-fold-search t))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(if backup (re-search-backward "\\<" nil t))
(if (and (or (char-equal (preceding-char) ?\^M)
(char-equal (preceding-char) ?\n))
(not (looking-at " \\|\^I")))
;; Diary entry that consists only of date.
(backward-char 1)
;; Found a nonempty diary entry--make it visible and
;; add it to the list.
(let ((entry-start (point))
(date-start))
(re-search-backward "\^M\\|\n\\|\\`")
(setq date-start (point))
(re-search-forward "\^M\\|\n" nil t 2)
(while (looking-at " \\|\^I")
(re-search-forward "\^M\\|\n" nil t))
(backward-char 1)
(subst-char-in-region date-start (point) ?\^M ?\n t)
(add-to-diary-list
gdate
(buffer-substring-no-properties entry-start (point))
(buffer-substring-no-properties
(1+ date-start) (1- entry-start)))))))
(setq d (cdr d))))
(setq gdate
(calendar-gregorian-from-absolute
(1+ (calendar-absolute-from-gregorian gdate)))))
(set-buffer-modified-p diary-modified))
(goto-char (point-min))))
(defun mark-bahai-diary-entries ()
"Mark days in the calendar window that have Baha'i date diary entries.
Each entry in diary-file (or included files) visible in the calendar
window is marked. Baha'i date entries are prefaced by a
bahai-diary-entry-symbol \(normally a B`I'). The same
diary-date-forms govern the style of the Baha'i calendar entries,
except that the Baha'i month names must be spelled in full. The
Baha'i months are numbered from 1 to 12 with Baha being 1 and 12 being
`Ala. Baha'i date diary entries that begin with a
diary-nonmarking-symbol will not be marked in the calendar. This
function is provided for use as part of the
nongregorian-diary-marking-hook."
(let ((d diary-date-forms))
(while d
(let*
((date-form (if (equal (car (car d)) 'backup)
(cdr (car d))
(car d)));; ignore 'backup directive
(dayname (diary-name-pattern calendar-day-name-array))
(monthname
(concat
(diary-name-pattern bahai-calendar-month-name-array t)
"\\|\\*"))
(month "[0-9]+\\|\\*")
(day "[0-9]+\\|\\*")
(year "[0-9]+\\|\\*")
(l (length date-form))
(d-name-pos (- l (length (memq 'dayname date-form))))
(d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos)))
(m-name-pos (- l (length (memq 'monthname date-form))))
(m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos)))
(d-pos (- l (length (memq 'day date-form))))
(d-pos (if (/= l d-pos) (+ 2 d-pos)))
(m-pos (- l (length (memq 'month date-form))))
(m-pos (if (/= l m-pos) (+ 2 m-pos)))
(y-pos (- l (length (memq 'year date-form))))
(y-pos (if (/= l y-pos) (+ 2 y-pos)))
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)"
(regexp-quote bahai-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)"))
(case-fold-search t))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(let* ((dd-name
(if d-name-pos
(buffer-substring
(match-beginning d-name-pos)
(match-end d-name-pos))))
(mm-name
(if m-name-pos
(buffer-substring
(match-beginning m-name-pos)
(match-end m-name-pos))))
(mm (string-to-int
(if m-pos
(buffer-substring
(match-beginning m-pos)
(match-end m-pos))
"")))
(dd (string-to-int
(if d-pos
(buffer-substring
(match-beginning d-pos)
(match-end d-pos))
"")))
(y-str (if y-pos
(buffer-substring
(match-beginning y-pos)
(match-end y-pos))))
(yy (if (not y-str)
0
(if (and (= (length y-str) 2)
abbreviated-calendar-year)
(let* ((current-y
(extract-calendar-year
(calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(calendar-current-date)))))
(y (+ (string-to-int y-str)
(* 100 (/ current-y 100)))))
(if (> (- y current-y) 50)
(- y 100)
(if (> (- current-y y) 50)
(+ y 100)
y)))
(string-to-int y-str)))))
(if dd-name
(mark-calendar-days-named
(cdr (assoc-ignore-case (substring dd-name 0 3)
(calendar-make-alist
calendar-day-name-array
0
'(lambda (x) (substring x 0 3))))))
(if mm-name
(if (string-equal mm-name "*")
(setq mm 0)
(setq mm
(cdr (assoc-ignore-case
mm-name
(calendar-make-alist
bahai-calendar-month-name-array))))))
(mark-bahai-calendar-date-pattern mm dd yy)))))
(setq d (cdr d)))))
(defun mark-bahai-calendar-date-pattern (month day year)
"Mark dates in calendar window that conform to Baha'i date MONTH/DAY/YEAR.
A value of 0 in any position is a wildcard."
(save-excursion
(set-buffer calendar-buffer)
(if (and (/= 0 month) (/= 0 day))
(if (/= 0 year)
;; Fully specified Baha'i date.
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai
(list month day year)))))
(if (calendar-date-is-visible-p date)
(mark-visible-calendar-date date)))
;; Month and day in any year--this taken from the holiday stuff.
(let* ((bahai-date (calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(list displayed-month 15 displayed-year))))
(m (extract-calendar-month bahai-date))
(y (extract-calendar-year bahai-date))
(date))
(if (< m 1)
nil;; Baha'i calendar doesn't apply.
(increment-calendar-month m y (- 10 month))
(if (> m 7);; Baha'i date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai
(list month day y)))))
(if (calendar-date-is-visible-p date)
(mark-visible-calendar-date date)))))))
;; Not one of the simple cases--check all visible dates for match.
;; Actually, the following code takes care of ALL of the cases, but
;; it's much too slow to be used for the simple (common) cases.
(let ((m displayed-month)
(y displayed-year)
(first-date)
(last-date))
(increment-calendar-month m y -1)
(setq first-date
(calendar-absolute-from-gregorian
(list m 1 y)))
(increment-calendar-month m y 2)
(setq last-date
(calendar-absolute-from-gregorian
(list m (calendar-last-day-of-month m y) y)))
(calendar-for-loop date from first-date to last-date do
(let* ((b-date (calendar-bahai-from-absolute date))
(i-month (extract-calendar-month b-date))
(i-day (extract-calendar-day b-date))
(i-year (extract-calendar-year b-date)))
(and (or (zerop month)
(= month i-month))
(or (zerop day)
(= day i-day))
(or (zerop year)
(= year i-year))
(mark-visible-calendar-date
(calendar-gregorian-from-absolute date)))))))))
(defun insert-bahai-diary-entry (arg)
"Insert a diary entry.
For the Baha'i date corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
(let* ((calendar-month-name-array bahai-calendar-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
(calendar-date-string
(calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))
nil t))
arg)))
(defun insert-monthly-bahai-diary-entry (arg)
"Insert a monthly diary entry.
For the day of the Baha'i month corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style '(day " * ") '("* " day )))
(calendar-month-name-array bahai-calendar-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
(calendar-date-string
(calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))))
arg)))
(defun insert-yearly-bahai-diary-entry (arg)
"Insert an annual diary entry.
For the day of the Baha'i year corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style
'(day " " monthname)
'(monthname " " day)))
(calendar-month-name-array bahai-calendar-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
(calendar-date-string
(calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))))
arg)))
(provide 'cal-bahai)
;;; cal-bahai.el ends here

View File

@ -63,6 +63,8 @@
'("Insert Hebrew" . calendar-mouse-insert-hebrew-diary-entry))
(define-key calendar-mode-map [menu-bar diary isl]
'("Insert Islamic" . calendar-mouse-insert-islamic-diary-entry))
(define-key calendar-mode-map [menu-bar diary baha]
'("Insert Baha'i" . calendar-mouse-insert-bahai-diary-entry))
(define-key calendar-mode-map [menu-bar diary cyc]
'("Insert Cyclic" . insert-cyclic-diary-entry))
(define-key calendar-mode-map [menu-bar diary blk]
@ -106,6 +108,8 @@
'("Julian Date" . calendar-goto-julian-date))
(define-key calendar-mode-map [menu-bar goto islamic]
'("Islamic Date" . calendar-goto-islamic-date))
(define-key calendar-mode-map [menu-bar goto persian]
'("Baha'i Date" . calendar-goto-bahai-date))
(define-key calendar-mode-map [menu-bar goto persian]
'("Persian Date" . calendar-goto-persian-date))
(define-key calendar-mode-map [menu-bar goto hebrew]
@ -266,6 +270,19 @@ ERROR is t, otherwise just returns nil."
'("Yearly" . insert-yearly-islamic-diary-entry))))))
(and islamic-selection (call-interactively islamic-selection))))
(defun calendar-mouse-insert-bahai-diary-entry (event)
"Pop up menu to insert an Baha'i-date diary entry."
(interactive "e")
(let ((bahai-selection
(x-popup-menu
event
(list "Baha'i insert menu"
(list (calendar-bahai-date-string (calendar-cursor-to-date))
'("One time" . insert-bahai-diary-entry)
'("Monthly" . insert-monthly-bahai-diary-entry)
'("Yearly" . insert-yearly-bahai-diary-entry))))))
(and bahai-selection (call-interactively bahai-selection))))
(defun calendar-mouse-sunrise/sunset ()
"Show sunrise/sunset times for mouse-selected date."
(interactive)
@ -474,7 +491,9 @@ The output is in landscape format, one month to a page."
(list (format "Hebrew date (before sunset): %s"
(calendar-hebrew-date-string date)))
(list (format "Persian date: %s"
(calendar-persian-date-string date))))
(calendar-persian-date-string date)))
(list (format "Baha'i date (before sunset): %s"
(calendar-bahai-date-string date))))
(let ((i (calendar-islamic-date-string date)))
(if (not (string-equal i ""))
(list (list (format "Islamic date (before sunset): %s" i)))))

View File

@ -26,26 +26,29 @@
;;; Commentary:
;; This collection of functions implements a calendar window. It generates a
;; calendar for the current month, together with the previous and coming
;; months, or for any other three-month period. The calendar can be scrolled
;; forward and backward in the window to show months in the past or future;
;; the cursor can move forward and backward by days, weeks, or months, making
;; it possible, for instance, to jump to the date a specified number of days,
;; weeks, or months from the date under the cursor. The user can display a
;; list of holidays and other notable days for the period shown; the notable
;; days can be marked on the calendar, if desired. The user can also specify
;; that dates having corresponding diary entries (in a file that the user
;; specifies) be marked; the diary entries for any date can be viewed in a
;; separate window. The diary and the notable days can be viewed
;; independently of the calendar. Dates can be translated from the (usual)
;; Gregorian calendar to the day of the year/days remaining in year, to the
;; ISO commercial calendar, to the Julian (old style) calendar, to the Hebrew
;; calendar, to the Islamic calendar, to the French Revolutionary calendar, to
;; the Mayan calendar, to the Chinese calendar, to the Coptic calendar, to the
;; Ethiopic calendar, and to the astronomical (Julian) day number. When
;; floating point is available, times of sunrise/sunset can be displayed, as
;; can the phases of the moon. Appointment notification for diary entries is
;; This collection of functions implements a calendar window. It
;; generates a calendar for the current month, together with the
;; previous and coming months, or for any other three-month period.
;; The calendar can be scrolled forward and backward in the window to
;; show months in the past or future; the cursor can move forward and
;; backward by days, weeks, or months, making it possible, for
;; instance, to jump to the date a specified number of days, weeks, or
;; months from the date under the cursor. The user can display a list
;; of holidays and other notable days for the period shown; the
;; notable days can be marked on the calendar, if desired. The user
;; can also specify that dates having corresponding diary entries (in
;; a file that the user specifies) be marked; the diary entries for
;; any date can be viewed in a separate window. The diary and the
;; notable days can be viewed independently of the calendar. Dates
;; can be translated from the (usual) Gregorian calendar to the day of
;; the year/days remaining in year, to the ISO commercial calendar, to
;; the Julian (old style) calendar, to the Hebrew calendar, to the
;; Islamic calendar, to the Baha'i calendar, to the French
;; Revolutionary calendar, to the Mayan calendar, to the Chinese
;; calendar, to the Coptic calendar, to the Ethiopic calendar, and to
;; the astronomical (Julian) day number. When floating point is
;; available, times of sunrise/sunset can be displayed, as can the
;; phases of the moon. Appointment notification for diary entries is
;; available. Calendar printing via LaTeX is available.
;; The following files are part of the calendar/diary code:
@ -56,6 +59,7 @@
;; cal-dst.el Daylight savings time rules
;; cal-hebrew.el Hebrew calendar
;; cal-islam.el Islamic calendar
;; cal-bahai.el Baha'i calendar
;; cal-iso.el ISO calendar
;; cal-julian.el Julian/astronomical calendars
;; cal-mayan.el Mayan calendars
@ -305,6 +309,16 @@ calendar."
:type 'boolean
:group 'holidays)
;;;###autoload
(defcustom all-bahai-calendar-holidays nil
"*If nil, show only major holidays from the Baha'i calendar.
These are the days on which work and school must be suspended.
If t, show all the holidays that would appear in a complete Baha'i
calendar."
:type 'boolean
:group 'holidays)
;;;###autoload
(defcustom calendar-load-hook nil
"*List of functions to be called after the calendar is first loaded.
@ -446,21 +460,23 @@ Diary entries can be based on Lisp sexps. For example, the diary entry
%%(diary-block 11 1 1990 11 10 1990) Vacation
causes the diary entry \"Vacation\" to appear from November 1 through November
10, 1990. Other functions available are `diary-float', `diary-anniversary',
`diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
`diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
causes the diary entry \"Vacation\" to appear from November 1 through
November 10, 1990. Other functions available are `diary-float',
`diary-anniversary', `diary-cyclic', `diary-day-of-year',
`diary-iso-date', `diary-french-date', `diary-hebrew-date',
`diary-islamic-date', `diary-bahai-date', `diary-mayan-date',
`diary-chinese-date', `diary-coptic-date', `diary-ethiopic-date',
`diary-persian-date', `diary-yahrzeit', `diary-sunrise-sunset',
`diary-phases-of-moon', `diary-parasha', `diary-omer', `diary-rosh-hodesh',
and `diary-sabbath-candles'. See the documentation for the function
`list-sexp-diary-entries' for more details.
`diary-phases-of-moon', `diary-parasha', `diary-omer',
`diary-rosh-hodesh', and `diary-sabbath-candles'. See the
documentation for the function `list-sexp-diary-entries' for more
details.
Diary entries based on the Hebrew and/or the Islamic calendar are also
possible, but because these are somewhat slow, they are ignored
unless you set the `nongregorian-diary-listing-hook' and the
`nongregorian-diary-marking-hook' appropriately. See the documentation
for these functions for details.
Diary entries based on the Hebrew, the Islamic and/or the Baha'i
calendar are also possible, but because these are somewhat slow, they
are ignored unless you set the `nongregorian-diary-listing-hook' and
the `nongregorian-diary-marking-hook' appropriately. See the
documentation for these functions for details.
Diary files can contain directives to include the contents of other files; for
details, see the documentation for the variable `list-diary-entries-hook'."
@ -485,6 +501,12 @@ details, see the documentation for the variable `list-diary-entries-hook'."
:type 'string
:group 'diary)
;;;###autoload
(defcustom bahai-diary-entry-symbol "B"
"*Symbol indicating a diary entry according to the Baha'i calendar."
:type 'string
:group 'diary)
;;;###autoload
(defcustom diary-include-string "#include"
"*The string indicating inclusion of another file of diary entries.
@ -502,8 +524,9 @@ See the documentation for the function `list-sexp-diary-entries'."
;;;###autoload
(defcustom abbreviated-calendar-year t
"*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
If this variable is nil, years must be written in full."
For the Gregorian calendar; similarly for the Hebrew, Islamic and
Baha'i calendars. If this variable is nil, years must be written in
full."
:type 'boolean
:group 'diary)
@ -735,11 +758,15 @@ diary buffer, set the variable `diary-list-include-blanks' to t."
;;;###autoload
(defcustom nongregorian-diary-listing-hook nil
"*List of functions called for listing diary file and included files.
As the files are processed for diary entries, these functions are used to cull
relevant entries. You can use either or both of `list-hebrew-diary-entries'
and `list-islamic-diary-entries'. The documentation for these functions
As the files are processed for diary entries, these functions are used
to cull relevant entries. You can use either or both of
`list-hebrew-diary-entries', `list-islamic-diary-entries' and
`list-bahai-diary-entries'. The documentation for these functions
describes the style of such diary entries."
:type 'hook
:options '(list-hebrew-diary-entries
list-islamic-diary-entries
list-bahai-diary-entries)
:group 'diary)
;;;###autoload
@ -762,11 +789,15 @@ function `include-other-diary-files' as part of `list-diary-entries-hook'."
;;;###autoload
(defcustom nongregorian-diary-marking-hook nil
"*List of functions called for marking diary file and included files.
As the files are processed for diary entries, these functions are used to cull
relevant entries. You can use either or both of `mark-hebrew-diary-entries'
and `mark-islamic-diary-entries'. The documentation for these functions
As the files are processed for diary entries, these functions are used
to cull relevant entries. You can use either or both of
`mark-hebrew-diary-entries', `mark-islamic-diary-entries' and
`mark-bahai-diary-entries'. The documentation for these functions
describes the style of such diary entries."
:type 'hook
:options '(mark-hebrew-diary-entries
mark-islamic-diary-entries
mark-bahai-diary-entries)
:group 'diary)
;;;###autoload
@ -1003,6 +1034,48 @@ See the documentation for `calendar-holidays' for details."
:type 'sexp
:group 'holidays)
;;;###autoload
(put 'bahai-holidays 'risky-local-variable t)
;;;###autoload
(defcustom bahai-holidays
'((holiday-fixed
3 21
(format "Baha'i New Year (Naw-Ruz) %d" (- displayed-year (1- 1844))))
(holiday-fixed 4 21 "First Day of Ridvan")
(if all-bahai-calendar-holidays
(holiday-fixed 4 22 "Second Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 23 "Third Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 24 "Fourth Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 25 "Fifth Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 26 "Sixth Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 27 "Seventh Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 4 28 "Eighth Day of Ridvan"))
(holiday-fixed 4 29 "Ninth Day of Ridvan")
(if all-bahai-calendar-holidays
(holiday-fixed 4 30 "Tenth Day of Ridvan"))
(if all-bahai-calendar-holidays
(holiday-fixed 5 1 "Eleventh Day of Ridvan"))
(holiday-fixed 5 2 "Twelfth Day of Ridvan")
(holiday-fixed 5 23 "Declaration of the Bab")
(holiday-fixed 5 29 "Ascension of Baha'u'llah")
(holiday-fixed 7 9 "Martyrdom of the Bab")
(holiday-fixed 10 20 "Birth of the Bab")
(holiday-fixed 11 12 "Birth of Baha'u'llah")
(if all-bahai-calendar-holidays
(holiday-fixed 11 26 "Day of the Covenant"))
(if all-bahai-calendar-holidays
(holiday-fixed 11 28 "Ascension of `Abdu'l-Baha")))
"*Baha'i holidays.
See the documentation for `calendar-holidays' for details."
:type 'sexp
:group 'holidays)
;;;###autoload
(put 'solar-holidays 'risky-local-variable t)
;;;###autoload
@ -1040,15 +1113,16 @@ See the documentation for `calendar-holidays' for details."
(defcustom calendar-holidays
(append general-holidays local-holidays other-holidays
christian-holidays hebrew-holidays islamic-holidays
oriental-holidays solar-holidays)
bahai-holidays oriental-holidays solar-holidays)
"*List of notable days for the command \\[holidays].
Additional holidays are easy to add to the list, just put them in the list
`other-holidays' in your .emacs file. Similarly, by setting any of
`general-holidays', `local-holidays' `christian-holidays', `hebrew-holidays',
`islamic-holidays', `oriental-holidays', or `solar-holidays' to nil in your
.emacs file, you can eliminate unwanted categories of holidays. The intention
is that (in the US) `local-holidays' be set in site-init.el and
Additional holidays are easy to add to the list, just put them in the
list `other-holidays' in your .emacs file. Similarly, by setting any
of `general-holidays', `local-holidays' `christian-holidays',
`hebrew-holidays', `islamic-holidays', `bahai-holidays',
`oriental-holidays', or `solar-holidays' to nil in your .emacs file,
you can eliminate unwanted categories of holidays. The intention is
that (in the US) `local-holidays' be set in site-init.el and
`other-holidays' be set by the user.
Entries on the list are expressions that return (possibly empty) lists of
@ -1064,6 +1138,7 @@ Several basic functions are provided for this purpose:
DAYNAME after/before MONTH DAY.
(holiday-hebrew MONTH DAY STRING) a fixed date on the Hebrew calendar
(holiday-islamic MONTH DAY STRING) a fixed date on the Islamic calendar
(holiday-bahai MONTH DAY STRING) a fixed date on the Baha'i calendar
(holiday-julian MONTH DAY STRING) a fixed date on the Julian calendar
(holiday-sexp SEXP STRING) SEXP is a Gregorian-date-valued expression
in the variable `year'; if it evaluates to
@ -1091,6 +1166,11 @@ add the Islamic feast celebrating Mohammed's birthday use
(holiday-islamic 3 12 \"Mohammed's Birthday\")
since the Islamic months are numbered from 1 starting with Muharram. To
add an entry for the Baha'i festival of Ridvan, use
(holiday-bahai 2 13 \"Festival of Ridvan\")
since the Baha'i months are numbered from 1 starting with Baha. To
add Thomas Jefferson's birthday, April 2, 1743 (Julian), use
(holiday-julian 4 2 \"Jefferson's Birthday\")
@ -1570,6 +1650,14 @@ Driven by the variable `calendar-date-display-form'.")
"String of Islamic date of Gregorian date."
t)
(autoload 'calendar-print-bahai-date "cal-bahai"
"Show the Baha'i date equivalents of date."
t)
(autoload 'calendar-bahai-date-string "cal-bahai"
"String of Baha'i date of Gregorian date."
t)
(autoload 'calendar-goto-hebrew-date "cal-hebrew"
"Move cursor to Hebrew date date."
t)
@ -1693,6 +1781,21 @@ to the date indicated by point."
to the date indicated by point."
t)
(autoload 'insert-bahai-diary-entry "cal-bahai"
"Insert a diary entry for the Baha'i date corresponding to the date
indicated by point."
t)
(autoload 'insert-monthly-bahai-diary-entry "cal-bahai"
"Insert a monthly diary entry for the day of the Baha'i month corresponding
to the date indicated by point."
t)
(autoload 'insert-yearly-bahai-diary-entry "cal-bahai"
"Insert an annual diary entry for the day of the Baha'i year corresponding
to the date indicated by point."
t)
(autoload 'list-calendar-holidays "holidays"
"Create a buffer containing the holidays for the current calendar window.
The holidays are those in the list `calendar-notable-days'. Returns t if any
@ -1940,6 +2043,7 @@ the inserted text. Value is always t."
(define-key calendar-mode-map "ga" 'calendar-goto-astro-day-number)
(define-key calendar-mode-map "gh" 'calendar-goto-hebrew-date)
(define-key calendar-mode-map "gi" 'calendar-goto-islamic-date)
(define-key calendar-mode-map "gb" 'calendar-goto-bahai-date)
(define-key calendar-mode-map "gC" 'calendar-goto-chinese-date)
(define-key calendar-mode-map "gk" 'calendar-goto-coptic-date)
(define-key calendar-mode-map "ge" 'calendar-goto-ethiopic-date)
@ -1980,6 +2084,7 @@ the inserted text. Value is always t."
(define-key calendar-mode-map "pa" 'calendar-print-astro-day-number)
(define-key calendar-mode-map "ph" 'calendar-print-hebrew-date)
(define-key calendar-mode-map "pi" 'calendar-print-islamic-date)
(define-key calendar-mode-map "pb" 'calendar-print-bahai-date)
(define-key calendar-mode-map "pf" 'calendar-print-french-date)
(define-key calendar-mode-map "pm" 'calendar-print-mayan-date)
(define-key calendar-mode-map "po" 'calendar-print-other-dates)
@ -1996,6 +2101,9 @@ the inserted text. Value is always t."
(define-key calendar-mode-map "iid" 'insert-islamic-diary-entry)
(define-key calendar-mode-map "iim" 'insert-monthly-islamic-diary-entry)
(define-key calendar-mode-map "iiy" 'insert-yearly-islamic-diary-entry)
(define-key calendar-mode-map "iBd" 'insert-bahai-diary-entry)
(define-key calendar-mode-map "iBm" 'insert-monthly-bahai-diary-entry)
(define-key calendar-mode-map "iBy" 'insert-yearly-bahai-diary-entry)
(define-key calendar-mode-map "?" 'calendar-goto-info-node)
(define-key calendar-mode-map "tm" 'cal-tex-cursor-month)
(define-key calendar-mode-map "tM" 'cal-tex-cursor-month-landscape)
@ -2614,6 +2722,9 @@ Defaults to today's date if DATE is not given."
(let ((i (calendar-islamic-date-string date)))
(if (not (string-equal i ""))
(format "Islamic date (before sunset): %s" i)))
(let ((b (calendar-bahai-date-string date)))
(if (not (string-equal b ""))
(format "Baha'i date (before sunset): %s" b)))
(format "Chinese date: %s"
(calendar-chinese-date-string date))
(let ((c (calendar-coptic-date-string date)))

View File

@ -136,6 +136,22 @@ The holidays are those in the list `calendar-holidays'."
"Mark dates in calendar window that conform to Islamic date MONTH/DAY/YEAR."
t)
(autoload 'diary-bahai-date "cal-bahai"
"Baha'i calendar equivalent of date diary entry."
t)
(autoload 'list-bahai-diary-entries "cal-bahai"
"Add any Baha'i date entries from the diary file to `diary-entries-list'."
t)
(autoload 'mark-bahai-diary-entries "cal-bahai"
"Mark days in the calendar window that have Baha'i date diary entries."
t)
(autoload 'mark-bahai-calendar-date-pattern "cal-bahai"
"Mark dates in calendar window that conform to Baha'i date MONTH/DAY/YEAR."
t)
(autoload 'diary-hebrew-date "cal-hebrew"
"Hebrew calendar equivalent of date diary entry."
t)

View File

@ -81,6 +81,10 @@
"Holiday on MONTH, DAY (Islamic) called STRING."
t)
(autoload 'holiday-bahai "cal-bahai"
"Holiday on MONTH, DAY (Baha'i) called STRING."
t)
(autoload 'holiday-chinese-new-year "cal-china"
"Date of Chinese New Year."
t)
@ -137,6 +141,7 @@ The optional LABEL is used to label the buffer created."
(if christian-holidays (cons "Christian" christian-holidays))
(if hebrew-holidays (cons "Hebrew" hebrew-holidays))
(if islamic-holidays (cons "Islamic" islamic-holidays))
(if bahai-holidays (cons "Baha'i" bahai-holidays))
(if oriental-holidays (cons "Oriental" oriental-holidays))
(if solar-holidays (cons "Solar" solar-holidays))
(cons "Ask" nil)))

View File

@ -5,7 +5,7 @@
;; Author: Stefan Monnier <monnier@cs.yale.edu>
;; Keywords: pcl-cvs
;; Revision: $Id: pcvs-util.el,v 1.9 2001/01/09 13:12:04 gerd Exp $
;; Revision: $Id: pcvs-util.el,v 1.10 2001/03/07 00:19:08 monnier Exp $
;; This file is part of GNU Emacs.
@ -125,7 +125,7 @@ BUF is assumed to be a temporary buffer used from the buffer MAINBUF."
(if (and mainbuf (get-buffer-window mainbuf))
;; FIXME: if the buffer popped into a pre-existing window,
;; we don't want to delete that window.
;;(delete-window win)
t ;;(delete-window win)
))))
(with-current-buffer buf
(bury-buffer (unless (and (eq buf (window-buffer (selected-window)))