Mercurial > emacs
comparison man/emacs-xtra.texi @ 61000:7493ddb113fc
(Advanced Calendar/Diary Usage): New section; move here from Emacs
Lisp Reference Manual.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sat, 26 Mar 2005 17:45:40 +0000 |
parents | aac0a33f5772 |
children | 4030d2641654 |
comparison
equal
deleted
inserted
replaced
60999:40c6fc855a82 | 61000:7493ddb113fc |
---|---|
8 @comment %**end of header | 8 @comment %**end of header |
9 | 9 |
10 @copying | 10 @copying |
11 This manual describes specialized features of Emacs. | 11 This manual describes specialized features of Emacs. |
12 | 12 |
13 Copyright (C) 2004 | 13 Copyright (C) 2004, 2005 |
14 Free Software Foundation, Inc. | 14 Free Software Foundation, Inc. |
15 | 15 |
16 @quotation | 16 @quotation |
17 Permission is granted to copy, distribute and/or modify this document | 17 Permission is granted to copy, distribute and/or modify this document |
18 under the terms of the GNU Free Documentation License, Version 1.1 or | 18 under the terms of the GNU Free Documentation License, Version 1.1 or |
57 | 57 |
58 @menu | 58 @menu |
59 * Introduction:: What documentation belongs here? | 59 * Introduction:: What documentation belongs here? |
60 * Autorevert:: Auto Reverting non-file buffers. | 60 * Autorevert:: Auto Reverting non-file buffers. |
61 * Subdir switches:: Subdirectory switches in Dired. | 61 * Subdir switches:: Subdirectory switches in Dired. |
62 * Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization. | |
62 * Index:: | 63 * Index:: |
63 @end menu | 64 @end menu |
64 | 65 |
65 @node Introduction | 66 @node Introduction |
66 @unnumbered Introduction | 67 @unnumbered Introduction |
305 | 306 |
306 You can make Dired forget about all subdirectory switches and relist | 307 You can make Dired forget about all subdirectory switches and relist |
307 all subdirectories with the buffer's default switches using | 308 all subdirectories with the buffer's default switches using |
308 @kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. | 309 @kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. |
309 | 310 |
311 | |
312 @c Moved here from the Emacs Lisp Reference Manual, 2005-03-26. | |
313 @node Advanced Calendar/Diary Usage | |
314 @chapter Customizing the Calendar and Diary | |
315 | |
316 There are many customizations that you can use to make the calendar and | |
317 diary suit your personal tastes. | |
318 | |
319 @menu | |
320 * Calendar Customizing:: Defaults you can set. | |
321 * Holiday Customizing:: Defining your own holidays. | |
322 * Date Display Format:: Changing the format. | |
323 * Time Display Format:: Changing the format. | |
324 * Daylight Savings:: Changing the default. | |
325 * Diary Customizing:: Defaults you can set. | |
326 * Hebrew/Islamic Entries:: How to obtain them. | |
327 * Fancy Diary Display:: Enhancing the diary display, sorting entries, | |
328 using included diary files. | |
329 * Sexp Diary Entries:: Fancy things you can do. | |
330 * Appt Customizing:: Customizing appointment reminders. | |
331 @end menu | |
332 | |
333 @node Calendar Customizing | |
334 @section Customizing the Calendar | |
335 @vindex view-diary-entries-initially | |
336 | |
337 If you set the variable @code{view-diary-entries-initially} to | |
338 @code{t}, calling up the calendar automatically displays the diary | |
339 entries for the current date as well. The diary dates appear only if | |
340 the current date is visible. If you add both of the following lines to | |
341 your init file:@refill | |
342 | |
343 @example | |
344 (setq view-diary-entries-initially t) | |
345 (calendar) | |
346 @end example | |
347 | |
348 @noindent | |
349 this displays both the calendar and diary windows whenever you start Emacs. | |
350 | |
351 @vindex view-calendar-holidays-initially | |
352 Similarly, if you set the variable | |
353 @code{view-calendar-holidays-initially} to @code{t}, entering the | |
354 calendar automatically displays a list of holidays for the current | |
355 three-month period. The holiday list appears in a separate | |
356 window. | |
357 | |
358 @vindex mark-diary-entries-in-calendar | |
359 You can set the variable @code{mark-diary-entries-in-calendar} to | |
360 @code{t} in order to mark any dates with diary entries. This takes | |
361 effect whenever the calendar window contents are recomputed. There are | |
362 two ways of marking these dates: by changing the face | |
363 (@pxref{Faces,,, elisp, the Emacs Lisp Reference Manual}), or by placing | |
364 a plus sign (@samp{+}) beside the date. | |
365 | |
366 @vindex mark-holidays-in-calendar | |
367 Similarly, setting the variable @code{mark-holidays-in-calendar} to | |
368 @code{t} marks holiday dates, either with a change of face or with an | |
369 asterisk (@samp{*}). | |
370 | |
371 @vindex calendar-holiday-marker | |
372 @vindex diary-entry-marker | |
373 The variable @code{calendar-holiday-marker} specifies how to mark a | |
374 date as being a holiday. Its value may be a single-character string | |
375 to insert next to the date, or a face name to use for displaying the | |
376 date. Likewise, the variable @code{diary-entry-marker} specifies how | |
377 to mark a date that has diary entries. The calendar creates faces | |
378 named @code{holiday-face} and @code{diary-face} for these purposes; | |
379 those symbols are the default values of these variables. | |
380 | |
381 @vindex calendar-load-hook | |
382 The variable @code{calendar-load-hook} is a normal hook run when the | |
383 calendar package is first loaded (before actually starting to display | |
384 the calendar). | |
385 | |
386 @vindex initial-calendar-window-hook | |
387 Starting the calendar runs the normal hook | |
388 @code{initial-calendar-window-hook}. Recomputation of the calendar | |
389 display does not run this hook. But if you leave the calendar with the | |
390 @kbd{q} command and reenter it, the hook runs again.@refill | |
391 | |
392 @vindex today-visible-calendar-hook | |
393 The variable @code{today-visible-calendar-hook} is a normal hook run | |
394 after the calendar buffer has been prepared with the calendar when the | |
395 current date is visible in the window. One use of this hook is to | |
396 replace today's date with asterisks; to do that, use the hook function | |
397 @code{calendar-star-date}. | |
398 | |
399 @findex calendar-star-date | |
400 @example | |
401 (add-hook 'today-visible-calendar-hook 'calendar-star-date) | |
402 @end example | |
403 | |
404 @noindent | |
405 Another standard hook function marks the current date, either by | |
406 changing its face or by adding an asterisk. Here's how to use it: | |
407 | |
408 @findex calendar-mark-today | |
409 @example | |
410 (add-hook 'today-visible-calendar-hook 'calendar-mark-today) | |
411 @end example | |
412 | |
413 @noindent | |
414 @vindex calendar-today-marker | |
415 The variable @code{calendar-today-marker} specifies how to mark | |
416 today's date. Its value should be a single-character string to insert | |
417 next to the date or a face name to use for displaying the date. A | |
418 face named @code{calendar-today-face} is provided for this purpose; | |
419 that symbol is the default for this variable. | |
420 | |
421 @vindex today-invisible-calendar-hook | |
422 @noindent | |
423 A similar normal hook, @code{today-invisible-calendar-hook} is run if | |
424 the current date is @emph{not} visible in the window. | |
425 | |
426 @vindex calendar-move-hook | |
427 Each of the calendar cursor motion commands runs the hook | |
428 @code{calendar-move-hook} after it moves the cursor. | |
429 | |
430 @node Holiday Customizing | |
431 @section Customizing the Holidays | |
432 | |
433 @vindex calendar-holidays | |
434 @vindex christian-holidays | |
435 @vindex hebrew-holidays | |
436 @vindex islamic-holidays | |
437 Emacs knows about holidays defined by entries on one of several lists. | |
438 You can customize these lists of holidays to your own needs, adding or | |
439 deleting holidays. The lists of holidays that Emacs uses are for | |
440 general holidays (@code{general-holidays}), local holidays | |
441 (@code{local-holidays}), Christian holidays (@code{christian-holidays}), | |
442 Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim) | |
443 holidays (@code{islamic-holidays}), and other holidays | |
444 (@code{other-holidays}). | |
445 | |
446 @vindex general-holidays | |
447 The general holidays are, by default, holidays common throughout the | |
448 United States. To eliminate these holidays, set @code{general-holidays} | |
449 to @code{nil}. | |
450 | |
451 @vindex local-holidays | |
452 There are no default local holidays (but sites may supply some). You | |
453 can set the variable @code{local-holidays} to any list of holidays, as | |
454 described below. | |
455 | |
456 @vindex all-christian-calendar-holidays | |
457 @vindex all-hebrew-calendar-holidays | |
458 @vindex all-islamic-calendar-holidays | |
459 By default, Emacs does not include all the holidays of the religions | |
460 that it knows, only those commonly found in secular calendars. For a | |
461 more extensive collection of religious holidays, you can set any (or | |
462 all) of the variables @code{all-christian-calendar-holidays}, | |
463 @code{all-hebrew-calendar-holidays}, or | |
464 @code{all-islamic-calendar-holidays} to @code{t}. If you want to | |
465 eliminate the religious holidays, set any or all of the corresponding | |
466 variables @code{christian-holidays}, @code{hebrew-holidays}, and | |
467 @code{islamic-holidays} to @code{nil}.@refill | |
468 | |
469 @vindex other-holidays | |
470 You can set the variable @code{other-holidays} to any list of | |
471 holidays. This list, normally empty, is intended for individual use. | |
472 | |
473 @cindex holiday forms | |
474 Each of the lists (@code{general-holidays}, @code{local-holidays}, | |
475 @code{christian-holidays}, @code{hebrew-holidays}, | |
476 @code{islamic-holidays}, and @code{other-holidays}) is a list of | |
477 @dfn{holiday forms}, each holiday form describing a holiday (or | |
478 sometimes a list of holidays). | |
479 | |
480 Here is a table of the possible kinds of holiday form. Day numbers | |
481 and month numbers count starting from 1, but ``dayname'' numbers | |
482 count Sunday as 0. The element @var{string} is always the | |
483 name of the holiday, as a string. | |
484 | |
485 @table @code | |
486 @item (holiday-fixed @var{month} @var{day} @var{string}) | |
487 A fixed date on the Gregorian calendar. | |
488 | |
489 @item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) | |
490 The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar | |
491 (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back | |
492 from the end of the month. | |
493 | |
494 @item (holiday-hebrew @var{month} @var{day} @var{string}) | |
495 A fixed date on the Hebrew calendar. | |
496 | |
497 @item (holiday-islamic @var{month} @var{day} @var{string}) | |
498 A fixed date on the Islamic calendar. | |
499 | |
500 @item (holiday-julian @var{month} @var{day} @var{string}) | |
501 A fixed date on the Julian calendar. | |
502 | |
503 @item (holiday-sexp @var{sexp} @var{string}) | |
504 A date calculated by the Lisp expression @var{sexp}. The expression | |
505 should use the variable @code{year} to compute and return the date of a | |
506 holiday, or @code{nil} if the holiday doesn't happen this year. The | |
507 value of @var{sexp} must represent the date as a list of the form | |
508 @code{(@var{month} @var{day} @var{year})}. | |
509 | |
510 @item (if @var{condition} @var{holiday-form}) | |
511 A holiday that happens only if @var{condition} is true. | |
512 | |
513 @item (@var{function} @r{[}@var{args}@r{]}) | |
514 A list of dates calculated by the function @var{function}, called with | |
515 arguments @var{args}. | |
516 @end table | |
517 | |
518 For example, suppose you want to add Bastille Day, celebrated in | |
519 France on July 14. You can do this as follows: | |
520 | |
521 @smallexample | |
522 (setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) | |
523 @end smallexample | |
524 | |
525 @noindent | |
526 The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the | |
527 fourteenth day of the seventh month (July). | |
528 | |
529 Many holidays occur on a specific day of the week, at a specific time | |
530 of month. Here is a holiday form describing Hurricane Supplication Day, | |
531 celebrated in the Virgin Islands on the fourth Monday in August: | |
532 | |
533 @smallexample | |
534 (holiday-float 8 1 4 "Hurricane Supplication Day") | |
535 @end smallexample | |
536 | |
537 @noindent | |
538 Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, | |
539 Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in | |
540 the month (1 specifies the first occurrence, 2 the second occurrence, | |
541 @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and | |
542 so on). | |
543 | |
544 You can specify holidays that occur on fixed days of the Hebrew, | |
545 Islamic, and Julian calendars too. For example, | |
546 | |
547 @smallexample | |
548 (setq other-holidays | |
549 '((holiday-hebrew 10 2 "Last day of Hanukkah") | |
550 (holiday-islamic 3 12 "Mohammed's Birthday") | |
551 (holiday-julian 4 2 "Jefferson's Birthday"))) | |
552 @end smallexample | |
553 | |
554 @noindent | |
555 adds the last day of Hanukkah (since the Hebrew months are numbered with | |
556 1 starting from Nisan), the Islamic feast celebrating Mohammed's | |
557 birthday (since the Islamic months are numbered from 1 starting with | |
558 Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the | |
559 Julian calendar. | |
560 | |
561 To include a holiday conditionally, use either Emacs Lisp's @code{if} or the | |
562 @code{holiday-sexp} form. For example, American presidential elections | |
563 occur on the first Tuesday after the first Monday in November of years | |
564 divisible by 4: | |
565 | |
566 @smallexample | |
567 (holiday-sexp '(if (= 0 (% year 4)) | |
568 (calendar-gregorian-from-absolute | |
569 (1+ (calendar-dayname-on-or-before | |
570 1 (+ 6 (calendar-absolute-from-gregorian | |
571 (list 11 1 year))))))) | |
572 "US Presidential Election") | |
573 @end smallexample | |
574 | |
575 @noindent | |
576 or | |
577 | |
578 @smallexample | |
579 (if (= 0 (% displayed-year 4)) | |
580 (fixed 11 | |
581 (extract-calendar-day | |
582 (calendar-gregorian-from-absolute | |
583 (1+ (calendar-dayname-on-or-before | |
584 1 (+ 6 (calendar-absolute-from-gregorian | |
585 (list 11 1 displayed-year))))))) | |
586 "US Presidential Election")) | |
587 @end smallexample | |
588 | |
589 Some holidays just don't fit into any of these forms because special | |
590 calculations are involved in their determination. In such cases you | |
591 must write a Lisp function to do the calculation. To include eclipses, | |
592 for example, add @code{(eclipses)} to @code{other-holidays} | |
593 and write an Emacs Lisp function @code{eclipses} that returns a | |
594 (possibly empty) list of the relevant Gregorian dates among the range | |
595 visible in the calendar window, with descriptive strings, like this: | |
596 | |
597 @smallexample | |
598 (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) | |
599 @end smallexample | |
600 | |
601 @node Date Display Format | |
602 @section Date Display Format | |
603 @vindex calendar-date-display-form | |
604 | |
605 You can customize the manner of displaying dates in the diary, in mode | |
606 lines, and in messages by setting @code{calendar-date-display-form}. | |
607 This variable holds a list of expressions that can involve the variables | |
608 @code{month}, @code{day}, and @code{year}, which are all numbers in | |
609 string form, and @code{monthname} and @code{dayname}, which are both | |
610 alphabetic strings. In the American style, the default value of this | |
611 list is as follows: | |
612 | |
613 @smallexample | |
614 ((if dayname (concat dayname ", ")) monthname " " day ", " year) | |
615 @end smallexample | |
616 | |
617 @noindent | |
618 while in the European style this value is the default: | |
619 | |
620 @smallexample | |
621 ((if dayname (concat dayname ", ")) day " " monthname " " year) | |
622 @end smallexample | |
623 | |
624 @noindent | |
625 The ISO standard date representation is this: | |
626 | |
627 @smallexample | |
628 (year "-" month "-" day) | |
629 @end smallexample | |
630 | |
631 @noindent | |
632 This specifies a typical American format: | |
633 | |
634 @smallexample | |
635 (month "/" day "/" (substring year -2)) | |
636 @end smallexample | |
637 | |
638 @node Time Display Format | |
639 @section Time Display Format | |
640 @vindex calendar-time-display-form | |
641 | |
642 The calendar and diary by default display times of day in the | |
643 conventional American style with the hours from 1 through 12, minutes, | |
644 and either @samp{am} or @samp{pm}. If you prefer the European style, | |
645 also known in the US as military, in which the hours go from 00 to 23, | |
646 you can alter the variable @code{calendar-time-display-form}. This | |
647 variable is a list of expressions that can involve the variables | |
648 @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all | |
649 numbers in string form, and @code{am-pm} and @code{time-zone}, which are | |
650 both alphabetic strings. The default value of | |
651 @code{calendar-time-display-form} is as follows: | |
652 | |
653 @smallexample | |
654 (12-hours ":" minutes am-pm | |
655 (if time-zone " (") time-zone (if time-zone ")")) | |
656 @end smallexample | |
657 | |
658 @noindent | |
659 Here is a value that provides European style times: | |
660 | |
661 @smallexample | |
662 (24-hours ":" minutes | |
663 (if time-zone " (") time-zone (if time-zone ")")) | |
664 @end smallexample | |
665 | |
666 @node Daylight Savings | |
667 @section Daylight Savings Time | |
668 @cindex daylight savings time | |
669 | |
670 Emacs understands the difference between standard time and daylight | |
671 savings time---the times given for sunrise, sunset, solstices, | |
672 equinoxes, and the phases of the moon take that into account. The rules | |
673 for daylight savings time vary from place to place and have also varied | |
674 historically from year to year. To do the job properly, Emacs needs to | |
675 know which rules to use. | |
676 | |
677 Some operating systems keep track of the rules that apply to the place | |
678 where you are; on these systems, Emacs gets the information it needs | |
679 from the system automatically. If some or all of this information is | |
680 missing, Emacs fills in the gaps with the rules currently used in | |
681 Cambridge, Massachusetts, which is the center of GNU's world. | |
682 | |
683 | |
684 @vindex calendar-daylight-savings-starts | |
685 @vindex calendar-daylight-savings-ends | |
686 If the default choice of rules is not appropriate for your location, | |
687 you can tell Emacs the rules to use by setting the variables | |
688 @code{calendar-daylight-savings-starts} and | |
689 @code{calendar-daylight-savings-ends}. Their values should be Lisp | |
690 expressions that refer to the variable @code{year}, and evaluate to the | |
691 Gregorian date on which daylight savings time starts or (respectively) | |
692 ends, in the form of a list @code{(@var{month} @var{day} @var{year})}. | |
693 The values should be @code{nil} if your area does not use daylight | |
694 savings time. | |
695 | |
696 Emacs uses these expressions to determine the start and end dates of | |
697 daylight savings time as holidays and for correcting times of day in the | |
698 solar and lunar calculations. | |
699 | |
700 The values for Cambridge, Massachusetts are as follows: | |
701 | |
702 @example | |
703 @group | |
704 (calendar-nth-named-day 1 0 4 year) | |
705 (calendar-nth-named-day -1 0 10 year) | |
706 @end group | |
707 @end example | |
708 | |
709 @noindent | |
710 i.e., the first 0th day (Sunday) of the fourth month (April) in | |
711 the year specified by @code{year}, and the last Sunday of the tenth month | |
712 (October) of that year. If daylight savings time were | |
713 changed to start on October 1, you would set | |
714 @code{calendar-daylight-savings-starts} to this: | |
715 | |
716 @example | |
717 (list 10 1 year) | |
718 @end example | |
719 | |
720 For a more complex example, suppose daylight savings time begins on | |
721 the first of Nisan on the Hebrew calendar. You should set | |
722 @code{calendar-daylight-savings-starts} to this value: | |
723 | |
724 @example | |
725 (calendar-gregorian-from-absolute | |
726 (calendar-absolute-from-hebrew | |
727 (list 1 1 (+ year 3760)))) | |
728 @end example | |
729 | |
730 @noindent | |
731 because Nisan is the first month in the Hebrew calendar and the Hebrew | |
732 year differs from the Gregorian year by 3760 at Nisan. | |
733 | |
734 If there is no daylight savings time at your location, or if you want | |
735 all times in standard time, set @code{calendar-daylight-savings-starts} | |
736 and @code{calendar-daylight-savings-ends} to @code{nil}. | |
737 | |
738 @vindex calendar-daylight-time-offset | |
739 The variable @code{calendar-daylight-time-offset} specifies the | |
740 difference between daylight savings time and standard time, measured in | |
741 minutes. The value for Cambridge is 60. | |
742 | |
743 @vindex calendar-daylight-savings-starts-time | |
744 @vindex calendar-daylight-savings-ends-time | |
745 The variable @code{calendar-daylight-savings-starts-time} and the | |
746 variable @code{calendar-daylight-savings-ends-time} specify the number | |
747 of minutes after midnight local time when the transition to and from | |
748 daylight savings time should occur. For Cambridge, both variables' | |
749 values are 120. | |
750 | |
751 @node Diary Customizing | |
752 @section Customizing the Diary | |
753 | |
754 @vindex holidays-in-diary-buffer | |
755 Ordinarily, the mode line of the diary buffer window indicates any | |
756 holidays that fall on the date of the diary entries. The process of | |
757 checking for holidays can take several seconds, so including holiday | |
758 information delays the display of the diary buffer noticeably. If you'd | |
759 prefer to have a faster display of the diary buffer but without the | |
760 holiday information, set the variable @code{holidays-in-diary-buffer} to | |
761 @code{nil}.@refill | |
762 | |
763 @vindex number-of-diary-entries | |
764 The variable @code{number-of-diary-entries} controls the number of | |
765 days of diary entries to be displayed at one time. It affects the | |
766 initial display when @code{view-diary-entries-initially} is @code{t}, as | |
767 well as the command @kbd{M-x diary}. For example, the default value is | |
768 1, which says to display only the current day's diary entries. If the | |
769 value is 2, both the current day's and the next day's entries are | |
770 displayed. The value can also be a vector of seven elements: for | |
771 example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries | |
772 appear on Sunday, the current date's and the next day's diary entries | |
773 appear Monday through Thursday, Friday through Monday's entries appear | |
774 on Friday, while on Saturday only that day's entries appear. | |
775 | |
776 @vindex print-diary-entries-hook | |
777 @findex print-diary-entries | |
778 The variable @code{print-diary-entries-hook} is a normal hook run | |
779 after preparation of a temporary buffer containing just the diary | |
780 entries currently visible in the diary buffer. (The other, irrelevant | |
781 diary entries are really absent from the temporary buffer; in the diary | |
782 buffer, they are merely hidden.) The default value of this hook does | |
783 the printing with the command @code{lpr-buffer}. If you want to use a | |
784 different command to do the printing, just change the value of this | |
785 hook. Other uses might include, for example, rearranging the lines into | |
786 order by day and time. | |
787 | |
788 @vindex diary-date-forms | |
789 You can customize the form of dates in your diary file, if neither the | |
790 standard American nor European styles suits your needs, by setting the | |
791 variable @code{diary-date-forms}. This variable is a list of patterns | |
792 for recognizing a date. Each date pattern is a list whose elements may | |
793 be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs | |
794 Lisp Reference Manual}) or the symbols @code{month}, @code{day}, | |
795 @code{year}, @code{monthname}, and @code{dayname}. All these elements | |
796 serve as patterns that match certain kinds of text in the diary file. | |
797 In order for the date pattern, as a whole, to match, all of its elements | |
798 must match consecutively. | |
799 | |
800 A regular expression in a date pattern matches in its usual fashion, | |
801 using the standard syntax table altered so that @samp{*} is a word | |
802 constituent. | |
803 | |
804 The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, | |
805 and @code{dayname} match the month number, day number, year number, | |
806 month name, and day name of the date being considered. The symbols that | |
807 match numbers allow leading zeros; those that match names allow | |
808 three-letter abbreviations and capitalization. All the symbols can | |
809 match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any | |
810 month'', and so on, it should match regardless of the date being | |
811 considered. | |
812 | |
813 The default value of @code{diary-date-forms} in the American style is | |
814 this: | |
815 | |
816 @example | |
817 ((month "/" day "[^/0-9]") | |
818 (month "/" day "/" year "[^0-9]") | |
819 (monthname " *" day "[^,0-9]") | |
820 (monthname " *" day ", *" year "[^0-9]") | |
821 (dayname "\\W")) | |
822 @end example | |
823 | |
824 The date patterns in the list must be @emph{mutually exclusive} and | |
825 must not match any portion of the diary entry itself, just the date and | |
826 one character of whitespace. If, to be mutually exclusive, the pattern | |
827 must match a portion of the diary entry text---beyond the whitespace | |
828 that ends the date---then the first element of the date pattern | |
829 @emph{must} be @code{backup}. This causes the date recognizer to back | |
830 up to the beginning of the current word of the diary entry, after | |
831 finishing the match. Even if you use @code{backup}, the date pattern | |
832 must absolutely not match more than a portion of the first word of the | |
833 diary entry. The default value of @code{diary-date-forms} in the | |
834 European style is this list: | |
835 | |
836 @example | |
837 ((day "/" month "[^/0-9]") | |
838 (day "/" month "/" year "[^0-9]") | |
839 (backup day " *" monthname "\\W+\\<[^*0-9]") | |
840 (day " *" monthname " *" year "[^0-9]") | |
841 (dayname "\\W")) | |
842 @end example | |
843 | |
844 @noindent | |
845 Notice the use of @code{backup} in the third pattern, because it needs | |
846 to match part of a word beyond the date itself to distinguish it from | |
847 the fourth pattern. | |
848 | |
849 @node Hebrew/Islamic Entries | |
850 @section Hebrew- and Islamic-Date Diary Entries | |
851 | |
852 Your diary file can have entries based on Hebrew or Islamic dates, as | |
853 well as entries based on the world-standard Gregorian calendar. | |
854 However, because recognition of such entries is time-consuming and most | |
855 people don't use them, you must explicitly enable their use. If you | |
856 want the diary to recognize Hebrew-date diary entries, for example, | |
857 you must do this: | |
858 | |
859 @vindex nongregorian-diary-listing-hook | |
860 @vindex nongregorian-diary-marking-hook | |
861 @findex list-hebrew-diary-entries | |
862 @findex mark-hebrew-diary-entries | |
863 @smallexample | |
864 (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) | |
865 (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) | |
866 @end smallexample | |
867 | |
868 @noindent | |
869 If you want Islamic-date entries, do this: | |
870 | |
871 @findex list-islamic-diary-entries | |
872 @findex mark-islamic-diary-entries | |
873 @smallexample | |
874 (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) | |
875 (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) | |
876 @end smallexample | |
877 | |
878 Hebrew- and Islamic-date diary entries have the same formats as | |
879 Gregorian-date diary entries, except that @samp{H} precedes a Hebrew | |
880 date and @samp{I} precedes an Islamic date. Moreover, because the | |
881 Hebrew and Islamic month names are not uniquely specified by the first | |
882 three letters, you may not abbreviate them. For example, a diary entry | |
883 for the Hebrew date Heshvan 25 could look like this: | |
884 | |
885 @smallexample | |
886 HHeshvan 25 Happy Hebrew birthday! | |
887 @end smallexample | |
888 | |
889 @noindent | |
890 and would appear in the diary for any date that corresponds to Heshvan 25 | |
891 on the Hebrew calendar. And here is an Islamic-date diary entry that matches | |
892 Dhu al-Qada 25: | |
893 | |
894 @smallexample | |
895 IDhu al-Qada 25 Happy Islamic birthday! | |
896 @end smallexample | |
897 | |
898 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries | |
899 are nonmarking if they are preceded with an ampersand (@samp{&}). | |
900 | |
901 Here is a table of commands used in the calendar to create diary entries | |
902 that match the selected date and other dates that are similar in the Hebrew | |
903 or Islamic calendar: | |
904 | |
905 @table @kbd | |
906 @item i h d | |
907 Add a diary entry for the Hebrew date corresponding to the selected date | |
908 (@code{insert-hebrew-diary-entry}). | |
909 @item i h m | |
910 Add a diary entry for the day of the Hebrew month corresponding to the | |
911 selected date (@code{insert-monthly-hebrew-diary-entry}). This diary | |
912 entry matches any date that has the same Hebrew day-within-month as the | |
913 selected date. | |
914 @item i h y | |
915 Add a diary entry for the day of the Hebrew year corresponding to the | |
916 selected date (@code{insert-yearly-hebrew-diary-entry}). This diary | |
917 entry matches any date which has the same Hebrew month and day-within-month | |
918 as the selected date. | |
919 @item i i d | |
920 Add a diary entry for the Islamic date corresponding to the selected date | |
921 (@code{insert-islamic-diary-entry}). | |
922 @item i i m | |
923 Add a diary entry for the day of the Islamic month corresponding to the | |
924 selected date (@code{insert-monthly-islamic-diary-entry}). | |
925 @item i i y | |
926 Add a diary entry for the day of the Islamic year corresponding to the | |
927 selected date (@code{insert-yearly-islamic-diary-entry}). | |
928 @end table | |
929 | |
930 @findex insert-hebrew-diary-entry | |
931 @findex insert-monthly-hebrew-diary-entry | |
932 @findex insert-yearly-hebrew-diary-entry | |
933 @findex insert-islamic-diary-entry | |
934 @findex insert-monthly-islamic-diary-entry | |
935 @findex insert-yearly-islamic-diary-entry | |
936 These commands work much like the corresponding commands for ordinary | |
937 diary entries: they apply to the date that point is on in the calendar | |
938 window, and what they do is insert just the date portion of a diary entry | |
939 at the end of your diary file. You must then insert the rest of the | |
940 diary entry. | |
941 | |
942 @node Fancy Diary Display | |
943 @section Fancy Diary Display | |
944 @vindex diary-display-hook | |
945 @findex simple-diary-display | |
946 | |
947 Diary display works by preparing the diary buffer and then running the | |
948 hook @code{diary-display-hook}. The default value of this hook | |
949 (@code{simple-diary-display}) hides the irrelevant diary entries and | |
950 then displays the buffer. However, if you specify the hook as follows, | |
951 | |
952 @cindex diary buffer | |
953 @findex fancy-diary-display | |
954 @example | |
955 (add-hook 'diary-display-hook 'fancy-diary-display) | |
956 @end example | |
957 | |
958 @noindent | |
959 this enables fancy diary display. It displays diary entries and | |
960 holidays by copying them into a special buffer that exists only for the | |
961 sake of display. Copying to a separate buffer provides an opportunity | |
962 to change the displayed text to make it prettier---for example, to sort | |
963 the entries by the dates they apply to. | |
964 | |
965 As with simple diary display, you can print a hard copy of the buffer | |
966 with @code{print-diary-entries}. To print a hard copy of a day-by-day | |
967 diary for a week, position point on Sunday of that week, type | |
968 @kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the | |
969 inclusion of the holidays slows down the display slightly; you can speed | |
970 things up by setting the variable @code{holidays-in-diary-buffer} to | |
971 @code{nil}. | |
972 | |
973 @vindex diary-list-include-blanks | |
974 Ordinarily, the fancy diary buffer does not show days for which there are | |
975 no diary entries, even if that day is a holiday. If you want such days to be | |
976 shown in the fancy diary buffer, set the variable | |
977 @code{diary-list-include-blanks} to @code{t}.@refill | |
978 | |
979 @cindex sorting diary entries | |
980 If you use the fancy diary display, you can use the normal hook | |
981 @code{list-diary-entries-hook} to sort each day's diary entries by their | |
982 time of day. Here's how: | |
983 | |
984 @findex sort-diary-entries | |
985 @example | |
986 (add-hook 'list-diary-entries-hook 'sort-diary-entries t) | |
987 @end example | |
988 | |
989 @noindent | |
990 For each day, this sorts diary entries that begin with a recognizable | |
991 time of day according to their times. Diary entries without times come | |
992 first within each day. | |
993 | |
994 Fancy diary display also has the ability to process included diary | |
995 files. This permits a group of people to share a diary file for events | |
996 that apply to all of them. Lines in the diary file of this form: | |
997 | |
998 @smallexample | |
999 #include "@var{filename}" | |
1000 @end smallexample | |
1001 | |
1002 @noindent | |
1003 includes the diary entries from the file @var{filename} in the fancy | |
1004 diary buffer. The include mechanism is recursive, so that included files | |
1005 can include other files, and so on; you must be careful not to have a | |
1006 cycle of inclusions, of course. Here is how to enable the include | |
1007 facility: | |
1008 | |
1009 @vindex list-diary-entries-hook | |
1010 @vindex mark-diary-entries-hook | |
1011 @findex include-other-diary-files | |
1012 @findex mark-included-diary-files | |
1013 @smallexample | |
1014 (add-hook 'list-diary-entries-hook 'include-other-diary-files) | |
1015 (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) | |
1016 @end smallexample | |
1017 | |
1018 The include mechanism works only with the fancy diary display, because | |
1019 ordinary diary display shows the entries directly from your diary file. | |
1020 | |
1021 @node Sexp Diary Entries | |
1022 @section Sexp Entries and the Fancy Diary Display | |
1023 @cindex sexp diary entries | |
1024 | |
1025 Sexp diary entries allow you to do more than just have complicated | |
1026 conditions under which a diary entry applies. If you use the fancy | |
1027 diary display, sexp entries can generate the text of the entry depending | |
1028 on the date itself. For example, an anniversary diary entry can insert | |
1029 the number of years since the anniversary date into the text of the | |
1030 diary entry. Thus the @samp{%d} in this dairy entry: | |
1031 | |
1032 @findex diary-anniversary | |
1033 @smallexample | |
1034 %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) | |
1035 @end smallexample | |
1036 | |
1037 @noindent | |
1038 gets replaced by the age, so on October 31, 1990 the entry appears in | |
1039 the fancy diary buffer like this: | |
1040 | |
1041 @smallexample | |
1042 Arthur's birthday (42 years old) | |
1043 @end smallexample | |
1044 | |
1045 @noindent | |
1046 If the diary file instead contains this entry: | |
1047 | |
1048 @smallexample | |
1049 %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday | |
1050 @end smallexample | |
1051 | |
1052 @noindent | |
1053 the entry in the fancy diary buffer for October 31, 1990 appears like this: | |
1054 | |
1055 @smallexample | |
1056 Arthur's 42nd birthday | |
1057 @end smallexample | |
1058 | |
1059 Similarly, cyclic diary entries can interpolate the number of repetitions | |
1060 that have occurred: | |
1061 | |
1062 @findex diary-cyclic | |
1063 @smallexample | |
1064 %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) | |
1065 @end smallexample | |
1066 | |
1067 @noindent | |
1068 looks like this: | |
1069 | |
1070 @smallexample | |
1071 Renew medication (5th time) | |
1072 @end smallexample | |
1073 | |
1074 @noindent | |
1075 in the fancy diary display on September 8, 1990. | |
1076 | |
1077 There is an early reminder diary sexp that includes its entry in the | |
1078 diary not only on the date of occurrence, but also on earlier dates. | |
1079 For example, if you want a reminder a week before your anniversary, you | |
1080 can use | |
1081 | |
1082 @findex diary-remind | |
1083 @smallexample | |
1084 %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary | |
1085 @end smallexample | |
1086 | |
1087 @noindent | |
1088 and the fancy diary will show | |
1089 @smallexample | |
1090 Ed's anniversary | |
1091 @end smallexample | |
1092 @noindent | |
1093 both on December 15 and on December 22. | |
1094 | |
1095 @findex diary-date | |
1096 The function @code{diary-date} applies to dates described by a month, | |
1097 day, year combination, each of which can be an integer, a list of | |
1098 integers, or @code{t}. The value @code{t} means all values. For | |
1099 example, | |
1100 | |
1101 @smallexample | |
1102 %%(diary-date '(10 11 12) 22 t) Rake leaves | |
1103 @end smallexample | |
1104 | |
1105 @noindent | |
1106 causes the fancy diary to show | |
1107 | |
1108 @smallexample | |
1109 Rake leaves | |
1110 @end smallexample | |
1111 | |
1112 @noindent | |
1113 on October 22, November 22, and December 22 of every year. | |
1114 | |
1115 @findex diary-float | |
1116 The function @code{diary-float} allows you to describe diary entries | |
1117 that apply to dates like the third Friday of November, or the last | |
1118 Tuesday in April. The parameters are the @var{month}, @var{dayname}, | |
1119 and an index @var{n}. The entry appears on the @var{n}th @var{dayname} | |
1120 of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and | |
1121 so on. If @var{n} is negative it counts backward from the end of | |
1122 @var{month}. The value of @var{month} can be a list of months, a single | |
1123 month, or @code{t} to specify all months. You can also use an optional | |
1124 parameter @var{day} to specify the @var{n}th @var{dayname} of | |
1125 @var{month} on or after/before @var{day}; the value of @var{day} defaults | |
1126 to 1 if @var{n} is positive and to the last day of @var{month} if | |
1127 @var{n} is negative. For example, | |
1128 | |
1129 @smallexample | |
1130 %%(diary-float t 1 -1) Pay rent | |
1131 @end smallexample | |
1132 | |
1133 @noindent | |
1134 causes the fancy diary to show | |
1135 | |
1136 @smallexample | |
1137 Pay rent | |
1138 @end smallexample | |
1139 | |
1140 @noindent | |
1141 on the last Monday of every month. | |
1142 | |
1143 The generality of sexp diary entries lets you specify any diary | |
1144 entry that you can describe algorithmically. A sexp diary entry | |
1145 contains an expression that computes whether the entry applies to any | |
1146 given date. If its value is non-@code{nil}, the entry applies to that | |
1147 date; otherwise, it does not. The expression can use the variable | |
1148 @code{date} to find the date being considered; its value is a list | |
1149 (@var{month} @var{day} @var{year}) that refers to the Gregorian | |
1150 calendar. | |
1151 | |
1152 The sexp diary entry applies to a date when the expression's value | |
1153 is non-@code{nil}, but some values have more specific meanings. If | |
1154 the value is a string, that string is a description of the event which | |
1155 occurs on that date. The value can also have the form | |
1156 @code{(@var{mark} . @var{string})}; then @var{mark} specifies how to | |
1157 mark the date in the calendar, and @var{string} is the description of | |
1158 the event. If @var{mark} is a single-character string, that character | |
1159 appears next to the date in the calendar. If @var{mark} is a face | |
1160 name, the date is displayed in that face. If @var{mark} is | |
1161 @code{nil}, that specifies no particular highlighting for the date. | |
1162 | |
1163 Suppose you get paid on the 21st of the month if it is a weekday, and | |
1164 on the Friday before if the 21st is on a weekend. Here is how to write | |
1165 a sexp diary entry that matches those dates: | |
1166 | |
1167 @smallexample | |
1168 &%%(let ((dayname (calendar-day-of-week date)) | |
1169 (day (car (cdr date)))) | |
1170 (or (and (= day 21) (memq dayname '(1 2 3 4 5))) | |
1171 (and (memq day '(19 20)) (= dayname 5))) | |
1172 ) Pay check deposited | |
1173 @end smallexample | |
1174 | |
1175 The following sexp diary entries take advantage of the ability (in the fancy | |
1176 diary display) to concoct diary entries whose text varies based on the date: | |
1177 | |
1178 @findex diary-sunrise-sunset | |
1179 @findex diary-phases-of-moon | |
1180 @findex diary-day-of-year | |
1181 @findex diary-iso-date | |
1182 @findex diary-julian-date | |
1183 @findex diary-astro-day-number | |
1184 @findex diary-hebrew-date | |
1185 @findex diary-islamic-date | |
1186 @findex diary-french-date | |
1187 @findex diary-mayan-date | |
1188 @table @code | |
1189 @item %%(diary-sunrise-sunset) | |
1190 Make a diary entry for the local times of today's sunrise and sunset. | |
1191 @item %%(diary-phases-of-moon) | |
1192 Make a diary entry for the phases (quarters) of the moon. | |
1193 @item %%(diary-day-of-year) | |
1194 Make a diary entry with today's day number in the current year and the number | |
1195 of days remaining in the current year. | |
1196 @item %%(diary-iso-date) | |
1197 Make a diary entry with today's equivalent ISO commercial date. | |
1198 @item %%(diary-julian-date) | |
1199 Make a diary entry with today's equivalent date on the Julian calendar. | |
1200 @item %%(diary-astro-day-number) | |
1201 Make a diary entry with today's equivalent astronomical (Julian) day number. | |
1202 @item %%(diary-hebrew-date) | |
1203 Make a diary entry with today's equivalent date on the Hebrew calendar. | |
1204 @item %%(diary-islamic-date) | |
1205 Make a diary entry with today's equivalent date on the Islamic calendar. | |
1206 @item %%(diary-french-date) | |
1207 Make a diary entry with today's equivalent date on the French Revolutionary | |
1208 calendar. | |
1209 @item %%(diary-mayan-date) | |
1210 Make a diary entry with today's equivalent date on the Mayan calendar. | |
1211 @end table | |
1212 | |
1213 @noindent | |
1214 Thus including the diary entry | |
1215 | |
1216 @example | |
1217 &%%(diary-hebrew-date) | |
1218 @end example | |
1219 | |
1220 @noindent | |
1221 causes every day's diary display to contain the equivalent date on the | |
1222 Hebrew calendar, if you are using the fancy diary display. (With simple | |
1223 diary display, the line @samp{&%%(diary-hebrew-date)} appears in the | |
1224 diary for any date, but does nothing particularly useful.) | |
1225 | |
1226 These functions can be used to construct sexp diary entries based on | |
1227 the Hebrew calendar in certain standard ways: | |
1228 | |
1229 @cindex rosh hodesh | |
1230 @findex diary-rosh-hodesh | |
1231 @cindex parasha, weekly | |
1232 @findex diary-parasha | |
1233 @cindex candle lighting times | |
1234 @findex diary-sabbath-candles | |
1235 @cindex omer count | |
1236 @findex diary-omer | |
1237 @cindex yahrzeits | |
1238 @findex diary-yahrzeit | |
1239 @table @code | |
1240 @item %%(diary-rosh-hodesh) | |
1241 Make a diary entry that tells the occurrence and ritual announcement of each | |
1242 new Hebrew month. | |
1243 @item %%(diary-parasha) | |
1244 Make a Saturday diary entry that tells the weekly synagogue scripture reading. | |
1245 @item %%(diary-sabbath-candles) | |
1246 Make a Friday diary entry that tells the @emph{local time} of Sabbath | |
1247 candle lighting. | |
1248 @item %%(diary-omer) | |
1249 Make a diary entry that gives the omer count, when appropriate. | |
1250 @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} | |
1251 Make a diary entry marking the anniversary of a date of death. The date | |
1252 is the @emph{Gregorian} (civil) date of death. The diary entry appears | |
1253 on the proper Hebrew calendar anniversary and on the day before. (In | |
1254 the European style, the order of the parameters is changed to @var{day}, | |
1255 @var{month}, @var{year}.) | |
1256 @end table | |
1257 | |
1258 All the functions documented above take an optional argument | |
1259 @var{mark} which specifies how to mark the date in the calendar display. | |
1260 If one of these functions decides that it applies to a certain date, | |
1261 it returns a value that contains @var{mark}. | |
1262 | |
1263 @node Appt Customizing | |
1264 @section Customizing Appointment Reminders | |
1265 | |
1266 You can specify exactly how Emacs reminds you of an appointment, and | |
1267 how far in advance it begins doing so, by setting these variables: | |
1268 | |
1269 @vindex appt-message-warning-time | |
1270 @vindex appt-audible | |
1271 @vindex appt-visible | |
1272 @vindex appt-display-mode-line | |
1273 @vindex appt-msg-window | |
1274 @vindex appt-display-duration | |
1275 @vindex appt-disp-window-function | |
1276 @vindex appt-delete-window-function | |
1277 @table @code | |
1278 @item appt-message-warning-time | |
1279 The time in minutes before an appointment that the reminder begins. The | |
1280 default is 12 minutes. | |
1281 @item appt-audible | |
1282 If this is non-@code{nil}, Emacs rings the | |
1283 terminal bell for appointment reminders. The default is @code{t}. | |
1284 @item appt-visible | |
1285 If this is non-@code{nil}, Emacs displays the appointment | |
1286 message in the echo area. The default is @code{t}. | |
1287 @item appt-display-mode-line | |
1288 If this is non-@code{nil}, Emacs displays the number of minutes | |
1289 to the appointment on the mode line. The default is @code{t}. | |
1290 @item appt-msg-window | |
1291 If this is non-@code{nil}, Emacs displays the appointment | |
1292 message in another window. The default is @code{t}. | |
1293 @item appt-disp-window-function | |
1294 This variable holds a function to use to create the other window | |
1295 for the appointment message. | |
1296 @item appt-delete-window-function | |
1297 This variable holds a function to use to get rid of the appointment | |
1298 message window, when its time is up. | |
1299 @item appt-display-duration | |
1300 The number of seconds to display an appointment message. The default | |
1301 is 10 seconds. | |
1302 @end table | |
1303 | |
1304 | |
310 @node Index | 1305 @node Index |
311 @unnumbered Index | 1306 @unnumbered Index |
312 | 1307 |
313 @printindex cp | 1308 @printindex cp |
314 | 1309 |