translation approved by the author instead of in the original English.
\1f
+File: xemacs.info, Node: Adding to Diary, Next: Special Diary Entries, Prev: Date Formats, Up: Diary
+
+Commands to Add to the Diary
+----------------------------
+
+ While in the calendar, there are several commands to create diary
+entries:
+
+`i d'
+ Add a diary entry for the selected date (`insert-diary-entry').
+
+`i w'
+ Add a diary entry for the selected day of the week
+ (`insert-weekly-diary-entry').
+
+`i m'
+ Add a diary entry for the selected day of the month
+ (`insert-monthly-diary-entry').
+
+`i y'
+ Add a diary entry for the selected day of the year
+ (`insert-yearly-diary-entry').
+
+ You can make a diary entry for a specific date by selecting that date
+in the calendar window and typing the `i d' command. This command
+displays the end of your diary file in another window and inserts the
+date; you can then type the rest of the diary entry.
+
+ If you want to make a diary entry that applies to a specific day of
+the week, select that day of the week (any occurrence will do) and type
+`i w'. This inserts the day-of-week as a generic date; you can then
+type the rest of the diary entry. You can make a monthly diary entry in
+the same fashion. Select the day of the month, use the `i m' command,
+and type rest of the entry. Similarly, you can insert a yearly diary
+entry with the `i y' command.
+
+ All of the above commands make marking diary entries by default. To
+make a nonmarking diary entry, give a numeric argument to the command.
+For example, `C-u i w' makes a nonmarking weekly diary entry.
+
+ When you modify the diary file, be sure to save the file before
+exiting Emacs.
+
+\1f
+File: xemacs.info, Node: Special Diary Entries, Prev: Adding to Diary, Up: Diary
+
+Special Diary Entries
+---------------------
+
+ In addition to entries based on calendar dates, the diary file can
+contain "sexp entries" for regular events such as anniversaries. These
+entries are based on Lisp expressions (sexps) that Emacs evaluates as
+it scans the diary file. Instead of a date, a sexp entry contains `%%'
+followed by a Lisp expression which must begin and end with
+parentheses. The Lisp expression determines which dates the entry
+applies to.
+
+ Calendar mode provides commands to insert certain commonly used sexp
+entries:
+
+`i a'
+ Add an anniversary diary entry for the selected date
+ (`insert-anniversary-diary-entry').
+
+`i b'
+ Add a block diary entry for the current region
+ (`insert-block-diary-entry').
+
+`i c'
+ Add a cyclic diary entry starting at the date
+ (`insert-cyclic-diary-entry').
+
+ If you want to make a diary entry that applies to the anniversary of
+a specific date, move point to that date and use the `i a' command.
+This displays the end of your diary file in another window and inserts
+the anniversary description; you can then type the rest of the diary
+entry. The entry looks like this:
+
+ The effect of `i a' is to add a `diary-anniversary' sexp to your
+diary file. You can also add one manually, for instance:
+
+ %%(diary-anniversary 10 31 1948) Arthur's birthday
+
+This entry applies to October 31 in any year after 1948; `10 31 1948'
+specifies the date. (If you are using the European calendar style, the
+month and day are interchanged.) The reason this expression requires a
+beginning year is that advanced diary functions can use it to calculate
+the number of elapsed years.
+
+ A "block" diary entry applies to a specified range of consecutive
+dates. Here is a block diary entry that applies to all dates from June
+24, 1990 through July 10, 1990:
+
+ %%(diary-block 6 24 1990 7 10 1990) Vacation
+
+The `6 24 1990' indicates the starting date and the `7 10 1990'
+indicates the stopping date. (Again, if you are using the European
+calendar style, the month and day are interchanged.)
+
+ To insert a block entry, place point and the mark on the two dates
+that begin and end the range, and type `i b'. This command displays
+the end of your diary file in another window and inserts the block
+description; you can then type the diary entry.
+
+ "Cyclic" diary entries repeat after a fixed interval of days. To
+create one, select the starting date and use the `i c' command. The
+command prompts for the length of interval, then inserts the entry,
+which looks like this:
+
+ %%(diary-cyclic 50 3 1 1990) Renew medication
+
+This entry applies to March 1, 1990 and every 50th day following; `3 1
+1990' specifies the starting date. (If you are using the European
+calendar style, the month and day are interchanged.)
+
+ All three of these commands make marking diary entries. To insert a
+nonmarking entry, give a numeric argument to the command. For example,
+`C-u i a' makes a nonmarking anniversary diary entry.
+
+ Marking sexp diary entries in the calendar is _extremely_
+time-consuming, since every date visible in the calendar window must be
+individually checked. So it's a good idea to make sexp diary entries
+nonmarking (with `&') when possible.
+
+ Another sophisticated kind of sexp entry, a "floating" diary entry,
+specifies a regularly occurring event by offsets specified in days,
+weeks, and months. It is comparable to a crontab entry interpreted by
+the `cron' utility. Here is a nonmarking, floating diary entry that
+applies to the last Thursday in November:
+
+ &%%(diary-float 11 4 -1) American Thanksgiving
+
+The 11 specifies November (the eleventh month), the 4 specifies Thursday
+(the fourth day of the week, where Sunday is numbered zero), and the -1
+specifies "last" (1 would mean "first", 2 would mean "second", -2 would
+mean "second-to-last", and so on). The month can be a single month or
+a list of months. Thus you could change the 11 above to `'(1 2 3)' and
+have the entry apply to the last Thursday of January, February, and
+March. If the month is `t', the entry applies to all months of the
+year.
+
+ The sexp feature of the diary allows you to specify diary entries
+based on any Emacs Lisp expression. You can use the library of built-in
+functions or you can write your own functions. The built-in functions
+include the ones shown in this section, plus a few others (*note Sexp
+Diary Entries::).
+
+ The generality of sexps lets you specify any diary entry that you can
+describe algorithmically. Suppose you get paid on the 21st of the month
+if it is a weekday, and to the Friday before if the 21st is on a
+weekend. The diary entry
+
+ &%%(let ((dayname (calendar-day-of-week date))
+ (day (car (cdr date))))
+ (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
+ (and (memq day '(19 20)) (= dayname 5)))
+ ) Pay check deposited
+
+to just those dates. This example illustrates how the sexp can depend
+on the variable `date'; this variable is a list (MONTH DAY YEAR) that
+gives the Gregorian date for which the diary entries are being found.
+If the value of the sexp is `t', the entry applies to that date. If
+the sexp evaluates to `nil', the entry does _not_ apply to that date.
+
+\1f
File: xemacs.info, Node: Calendar Customization, Prev: Diary, Up: Calendar/Diary
Customizing the Calendar and Diary
If you set the variable `view-diary-entries-initially' to `t',
calling up the calendar automatically displays the diary entries for
the current date as well. The diary dates appear only if the current
-date is visible. If you add both of the following lines to your
-`.emacs' file:
+date is visible. If you add both of the following lines to your init
+file:
(setq view-diary-entries-initially t)
(calendar)
this displays both the calendar and diary windows whenever you start
-Emacs.
+Emacs. *Note Init File::.
Similarly, if you set the variable
`view-calendar-holidays-initially' to `t', entering the calendar
For example, suppose you want to add Bastille Day, celebrated in
France on July 14. You can do this by adding the following line to
-your `.emacs' file:
+your init file:
(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
+ *Note Init File::.
+
The holiday form `(holiday-fixed 7 14 "Bastille Day")' specifies the
fourteenth day of the seventh month (July).
If you use the fancy diary display, you can use the normal hook
`list-diary-entries-hook' to sort each day's diary entries by their
-time of day. Add this line to your `.emacs' file:
+time of day. Add this line to your init file:
(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
+ *Note Init File::.
+
For each day, this sorts diary entries that begin with a recognizable
time of day according to their times. Diary entries without times come
first within each day.
directory, the directories in the list `exec-path' are searched; this
list is initialized based on the `PATH' environment variable when you
start XEmacs. You can override either or both of these default
-initializations in your `.emacs' file.
+initializations in your init file. *Note Init File::.
When you use `M-!' and `M-|', XEmacs has to wait until the shell
command completes. You can quit with `C-g'; that terminates the shell
command.
-\1f
-File: xemacs.info, Node: Interactive Shell, Next: Shell Mode, Prev: Single Shell, Up: Shell
-
-Interactive Inferior Shell
---------------------------
-
- To run a subshell interactively with its typescript in an XEmacs
-buffer, use `M-x shell'. This creates (or reuses) a buffer named
-`*shell*' and runs a subshell with input coming from and output going
-to that buffer. That is to say, any "terminal output" from the subshell
-will go into the buffer, advancing point, and any "terminal input" for
-the subshell comes from text in the buffer. To give input to the
-subshell, go to the end of the buffer and type the input, terminated by
-<RET>.
-
- XEmacs does not wait for the subshell to do anything. You can switch
-windows or buffers and edit them while the shell is waiting, or while
-it is running a command. Output from the subshell waits until XEmacs
-has time to process it; this happens whenever XEmacs is waiting for
-keyboard input or for time to elapse.
-
- To get multiple subshells, change the name of buffer `*shell*' to
-something different by using `M-x rename-buffer'. The next use of `M-x
-shell' creates a new buffer `*shell*' with its own subshell. By
-renaming this buffer as well you can create a third one, and so on.
-All the subshells run independently and in parallel.
-
- The file name used to load the subshell is the value of the variable
-`explicit-shell-file-name', if that is non-`nil'. Otherwise, the
-environment variable `ESHELL' is used, or the environment variable
-`SHELL' if there is no `ESHELL'. If the file name specified is
-relative, the directories in the list `exec-path' are searched (*note
-Single Shell Commands: Single Shell.).
-
- As soon as the subshell is started, it is sent as input the contents
-of the file `~/.emacs_SHELLNAME', if that file exists, where SHELLNAME
-is the name of the file that the shell was loaded from. For example,
-if you use `csh', the file sent to it is `~/.emacs_csh'.
-
- `cd', `pushd', and `popd' commands given to the inferior shell are
-watched by XEmacs so it can keep the `*shell*' buffer's default
-directory the same as the shell's working directory. These commands
-are recognized syntactically by examining lines of input that are sent.
-If you use aliases for these commands, you can tell XEmacs to
-recognize them also. For example, if the value of the variable
-`shell-pushd-regexp' matches the beginning of a shell command line,
-that line is regarded as a `pushd' command. Change this variable when
-you add aliases for `pushd'. Likewise, `shell-popd-regexp' and
-`shell-cd-regexp' are used to recognize commands with the meaning of
-`popd' and `cd'.
-
- `M-x shell-resync-dirs' queries the shell and resynchronizes XEmacs'
-idea of what the current directory stack is. `M-x
-shell-dirtrack-toggle' turns directory tracking on and off.
-
- XEmacs keeps a history of the most recent commands you have typed in
-the `*shell*' buffer. If you are at the beginning of a shell command
-line and type <M-p>, the previous shell input is inserted into the
-buffer before point. Immediately typing <M-p> again deletes that input
-and inserts the one before it. By repeating <M-p> you can move
-backward through your commands until you find one you want to repeat.
-You may then edit the command before typing <RET> if you wish. <M-n>
-moves forward through the command history, in case you moved backward
-past the one you wanted while using <M-p>. If you type the first few
-characters of a previous command and then type <M-p>, the most recent
-shell input starting with those characters is inserted. This can be
-very convenient when you are repeating a sequence of shell commands.
-The variable `input-ring-size' controls how many commands are saved in
-your input history. The default is 30.
-
-\1f
-File: xemacs.info, Node: Shell Mode, Next: Terminal emulator, Prev: Interactive Shell, Up: Shell
-
-Shell Mode
-----------
-
- The shell buffer uses Shell mode, which defines several special keys
-attached to the `C-c' prefix. They are chosen to resemble the usual
-editing and job control characters present in shells that are not under
-XEmacs, except that you must type `C-c' first. Here is a list of the
-special key bindings of Shell mode:
-
-`<RET>'
- At end of buffer send line as input; otherwise, copy current line
- to end of buffer and send it (`send-shell-input'). When a line is
- copied, any text at the beginning of the line that matches the
- variable `shell-prompt-pattern' is left out; this variable's value
- should be a regexp string that matches the prompts that you use in
- your subshell.
-
-`C-c C-d'
- Send end-of-file as input, probably causing the shell or its
- current subjob to finish (`shell-send-eof').
-
-`C-d'
- If point is not at the end of the buffer, delete the next
- character just like most other modes. If point is at the end of
- the buffer, send end-of-file as input, instead of generating an
- error as in other modes (`comint-delchar-or-maybe-eof').
-
-`C-c C-u'
- Kill all text that has yet to be sent as input
- (`kill-shell-input').
-
-`C-c C-w'
- Kill a word before point (`backward-kill-word').
-
-`C-c C-c'
- Interrupt the shell or its current subjob if any
- (`interrupt-shell-subjob').
-
-`C-c C-z'
- Stop the shell or its current subjob if any (`stop-shell-subjob').
-
-`C-c C-\'
- Send quit signal to the shell or its current subjob if any
- (`quit-shell-subjob').
-
-`C-c C-o'
- Delete last batch of output from shell (`kill-output-from-shell').
-
-`C-c C-r'
- Scroll top of last batch of output to top of window
- (`show-output-from-shell').
-
-`C-c C-y'
- Copy the previous bunch of shell input and insert it into the
- buffer before point (`copy-last-shell-input'). No final newline
- is inserted, and the input copied is not resubmitted until you type
- <RET>.
-
-`M-p'
- Move backward through the input history. Search for a matching
- command if you have typed the beginning of a command
- (`comint-previous-input').
-
-`M-n'
- Move forward through the input history. Useful when you are using
- <M-p> quickly and go past the desired command
- (`comint-next-input').
-
-`<TAB>'
- Complete the file name preceding point (`comint-dynamic-complete').
-
-\1f
-File: xemacs.info, Node: Terminal emulator, Next: Term Mode, Prev: Shell Mode, Up: Shell
-
-Interactive Inferior Shell with Terminal Emulator
--------------------------------------------------
-
- To run a subshell in a terminal emulator, putting its typescript in
-an XEmacs buffer, use `M-x term'. This creates (or reuses) a buffer
-named `*term*' and runs a subshell with input coming from your keyboard
-and output going to that buffer.
-
- All the normal keys that you type are sent without any interpretation
-by XEmacs directly to the subshell, as "terminal input." Any "echo" of
-your input is the responsibility of the subshell. (The exception is
-the terminal escape character, which by default is `C-c'. *note Term
-Mode::.) Any "terminal output" from the subshell goes into the buffer,
-advancing point.
-
- Some programs (such as XEmacs itself) need to control the appearance
-on the terminal screen in detail. They do this by sending special
-control codes. The exact control codes needed vary from terminal to
-terminal, but nowadays most terminals and terminal emulators (including
-xterm) understand the so-called "ANSI escape sequences" (first
-popularized by the Digital's VT100 family of terminal). The term mode
-also understands these escape sequences, and for each control code does
-the appropriate thing to change the buffer so that the appearance of
-the window will match what it would be on a real terminal. Thus you
-can actually run XEmacs inside an XEmacs Term window!
-
- XEmacs does not wait for the subshell to do anything. You can switch
-windows or buffers and edit them while the shell is waiting, or while
-it is running a command. Output from the subshell waits until XEmacs
-has time to process it; this happens whenever XEmacs is waiting for
-keyboard input or for time to elapse.
-
- To make multiple terminal emulators, rename the buffer `*term*' to
-something different using `M-x rename-uniquely', just as with Shell
-mode.
-
- The file name used to load the subshell is determined the same way
-as for Shell mode.
-
- Unlike Shell mode, Term mode does not track the current directory by
-examining your input. Instead, if you use a programmable shell, you
-can have it tell Term what the current directory is. This is done
-automatically by bash for version 1.15 and later.
-
-\1f
-File: xemacs.info, Node: Term Mode, Next: Paging in Term, Prev: Terminal emulator, Up: Shell
-
-Term Mode
----------
-
- Term uses Term mode, which has two input modes: In line mode, Term
-basically acts like Shell mode. *Note Shell Mode::. In Char mode,
-each character is sent directly to the inferior subshell, except for
-the Term escape character, normally `C-c'.
-
- To switch between line and char mode, use these commands:
- findex term-char-mode
-
-`C-c C-k'
- Switch to line mode. Do nothing if already in line mode.
-
-`C-c C-j'
- Switch to char mode. Do nothing if already in char mode.
-
- The following commands are only available in Char mode:
-`C-c C-c'
- Send a literal <C-c> to the sub-shell.
-
-`C-c C-x'
- A prefix command to conveniently access the global <C-x> commands.
- For example, `C-c C-x o' invokes the global binding of `C-x o',
- which is normally `other-window'.
-