X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=info%2Fxemacs.info-15;h=e790bcd707e1618d954797c2ae26646c0ba3d4b3;hb=6055f790006272b9f8497e9dc6240771220196a1;hp=bb5eb2c0a3176c86061fb3f60ba459cd02e6c66d;hpb=c8aa261a7bf3eb1389d2e018be1d715f73cacd66;p=chise%2Fxemacs-chise.git diff --git a/info/xemacs.info-15 b/info/xemacs.info-15 index bb5eb2c..e790bcd 100644 --- a/info/xemacs.info-15 +++ b/info/xemacs.info-15 @@ -30,6 +30,541 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +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. + + +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. + + +File: xemacs.info, Node: Calendar Customization, Prev: Diary, Up: Calendar/Diary + +Customizing the Calendar and Diary +---------------------------------- + + There are many customizations that you can use to make the calendar +and diary suit your personal tastes. + +* Menu: + +* Calendar Customizing:: Defaults you can set. +* Holiday Customizing:: Defining your own holidays. +* Date Display Format:: Changing the format. +* Time Display Format:: Changing the format. +* Daylight Savings:: Changing the default. +* Diary Customizing:: Defaults you can set. +* Hebrew/Islamic Entries:: How to obtain them. +* Fancy Diary Display:: Enhancing the diary display, sorting entries. +* Included Diary Files:: Sharing a common diary file. +* Sexp Diary Entries:: Fancy things you can do. +* Appt Customizing:: Customizing appointment reminders. + + +File: xemacs.info, Node: Calendar Customizing, Next: Holiday Customizing, Up: Calendar Customization + +Customizing the Calendar +........................ + + 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 init +file: + + (setq view-diary-entries-initially t) + (calendar) + +this displays both the calendar and diary windows whenever you start +Emacs. *Note Init File::. + + Similarly, if you set the variable +`view-calendar-holidays-initially' to `t', entering the calendar +automatically displays a list of holidays for the current three-month +period. The holiday list appears in a separate window. + + You can set the variable `mark-diary-entries-in-calendar' to `t' in +order to mark any dates with diary entries. This takes effect whenever +the calendar window contents are recomputed. There are two ways of +marking these dates: by changing the face (*note Faces::), if the +display supports that, or by placing a plus sign (`+') beside the date +otherwise. + + Similarly, setting the variable `mark-holidays-in-calendar' to `t' +marks holiday dates, either with a change of face or with an asterisk +(`*'). + + The variable `calendar-holiday-marker' specifies how to mark a date +as being a holiday. Its value may be a character to insert next to the +date, or a face name to use for displaying the date. Likewise, the +variable `diary-entry-marker' specifies how to mark a date that has +diary entries. The calendar creates faces named `holiday-face' and +`diary-face' for these purposes; those symbols are the default values +of these variables, when Emacs supports multiple faces on your terminal. + + The variable `calendar-load-hook' is a normal hook run when the +calendar package is first loaded (before actually starting to display +the calendar). + + Starting the calendar runs the normal hook +`initial-calendar-window-hook'. Recomputation of the calendar display +does not run this hook. But if you leave the calendar with the `q' +command and reenter it, the hook runs again. + + The variable `today-visible-calendar-hook' is a normal hook run +after the calendar buffer has been prepared with the calendar when the +current date is visible in the window. One use of this hook is to +replace today's date with asterisks; to do that, use the hook function +`calendar-star-date'. + + (add-hook 'today-visible-calendar-hook 'calendar-star-date) + +Another standard hook function marks the current date, either by +changing its face or by adding an asterisk. Here's how to use it: + + (add-hook 'today-visible-calendar-hook 'calendar-mark-today) + +The variable `calendar-today-marker' specifies how to mark today's +date. Its value should be a character to insert next to the date or a +face name to use for displaying the date. A face named +`calendar-today-face' is provided for this purpose; that symbol is the +default for this variable when Emacs supports multiple faces on your +terminal. + +A similar normal hook, `today-invisible-calendar-hook' is run if the +current date is _not_ visible in the window. + + +File: xemacs.info, Node: Holiday Customizing, Next: Date Display Format, Prev: Calendar Customizing, Up: Calendar Customization + +Customizing the Holidays +........................ + + Emacs knows about holidays defined by entries on one of several +lists. You can customize these lists of holidays to your own needs, +adding or deleting holidays. The lists of holidays that Emacs uses are +for general holidays (`general-holidays'), local holidays +(`local-holidays'), Christian holidays (`christian-holidays'), Hebrew +(Jewish) holidays (`hebrew-holidays'), Islamic (Moslem) holidays +(`islamic-holidays'), and other holidays (`other-holidays'). + + The general holidays are, by default, holidays common throughout the +United States. To eliminate these holidays, set `general-holidays' to +`nil'. + + There are no default local holidays (but sites may supply some). You +can set the variable `local-holidays' to any list of holidays, as +described below. + + By default, Emacs does not include all the holidays of the religions +that it knows, only those commonly found in secular calendars. For a +more extensive collection of religious holidays, you can set any (or +all) of the variables `all-christian-calendar-holidays', +`all-hebrew-calendar-holidays', or `all-islamic-calendar-holidays' to +`t'. If you want to eliminate the religious holidays, set any or all +of the corresponding variables `christian-holidays', `hebrew-holidays', +and `islamic-holidays' to `nil'. + + You can set the variable `other-holidays' to any list of holidays. +This list, normally empty, is intended for individual use. + + Each of the lists (`general-holidays', `local-holidays', +`christian-holidays', `hebrew-holidays', `islamic-holidays', and +`other-holidays') is a list of "holiday forms", each holiday form +describing a holiday (or sometimes a list of holidays). + + Here is a table of the possible kinds of holiday form. Day numbers +and month numbers count starting from 1, but "dayname" numbers count +Sunday as 0. The element STRING is always the name of the holiday, as +a string. + +`(holiday-fixed MONTH DAY STRING)' + A fixed date on the Gregorian calendar. MONTH and DAY are + numbers, STRING is the name of the holiday. + +`(holiday-float MONTH DAYNAME K STRING)' + The Kth DAYNAME in MONTH on the Gregorian calendar (DAYNAME=0 for + Sunday, and so on); negative K means count back from the end of + the month. STRING is the name of the holiday. + +`(holiday-hebrew MONTH DAY STRING)' + A fixed date on the Hebrew calendar. MONTH and DAY are numbers, + STRING is the name of the holiday. + +`(holiday-islamic MONTH DAY STRING)' + A fixed date on the Islamic calendar. MONTH and DAY are numbers, + STRING is the name of the holiday. + +`(holiday-julian MONTH DAY STRING)' + A fixed date on the Julian calendar. MONTH and DAY are numbers, + STRING is the name of the holiday. + +`(holiday-sexp SEXP STRING)' + A date calculated by the Lisp expression SEXP. The expression + should use the variable `year' to compute and return the date of a + holiday, or `nil' if the holiday doesn't happen this year. The + value of SEXP must represent the date as a list of the form + `(MONTH DAY YEAR)'. STRING is the name of the holiday. + +`(if CONDITION HOLIDAY-FORM &optional HOLIDAY-FORM)' + A holiday that happens only if CONDITION is true. + +`(FUNCTION [ARGS])' + A list of dates calculated by the function FUNCTION, called with + arguments ARGS. + + 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 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). + + Many holidays occur on a specific day of the week, at a specific time +of month. Here is a holiday form describing Hurricane Supplication Day, +celebrated in the Virgin Islands on the fourth Monday in August: + + (holiday-float 8 1 4 "Hurricane Supplication Day") + +Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, +Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in +the month (1 specifies the first occurrence, 2 the second occurrence, +-1 the last occurrence, -2 the second-to-last occurrence, and so on). + + You can specify holidays that occur on fixed days of the Hebrew, +Islamic, and Julian calendars too. For example, + + (setq other-holidays + '((holiday-hebrew 10 2 "Last day of Hanukkah") + (holiday-islamic 3 12 "Mohammed's Birthday") + (holiday-julian 4 2 "Jefferson's Birthday"))) + +adds the last day of Hanukkah (since the Hebrew months are numbered with +1 starting from Nisan), the Islamic feast celebrating Mohammed's +birthday (since the Islamic months are numbered from 1 starting with +Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the +Julian calendar. + + To include a holiday conditionally, use either Emacs Lisp's `if' or +the `holiday-sexp' form. For example, American presidential elections +occur on the first Tuesday after the first Monday in November of years +divisible by 4: + + (holiday-sexp (if (= 0 (% year 4)) + (calendar-gregorian-from-absolute + (1+ (calendar-dayname-on-or-before + 1 (+ 6 (calendar-absolute-from-gregorian + (list 11 1 year)))))) + "US Presidential Election")) + +or + + (if (= 0 (% displayed-year 4)) + (fixed 11 + (extract-calendar-day + (calendar-gregorian-from-absolute + (1+ (calendar-dayname-on-or-before + 1 (+ 6 (calendar-absolute-from-gregorian + (list 11 1 displayed-year))))))) + "US Presidential Election")) + + Some holidays just don't fit into any of these forms because special +calculations are involved in their determination. In such cases you +must write a Lisp function to do the calculation. To include eclipses, +for example, add `(eclipses)' to `other-holidays' and write an Emacs +Lisp function `eclipses' that returns a (possibly empty) list of the +relevant Gregorian dates among the range visible in the calendar +window, with descriptive strings, like this: + + (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) + + +File: xemacs.info, Node: Date Display Format, Next: Time Display Format, Prev: Holiday Customizing, Up: Calendar Customization + +Date Display Format +................... + + You can customize the manner of displaying dates in the diary, in +mode lines, and in messages by setting `calendar-date-display-form'. +This variable holds a list of expressions that can involve the variables +`month', `day', and `year', which are all numbers in string form, and +`monthname' and `dayname', which are both alphabetic strings. In the +American style, the default value of this list is as follows: + + ((if dayname (concat dayname ", ")) monthname " " day ", " year) + +while in the European style this value is the default: + + ((if dayname (concat dayname ", ")) day " " monthname " " year) + + + The ISO standard date representation is this: + + (year "-" month "-" day) + +This specifies a typical American format: + + (month "/" day "/" (substring year -2)) + + +File: xemacs.info, Node: Time Display Format, Next: Daylight Savings, Prev: Date Display Format, Up: Calendar Customization + +Time Display Format +................... + + The calendar and diary by default display times of day in the +conventional American style with the hours from 1 through 12, minutes, +and either `am' or `pm'. If you prefer the European style, also known +in the US as military, in which the hours go from 00 to 23, you can +alter the variable `calendar-time-display-form'. This variable is a +list of expressions that can involve the variables `12-hours', +`24-hours', and `minutes', which are all numbers in string form, and +`am-pm' and `time-zone', which are both alphabetic strings. The +default value of `calendar-time-display-form' is as follows: + + (12-hours ":" minutes am-pm + (if time-zone " (") time-zone (if time-zone ")")) + +Here is a value that provides European style times: + + (24-hours ":" minutes + (if time-zone " (") time-zone (if time-zone ")")) + +gives military-style times like `21:07 (UT)' if time zone names are +defined, and times like `21:07' if they are not. + + +File: xemacs.info, Node: Daylight Savings, Next: Diary Customizing, Prev: Time Display Format, Up: Calendar Customization + +Daylight Savings Time +..................... + + Emacs understands the difference between standard time and daylight +savings time--the times given for sunrise, sunset, solstices, +equinoxes, and the phases of the moon take that into account. The rules +for daylight savings time vary from place to place and have also varied +historically from year to year. To do the job properly, Emacs needs to +know which rules to use. + + Some operating systems keep track of the rules that apply to the +place where you are; on these systems, Emacs gets the information it +needs from the system automatically. If some or all of this +information is missing, Emacs fills in the gaps with the rules +currently used in Cambridge, Massachusetts. If the resulting rules are +not what you want, you can tell Emacs the rules to use by setting +certain variables. + + If the default choice of rules is not appropriate for your location, +you can tell Emacs the rules to use by setting the variables +`calendar-daylight-savings-starts' and +`calendar-daylight-savings-ends'. Their values should be Lisp +expressions that refer to the variable `year', and evaluate to the +Gregorian date on which daylight savings time starts or (respectively) +ends, in the form of a list `(MONTH DAY YEAR)'. The values should be +`nil' if your area does not use daylight savings time. + + Emacs uses these expressions to determine the starting date of +daylight savings time for the holiday list and for correcting times of +day in the solar and lunar calculations. + + The values for Cambridge, Massachusetts are as follows: + + (calendar-nth-named-day 1 0 4 year) + (calendar-nth-named-day -1 0 10 year) + +That is, the first 0th day (Sunday) of the fourth month (April) in the +year specified by `year', and the last Sunday of the tenth month +(October) of that year. If daylight savings time were changed to start +on October 1, you would set `calendar-daylight-savings-starts' to this: + + (list 10 1 year) + + For a more complex example, suppose daylight savings time begins on +the first of Nisan on the Hebrew calendar. You should set +`calendar-daylight-savings-starts' to this value: + + (calendar-gregorian-from-absolute + (calendar-absolute-from-hebrew + (list 1 1 (+ year 3760)))) + +because Nisan is the first month in the Hebrew calendar and the Hebrew +year differs from the Gregorian year by 3760 at Nisan. + + If there is no daylight savings time at your location, or if you want +all times in standard time, set `calendar-daylight-savings-starts' and +`calendar-daylight-savings-ends' to `nil'. + + The variable `calendar-daylight-time-offset' specifies the +difference between daylight savings time and standard time, measured in +minutes. The value for Cambridge, Massachusetts is 60. + + The two variables `calendar-daylight-savings-starts-time' and +`calendar-daylight-savings-ends-time' specify the number of minutes +after midnight local time when the transition to and from daylight +savings time should occur. For Cambridge, Massachusetts both variables' +values are 120. + + File: xemacs.info, Node: Diary Customizing, Next: Hebrew/Islamic Entries, Prev: Daylight Savings, Up: Calendar Customization Customizing the Diary @@ -235,10 +770,12 @@ such days to be shown in the fancy diary buffer, set the variable 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. @@ -610,566 +1147,9 @@ variable when you start XEmacs. If the file name does not specify a 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. - -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 -. - - 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 , the previous shell input is inserted into the -buffer before point. Immediately typing again deletes that input -and inserts the one before it. By repeating you can move -backward through your commands until you find one you want to repeat. -You may then edit the command before typing if you wish. -moves forward through the command history, in case you moved backward -past the one you wanted while using . If you type the first few -characters of a previous command and then type , 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. - - -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: - -`' - 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 - . - -`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 - quickly and go past the desired command - (`comint-next-input'). - -`' - Complete the file name preceding point (`comint-dynamic-complete'). - - -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. - - -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 to the sub-shell. - -`C-c C-x' - A prefix command to conveniently access the global commands. - For example, `C-c C-x o' invokes the global binding of `C-x o', - which is normally `other-window'. - - -File: xemacs.info, Node: Paging in Term, Prev: Term Mode, Up: Shell - -Paging in the terminal emulator -------------------------------- - - Term mode has a pager feature. When the pager is enabled, term mode -will pause at the end of each screenful. - -`C-c C-q' - Toggles the pager feature: Disables the pager if it is enabled, - and vice versa. This works in both line and char modes. If the - pager enabled, the mode-line contains the word `page'. - - If the pager is enabled, and Term receives more than a screenful of -output since your last input, Term will enter More break mode. This is -indicated by `**MORE**' in the mode-line. Type a `Space' to display -the next screenful of output. Type `?' to see your other options. The -interface is similar to the Unix `more' program. - - -File: xemacs.info, Node: Narrowing, Next: Hardcopy, Prev: Shell, Up: Top - -Narrowing -========= - - "Narrowing" means focusing in on some portion of the buffer, making -the rest temporarily invisible and inaccessible. Cancelling the -narrowing and making the entire buffer once again visible is called -"widening". The amount of narrowing in effect in a buffer at any time -is called the buffer's "restriction". - -`C-x n n' - Narrow down to between point and mark (`narrow-to-region'). - -`C-x n w' - Widen to make the entire buffer visible again (`widen'). - - Narrowing sometimes makes it easier to concentrate on a single -subroutine or paragraph by eliminating clutter. It can also be used to -restrict the range of operation of a replace command or repeating -keyboard macro. The word `Narrow' appears in the mode line whenever -narrowing is in effect. When you have narrowed to a part of the -buffer, that part appears to be all there is. You can't see the rest, -can't move into it (motion commands won't go outside the visible part), -and can't change it in any way. However, the invisible text is not -gone; if you save the file, it will be saved. - - The primary narrowing command is `C-x n n' (`narrow-to-region'). It -sets the current buffer's restrictions so that the text in the current -region remains visible but all text before the region or after the -region is invisible. Point and mark do not change. - - Because narrowing can easily confuse users who do not understand it, -`narrow-to-region' is normally a disabled command. Attempting to use -this command asks for confirmation and gives you the option of enabling -it; once you enable the command, confirmation will no longer be -required. *Note Disabling::. - - To undo narrowing, use `C-x n w' (`widen'). This makes all text in -the buffer accessible again. - - Use the `C-x =' command to get information on what part of the -buffer you narrowed down. *Note Position Info::. - - -File: xemacs.info, Node: Hardcopy, Next: Recursive Edit, Prev: Narrowing, Up: Top - -Hardcopy Output -=============== - - The XEmacs commands for making hardcopy derive their names from the -Unix commands `print' and `lpr'. - -`M-x print-buffer' - Print hardcopy of current buffer using Unix command `print' - (`lpr -p'). This command adds page headings containing the file - name and page number. - -`M-x lpr-buffer' - Print hardcopy of current buffer using Unix command `lpr'. This - command does not add page headings. - -`M-x print-region' - Like `print-buffer', but prints only the current region. - -`M-x lpr-region' - Like `lpr-buffer', but prints only the current region. - - All the hardcopy commands pass extra switches to the `lpr' program -based on the value of the variable `lpr-switches'. Its value should be -a list of strings, each string a switch starting with `-'. For -example, the value could be `("-Pfoo")' to print on printer `foo'. - - -File: xemacs.info, Node: Recursive Edit, Next: Dissociated Press, Prev: Hardcopy, Up: Top - -Recursive Editing Levels -======================== - - A "recursive edit" is a situation in which you are using XEmacs -commands to perform arbitrary editing while in the middle of another -XEmacs command. For example, when you type `C-r' inside a -`query-replace', you enter a recursive edit in which you can change the -current buffer. When you exit from the recursive edit, you go back to -the `query-replace'. - - "Exiting" a recursive edit means returning to the unfinished -command, which continues execution. For example, exiting the recursive -edit requested by `C-r' in `query-replace' causes query replacing to -resume. Exiting is done with `C-M-c' (`exit-recursive-edit'). - - You can also "abort" a recursive edit. This is like exiting, but -also quits the unfinished command immediately. Use the command `C-]' -(`abort-recursive-edit') for this. *Note Quitting::. - - The mode line shows you when you are in a recursive edit by -displaying square brackets around the parentheses that always surround -the major and minor mode names. Every window's mode line shows the -square brackets, since XEmacs as a whole, rather than any particular -buffer, is in a recursive edit. - - It is possible to be in recursive edits within recursive edits. For -example, after typing `C-r' in a `query-replace', you might type a -command that entered the debugger. In such a case, two or more sets of -square brackets appear in the mode line(s). Exiting the inner -recursive edit (here with the debugger `c' command) resumes the -query-replace command where it called the debugger. After the end of -the query-replace command, you would be able to exit the first -recursive edit. Aborting exits only one level of recursive edit; it -returns to the command level of the previous recursive edit. You can -then abort that one as well. - - The command `M-x top-level' aborts all levels of recursive edits, -returning immediately to the top level command reader. - - The text you edit inside the recursive edit need not be the same text -that you were editing at top level. If the command that invokes the -recursive edit selects a different buffer first, that is the buffer you -will edit recursively. You can switch buffers within the recursive edit -in the normal manner (as long as the buffer-switching keys have not been -rebound). While you could theoretically do the rest of your editing -inside the recursive edit, including visiting files, this could have -surprising effects (such as stack overflow) from time to time. It is -best if you always exit or abort a recursive edit when you no longer -need it. - - In general, XEmacs tries to avoid using recursive edits. It is -usually preferable to allow users to switch among the possible editing -modes in any order they like. With recursive edits, the only way to get -to another state is to go "back" to the state that the recursive edit -was invoked from. - - -File: xemacs.info, Node: Dissociated Press, Next: CONX, Prev: Recursive Edit, Up: Top - -Dissociated Press -================= - - `M-x dissociated-press' is a command for scrambling a file of text -either word by word or character by character. Starting from a buffer -of straight English, it produces extremely amusing output. The input -comes from the current XEmacs buffer. Dissociated Press writes its -output in a buffer named `*Dissociation*', and redisplays that buffer -after every couple of lines (approximately) to facilitate reading it. - - `dissociated-press' asks every so often whether to continue -operating. Answer `n' to stop it. You can also stop at any time by -typing `C-g'. The dissociation output remains in the `*Dissociation*' -buffer for you to copy elsewhere if you wish. - - Dissociated Press operates by jumping at random from one point in the -buffer to another. In order to produce plausible output rather than -gibberish, it insists on a certain amount of overlap between the end of -one run of consecutive words or characters and the start of the next. -That is, if it has just printed out `president' and then decides to -jump to a different point in the file, it might spot the `ent' in -`pentagon' and continue from there, producing `presidentagon'. Long -sample texts produce the best results. - - A positive argument to `M-x dissociated-press' tells it to operate -character by character, and specifies the number of overlap characters. -A negative argument tells it to operate word by word and specifies the -number of overlap words. In this mode, whole words are treated as the -elements to be permuted, rather than characters. No argument is -equivalent to an argument of two. For your againformation, the output -goes only into the buffer `*Dissociation*'. The buffer you start with -is not changed. - - Dissociated Press produces nearly the same results as a Markov chain -based on a frequency table constructed from the sample text. It is, -however, an independent, ignoriginal invention. Dissociated Press -techniquitously copies several consecutive characters from the sample -between random choices, whereas a Markov chain would choose randomly for -each word or character. This makes for more plausible sounding results -and runs faster. - - It is a mustatement that too much use of Dissociated Press can be a -developediment to your real work. Sometimes to the point of outragedy. -And keep dissociwords out of your documentation, if you want it to be -well userenced and properbose. Have fun. Your buggestions are welcome. - - -File: xemacs.info, Node: CONX, Next: Amusements, Prev: Dissociated Press, Up: Top - -CONX -==== - - Besides producing a file of scrambled text with Dissociated Press, -you can generate random sentences by using CONX. - -`M-x conx' - Generate random sentences in the `*conx*' buffer. - -`M-x conx-buffer' - Absorb the text in the current buffer into the `conx' database. - -`M-x conx-init' - Forget the current word-frequency tree. - -`M-x conx-load' - Load a `conx' database that has been previously saved with `M-x - conx-save'. - -`M-x conx-region' - Absorb the text in the current buffer into the `conx' database. - -`M-x conx-save' - Save the current `conx' database to a file for future retrieval. - - Copy text from a buffer using `M-x conx-buffer' or `M-x conx-region' -and then type `M-x conx'. Output is continuously generated until you -type <^G>. You can save the `conx' database to a file with `M-x -conx-save', which you can retrieve with `M-x conx-load'. To clear the -database, use `M-x conx-init'. - - -File: xemacs.info, Node: Amusements, Next: Emulation, Prev: CONX, Up: Top - -Other Amusements -================ - - If you are a little bit bored, you can try `M-x hanoi'. If you are -considerably bored, give it a numeric argument. If you are very, very -bored, try an argument of 9. Sit back and watch. - - When you are frustrated, try the famous Eliza program. Just do `M-x -doctor'. End each input by typing `RET' twice. - - When you are feeling strange, type `M-x yow'. - - -File: xemacs.info, Node: Emulation, Next: Customization, Prev: Amusements, Up: Top - -Emulation -========= - - XEmacs can be programmed to emulate (more or less) most other -editors. Standard facilities can emulate these: - -Viper (a vi emulator) - In XEmacs, Viper is the preferred emulation of vi within XEmacs. - Viper is designed to allow you to take advantage of the best - features of XEmacs while still doing your basic editing in a - familiar, vi-like fashion. Viper provides various different - levels of vi emulation, from a quite complete emulation that - allows almost no access to native XEmacs commands, to an "expert" - mode that combines the most useful vi commands with the most - useful XEmacs commands. - - To start Viper, put the command - - (viper-mode) - - in your `.emacs' file. - - Viper comes with a separate manual that is provided standard with - the XEmacs distribution. - -EDT (DEC VMS editor) - Turn on EDT emulation with `M-x edt-emulation-on'. `M-x - edt-emulation-off' restores normal Emacs command bindings. - - Most of the EDT emulation commands are keypad keys, and most - standard Emacs key bindings are still available. The EDT - emulation rebindings are done in the global keymap, so there is no - problem switching buffers or major modes while in EDT emulation. - -Gosling Emacs - Turn on emulation of Gosling Emacs (aka Unipress Emacs) with `M-x - set-gosmacs-bindings'. This redefines many keys, mostly on the - `C-x' and `ESC' prefixes, to work as they do in Gosmacs. `M-x - set-gnu-bindings' returns to normal XEmacs by rebinding the same - keys to the definitions they had at the time `M-x - set-gosmacs-bindings' was done. - - It is also possible to run Mocklisp code written for Gosling Emacs. - *Note Mocklisp::. - - -File: xemacs.info, Node: Customization, Next: Quitting, Prev: Emulation, Up: Top - -Customization -************* - - This chapter talks about various topics relevant to adapting the -behavior of Emacs in minor ways. - - All kinds of customization affect only the particular Emacs job that -you do them in. They are completely lost when you kill the Emacs job, -and have no effect on other Emacs jobs you may run at the same time or -later. The only way an Emacs job can affect anything outside of it is -by writing a file; in particular, the only way to make a customization -`permanent' is to put something in your `.emacs' file or other -appropriate file to do the customization in each session. *Note Init -File::. - -* Menu: - -* Minor Modes:: Each minor mode is one feature you can turn on - independently of any others. -* Variables:: Many Emacs commands examine Emacs variables - to decide what to do; by setting variables, - you can control their functioning. -* Keyboard Macros:: A keyboard macro records a sequence of keystrokes - to be replayed with a single command. -* Key Bindings:: The keymaps say what command each key runs. - By changing them, you can "redefine keys". -* Syntax:: The syntax table controls how words and expressions - are parsed. -* Init File:: How to write common customizations in the `.emacs' - file. -* Audible Bell:: Changing how Emacs sounds the bell. -* Faces:: Changing the fonts and colors of a region of text. -* X Resources:: X resources controlling various aspects of the - behavior of XEmacs. -