# HG changeset patch # User cvs # Date 1186990946 -7200 # Node ID 28f395d8dc7a8cfb5670e08822a901b0b4370dbe # Parent 1c55655d6702acccdbbdba4da080f54a3ccd4216 Import from CVS: tag r20-3b7 diff -r 1c55655d6702 -r 28f395d8dc7a CHANGES-beta --- a/CHANGES-beta Mon Aug 13 09:41:47 2007 +0200 +++ b/CHANGES-beta Mon Aug 13 09:42:26 2007 +0200 @@ -1,9 +1,22 @@ -*- indented-text -*- +to 20.3 beta7. +-- Miscellaneous Ebola fixes +-- hyper-apropos update courtesy of Hrvoje Niksic +-- Make lib-complete deal with compressed .el files when not using Mule. + (Patch based on code from Jonathan Doughty) +-- Gnus refcard update courtesy of Vladimir Alexiev +-- Various fixes from Kyle Jones +-- ph.el-1.2.1.1 Courtesy of Oscar Figueiredo +-- custom-1.9916 +-- `with-current-buffer', etc. ported from Emacs 20.1 courtesy of Hrvoje + Niksic +-- Miscellaneous bug fixes + to 20.3 beta6. -- Configure updates courtesy of Martin Buchholz -- Mule updates courtesy of MORIOKA Tomohiko --- Lots of Ebola cleanup, but much remains. --- Miscellaneous bug fixes. +-- Lots of Ebola cleanup, but much remains +-- Miscellaneous bug fixes to 20.3 beta5. -- Configure patches continued from Martin Buchholz diff -r 1c55655d6702 -r 28f395d8dc7a ChangeLog --- a/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,34 @@ +1997-06-14 Steven L Baur + + * XEmacs 20.3-beta7 is released. + +1997-06-12 Steven L Baur + + * etc/TUTORIAL (things): Synched by Hrvoje Niksic with previous + XEmacs version. + +1997-06-13 MORIOKA Tomohiko + + * lisp/gnus/smiley.el (smiley-deformed-regexp-alist): Modify + regexp for horizontal smiley faces. + (smiley-nosey-regexp-alist): Add horizontal smiley faces. + + * lisp/leim/quail.el (quail-get-translation): Don't use + `string-to-vector' for XEmacs. + +1997-06-13 Gary D. Foster + + * lisp/modes/*.el: Removed all "\177" bindings that were + previously commented out and normalized everything vis a vis + 'backspace and 'delete keysyms. + * lisp/packages/*.el: Normalized all the "\177" bindings + * lisp/modes/cperl-mode.el: Created cperl-electric-delete function + which is a "smart" version of the cperl-electric-backspace + function (it honors the desired delete direction). Bound it to + 'delete and the electric-backspace to 'backspace. + * lisp/packages/pending-del.el: Added cperl-electric-backspace and + cperl-electric-delete to the 'supersede list. + 1997-06-11 Steven L Baur * XEmacs 20.3-b6 is released. diff -r 1c55655d6702 -r 28f395d8dc7a etc/NEWS --- a/etc/NEWS Mon Aug 13 09:41:47 2007 +0200 +++ b/etc/NEWS Mon Aug 13 09:42:26 2007 +0200 @@ -202,6 +202,23 @@ ** The PATTERN argument to `split-string' is now optional and defaults to whitespace ("[ \f\t\n\r\v]+"). +** The new macro `with-current-buffer' lets you evaluate an expression +conveniently with a different current buffer. It looks like this: + + (with-current-buffer BUFFER BODY-FORMS...) + +BUFFER is the expression that says which buffer to use. +BODY-FORMS say what to do in that buffer. + +** The new primitive `save-current-buffer' saves and restores the +choice of current buffer, like `save-excursion', but without saving or +restoring the value of point or the mark. `with-current-buffer' +works using `save-current-buffer'. + +** The new macro `with-temp-file' lets you do some work in a new buffer and +write the output to a specified file. Like `progn', it returns the value +of the last form. + * Changes in XEmacs 20.2 diff -r 1c55655d6702 -r 28f395d8dc7a etc/TUTORIAL --- a/etc/TUTORIAL Mon Aug 13 09:41:47 2007 +0200 +++ b/etc/TUTORIAL Mon Aug 13 09:42:26 2007 +0200 @@ -1,15 +1,20 @@ -Copyright (c) 1985 Free Software Foundation, Inc; See end for conditions. +Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. + You are looking at the Emacs tutorial. -Emacs commands generally involve the CONTROL key (sometimes labeled -CTRL or CTL) or the META key (sometimes labeled EDIT or ALT). Rather than -write that in full each time, we'll use the following abbreviations: +Emacs commands generally involve the CONTROL key (sometimes labelled +CTRL or CTL) or the META key. On some keyboards, the META key is +labelled ALT or EDIT or something else (for example, on Sun keyboards, +the diamond key to the left of the spacebar is META). If you have no +META key, you can use ESC instead. Rather than write out META or +CONTROL each time we want you to prefix a character, we'll use the +following abbreviations: C- means hold the CONTROL key while typing the character Thus, C-f would be: hold the CONTROL key and type f. - M- means hold the META or EDIT or ALT key down while typing . - If there is no META, EDIT or ALT key, instead press and release the - ESC key and then type . We write for the ESC key. + M- means hold the META key down while typing . If there + is no META key, type , release it, then type the + character . Important note: to end the Emacs session, type C-x C-c. (Two characters.) The characters ">>" at the left margin indicate directions for you to @@ -39,9 +44,8 @@ C-v Move forward one screenful M-v Move backward one screenful - C-l Clear screen and redisplay all the text, - moving the text around the cursor - to the center of the screen. + C-l Clear screen and redisplay everything + putting the text near the cursor at the center. (That's control-L, not control-1.) >> Find the cursor, and note what text is near it. @@ -209,17 +213,39 @@ This should have scrolled the screen up by 8 lines. If you would like to scroll it down again, you can give an argument to M-v. -If you are using X Windows, there should be a tall rectangular area -called a scroll bar at the left hand side of the Emacs window. You -can scroll the text by clicking the mouse in the scroll bar. +If you are using the X Window system, there is probably a rectangular +area called a scroll bar at the right hand side of the Emacs window. +You can scroll the text by manipulating the scroll bar with the mouse. >> Try pressing the middle button at the top of the highlighted area within the scroll bar. This should scroll the text to a position determined by how high or low you click. ->> Try moving the mouse up and down, while holding the middle button - pressed down. You'll see that the text scrolls up and down as - you move the mouse. +>> Move the mouse to a point in the scroll bar about three lines from +the top, and click the left button a couple of times. + + +* CURSOR CONTROL WITH AN X TERMINAL +----------------------------------- + +If you have an X terminal, you will probably find it easier to use +the keys on the keypad to control the cursor. The left, right, up, +and down arrow keys move in the expected direction; they function +exactly like C-b, C-f, C-p, and C-n, but are easier to type and to +remember. You can also use C-left and C-right to move by words, and +C-up and C-down to move by blocks (e.g. paragraphs, if you're +editing text). If you have keys labelled HOME (or BEGIN) and END, +they will take you to the beginning and end of a line, respectively, +and C-home and C-end will move to the beginning and end of the file. +If your keyboard has PgUp and PgDn keys, you can use them to move up +and down a screenful at a time, like M-v and C-v. + +All of these commands can take numeric arguments, as described above. +You can use a shortcut to enter these arguments: just hold down the +CONTROL or META key and type the number. For example, to move 12 +words to the right, type C-1 C-2 C-right. Note that it is very easy +to type this because you do not have to release the CONTROL key +between keystrokes. * WHEN EMACS IS HUNG @@ -254,17 +280,24 @@ question. Normally, if you do not want to execute the disabled command, answer the question with "n". ->> Type : (which is a disabled command), +>> Type `C-x n p' (which is a disabled command), then type n to answer the question. * WINDOWS --------- -Emacs can have several windows, each displaying its own text. We will -explain later on how to use multiple windows. Right now we want to -explain how to get rid of extra windows and go back to basic -one-window editing. It is simple: +Emacs can have several windows, each displaying its own text. +Note that "window" as used by Emacs does not refer to separate +overlapping windows in the window system, but to separate panes +within a single X window. (Emacs can also have multiple X +windows, or "frames" in Emacs terminology. This is described +later.) + +At this stage it is better not to go into the techniques of +using multiple windows. But you do need to know how to get +rid of extra windows that may appear to display help or +output from certain commands. It is simple: C-x 1 One window (i.e., kill all other windows). @@ -273,6 +306,13 @@ other windows. >> Move the cursor to this line and type C-u 0 C-l. + +(Remember that C-l redraws the screen. If you give a +numeric argument to this command, it means "redraw the +screen and put the current line that many lines from the +top of the screen." So C-u 0 C-l means "redraw the +screen, putting the current line at the top.") + >> Type Control-h k Control-f. See how this window shrinks, while a new one appears to display documentation on the Control-f command. @@ -570,6 +610,67 @@ It should ask you whether to save the buffer named TUTORIAL. Answer yes to the question by typing "y". +* USING THE MENU +---------------- + +If you are on an X terminal, you will notice a menubar at the +top of the Emacs screen. You can use this menubar to access all +the most common Emacs commands, such as "find file". You will +find this easier at first, because you don't need to remember +the keystrokes necessary to access any particular command. Once +you are comfortable with Emacs, it will be easy to begin using +the keyboard commands because each menu item with a +corresponding keyboard command has the command listed next to +it. + +Note that there are many items in the menubar that have no exact +keyboard equivalents. For example, the Buffers menu lists all +of the available buffers in most-recently used order. You can +switch to any buffer by simply findings its name in the Buffers +menu and selecting it. + + +* USING THE MOUSE +----------------- + +When running under X, Emacs is fully integrated with the mouse. +You can position the text cursor by clicking the left button at +the desired location, and you can select text by dragging the +left mouse button across the text you want to select. (Or +alternatively, click the left mouse button at one end of the +text, then move to the other end and use Shift-click to select +the text.) + +To kill some selected text, you can use C-w or choose the Cut +item from the Edit menu. Note that these are *not* equivalent: +C-w only saves the text internally within Emacs (similar to C-k +as described above), whereas Cut does this and also puts the +text into the X clipboard, where it can be accessed by other +applications. + +To retrieve text from the X clipboard, use the Paste item from +the Edit menu. + +The middle mouse button is commonly used to choose items that +are visible on the screen. For example, if you enter Info (the +on-line Emacs documentation) using C-h i or the Help menu, you +can follow a highlighted link by clicking the middle mouse +button on it. Similarly, if you are typing a file name in +(e.g. when prompted by "Find File") and you hit TAB to show the +possible completions, you can click the middle mouse button on +one of the completions to select it. + +The right mouse button brings up a popup menu. The contents of +this menu vary depending on what mode you're in, and usually +contain a few commonly used commands, so they're easier to +access. + +>> Press the right mouse button now. + +You will have to hold the button down in order to keep the +menu up. + + * EXTENDING THE COMMAND SET --------------------------- @@ -667,7 +768,7 @@ The line immediately above the echo area it is called the "mode line". The mode line says something like this: ---**-Emacs: TUTORIAL (Fundamental)--L670--58%---------------- +--**-XEmacs: TUTORIAL (Fundamental)--L670--58%---------------- This line gives useful information about the status of Emacs and the text you are editing. @@ -759,6 +860,7 @@ >> Move the cursor into the previous paragraph and type M-q. + * SEARCHING ----------- @@ -981,7 +1083,8 @@ ------------ Remember, to exit Emacs permanently use C-x C-c. To exit to a shell -temporarily, so that you can come back to Emacs afterward, use C-z. +temporarily, so that you can come back in, use C-z. (under X, this +iconifies the current Emacs frame.) This tutorial is meant to be understandable to all new users, so if you found something unclear, don't sit and blame yourself - complain! @@ -992,6 +1095,7 @@ This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs. +Ben Wing updated the tutorial for X Windows. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnus-refcard.tex --- a/etc/gnus-refcard.tex Mon Aug 13 09:41:47 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -% Reference Card for (ding) Gnus, 3 twocolumn pages. -% To be processed with latex 2.09 -\def\Guide{Card}\def\guide{card} -\def\logoscale{0.25} -\def\sec{\section*} -\def\subsec{\subsection*} -\def\subsubsec{\subsubsection*} -\documentstyle{article} -\textwidth 7.26in \textheight 10in \topmargin -1.0in -% the same settings work for A4, although there is a bit of space at the -% top and bottom of the page. -\oddsidemargin -0.5in \evensidemargin -0.5in -\begin{document} -\twocolumn\scriptsize\pagestyle{empty} -\input{gnusref} - -% page 1, left column -\Title -\par -\vspace{0.5\baselineskip} -\Logo{refcard} -\vspace*{\fill} -\GroupLevels -\GroupMode -\pagebreak - -% page 1, right column -\Notes -\vspace*{\fill} -\GroupCommands -\pagebreak - -% page 2, left column -\SummaryMode -\Asubmap -\Bsubmap -\Gsubmap -\Hsubmap -\Tsubmap -\pagebreak - -% page 2, right column -\Msubmap -\Marks -\pagebreak - -% page 3 -\Osubmap -\Ssubmap -\Xsubmap -\Vsubmap -\SortSummary -\Wsubmap -\Zsubmap -\ArticleMode -\ServerMode - -% page 4 -\BrowseServer -\pagebreak -\onecolumn -\vspace*{\fill} -\CopyRight - -\end{document} diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/Makefile Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,62 @@ +# -*- mode: makefile; tab-width: 4 -*- + +###### variables +sources = README Makefile makelogo gnuslogo.ps gnusref.tex \ + quickref.tex refcard.tex booklet.tex bk-a4.tex bk-lt.tex +targets = quickref.ps refcard.ps $(bk-lt) $(bk-a4) +bk-lt = bk-lt-d.ps bk-lt-s1.ps bk-lt-s2.ps +bk-a4 = bk-a4-d.ps bk-a4-s1.ps bk-a4-s2.ps + x-lt = 10.8in + y-lt = 5.5in +x2-lt = -2.3in +y2-lt = 11.0in + x-a4 = 27.4cm + y-a4 = 14.85cm +x2-a4 = -6.3cm +y2-a4 = 29.7cm + first = -3L($(x-$*),0)+0L($(x-$*),$(y-$*)) + second = 1R($(x2-$*),$(y2-$*))+-2R($(x2-$*),$(y-$*)) +reverse = -1L($(x-$*),0)+2L($(x-$*),$(y-$*)) + +###### user targets +all: $(targets) +quickref: quickref.ps +refcard: refcard.ps +booklet: bk-lt bk-a4 +bk-lt: bk-lt-d bk-lt-s +bk-a4: bk-a4-d bk-a4-s +bk-lt-d: bk-lt-d.ps +bk-lt-s: bk-lt-s1.ps bk-lt-s2.ps +bk-a4-d: bk-a4-d.ps +bk-a4-s: bk-a4-s1.ps bk-a4-s2.ps +clean: + -rm -f *.dvi *.aux *.log *.toc gnuslogo.???* bk-??.ps $(targets) + +###### internal targets +quickref.ps: quickref.tex gnuslogo.quickref + latex quickref.tex + dvips quickref.dvi +refcard.ps: refcard.tex gnusref.tex gnuslogo.refcard + latex refcard.tex + dvips refcard.dvi +bk-lt.ps bk-a4.ps: bk-%.ps: bk-%.tex booklet.tex gnusref.tex gnuslogo.booklet + latex bk-$*.tex; latex bk-$*.tex # twice to make the TOC + dvips bk-$*.dvi +gnuslogo.quickref gnuslogo.refcard gnuslogo.booklet: gnuslogo.%: gnuslogo.ps + ./makelogo $* +bk-lt-d.ps bk-a4-d.ps: bk-%-d.ps: bk-%.ps + pstops '4:$(first),$(second)' bk-$*.ps bk-$*-d.ps +bk-lt-s1.ps bk-a4-s1.ps: bk-%-s1.ps: bk-%.ps + pstops '4:$(first)' bk-$*.ps bk-$*-s1.ps +bk-lt-s2.ps bk-a4-s2.ps: bk-%-s2.ps: bk-%.ps + pstops '4:$(reverse)' bk-$*.ps bk-$*-s2.ps + +dist = /usr/menaik/ftp/pub/oolog/gnus +dist: $(sources) $(targets) + -mkdir $(dist); + -rm -f $(dist)/* + tar cf - $(sources) | gzip > $(dist)/gnusref.tar.gz + for F in $(targets); do gzip -c $$F > $(dist)/$$F.gz; done + cp README $(dist)/README + chmod ogu+r $(dist) $(dist)/* + ls -l $(dist) diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/README Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,53 @@ + + +(ding) Gnus Reference Card +-------------------------- +Vladimir Alexiev +Suggestions and corrections are welcome. + +This directory contains reference materials for the Emacs newsreader Gnus. +Three versions of the reference material are provided: + - 16-page booklet (\small font) + - 5-page 2-column reference card (\footnotesize font which is quite small) + - 1-page 2-column quick refcard (\scriptsize font which is even smaller) +The first two contain all Gnus commands; the last contains only the +most-often used commands. + The booklet is provided for single- and double-sided printers, in paper +formats Letter and A4. The other two cards can be printed on both Letter +and A4 printers. + +The following files are available: + bk-lt-d.ps.gz booklet, Letter paper, double-sided + bk-lt-s1.ps.gz booklet, Letter paper, single-sided, first run + bk-lt-s2.ps.gz booklet, Letter paper, single-sided, second run + bk-a4-d.ps.gz booklet, A4 paper, double-sided + bk-a4-s1.ps.gz booklet, A4 paper, single-sided, first run + bk-a4-s2.ps.gz booklet, A4 paper, single-sided, second run + refcard.ps.gz reference card + quickref.ps.gz quick refcard + +To produce the booklet: +1) Print the booklet. + a) If you have a double-sided printer, + - just print bk-??-d.ps + b) If you have a single-sided printer, things are more complicated + - leave only one paper tray in your printer + - print bk-??-s1.ps + - reload the resulting 4-sheet stack back into the printer. Don't + rearrange the stack, just turn it upside down. + - print bk-??-s2.ps +2) **Important** Arrange the printed stack in the correct order. + The pages are numbered, so you can't make a mistake. +3) Fold the booklet in two and staple it in the middle. Enjoy! + +If you want to make the files yourself, you need the following source files: + makelogo gnuslogo.ps gnusref.tex refcard.tex quickref.tex + booklet.tex bk-a4.tex bk-lt.tex +which are included in the archive gnusref.tar.gz, +and the following programs + GNU make 3.70 + LaTeX 2.09, TeX 3.141 + dvips 5.55 + pstops 1.p13 (part of the package "psutils" by + Angus Duggan ) +Earlier versions might also work. diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/bk-a4.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/bk-a4.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,9 @@ +% Reference Booklet for (ding) Gnus, A4 format. +% To be processed with latex 2.09 +\documentstyle{article} +\textwidth 4.9in \textheight 7.35in \topmargin -1.0in +\oddsidemargin -0.5in \evensidemargin -0.5in +\begin{document} +\small%\footnotesize +\input{booklet} +\end{document} diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/bk-lt.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/bk-lt.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,9 @@ +% Reference Booklet for (ding) Gnus, Letter format. +% To be processed with latex 2.09 +\documentstyle{article} +\textwidth 4.5in \textheight 7.5in \topmargin -1.0in +\oddsidemargin -0.5in \evensidemargin -0.5in +\begin{document} +\small%\footnotesize +\input{booklet} +\end{document} diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/booklet.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/booklet.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,67 @@ +% include file for the Reference Booklet (16 pages). +\def\Guide{Booklet}\def\guide{booklet} +\def\logoscale{0.5} +\def\sec{\section} +\def\subsec{\subsection} +\def\subsubsec{\subsubsection} +\def\blankpage{\vspace*{\fill}\par +%\centerline{(This page intentionally left blank.)} +\par\vspace*{\fill}\pagebreak} + +\input{gnusref} + +\setcounter{page}{0} +\thispagestyle{empty} +\vspace*{\fill} +\Title +\vspace{0.4in} +\Logo{booklet} +\vspace*{\fill} +\pagebreak + +\tableofcontents +\pagebreak +\Notes +\GroupLevels +\Marks +\General +\ServerMode +\BrowseServer +\ArticleMode +\pagebreak + +\GroupMode +\ListGroups +\CreateGroups +\SortGroups +\SOUP +\MarkGroups +\Unsubscribe +\GroupTopics +\SummaryMode +\SortSummary +\Article +\MailGroup +\Limit +\GotoArticle +\MarkArticles +\MarkScore +\ProcessMark +\OutputArticles +\Send +\Exit +\Thread +\Score +\Wash +\Hide +\Highlight +\Extract +\PickAndRead + +%\pagebreak +%\sec{Personal Notes} +%\blankpage + +\thispagestyle{empty} +\vspace*{\fill} +\CopyRight diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/gnuslogo.ps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/gnuslogo.ps Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,1055 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: gnuslogo1.ps +%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley +%%BoundingBox: 0 0 493 505 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 62 string def + +% lower left corner +0 0 translate + +% size of image (on paper, in 1/72inch coords) +493.0 505.0 scale + +% dimensions of data +493 505 1 + +% mapping matrix +[493 0 0 -505 0 505] + +{currentfile pix readhexstring pop} +image +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff01fffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff8003ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff0000ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8000007ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000003ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe0000000ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000003fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000000fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffc0000000007ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff80000000003ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000001ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffe00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8000000000007f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe0000000000001f8 +fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000078 +fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000000038 +fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000018 +ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000008 +ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffff000040000000000000 +fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffff0007ffc00000000000 +fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff +fffffffffffffffffffffffffffffffffe001ffffc0000000000 +fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff +fffffffffffffffffffffffffffffffffc003ffffe0000000000 +fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff +fffffffffffffffffffffffffffffffffc007fffffc000000000 +fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff +fffffffffffffffffffffffffffffffff800fffffff000000000 +ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff +fffffffffffffffffffffffffffffffff801fffffff800000000 +ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff +fffffffffffffffffffffffffffffffff003ffffffff00000000 +ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff +fffffffffffffffffffffffffffffffff007ffffffff00000000 +ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe00fffffffff80000000 +fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe01fffffffffc0000008 +fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffffffffffffffffffc03fffffffffc0000008 +fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffffc07ffffffffff0000000 +fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffff807ffffffffff0000000 +fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff +ffffffffffffffffffffffffffffffff80fffffffffff0000008 +fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff +ffffffffffffffffffffffffffffffff81fffffffffff8000008 +fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff +ffffffffffffffffffffffffffffffff01fffffffffff8000008 +ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff +ffffffffffffffffffffffffffffffff03fffffffffffc000008 +ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff +fffffffffffffffffffffffffffffffe03fffffffffffc000008 +ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff +fffffffffffffffffffffffffffffffe0ffffffffffffe000008 +ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff +fffffffffffffffffffffffffffffffc0ffffffffffffe000008 +ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff +fffffffffffffffffffffffffffffffc1fffffffffffff000008 +ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff +fffffffffffffffffffffffffffffffc3fffffffffffff000008 +ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff +fffffffffffffffffffffffffffffff8ffffffffffffff000008 +ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff +fffffffffffffffffffffffffffffffcffffffffffffff000008 +fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff +ffffffffffffffffffffffffffffc7ffffffffffffffff000008 +fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff +fffffffffeffffffffffffffffff87ffffffffffffffff000008 +f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff +fffffffffcffffffffffffffffff87ffffffffffffffff000008 +f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff +fffffffff8ffffffffffffffffff07ffffffffffffffff000008 +f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff +fffffffff8fffffffffffffffffe0fffffffffffffffff000008 +f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff +fffffffff0fffffffffffffffffe0fffffffffffffffff000018 +e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff +fffffffff0fffffffffffffffffc0fffffffffffffffff000018 +e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff +ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 +c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff +ffffffffe0fffffffffffffffff81fffffffffffffffff000018 +c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff +ffffffffc0fffffffffffffffff83fffffffffffffffff000018 +800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff000038 +800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff800038 +00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff +fffffffe03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff +fffffffc03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff +fffffff803ffffffffffffffffc07fffffffffffffffff800038 +00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff +fffffff007ffffffffffffffffc0ffffffffffffffffff800038 +0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff +fffffff007ffffffffffffffff80ffffffffffffffffff800078 +0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff +ffffffc00fffffffffffffffff81ffffffffffffffffff800078 +8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff +ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 +8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff +ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 +c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff +fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 +e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff +fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 +f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff +fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 +f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff +ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 +f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f +ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 +fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 +ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 +fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 +00000000fffff3ffffffffff003fffffffffffffffffff0001f8 +fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 +00000001fffff1fffffffffe003fffffffffffffffffff0003f8 +ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 +00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 +ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 +00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 +ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 +00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 +ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 +00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 +fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 +00000007ffff803fffffff0000fffffffffffffffffffe0007f8 +fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 +00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 +fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 +0000000fffff000ffffff80003fffffffffffffffffffe0007f8 +fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 +0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 +ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 +0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 +ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 +0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 +ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 +0000003ffffe0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 +0000003ffffc0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 +000000fffff80000000000003ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 +000003fffff00000000000007ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 +000007ffffe00000000000007ffffffffffffffffffffe003ff8 +fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 +000007ffffe0000000000000fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 +00001fffffc0000000000001fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 +00001fffffc0000000000003fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 +00003fffff80000000000003fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 +00007fffff80000000000007fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 +0000ffffff0000000000000ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 +0001ffffff0000000000001ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 +0003fffffe0000000000001ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 +0007fffffe0000000000003ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 +001ffffffc0000000000007ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 +003ffffffc000000000000fffffffffffffffffffffff800fff8 +ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 +00fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 +03fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 +07fffffff0000000000007fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 +3ffffffff000000000000ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f +fffffffff000000000003ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff800000000007ffffffffffffffffffffffff003fff8 +fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff80000000000ffffffffffffffffffffffffe003fff8 +fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc0000000003ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe0000000007ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe000000000fffffffffffffffffffffffffe00ffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000001fffffffffffffffffffffffffe00ffff8 +ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff +ffffffffff800000007fffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff +ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff +ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff +fffffffffff800001fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff +fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff +ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 +ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe01fffff8 +ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc03fffff8 +fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 +ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 +fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff007ffffff8 +fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 +fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff80fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01fffffffff8 +ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff03fffffffff8 +ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff00ffffffffff8 +fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 +ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 +ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 +ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 +ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff +ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 +ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +fffffffffffffffff03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff +fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff807ffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff807fffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00fffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff +fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff +fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff801fffffffffffffffffffff801ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff803fffffffffffffffffffff801ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffff003fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff +fffffffffe007fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff +fffffffffc007fffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff +fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff800ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff801ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff +fffffffff803ffffffffffffffffffffff007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff +fffffffff003fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff +ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff +fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff +0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 +03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 +03ffff8001fffffffffffffffffffffff801fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 +01ffff0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 +003ffc0007fffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 +001fe0001ffffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 +000fc0001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 +000000001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 +00000007ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 +0000000fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 +0000003fffffffffffffffffffffffffc01ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 +000000ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 +000007ffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 +00000fffffffffffffffffffffffffff003ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 +00000fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 +00001fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 +00003fffffffffffffffffffffffffff007ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 +00007fffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 +0000ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 +0003ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 +001fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc +007fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe +00ffffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff +dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff +fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 + + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/gnusref.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/gnusref.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,814 @@ +% -*- mode:LaTeX; eval:(setq LaTeX-version "2"); truncate-lines:t; -*- +% include file for the Gnus refcard and booklet +\def\version{5.4.56} +\def\date{12 June 1997} +\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$} +\raggedbottom\raggedright +\newlength{\logowidth}\setlength{\logowidth}{6.861in} +\newlength{\logoheight}\setlength{\logoheight}{7.013in} +\newlength{\keycolwidth} +\newenvironment{keys}[1]% #1 is the widest key + {\nopagebreak%\noindent% + \settowidth{\keycolwidth}{#1}% + \addtolength{\keycolwidth}{\tabcolsep}% + \addtolength{\keycolwidth}{-\columnwidth}% + \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% + {\end{tabular}\\} +\catcode`\^=12 % allow ^ to be typed literally +\catcode`\~=12 % allow ~ to be typed literally +\newcommand{\B}[1]{{\bf#1})} % bold l)etter + +\def\Title{ +\begin{center} +{\bf\LARGE Gnus \version\ Reference \Guide\\} +%{\normalsize \Guide\ version \refver} +\end{center} +} + +\newcommand\Logo[1]{\centerline{ +\makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight +{\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}} + +\def\CopyRight{ +\begin{center} +Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* +Copyright \copyright\ 1995-97 \author.\\* +Created from the Gnus manual Copyright \copyright\ 1994-97 Lars Magne +Ingebrigtsen.\\* +and the Emacs Help Bindings feature (C-h b).\\* +Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* +\end{center} + +Permission is granted to make and distribute copies of this reference +\guide{} provided the copyright notice and this permission are preserved on +all copies. Please send corrections, additions and suggestions to the +above email address. \Guide{} last edited on \date. +} + +\def\Notes{\subsec{Notes}{\samepage +Gnus is big. Currently it has some 633 interactive (user-callable) +commands. Many of these commands have more than one binding. In order to save +space, every function is listed only once in this \guide, under the ``more +logical'' binding. Alternative bindings are given in parentheses at the +beginning of the description. This \guide{} describes only key-bindings, you +{\em should\/} at least browse the manual to discover many great features + +Many Gnus commands use the numeric prefix. Normally you enter a prefix by +holding the Meta key and typing a number, but in most Gnus modes you don't +need to use Meta since the digits are not self-inserting. The prefixed +behavior of commands is given in [brackets]. Often the prefix is used to +specify: + +\quad [distance] How many objects to move the point over. + +\quad [scope] How many objects to operate on (including the current one). + +\quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it +determines how many objects to operate on (negative means backwards). Else if +transient-mark-mode or zmacs-regions is set and the region is active, operate +on the region. Else if there are some objects marked with the process mark \#, +operated on them. Else operate only on the current object. + +\quad [level] A group subscribedness level. Only groups with a lower or +equal level will be affected by the operation. If no prefix is given, +`gnus-group-default-list-level' is used. If +`gnus-group-use-permanent-levels', then a prefix to the `g' and `l' +commands will also set the default level. + +\quad [score] An article score. If no prefix is given, +`gnus-summary-default-score' is used. + +\quad [GL rating] Give a GroupLens rating (1-5) to the current article before +moving to another article. + +%Some functions were not yet documented at the time of creating this +%\guide and are clearly indicated as such. +}} + +\def\GroupLevels{\subsec{Group Subscribedness Levels}{\samepage +The table below assumes that you use the default Gnus levels. +Fill your user-specific levels in the blank cells.\\* +\begin{tabular}{|c|l|l|} +\hline +Level & Groups & Status \\ +\hline +1 & mail groups & \\ +2 & mail groups & \\ +3 & default subscribed level & subscribed \\ +4 & & \\ +5 & default list level & \\ +\hline +6 & default unsubscribed level & unsubscribed \\ +7 & & \\ +\hline +8 & & zombies \\ +\hline +9 & & killed \\ +\hline +\end{tabular} +}} + +\def\Marks{\subsec{Mark Indication Characters}{\samepage +If a command directly sets a mark, it is shown in parentheses.\\* +\newlength{\markcolwidth} +\settowidth{\markcolwidth}{` '}% widest character +\addtolength{\markcolwidth}{4\tabcolsep} +\addtolength{\markcolwidth}{-\columnwidth} +\newlength{\markdblcolwidth} +\setlength{\markdblcolwidth}{\columnwidth} +\addtolength{\markdblcolwidth}{-2\tabcolsep} +\begin{tabular}{|c|p{-\markcolwidth}|} +\hline +\multicolumn{2}{|p{\markdblcolwidth}|} +{{\bf ``Read'' Marks.} + All these marks appear in the first column of the summary line, and so + are mutually exclusive.}\\ +\hline +` ' & (M-u, M SPC, M c) Not read.\\ +! & (!, M t) Ticked (interesting).\\ %(M !) +? & (?, M ?) Dormant (only followups are interesting).\\ +E & (E, M e) {\bf Expirable}. Only has effect in mail groups.\\ %(M x) +\hline\hline +\multicolumn{2}{|p{\markdblcolwidth}|}{The marks below mean that the article + is read (killed, uninteresting), and have more or less the same effect. + Some commands however explicitly differentiate between them (e.g.{} M + M-C-r, adaptive scoring).}\\ +\hline +r & (d, M d, M r) Deleted (marked as {\bf read}).\\ +C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ +F & (O s; G s b) SOUPed.\\ +G & (S C, C) Canceled (only for your own articles).\\ +O & {\bf Old} (marked read in a previous session).\\ +K & (k, M k; C-k, M K) {\bf Killed}.\\ +M & Marked by duplicate elimination.\\ +Q & Divined through the building of sparse threads.\\ +R & {\bf Read} (actually viewed).\\ +X & Killed by a kill file.\\ +Y & Killed due to low score.\\ +\hline +%\multicolumn{2}{c}{\vspace{0.2ex}}\\ +\hline +\multicolumn{2}{|p{\markdblcolwidth}|} +{{\bf Other marks}}\\ +\hline +\# & (\#, M P p) Processable (will be affected by the next operation).\\ %(M \#) +* & (*) Persistent (or cached for some other reason).\\ +A & {\bf Answered} (followed-up or replied).\\ +S & (O {\bf x}) {\bf Saved}.\\ ++ & Over default score.\\ +$-$ & Under default score.\\ += & Has children (thread underneath it). Add `\%e' to `gnus-summary-line-format'.\\ +\hline +\end{tabular} +}} + +\def\General{\sec{(H) General and Help Commands}{\samepage +These commands work everywhere. +\begin{keys}{C-c C-i} +C-c C-i & Go to the Gnus on-line {\bf info}.\\ +C-c C-b & Send a Gnus {\bf bug} report.\\ +\end{keys} + +These commands work in Summary mode, and most also work in Group mode.\\* +\begin{keys}{H d} +H d & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the description +from the server.]\\ +H f & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\ +H h & Give a very short {\bf help} message.\\ +H i & (C-c C-i) Go to the Gnus online {\bf info}.\\ +H v & Display the Gnus {\bf version} number.\\ +\end{keys}}} + +\def\GroupMode{\sec{Group Mode} +\begin{keys}{C-c M-C-x} +RET & (=) Select this group [Prefix: how many (read) articles to fetch. + Positive: newest articles, negative: oldest ones, C-u: ask number]. + Also: fold/unfold a topic.\\ +SPC & Select this group and display the first unread article [Same + prefix as above]. Also: fold/unfold a topic.\\ +M-RET & Select this group quickly (no scoring, expunging, etc).\\ +M-SPC & Select this group, and don't hide dormant articles.\\ +M-C-RET & Select this group ephemerally: no processing and no permanent effect.\\ +? & Give a very short help message.\\ +$<$ & Go to the beginning of the Group buffer.\\ +$>$ & Go to the end of the Group buffer.\\ +, & Jump to the lowest-level group with unread articles.\\ +. & Jump to the first group with unread articles.\\ +^ & Enter the Server buffer mode.\\ +a & Post an {\bf article} to a group.\\ +b & Find {\bf bogus} groups and delete them.\\ +c & Mark all unticked articles in this group as read ({\bf catch-up}). +[p/p]\\ +g & Check the server for new articles ({\bf get}). [level]\\ +j & {\bf Jump} to a specified group (may even be killed).\\ +m & {\bf Mail} a message to someone.\\ +n & Go to the {\bf next} group with unread articles. [distance]\\ +p & (DEL) Go to the {\bf previous} group with unread articles. +[distance]\\ +q & {\bf Quit} Gnus. M-x gnus-unload to remove it from memory.\\ +r & {\bf Re-read} the init file `.gnus'.\\ +s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if +`gnus-save-newsrc-file').\\ +t & Toggle {\bf Topic} mode. A topic is a hierarchy of groups.\\ +z & Suspend Gnus (kill all buffers except the Group buffer).\\ +B & {\bf Browse} a foreign server (specify method and name).\\ +C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ +F & {\bf Find} new groups and process them. [Prefix: ask-server]\\ +N & Go to the {\bf next} group. [distance]\\ +P & Go to the {\bf previous} group. [distance]\\ +Q & {\bf Quit} Gnus without saving any .newsrc files.\\ +R & {\bf Restart} Gnus.\\ +V & Display the Gnus {\bf version} number.\\ +W f & {\bf Flush} the score caches of all groups.\\ +Z & Clear the dribble buffer.\\ +C-c C-s & {\bf Sort} the groups according to `gnus-group-sort-function'.\\ +C-c C-x & Run all expirable articles in this group through the {\bf expiry} +process.\\ +C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ +C-c M-g & Activate absolutely all groups.\\ +C-x C-t & {\bf Transpose} two groups.\\ +M-\& & Execute a command on all process-marked groups.\\ +M-c & {\bf Clear} this group's data (read and other marks). [p/p] +Use M-x gnus-group-clear-data-on-native-groups to clear all data if you change +servers and article numbers don't match. Or use +M-x gnus-change-server to renumber the articles, but it is slow.\\ +\end{keys} +\begin{keys}{C-c M-C-x} +\newlength{\keywidth}\settowidth{\keywidth}{C-c M-C-x}% +\makebox[\keywidth][l]% +{M-d} & {\bf Describe} {\em all\/} groups. [Prefix: re-read the description +from the server]\\ +M-f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ +M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ +M-n & Go to the {\bf previous} unread group on the same or lower level. +[distance]\\ +M-p & Go to the {\bf next} unread group on the same or lower level. +[distance]\\ +\end{keys}} + +\def\ListGroups{\subsec{(A) List Groups}{\samepage +\begin{keys}{A m} +A a & (C-c C-a) List all groups whose names match a regexp ({\bf +apropos}).\\ +A d & List all groups whose names or {\bf descriptions} match a regexp.\\ +A k & List all {\bf killed} groups. [Prefix: all groups but [un]subscribed]\\ % (C-c C-l) +A l & List unread groups on a specific {\bf level}. [Prefix: also read groups]\\ +A m & List groups that {\bf match} a regexp and have unread articles. +[level]\\ +A s & (l) List {\bf subscribed} groups with unread articles. [level]\\ +A u & (L) List all groups (including {\bf unsubscribed}). [level, default 7]\\ +A z & List the {\bf zombie} groups.\\ +A A & List all available {\bf active} groups on all servers (may be slow).\\ +A M & List groups that {\bf match} a regexp.\\ +A T & List all active groups arranged in {\bf topics}.\\ +\end{keys}}} + +\def\CreateGroups{\subsec{(G) Create/Edit Foreign Groups}{\samepage +The select methods are indicated in parentheses.\\* +\begin{keys}{G DEL} +G DEL & {\bf Delete} this group. [Prefix: delete {\bf all} articles too]\\ +G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ +G c & {\bf Customize} this group's parameters.\\ +G d & Make a {\bf directory} group (every file a posting with numeric name). (nndir)\\ +G e & {\bf Edit} this group's select method.\\ % (M-e) +G f & Make a group based on a {\bf file}. (nndoc: mbox, babyl, digest, + mmdf, news, rnews, clari-briefs, rfc934, rfc822, forward) [Prefix: + don't guess the type]\\ +G h & Make the Gnus {\bf help} (documentation/tutorial) group. (nndoc)\\ +G k & Make a {\bf kiboze} group (specify name, groups, regexps). (nnkiboze)\\ +G m & {\bf Make} a new group (specify name, method, address).\\ +G p & Edit this group/topic's {\bf parameters}.\\ +G r & {\bf Rename} this group (only for mail groups).\\ +G v & Add this group to a {\bf virtual} group. [p/p]\\ +G w & Make a {\bf web}-based group. (nnweb: dejanews, altavista, + reference) [Prefix: permanent group]\\ +G D & Enter a {\bf directory} as a temporary group. (nneething without +recording read marks.)\\ +G E & {\bf Edit} this group's info (select method, articles read, etc).\\ +G V & Make an empty {\bf virtual} group. (nnvirtual)\\ +\end{keys} +You can also create mail-groups and read your mail with Gnus (very useful +if you are subscribed to any mailing lists), using one of the methods +nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info +(C-c C-i g Reading Mail RET). +}} + +\def\SortGroups{\subsubsec{(G S) Sort Groups}{\samepage +To sort by multiple criteria, first apply the less significant ones, last the +most significant one.\\* +\begin{keys}{G P \bf x} +G S a & Sort {\bf Alphabetically} by group name. [Prefix: reverse order]\\ +G S l & Sort by {\bf level}. [Prefix: reverse order]\\ +G S m & Sort by {\bf method} name. [Prefix: reverse order]\\ +G S r & Sort by rank (level and score). [Prefix: reverse order]\\ +G S u & Sort by number of {\bf unread} articles. [Prefix: reverse order]\\ +G S v & Sort by group score ({\bf value}). [Prefix: reverse order]\\ +\end{keys} +Here {\bf x} can be any one of a,l,m,r,u,v:\\* +\begin{keys}{G P \bf x} +G P \bf x & Sort only the groups selected by [p/p].\\ +T S \bf x & Sort only the current topic.\\ +\end{keys} +}} + +\def\SOUP{\subsubsec{(G s) SOUP Commands}{\samepage +SOUP is a protocol for putting many articles/replies in a packet, transferring +them in bulk and reading/composing them off-line. Use the following commands to +manipulate the packets, and use the nnsoup method to read.\\* +\begin{keys}{G s w} +G s b & Pack all unread articles ({\bf brew} soup). [p/p]\\ +G s p & {\bf Pack} all SOUP data files into a SOUP packet.\\ +G s r & Pack all {\bf replies} into a replies packet.\\ +G s s & {\bf Send} all replies you put in the replies packet.\\ +G s w & {\bf Write} all SOUP data files.\\ +\end{keys}}} + +\def\MarkGroups{\subsec{(M) Mark Groups}{\samepage +\begin{keys}{M m} +M b & Set the process mark on all groups in the {\bf buffer}.\\ +M r & Mark all groups matching a {\bf regexp}.\\ +M m & (\#) {\bf Mark} this group. [scope]\\ +M u & (M-\#) {\bf Unmark} this group. [scope]\\ +M w & Mark all groups in the current region.\\ +M U & {\bf Unmark} all groups in the buffer.\\ +\end{keys}}} + +\def\Unsubscribe{\subsec{(S) (Un)subscribe, Kill and Yank Groups}{\samepage +\begin{keys}{S C-k} +S C-k & {\bf Kill} all groups on a certain level.\\ +S k & (C-k) {\bf Kill} this group/ topic (and all its groups).\\ +S l & Set the {\bf level} of this group. [p/p]\\ +S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ +S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ +S w & (C-w) Kill all groups in the region.\\ +S y & (C-y) {\bf Yank} the last killed group/topic.\\ +S z & Kill all {\bf zombie} groups.\\ +\end{keys}}} + +\def\GroupTopics{\subsec{(T) Group Topics}{\samepage +Topics are hierarchical arrangements of groups with the purpose of easier +reading and management. +\begin{keys}{T TAB} +T TAB & Indent this topic to become a sub-topic of the previous one. + [Prefix: un-dent]\\ +T DEL & {\bf Delete} an empty topic.\\ +T \# & Mark all groups in this topic with the process mark.\\ +T M-\# & Unmark all groups in this topic with the process mark.\\ +T c & {\bf Copy} this group to another topic. [p/p]\\ +T h & Toggle the {\bf hiding} of empty topics.\\ +T m & {\bf Move} this group to another topic. [p/p]\\ +T n & Create a {\bf new} topic.\\ +T r & {\bf Rename} a topic.\\ +T C & {\bf Copy} all groups that match a regexp to a topic.\\ +T D & {\bf Delete} this group from this topic. [p/p]\\ +T M & {\bf Move} all groups that match a regexp to a topic.\\ +\end{keys}}} + +\def\SummaryMode{\sec{Summary Mode}{\samepage +\begin{keys}{M-C-d} +SPC & Select an article, scroll it one page, move to the next one.\\ +%(A SPC, A n) +DEL & (b) Scroll this article one page back. [distance]\\ %(A DEL, A p) +RET & Scroll this article one line forward. [distance]\\ += & Expand the Summary window. [Prefix: shrink it to display the +Article window]\\ +$<$ & (A $<$) Scroll to the beginning of this article.\\ %(A b) +$>$ & (A $>$) Scroll to the end of this article.\\ %(A e) +\& & Execute a command on all articles matching a regexp. +[Prefix: move backwards.]\\ +k & Give a GroupLens {\bf rating} (1-5) to this thread.\\ +r & Give a GroupLens {\bf rating} (1-5) to this article.\\ +Y g & Re{\bf generate} the summary buffer.\\ +Y c & Pull all {\bf cached} articles into the summary.\\ +C-t & Toggle {\bf truncation} of summary lines.\\ +C-d & Un-{\bf digestify} this article into a separate group.\\ %(A D) +M-C-d & Un-{\bf digestify} all selected articles into one group. [p/p]\\ +M-\& & Execute a command on all articles having the process mark.\\ +M-k & Edit this group's {\bf kill} file.\\ +M-r & Search through previous articles for a regexp.\\ +M-s & {\bf Search} through subsequent articles for a regexp.\\ +M-K & Edit the general {\bf kill} file.\\ +\end{keys}}} + +\def\SortSummary{\subsec{(C-c C-s) Sort the Summary}{\samepage +In thread mode, these commands sort only the thread roots.\\* +\begin{keys}{C-c C-s C-a} +C-c C-s C-a & Sort the summary by {\bf author}.\\ +C-c C-s C-d & Sort the summary by {\bf date}.\\ +C-c C-s C-i & Sort the summary by article score.\\ +C-c C-s C-l & Sort the summary by number of {\bf lines}.\\ +C-c C-s C-n & Sort the summary by article {\bf number}.\\ +C-c C-s C-s & Sort the summary by {\bf subject}.\\ +\end{keys}}} + +\def\Article{\subsec{(A) Article Commands}{\samepage +\begin{keys}{A m} +A g & (g) (Re){\bf get} this article. [Prefix: don't do any processing]\\ +A r & (^) Go to the parent of this article ({\bf References} header). +[Prefix: how many ancestors back; negative: only the $n$-th ancestor]\\ %(A ^) +M-^ & Go to the article with a given Message-ID.\\ +A s & (s) Perform an i{\bf search} in the article buffer.\\ +A P & {\bf Print} the article as postscript.\\ +A R & Fetch all ancestors ({\bf References}) of this article.\\ +\end{keys}}} + +\def\MailGroup{\subsec{(B) Mail-Group Commands}{\samepage +These commands (except `B c') are only valid in a mail group.\\* +\begin{keys}{B M-C-e} +B DEL & {\bf Delete} the mail article from disk. [p/p]\\ +B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ +B e & {\bf Expire} all expirable articles in this group. [p/p]\\ +B i & {\bf Import} any file into this mail group (give From and Subject).\\ +B m & {\bf Move} the article from one mail group to another. [p/p]\\ +B p & Check if a courtesy copy of a message was also {\bf posted}.\\ +B q & {\bf Query} where would the article go if respooled.\\ +B r & {\bf Respool} this mail article. [p/p]\\ +B w & (e) Edit this mail article.\\ +B M-C-e & {\bf Expunge} (from disk) all expirable articles in this group. [p/p]\\ +B C & {\bf Crosspost} this article to another group.\\ +\end{keys}}} + +\def\GotoArticle{\subsec{(G) Go To Article}{\samepage +These commands select the target article. They do not understand the prefix.\\* +\begin{keys}{G C-n} +G b & (,) Go to the {\bf best} article (the one with highest score). [GL rating]\\ +G f & (.) Go to the {\bf first} unread article.\\ +G g & Ask for an article number and then {\bf go to} to that summary +line.\\ +G j & (j) Ask for an article number and then {\bf jump} to that article.\\ +G l & (l) Go to the {\bf last} article read.\\ +G o & Pop an article off the summary history and go to it.\\ +G n & (n) Go to the {\bf next} unread article. [GL rating]\\ +G p & (p) Go to the {\bf previous} unread article.\\ +G N & (N) Go to {\bf the} next article.\\ +G P & (P) Go to the {\bf previous} article.\\ +G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ +G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ +G M-n & (M-n) Go to the {\bf next} summary line of an unread article. +[distance]\\ +G M-p & (M-p) Go to the {\bf previous} summary line of an unread article. +[distance]\\ +\end{keys}}} + +\def\MarkArticles{\subsec{(M) Mark Articles}{\samepage +\begin{keys}{M M-C-r} +d & (M d, M r) Mark this article as {\bf read} ({\bf delete} it) +and move to the next one. [scope]\\ +D & Mark this article as read and move to the previous one. [scope]\\ +u & (!, M t) {\bf Tick} this article (mark it as interesting) +and move to the next one. [scope]\\ %(M !) +U & Tick this article and move to the previous one. [scope]\\ +M-u & (M SPC, M c) {\bf Clear} all marks from this article +and move to the next one. [scope]\\ +M-U & Clear all marks from this article and move to the previous one. +[scope]\\ +M ? & (?) Mark this article as dormant (only followups are +interesting). [scope]\\ +* & Make this article persistent. [p/p]\\ +M-* & Make this article non-persistent (and delete it). [p/p]\\ +M b & Set a {\bf bookmark} in this article.\\ +M e & (E) Mark this article as {\bf expirable}. [scope]\\ %(M x) +M k & (k) {\bf Kill} all articles with the same subject then select the +next one.\\ +M B & Remove the {\bf bookmark} from this article.\\ +M C & {\bf Catch-up} (mark read) the articles that are not ticked.\\ +M D & Show all {\bf dormant} articles (normally they are hidden unless they +have any followups).\\ +M H & Catch-up (mark read) this group to point ({\bf here}).\\ +M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ +C-w & Mark all articles between point and mark as read.\\ +M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ +M C-c & {\bf Catch-up} all articles in this group.\\ +M M-r & (x) Expunge all {\bf read} articles from this group.\\ +M M-D & Hide all {\bf dormant} articles.\\ +M M-C-r & Expunge all articles having a given mark.\\ +\end{keys}}} + +\def\MarkScore{\subsubsec{(M V) Mark Based on Score (Value)}{\samepage +\begin{keys}{M s m} +M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ +M V k & {\bf Kill} all low-scored articles. [score]\\ +M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ +M V u & Mark all high-scored articles as interesting (tick them). [score]\\ +\end{keys}}} + +\def\ProcessMark{\subsubsec{(M P) The Process Mark}{\samepage +These commands set and remove the process mark \#. You only need to use +it if the set of articles you want to operate on is non-contiguous. Else +use a numeric prefix.\\* +\begin{keys}{M P R} +M P a & Mark {\bf all} articles (in series order).\\ +M P b & Mark all articles in the order they appear in the {\bf buffer}.\\ +M P i & {\bf Invert} all process marks.\\ +M P k & Push all marks on a stack then {\bf kill} them.\\ +M P p & (\#) Mark this article.\\ %(M \#) +M P r & Mark all articles in the {\bf region}.\\ +M P s & Mark all articles in the current {\bf series}.\\ +M P t & Mark all articles in this (sub){\bf thread}.\\ +M P u & (M-\#) {\bf Unmark} this article.\\ %(M M-\#) +M P v & Mark all high-scored articles ({\bf value}). [score]\\ +M P w & Push all marks on a stack.\\ +M P y & {\bf Yank} and restore a mark set from the stack after `M P y', +`M P w' or an operation that cleared the marks.\\ +M P R & Mark all articles matching a {\bf regexp}.\\ +M P S & Mark all {\bf series} that already contain a marked article.\\ +M P T & Unmark all articles in this (sub){\bf thread}.\\ +M P U & {\bf Unmark} all articles.\\ +\end{keys}}} + +\def\OutputArticles{\subsec{(O) Output Articles}{\samepage +\begin{keys}{O m} +O b & Save the article {\bf body} in a plain file. [p/p]\\ +O f & Save this article in a plain {\bf file}. [p/p]\\ +O h & Save this article in {\bf mh} folder format. [p/p]\\ +O m & Save this article in {\bf mail} format. [p/p]\\ +O o & (o, C-o) Save this article using the default article saver. [p/p]\\ +O p & ($\mid$) Pipe this article to a shell command. [p/p]\\ +O r & Save this article in {\bf rmail} format. [p/p]\\ +O s & Add this article to a {\bf SOUP} packet. [p/p]\\ +O v & Save this article in {\bf vm} format. [p/p]\\ +O F & Save this article as plain {\bf file} and overwrite any existing file. [p/p]\\ +\end{keys}}} + +\def\Send{\subsec{(S) Post, Followup, Reply, Forward, Cancel}{\samepage +These commands put you in a separate Message buffer. After editing the +article, send it by pressing C-c C-c. If you are in a foreign group and want +to post the article using the foreign server, give a prefix to C-c C-c. +Set `gnus-post-method' to `nngateway' if your server cannot post [temporarily] +and you wan to post through a mail-to-news gateway.\\* +\begin{keys}{S O m} +S b & {\bf Both} post a followup to this article, and send a reply.\\ +S c & (C) {\bf Cancel} this article (only works if it is your own).\\ +S f & (f) Post a {\bf followup} to this article.\\ +S m & (m) Send a {\bf mail} to someone.\\ +S n & Followup in a {\bf newsgroup} to a message you got through mail.\\ +S o m & (C-c C-f) Forward this article by {\bf mail} to a person. +[Prefix: include full headers]\\ +S o p & Forward this article as a {\bf post} to a newsgroup.\\ +S p & (a) {\bf Post} an article to this group.\\ +S r & (r) Mail a {\bf reply} to the author of this article.\\ +S s & {\bf Supersede} this article with a new one (only for own articles).\\ +S u & {\bf Uuencode} a file, split it into series and post it.\\ +S w & Mail a {\bf wide} reply to the author and the recipients of this +article.\\ +S B & {\bf Both} post a followup, send a reply, and include the +original. [p/p]\\ +S D b & Resend a {\bf bounced} mail after fixing the recipient address. +[Prefix: display the headers of the message this one is a reply to]\\ +S D r & {\bf Resend} this message to another of your addresses.\\ +S F & (F) Post a {\bf followup} and include the original. [p/p]\\ +S N & Followup in a {\bf newsgroup} to a mail message and include the +original [p/p].\\ +S O m & Digest these series and forward by {\bf mail}. [p/p]\\ +S O p & Digest these series and forward as a {\bf post} to a newsgroup. +[p/p]\\ +S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ +S W & Mail a {\bf wide} reply and include the original. [p/p]\\ +S M-c & Send a {\bf complaint} about excessive {\bf crossposting}. [p/p]\\ +\end{keys} +If you want to cancel or supersede an article you just posted (before it +has appeared on the server), go to the *sent \ldots* buffer, change +`Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. +}} + +\def\Thread{\subsec{(T) Thread Commands}{\samepage +\begin{keys}{T M-\#} +T ^ & Make this article child of the previous or precess-marked one.\\ +T \# & Mark this (sub)thread with the process mark.\\ +T M-\# & Remove the process mark from this (sub)thread.\\ +T d & Move {\bf down} this thread. [distance]\\ +T h & {\bf Hide} this (sub)thread.\\ +T i & {\bf Increase} the score of this thread.\\ +T k & (M-C-k) {\bf Kill} the current (sub)thread. [Prefix: +negative--tick, positive--unmark]\\ +T l & (M-C-l) {\bf Lower} the score of this thread.\\ +T n & (M-C-f) Go to the {\bf next} thread. [distance]\\ +T o & Go to the {\bf top} of this thread.\\ +T p & (M-C-b) Go to the {\bf previous} thread. [distance]\\ +T s & {\bf Show} the thread hidden under this article.\\ +T t & Re-{\bf thread} this thread.\\ +T u & Move {\bf up} this thread. [distance]\\ +T H & {\bf Hide} all threads.\\ +T S & {\bf Show} all hidden threads.\\ +T T & (M-C-t) {\bf Toggle} threading.\\ +\end{keys}}} + +\def\Score{\subsec{(V) Score (Value) Commands}{\samepage +Read about Adaptive Scoring in the online info.\\* +\begin{keys}{\bf A p m l} +V a & {\bf Add} a new score entry, specifying all elements.\\ +V c & Select a new score file as {\bf current}.\\ +V e & {\bf Edit} the current score file.\\ +V f & Edit a score {\bf file} and make it the current one.\\ +V m & {\bf Mark} all articles below a given score as read [score].\\ +V s & {\bf Set} the score of this article.\\ +V t & {\bf Trace} all score rules applied to this article.\\ +V x & {\bf Expunge} all low-scored articles. [score]\\ +V F & {\bf Flush} the score cache to put it in sync with files.\\ +V C & {\bf Customize} the current score file using a user-friendly +interface.\\ +V S & {\bf Show} the score of this article.\\ +I C-i & {\bf Increase} the score of this article.\\ +L C-l & {\bf Lower} the score of this article.\\ +\bf A p m l& Make a scoring entry based on this article.\\ +\end{keys} + +The four letters stand for:\\* +\quad \B{A}ction: I)ncrease, L)ower;\\* +\quad \B{p}art: a)uthor (from), b)ody, d)ate, f)ollowups, h)ead (all headers), +message-i)d, l)ines, s)ubject, t)hread (references), x)refs (cross-posting);\\* +\quad \B{m}atch type:\\* +\qquad string: e)xact, f)uzzy, r)egexp, s)ubstring\\* +\qquad date: a)t, b)efore, n)this,\\* +\qquad number: $<$, =, $>$;\\* +\quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. + +If you type the second/third letter in uppercase, the remaining letters are +assumed to be s)ubstring and t)emporary. + +\quad Extra keys for manual editing of a score file:\\* +\begin{keys}{C-c C-c} +C-c C-c & Finish editing the score file.\\ +C-c C-d & Insert the current {\bf date} as number of days.\\ +C-c C-p & {\bf Pretty-print} the [adaptive] score file.\\ +\end{keys}}} + +\def\Wash{\subsec{(W) Wash the Article Buffer}{\samepage +\begin{keys}{W C-c} +W b & Make Message-IDs, URLs, citations and signature to mouse-clickable +{\bf buttons}.\\ +W c & Remove extra {\bf CR}s (^M).\\ +W e & Fontify {\bf emphasis}, e.g.{} *this* and \_that\_.\\ +W f & Display any X-{\bf Face} headers.\\ +W l & (w) Remove page breaks ({\bf^L}).\\ +W m & Toggle {\bf MIME} processing before displaying.\\ +W o & Treat {\bf overstrike} (a^Ha) or underline (a^H\_).\\ +W q & Treat {\bf quoted}-printable (=0D etc).\\ +W r & (C-c C-r) Caesar-{\bf rotate} (rot13 decode).\\ +W t & (t) {\bf Toggle} the displaying of all headers.\\ +W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ +W w & Do word {\bf wrap}. [Prefix: width to use for filling]\\ +W B & Make headers to mouse-clickable {\bf buttons}.\\ +W E a & Expunge {\bf all} unwanted blank lines.\\ +W E l & Expunge {\bf leading} blank lines.\\ +W E m & Expunge {\bf multiple} blanks lines and replace them with a single +blank.\\ +W E s & Expunge leading {\bf spaces} from every line.\\ +W E t & Expunge {\bf trailing} blank lines.\\ +W T e & Display the date as time {\bf elapsed} since sent.\\ +W T l & Display the date in the {\bf local} timezone.\\ +W T o & Display the {\bf original} date.\\ +W T s & Display the date using `gnus-article-time-format'.\\ +W T u & (W T z) Display the date as {\bf UTC} (aka GMT, Zulu).\\ +\end{keys}}} + +\def\Hide{\subsubsec{(W W) Hide Parts of the Article}{\samepage +Without prefix, these commands toggle hiding; a positive prefix hides and a +negative prefix unhides.\\* +\begin{keys}{W W C} +W W a & Hide {\bf all} unwanted parts.\\ +W W c & Hide {\bf cited} text.\\ +W W h & Hide the {\bf headers}.\\ +W W s & Hide the {\bf signature}.\\ +W W p & Hide {\bf PGP} signatures.\\ +W W C & Hide {\bf cited} text if the article is not a root of a thread.\\ +W W P & Hide {\bf PEM} gruft.\\ +\end{keys}}} + +\def\Highlight{\subsubsec{(W H) Highlight Parts of the Article}{\samepage +\begin{keys}{W H A} +W H a & Highlight {\bf all} parts.\\ +W H c & Highlight {\bf cited} text.\\ +W H h & Highlight the {\bf headers}.\\ +W H s & Highlight the {\bf signature}.\\ +\end{keys}}} + +\def\Extract{\subsec{(X) Extract Series (Uudecode etc)}{\samepage +Gnus recognizes if the current article is part of a series (multipart +posting whose parts are identified by numbers in the subject, e.g.{} +1/10\dots10/10). You can mark and process more than one series at a time. If +the posting contains any archives, they are expanded and gathered in a new +group.\\* +\begin{keys}{X p} +X b & Un-{\bf binhex} these series. [p/p]\\ +X o & Simply {\bf output} these series (no decoding). [p/p]\\ +X p & Unpack these {\bf postscript} series. [p/p]\\ +X s & Un-{\bf shar} these series. [p/p]\\ +X u & {\bf Uudecode} these series. [p/p]\\ +\end{keys} + +Each one of these commands has four variants:\\* +\begin{keys}{X v \bf Z} +X \bf z & Decode these series. [p/p]\\ +X \bf Z & Decode and save these series. [p/p]\\ +X v \bf z & Decode and view these series. [p/p]\\ +X v \bf Z & Decode, save and view these series. [p/p]\\ +\end{keys} +where {\bf z} or {\bf Z} identifies the decoding method (b,o,p,s,u). + +An alternative binding for the most-often used of these commands is\\* +\begin{keys}{C-c C-v C-v} +C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ +\end{keys} +Use `M-x gnus-binary-mode' to do decoding automatically (then use `g' to see +the original text of the article). +}} + +\def\Exit{\subsec{(Z) Exit the Current Group}{\samepage +\begin{keys}{Z G} +Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ +Z n & Mark all articles as read and go to the {\bf next} group.\\ +Z s & {\bf Save} this group's info in the dribble file. [Prefix: also save .newsrc]\\ +Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ +Z E & (Q) {\bf Exit} without updating the group information.\\ +Z G & (M-g) Check for new articles in this group ({\bf get}).\\ +Z N & Exit and go to the {\bf next} group.\\ +Z P & Exit and go to the {\bf previous} group.\\ +Z R & Exit this group, then ({\bf reenter}) it. +[Prefix: select all articles, read and unread.]\\ +Z Z & (q, Z Q) Exit this group.\\ +\end{keys}}} + +\def\Limit{\subsec{(/) Limiting the Summary}{\samepage +\begin{keys}{/ D} +/ a & Limit to a given {\bf author}.\\ +/ c & Hide dormant articles that have no {\bf children} (follow-ups).\\ +/ d & Hide all {\bf dormant} articles.\\ +/ m & Limit to articles not having a given {\bf mark}.\\ +/ n & Limit to the current article.\\ +/ s & (/ /) Limit to a given {\bf subject}.\\ +/ t & Limit by {\bf time} (older than a given number of days). [Prefix: newer]\\ +/ u & (x) Limit to {\bf unread} articles. [Prefix: also remove ! and ? articles]\\ +/ v & Limit to high-scored articles ({\bf value}). [score]\\ +/ w & Pop and restore the previous limit from a stack. [Prefix: pop all limits]\\ +/ C & {\bf Catch-up} all unread articles outside the limit. [Prefix: also ! and ? articles]\\ +/ D & Show all {\bf dormant} articles.\\ +/ E & (M S) {\bf Show} all {\bf expunged} articles.\\ +\end{keys}}} + +\def\PickAndRead{\subsec{Pick-and-Read Mode}{\samepage +Use `M-x gnus-pick-mode' to first choose the articles you like and +only read them after.\\* +\begin{keys}{SPC} +SPC & Scroll the summary a page, if at the end start reading.\\ +RET & Start reading. [Prefix: catch-up all non-picked articles]\\ +. & Pick this article. [Prefix: pick the article with that number]\\ +r & Pick all articles in the {\bf region}.\\ +R & Unpick all articles in the {\bf region}.\\ +t & Pick this {\bf thread}.\\ +u & {\bf Unpick} this article.\\ +T & Unpick this {\bf thread}.\\ +U & {\bf Unpick} all articles.\\ +e & Pick articles that match a regexp.\\ +b & Pick all articles in the {\bf buffer}.\\ +B & Unpick all articles in the {\bf buffer}.\\ +\end{keys}}} + +\def\ArticleMode{\sec{Article Mode}{\samepage +Most keys in Summary mode also work in Article mode (of course, the normal +navigation keys operate on the Article buffer). Additional keys:\\* +\begin{keys}{C-c C-m} +RET & (middle mouse button) Activate the button at point to follow +an URL or Message-ID, hide citation/signature, etc.\\ +TAB & Move point to the next button.\\ +M-TAB & Move point to the previous button.\\ +? & Give a brief help message.\\ +h & (s) Go to the {\bf header} line of the article in the {\bf +summary} buffer.\\ +C-c ^ & (r) Get the article with Message-ID near point ({\bf refer}).\\ +C-c C-m & {\bf Mail} reply to the address near point. [Prefix: cite the +article]\\ +\end{keys}}} + +\def\ServerMode{\sec{Server Mode}{\samepage +To enter this mode, press `^' while in Group mode.\\* +\begin{keys}{SPC} +SPC & (RET) Browse this server.\\ +a & {\bf Add} a new server.\\ +c & {\bf Copy} this server.\\ +e & {\bf Edit} a server.\\ +g & Ask the server to re-{\bf generate} all its data structures.\\ +k & {\bf Kill} this server. [scope]\\ +l & {\bf List} all servers.\\ +q & Return to the group buffer ({\bf quit}).\\ +s & Ask the server to {\bf scan} for new messages.\\ +y & {\bf Yank} the previously killed server.\\ +C & {\bf Close} the connection to this server.\\ +O & (Re-){\bf Open} a connection to this server.\\ +D & Mark this server as unavailable ({\bf deny} it).\\ +R & {\bf Reset} all unavailability (denial) marks.\\ +M-c & {\bf Close} the connections to all servers.\\ +M-o & (Re-){\bf Open} connections to all servers.\\ +\end{keys}}} + +\def\BrowseServer{\sec{Browse Server Mode}{\samepage +To enter this mode, press `B' in Group mode.\\* +\begin{keys}{RET} +RET & Enter the current group.\\ +SPC & Enter the current group and display the first article.\\ +? & Give a very short help message.\\ +n & Go to the {\bf next} group. [distance]\\ +p & Go to the {\bf previous} group. [distance]\\ +q & (l) {\bf Quit} browse mode.\\ +u & {\bf [Un]Subscribe} to the current group. [scope]\\ +\end{keys}}} diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/makelogo --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/makelogo Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,35 @@ +#!/bin/csh -f +# Copies gnuslogo.ps to gnuslogo.tmp and fixes the image +# by the scale specified in $1.tex + +echo Scaling-down gnuslogo.ps to gnuslogo.$1 +set bb = `grep "^%%BoundingBox:" gnuslogo.ps` +if ($bb[2] != 0 || $bb[3] != 0) then + echo Please make gnuslogo.ps have zero-based coordinates + exit 1 +endif +set logowidth = $bb[4] +set logoheight = $bb[5] +set logoscale = \ + `grep "\\def\\logoscale{" $1.tex |sed -e "s/\\def\\logoscale{\([^}]*\)}/\1/"` +# check if a program is present +alias executable '(\!* &/dev/null)' +executable calc 0 +if ($status != 1) then # calc is demented and returns 2 on success + # -p is "precision" + set newwidth = `calc -p1 $logowidth \* $logoscale` + set newheight = `calc -p1 $logoheight \* $logoscale` +else if ( { executable dc } ) then + # the k command of dc doesn't seem to have much of an effect + set newwidth = `echo 0 k $logowidth $logoscale \* p | dc` + set newheight = `echo 0 k $logoheight $logoscale \* p | dc` +else if ( { executable bc } ) then + # nor does the scale variable of bc. This will lead to fractional numbers + # in the %%BoundingBox statement of the EPS file. + # Let's hope your dvips doesn't have a problem with it. + set newwidth = `echo "scale=0; $logowidth * $logoscale" | bc` + set newheight = `echo "scale=0; $logoheight * $logoscale" | bc` +endif +sed -e"/%%BoundingBox/{s/$logowidth/$newwidth/;s/$logoheight/$newheight/;}"\ + -e"/scale/{s/$logowidth.0/$newwidth/;s/$logoheight.0/$newheight/;}"\ + gnuslogo.ps >! gnuslogo.$1 diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/quickref.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/quickref.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,409 @@ +% Gnus quick refcard +\def\logoscale{0.11} +\def\version{5.4.56} +\def\date{12 June 1997} +\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$} +\raggedbottom%\raggedright +\newlength{\logowidth}\setlength{\logowidth}{6.861in} +\newlength{\logoheight}\setlength{\logoheight}{7.013in} +\newlength{\keycolwidth}\newlength{\descrcolwidth} +\newenvironment{keys}[1]% #1 is the widest key + {\nopagebreak\noindent% + \settowidth{\keycolwidth}{#1}% + \setlength{\descrcolwidth}{\columnwidth} + \addtolength{\descrcolwidth}{-\tabcolsep}% + \addtolength{\descrcolwidth}{-\keycolwidth}% + \begin{tabular}% + {@{}l@{\hspace{\tabcolsep}}p{\descrcolwidth}@{}}}% + {\end{tabular}} +\catcode`\^=12 % allow ^ to be typed literally +\newcommand{\B}[1]{{\bf#1})} % bold l)etter +\setlength{\fboxsep}{0pt} + +\def\Title{\parbox{0.6\columnwidth}{\centering\bf\LARGE% + Gnus \version\\Quick Refcard}} + +\newcommand\Logo[1]{ +\makebox[\logoscale\logowidth]{\parbox{1ex}{\vbox to \logoscale\logoheight +{\vfill\special{psfile=gnuslogo.#1}}}}} + +\def\CopyRight{\begin{center}\tiny +Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* +Copyright \copyright\ 1995 \author.\\* +Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne +Ingebrigtsen.\\* +and the Emacs Help Bindings feature (C-h b).\\* +Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* +Quick refcard last edited on \date. +\end{center}} + +\def\Notes{ +\sec{Notes} +{\samepage +%Many Gnus commands are affected by the numeric prefix. Normally you enter a +%prefix by holding the Meta key and typing a number, but in most Gnus modes +%you don't need to use Meta since the digits are not self-inserting. +% +The prefixed behavior of commands is given in [brackets]. Often the prefix +is used to specify:\par + [distance] How many objects to move the point over.\par + [scope] How many objects to operate on (including the current one).\par + [p/p] The ``Process/Prefix Convention'': If a prefix is given then it +determines how many objects to operate on (negative means backwards). Else if +transient-mark-mode or zmacs-regions is set and the region is active, operate +on the region. Else if there are some objects marked with the process mark \#, +operated on them. Else operate only on the current object. + [level] A group subscribedness level. Only groups with a lower or +equal level will be affected by the operation. If no prefix is given, +`gnus-group-default-list-level' is used. If +`gnus-group-use-permanent-levels', then a prefix to the `g' and `l' +commands will also set the default level.\par + [score] An article score. If no prefix is given, +`gnus-summary-default-score' is used.\\ + +\begin{keys}{C-c C-i} +C-c C-i & Go to the Gnus online {\bf info}.\\ +C-c C-b & Send a Gnus {\bf bug} report.\\ +\end{keys} +}} + +\def\GroupMode{ +\sec{Group Mode} +\begin{keys}{C-c C-a} +RET & (=) Select this group. [Prefix: how many (read) articles to fetch. +Positive: newest articles, negative: oldest ones.]\\ +SPC & Select this group and display the first unread article. [Same +prefix as above.]\\ +? & Give a very short help message.\\ +$<$ & Go to the beginning of the Group buffer.\\ +$>$ & Go to the end of the Group buffer.\\ +, & Jump to the lowest-level group with unread articles.\\ +. & Jump to the first group with unread articles.\\ +\# & (M m) Set the process mark on this group. [scope]\\ +%^ & Enter the Server buffer mode.\\ +a & Post an {\bf article} to a group.\\ +%b & Find {\bf bogus} groups and delete them.\\ +c & Mark all unticked articles in this group as read ({\bf catch-up}). +[p/p]\\ +g & Check the server for new articles ({\bf get}). [level]\\ +j & {\bf Jump} to a group.\\ +l & (A s) {\bf List} groups with unread articles. [level]\\ +m & {\bf Mail} a message to someone.\\ +n & Go to the {\bf next} group with unread articles. [distance]\\ +p & (DEL) Go to the {\bf previous} group with unread articles. +[distance]\\ +q & {\bf Quit} Gnus.\\ +%r & Read the init file ({\bf reset}).\\ +s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if +`gnus-save-newsrc-file').\\ +u & (S t) Toggle subscription to this group ({\bf unsibscribe}). [p/p]\\ +%z & Suspend (kill all buffers of) Gnus.\\ +%B & {\bf Browse} a foreign server.\\ +C & Mark all articles in this group as read ({\bf catch-up}). [p/p]\\ +%F & {\bf Find} new groups and process them.\\ +L & (A u) {\bf List} all groups. [If no prefix is given, level 7 is the +default]\\ +%N & Go to the {\bf next} group. [distance]\\ +%P & Go to the {\bf previous} group. [distance]\\ +Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ +%R & {\bf Restart} Gnus.\\ +U & (S s) Prompt for a group and toggle its subscription.\\ +%V & Display the Gnus {\bf version} number.\\ +%Z & Clear the dribble buffer.\\ +C-c C-a & (A a) List all groups whose names match a regexp ({\bf apropos}).\\ +C-c C-d & Show the {\bf description} of this group. [Prefix: re-read it +from the server.]\\ +C-c C-l & (A k) {\bf List} all killed groups.\\ +C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level +(depending on `gnus-group-sort-function').\\ +%C-c C-x & Run all expirable articles in this group through the {\bf expiry} +%process.\\ +%C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ +C-k & (S k) {\bf Kill} this group.\\ +C-w & (S w) Kill all groups in the region.\\ +C-y & (S y) {\bf Yank} the last killed group.\\ +C-x C-t & {\bf Transpose} two groups.\\ +%M-\# & (M u) Remove the process mark from this group. [scope]\\ +%M-d & {\bf Describe} ALL groups. [Prefix: re-read the description from the +%server.]\\ +M-f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ +M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ +%M-n & Go to the {\bf next} unread group on the same or lower level. +%[distance]\\ +%M-p & Go to the {\bf previous} unread group on the same or lower +%level. [distance]\\ +%A d & List all groups whose names or {\bf descriptions} match a regexp.\\ +%A m & List groups that {\bf match} a regexp and have unread articles. +%[level]\\ +%A M & List groups that {\bf match} a regexp.\\ +A z & List the {\bf zombie} groups.\\ +%G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ +%G d & Make a {\bf directory} group (every file must be a posting and files +%must have numeric names). (nndir)\\ +%M-e & (G e) {\bf Edit} this group's select method.\\ +%G f & Make a group based on a {\bf file}. (nndoc)\\ +G h & Make the Gnus {\bf help} (documentation) group.\\ +%G k & Make a {\bf kiboze} group. (nnkiboze)\\ +%G m & {\bf Make} a new group.\\ +%G p & Edit this group's {\bf parameters}.\\ +%G v & Add this group to a {\bf virtual} group. [p/p]\\ +%G D & Enter a {\bf directory} as a (temporary) group. (nneething without +%recording articles read.)\\ +%G E & {\bf Edit} this group's info (select method, articles read, etc).\\ +%G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ +%M w & Mark all groups in the current region.\\ +%S l & Set the {\bf level} of this group. [p/p]\\ +%S z & Kill all {\bf zombie} groups.\\ +\end{keys} +} + +\def\SummaryMode{ +\sec{Summary Mode} % {Summary and Article Modes} +\begin{keys}{C-c C-v} +SPC & (A SPC, A n) Select an article, scroll it one page, move to the +next one.\\ +DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ +RET & Scroll this article one line forward. [distance]\\ += & Expand the Summary window. [Prefix: shrink it to display the +Article window]\\ +^ & (A ^, A r) Go to the parent of this article (the References header).\\ +$<$ & (A $<$, A b) Scroll to the beginning of this article.\\ +$>$ & (A $>$, A e) Scroll to the end of this article.\\ +, & (G b) Go to the best article (the one with highest score).\\ +. & (G f) Go to the first unread article.\\ +! & (u, M !, M t) Tick this article (mark it as interesting) and move +to the next one. [scope]\\ +? & (M ?) Mark this article as dormant (only followups are +interesting). [scope]\\ +\# & (M P p, M \#) Mark this article with the process mark.\\ +$\mid$ & (O p) Pipe this article to a shell command. [p/p]\\ +\& & Execute a command on all articles matching a regexp. +[Prefix: move backwards.]\\ +a & (S p) Post an {\bf article} to this group.\\ +c & (Z c) Mark all unticked articles as read and go to the next group +({\bf catch-up}).\\ +d & (M d, M r) Mark this article as read and move to the next one. +[scope]\\ +e & (B w) {\bf Edit} this article (only in a mail group).\\ +f & (S f) Post a {\bf followup} to this article.\\ +g & (A g) (Re)fetch this article ({\bf get}). [Prefix: just show the +article.]\\ +j & (G g) Ask for an article number and then {\bf jump} that summary +line.\\ +k & (M k) {\bf Kill} all articles with the same subject then select the next +one.\\ +l & (G l) Go to the {\bf last} article read.\\ +m & (S m) Send a {\bf mail} to some other person.\\ +n & (G n) Go to the {\bf next} unread article.\\ +o & (C-o, O o) Save this article using the default article saver ({\bf + output}). [p/p]\\ +p & Go to the {\bf previous} unread article.\\ +q & (Z Z, Z Q) {\bf Quit} this group.\\ +r & (S r) Mail a {\bf reply} to the author of this article.\\ +s & (A s) Perform an i{\bf search} in the article buffer.\\ +t & (W t) {\bf Toggle} the displaying of all headers.\\ +%v & Toggle permanent {\bf verbose} displaying of all headers.\\ +w & (W l) Remove page breaks ({\bf ^L}) from the article.\\ +x & (M M-r) {\bf Expunge} all read articles from this group.\\ +C & (S c) {\bf Cancel} this article (only works if it is your own).\\ +D & Mark this article as read and move to the previous one. [scope]\\ +F & (S F) Post a {\bf followup} and include the original. [p/p]\\ +Q & (Z E) {\bf Quit} without updating the group information.\\ +R & (S R) Mail a {\bf reply} and include the original. [p/p]\\ +U & Tick this article and move to the previous one. [scope]\\ +%N & (G N) Go to the {\bf next} article.\\ +%P & (G P) Go to the {\bf previous} article.\\ +%C-d & (A D) Un{\bf digestify} this article into a separate group.\\ +C-k & (M K) {\bf Kill} all articles with the same subject as this one.\\ +C-t & {\bf Toggle} truncation of summary lines.\\ +C-w & Mark all articles between point and mark as read.\\ +M-^ & Fetch the article with a given Message-ID.\\ +M-\# & (M P u, M M-\#) Unmark this article.\\ +M-\& & Execute a command on all articles having the process mark.\\ +M-g & (Z G) Check for new articles in this group ({\bf get}).\\ +M-k & Edit this group's {\bf kill} file.\\ +%M-n & (G M-n) Go to the {\bf next} summary line of an unread article. +%[distance]\\ +%M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. +%[distance]\\ +M-r & Search through all previous articles for a regexp.\\ +M-s & {\bf Search} through all subsequent articles for a regexp.\\ +M-u & (M SPC, M c) Clear all marks from this article and move to the next +one ({\bf unmark}). [scope]\\ +M-K & Edit the general {\bf kill} file.\\ +M-U & Clear all marks from this article and move to the previous one +({\bf unmark}). [scope]\\ +M-C-b & (T p) Go to the previous thread ({\bf backward}). [distance]\\ +M-C-f & (T n) Go to the next thread ({\bf forward}). [distance]\\ +M-C-k & (T k) {\bf Kill} the current (sub)thread. [Negative prefix: +tick it, positive prefix: unmark it.]\\ +%M-C-l & (T l) {\bf Lower} the score of this thread.\\ +%M-C-n & (G C-n) Go to {\bf the} next article with the same subject.\\ +%M-C-p & (G C-p) Go to the {\bf previous} article with the same subject.\\ +M-C-t & (T T) {\bf Toggle} threading.\\ +C-c C-f & (S o m) {\bf Forward} this article by mail to a person.\\ +\newlength{\foo}\settowidth{\foo}{C-c C-v}% +\makebox[\foo][l]{C-c C-v C-v}&\rule{4ex}{0pt} + (X v u) Uudecode and view these series. [p/p]\\ +C-c C-r & (W r) Do a Caesar {\bf rotate} (rot13) on the article.\\ +%C-c C-s C-a & Sort the summary by {\bf author}.\\ +%C-c C-s C-d & Sort the summary by {\bf date}.\\ +%C-c C-s C-i & Sort the summary by article score.\\ +%C-c C-s C-n & Sort the summary by article {\bf number}.\\ +%C-c C-s C-s & Sort the summary by {\bf subject}.\\ +%C-c M-C-s & (M S) {\bf Show} all expunged articles.\\ +B DEL & {\bf Delete} the mail article from disk (!). [p/p]\\ +B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ +%B e & {\bf Expire} all expirable articles in this group. [p/p]\\ +%B i & {\bf Import} a random file into this group.\\ +B m & {\bf Move} the article from one mail group to another. [p/p]\\ +%B q & {\bf Query} where will the article go during fancy splitting\\ +%B r & {\bf Respool} this mail article. [p/p]\\ +%B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this +%group %(!). [p/p]\\ +%G p & {\bf Pop} an article off the summary history and go to it.\\ +%H d & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the +%description from the server.]\\ +%H f & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\ +%H h & Give a very short {\bf help} message.\\ +%H i & (C-c C-i) Go to the Gnus online {\bf info}.\\ +%H v & Display the Gnus {\bf version} number.\\ +%M b & Set a {\bf bookmark} in this article.\\ +%E & (M e, M x) Mark this article as {\bf expirable}. [scope]\\ +%M B & Remove the {\bf bookmark} from this article.\\ +%M C & {\bf Catch-Up} the articles that are not ticked.\\ +%M D & Show all {\bf dormant} articles (normally they are hidden unless +%they have any followups).\\ +M H & Catch-Up (mark read) this group to point ({\bf here}).\\ +%M C-c & {\bf Catch-Up} all articles in this group.\\ +%M M-D & Hide all {\bf dormant} articles.\\ +%M M-C-r & Expunge all articles having a given mark.\\ +%M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ +%M V k & {\bf Kill} all low-scored articles. [score]\\ +%M V m & {\bf Mark} all high-scored articles with a given mark. [score]\\ +%M V u & Mark all high-scored articles as interesting (tick them). [score]\\ +%M P a & Mark {\bf all} articles (in series order).\\ +%M P r & Mark all articles in the {\bf region}.\\ +%M P s & Mark all articles in the current {\bf series}.\\ +%M P t & Mark all articles in this (sub){\bf thread}.\\ +%M P R & Mark all articles matching a {\bf regexp}.\\ +%M P S & Mark all {\bf series} that already contain a marked article.\\ +%M P U & {\bf Unmark} all articles.\\ +O \bf z & Save this article in {\bf file}, {\bf mh} folder, {\bf mail}, +{\bf rmail}, {\bf vm} format. [p/p]\\ +%O f & Save this article in plain {\bf file} format. [p/p]\\ +%O h & Save this article in {\bf mh} folder format. [p/p]\\ +%O m & Save this article in {\bf mail} format. [p/p]\\ +%O r & Save this article in {\bf rmail} format. [p/p]\\ +%O v & Save this article in {\bf vm} format. [p/p]\\ +S b & {\bf Both} post a followup to this article, and send a reply.\\ +%S o p & Forward this article as a {\bf post} to a newsgroup.\\ +S s & {\bf Supersede} this article with a new one (only for own +articles).\\ +%S u & {\bf Uuencode} a file and post it as a series.\\ +S B & {\bf Both} post a followup, send a reply, and include the +original. [p/p]\\ +%S O m & Digest these series and forward by {\bf mail}. [p/p]\\ +%S O p & Digest these series and forward as a {\bf post} to a newsgroup. +%[p/p]\\ +%T \# & Mark this thread with the process mark.\\ +%T d & Move to the next article in this thread ({\bf down}). [distance]\\ +T h & {\bf Hide} this (sub)thread.\\ +%T i & {\bf Increase} the score of this thread.\\ +T s & {\bf Show} the thread hidden under this article.\\ +%T u & Move to the previous article in this {\bf thread ({\bf up}). +%[distance]\\ +%T H & {\bf Hide} all threads.\\ +%T S & {\bf Show} all hidden threads.\\ +%V a & {\bf Add} a new score entry, specifying all elements.\\ +%V c & Specify a new score file as {\bf current}.\\ +%V e & {\bf Edit} the current score alist.\\ +%V f & Edit a score {\bf file} and make it the current one.\\ +%V m & {\bf Mark} all articles below a given score as read.\\ +%V s & {\bf Set} the score of this article.\\ +%V t & Display all score rules applied to this article ({\bf trace}).\\ +%V x & {\bf Expunge} all low-scored articles. [score]\\ +%V C & {\bf Customize} the current score file through a user-friendly +%interface.\\ +%V S & Display the {\bf score} of this article.\\ +W b & Make Message-IDs and URLs in the article to mouse-clickable {\bf + buttons}.\\ +%W c & Remove extra {\bf CRs} (^M) from the article.\\ +%W f & Look for and display any X-{\bf Face} headers.\\ +%W m & Toggle {\bf MIME} processing.\\ +%W o & Treat {\bf overstrike} or underline (^H\_) in the article.\\ +%W q & Treat {\bf quoted}-printable in the article.\\ +W w & Do {\bf word} wrap in the article.\\ +W T e & Convert the article timestamp to time {\bf elapsed} since sent.\\ +W T l & Convert the article timestamp to the {\bf local} timezone.\\ +W T u & (W T z) Convert the article timestamp to {\bf UTC} ({\bf Zulu}, +GMT).\\ +W W a & Hide unwanted parts of the article (citation, headers, signature).\\ +%W W c & Hide article {\bf citation}.\\ +%W W h & Hide article {\bf headers}.\\ +%W W s & Hide article {\bf signature}.\\ +%W W C-c & Hide article {\bf citation} using a more intelligent algorithm.\\ +W H a & Highlight {\bf all} parts of the article (citation, headers, +signature).\\ +%W H c & Highlight article {\bf citation}.\\ +%W H h & Highlight article {\bf headers}.\\ +%W H s & Highlight article {\bf signature}.\\ +%X b & Un-{\bf binhex} these series. [p/p]\\ +%X o & Simply {\bf output} these series (no decoding). [p/p]\\ +%X p & Un{\bf pack} these {\bf postscript} series. [p/p]\\ +%X s & Un-{\bf shar} these series. [p/p]\\ +%X u & {\bf Uudecode} these series. [p/p]\\ +%X \bf z & Decode these series. [p/p]\\ +%X \bf Z & Decode and save these series. [p/p]\\ +%X v \bf z & Decode and view these series. [p/p]\\ +%X v \bf Z & Decode, save and view these series. [p/p]\\ +%Z n & Mark all articles as read and go to the {\bf next} group.\\ +%Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ +%Z N & Exit and go to the {\bf next} group.\\ +%Z P & Exit and go to the {\bf previous} group.\\ +%Z R & Exit this group, and then enter it again ({\bf reenter}). [Prefix: +%select all articles, read and unread.]\\ +\end{keys} +} + +\def\ArticleMode{ +\sec{Article Mode} +{\samepage +All keys for Summary mode also work in Article mode. +Additional keys: + +\begin{keys}{C-c C-m} +RET & (middle mouse button) Activate the button at point to follow +an URL or Message-ID.\\ +TAB & Move the point to the next button.\\ +h & (s) Go to the {\bf header} line of the article in the {\bf +summary} buffer.\\ +C-c ^ & Get the article with the Message-ID near point.\\ +C-c C-m & {\bf Mail} reply to the address near point (prefix: include the +original).\\ +\end{keys} +}} + +\def\sec{\subsubsection*} +\catcode`\^=7 % restore ^ + +\documentstyle{article} +\textwidth 7.26in \textheight 10in \topmargin -1.0in +% the same settings work for A4, although there is a bit of space at the +% top and bottom of the page. +\oddsidemargin -0.5in \evensidemargin -0.5in +\begin{document} +\twocolumn\scriptsize\pagestyle{empty} + +{\centering\Logo{quickref}\qquad\qquad\Title} + +\vspace*{\fill} +\Notes +\GroupMode +\ArticleMode +\vspace*{\fill} +\CopyRight +\pagebreak + +\SummaryMode +\end{document} diff -r 1c55655d6702 -r 28f395d8dc7a etc/gnusrefcard/refcard.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnusrefcard/refcard.tex Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,83 @@ +% Reference Card for (ding) Gnus, 3 twocolumn pages. +% To be processed with latex 2.09 +\def\Guide{Card}\def\guide{card} +\def\logoscale{0.25} +\def\sec{\section*} +\def\subsec{\subsection*} +\def\subsubsec{\subsubsection*} +\documentstyle{article} +\textwidth 7.26in \textheight 10.3in \topmargin -1.2in +% the same settings work for A4, although there is a bit of space at the +% top and bottom of the page. +\oddsidemargin -0.5in \evensidemargin -0.5in +\begin{document} +\twocolumn\footnotesize\pagestyle{empty} +\input{gnusref} + +\vspace*{\fill} +\Title +\vspace*{2ex} +\Logo{refcard} +\vspace*{\fill} +\Marks +\GroupLevels +\pagebreak + +\Notes +\General +\ArticleMode +\vspace*{\fill} +\CopyRight +\pagebreak + +\GroupMode +\SOUP +\pagebreak + +\ListGroups +\CreateGroups +\SortGroups +\MarkGroups +\pagebreak + +\Unsubscribe +\GroupTopics +\vspace*{\fill} +\SummaryMode +\SortSummary +\Article +\pagebreak + +\MailGroup +\GotoArticle +\Score +\pagebreak + +\MarkArticles +%\vspace*{-0.5ex} +\MarkScore +%\vspace*{-0.5ex} +\ProcessMark +%\vspace*{-0.5ex} +\OutputArticles +\pagebreak + +\Send +%\vspace*{-1.1ex} +\Thread +%\vspace*{-1.1ex} +\Exit +\pagebreak + +\Wash +\Hide +\Highlight +\Extract +\pagebreak + +\Limit +\PickAndRead +\ServerMode +\BrowseServer + +\end{document} diff -r 1c55655d6702 -r 28f395d8dc7a etc/mule/FAQ-Mule --- a/etc/mule/FAQ-Mule Mon Aug 13 09:41:47 2007 +0200 +++ b/etc/mule/FAQ-Mule Mon Aug 13 09:42:26 2007 +0200 @@ -1873,7 +1873,7 @@ the following two lines in your .emacs. (load "quail/latin") - (quail-use-package "german") + (quail-use-package "quail-german") 2) If you want to use the azerty layout for French, include the following two lines in your .emacs. diff -r 1c55655d6702 -r 28f395d8dc7a lib-src/ChangeLog --- a/lib-src/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/lib-src/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,9 @@ +1997-06-13 Steven L Baur + + * update-elc.sh (mule_p): Ignore lisp/language when building + non-Mule. + (ignore_pattern): Ignore Languages we don't support yet. + 1997-06-02 Steven L Baur * update-elc.sh (ignore_dirs): Handle ported Quail (LEIM). diff -r 1c55655d6702 -r 28f395d8dc7a lib-src/update-elc.sh --- a/lib-src/update-elc.sh Mon Aug 13 09:41:47 2007 +0200 +++ b/lib-src/update-elc.sh Mon Aug 13 09:42:26 2007 +0200 @@ -76,7 +76,7 @@ mule_p="`$EMACS -batch -no-site-file -eval \"$lisp_prog\"`" if test "$mule_p" = nil ; then echo No - ignore_dirs="$ignore_dirs its egg mule leim" + ignore_dirs="$ignore_dirs its egg mule language leim" else echo Yes fi @@ -137,6 +137,20 @@ \!/site-init.el$!d \!/version.el$!d \!/sunpro/sunpro-load.el$!d +\!/language/devanagari.el$!d +\!/language/ethiopic.el$!d +\!/language/indian.el$!d +\!/language/lao-util.el$!d +\!/language/lao.el$!d +\!/language/tibetan.el$!d +\!/language/vietnamese.el$!d +\!/leim/quail/devanagari.el$!d +\!/leim/quail/ethiopic.el$!d +\!/leim/quail/japanese.el$!d +\!/leim/quail/lao.el$!d +\!/leim/quail/lrt.el$!d +\!/leim/quail/thai.el$!d +\!/leim/quail/viqr.el$!d ' echo "Compiling files without .elc..." diff -r 1c55655d6702 -r 28f395d8dc7a lisp/ChangeLog --- a/lisp/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,81 @@ +1997-06-14 Steven L Baur + + * bytecomp/bytecomp.el (byte-compile-file): Suppress unavoidable + Ebola notices. + +1997-06-13 Steven L Baur + + * bytecomp/bytecomp.el (batch-byte-compile): Suppress unavoidable + Ebola notices. + (batch-byte-recompile-directory): Ditto. + + * utils/lib-complete.el (read-library): Look for .el.gz if not + using Mule. + (get-library-path): Ditto. + Suggested by Jonathan Doughty + + * packages/add-log.el: Restore backwards compatible date behavior + as an option. + Eliminate XEmacs specific autoloads. + From Hrvoje Niksic + + * efs/dired.el (dired-save-excursion): Ebola cleanup. + + * packages/hyper-apropos.el: Massive cleanup, Customize. + From Hrvoje Niksic + +Fri Jun 13 13:20:39 1997 Kyle Jones + + * prim/syntax.el (symbol-near-point): + Check for bobp and avoid (char-syntax (char-before)) if + there. + +1997-06-13 Steven L Baur + + * prim/rect.el (operate-on-rectangle): Correct boundary error. + From Bob Weiner + +1997-06-12 Steven L Baur + + * packages/ispell.el (ispell-command-loop): De-Ebolify. + + * x11/x-iso8859-1.el: Added Grave keysym. + From Heiko Muenkel + + * modes/make-mode.el (makefile-browse): Shouldn't be interactive. + From Hrvoje Niksic + + * prim/files.el (interpreter-mode-alist): ksh-mode is obsoleted by + sh-script. + From Hrvoje Niksic + +1997-06-11 Hrvoje Niksic + + * prim/subr.el (with-current-buffer): New macro. + (with-temp-file): Ditto. + + * bytecomp/byte-optimize.el (byte-optimize-form-code-walker): Test + for `save-current-buffer'. + + * bytecomp/bytecomp.el: Recognize `save-current-buffer'. + + * edebug/edebug.el: Register with-current-buffer and others. + + * modes/lisp-mode.el: Added specs for save-current-buffer, + with-output-to-string, with-current-buffer, with-temp-file and + with-output-to-temp-buffer. + +1997-06-13 MORIOKA Tomohiko + + * gnus/smiley.el (smiley-deformed-regexp-alist): Modify regexp for + horizontal smiley faces. + (smiley-nosey-regexp-alist): Add horizontal smiley faces. + +1997-06-13 MORIOKA Tomohiko + + * leim/quail.el (quail-get-translation): Don't use + `string-to-vector' for XEmacs. + 1997-06-11 Steven L Baur * prim/help.el (function-called-at-point): Use char-(after|before) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/bytecomp/byte-optimize.el --- a/lisp/bytecomp/byte-optimize.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/bytecomp/byte-optimize.el Mon Aug 13 09:42:26 2007 +0200 @@ -433,7 +433,7 @@ (cons (byte-optimize-form (nth 2 form) for-effect) (byte-optimize-body (cdr (cdr (cdr form))) t))))) - ((memq fn '(save-excursion save-restriction)) + ((memq fn '(save-excursion save-restriction save-current-buffer)) ;; those subrs which have an implicit progn; it's not quite good ;; enough to treat these like normal function calls. ;; This can turn (save-excursion ...) into (save-excursion) which diff -r 1c55655d6702 -r 28f395d8dc7a lisp/bytecomp/bytecomp.el --- a/lisp/bytecomp/bytecomp.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/bytecomp/bytecomp.el Mon Aug 13 09:42:26 2007 +0200 @@ -577,7 +577,9 @@ (byte-defop 111 1 byte-bobp) (byte-defop 112 1 byte-current-buffer) (byte-defop 113 0 byte-set-buffer) -(byte-defop 114 1 byte-read-char-OBSOLETE) ;obsolete as of v19 +(byte-defop 114 0 byte-save-current-buffer + "To make a binding to record the current buffer.") +;;(byte-defop 114 1 byte-read-char-OBSOLETE) ;obsolete as of v19 (byte-defop 115 -1 byte-memq) ; new as of v20 (byte-defop 116 1 byte-interactive-p) @@ -1477,6 +1479,7 @@ (message "Compiling %s..." filename)) (let (;;(byte-compile-current-file (file-name-nondirectory filename)) (byte-compile-current-file filename) + (debug-issue-ebola-notices 0) ; Hack -slb target-file input-buffer output-buffer byte-compile-dest-file) (setq target-file (byte-compile-dest-file filename)) @@ -3527,6 +3530,7 @@ (byte-defop-compiler-1 unwind-protect) (byte-defop-compiler-1 condition-case) (byte-defop-compiler-1 save-excursion) +(byte-defop-compiler-1 save-current-buffer) (byte-defop-compiler-1 save-restriction) (byte-defop-compiler-1 save-window-excursion) (byte-defop-compiler-1 with-output-to-temp-buffer) @@ -3614,6 +3618,11 @@ (byte-compile-body-do-effect (cdr form)) (byte-compile-out 'byte-unbind 1)) +(defun byte-compile-save-current-buffer (form) + (byte-compile-out 'byte-save-current-buffer 0) + (byte-compile-body-do-effect (cdr form)) + (byte-compile-out 'byte-unbind 1)) + (defun byte-compile-save-window-excursion (form) (byte-compile-push-constant (byte-compile-top-level-body (cdr form) for-effect)) @@ -3957,7 +3966,8 @@ (defvar command-line-args-left) ;Avoid 'free variable' warning (if (not noninteractive) (error "`batch-byte-compile' is to be used only with -batch")) - (let ((error nil)) + (let ((error nil) + (debug-issue-ebola-notices 0)) ; Hack -slb (while command-line-args-left (if (file-directory-p (expand-file-name (car command-line-args-left))) (let ((files (directory-files (car command-line-args-left))) @@ -4011,7 +4021,8 @@ (error "batch-byte-recompile-directory is to be used only with -batch")) (or command-line-args-left (setq command-line-args-left '("."))) - (let ((byte-recompile-directory-ignore-errors-p t)) + (let ((byte-recompile-directory-ignore-errors-p t) + (debug-issue-ebola-notices 0)) (while command-line-args-left (byte-recompile-directory (car command-line-args-left)) (setq command-line-args-left (cdr command-line-args-left)))) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/ChangeLog --- a/lisp/custom/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,6 +1,133 @@ -1997-06-06 MORIOKA Tomohiko - - * wid-edit.el: Add widget `coding-system' for mule. +Sat Jun 14 21:31:09 1997 Per Abrahamsen + + * Version 1.9916 released. + +Sat Jun 14 18:24:36 1997 Per Abrahamsen + + * wid-edit.el (widget-tabable-at): New function. + (widget-move): Use it. + * wid-edit.el (widget-after-change): Reimplemented :secret. + + * wid-edit.el (widget-field-add-space): New option. + (widget-specify-field): Use it. + (widget-field-end): Ditto. + + * Version 1.9915 released. + +Sat Jun 14 12:12:38 1997 Per Abrahamsen + + * wid-edit.el (widget-leave-text): New function. + (widget-convert-text): Use it. + (documentation-link): New widget. + (widget-documentation-link-action): New function. + (widget-documentation-links): New option. + (widget-documentation-link-regexp): New option. + (widget-documentation-link-p): New option. + (widget-documentation-link-type): New option. + (widget-documentation-link-add): New function. + (widget-documentation-string-value-create): Use it. + + * all: Synched with FSF. + +Fri Jun 13 20:25:55 1997 Per Abrahamsen + + * Version 1.9914 released. + +1997-06-10 MORIOKA Tomohiko + + * wid-edit.el: Add widget `coding-system' for mule. + +Fri Jun 13 14:28:41 1997 Per Abrahamsen + + * wid-edit.el (widget-convert-text): New function. + (widget-convert-button): Ditto. + + * custom.texi: Use ../info/custom as file name. + (Declaring Variables): Reformulation. + Ispelled. + * widget.texi: Use ../info/widget as file name. + Ispelled. + +Thu Jun 12 19:22:22 1997 Per Abrahamsen + + * Version 1.9913 released. + +Thu Jun 12 12:15:33 1997 Per Abrahamsen + + * wid-edit.el (widget-field-buffer): Don't assume an overlay + exists. + (widget-field-start): Ditto. + (widget-field-end): Ditto. + + * cus-face.el (custom-face-attributes-get): Protect against + missing w3 font functions. + + * Version 1.9912 released. + +Thu Jun 12 12:14:30 1997 Per Abrahamsen + + * cus-edit.el (custom-magic-faces): New group. + Added magic faces. + +Wed Jun 11 20:15:33 1997 Per Abrahamsen + + * Version 1.9911 released. + +Wed Jun 11 14:35:58 1997 Per Abrahamsen + + * cus-edit.el (custom-buffer): New group. + (custom-menu): New group + Updated options. + * wid-edit.el (widget-faces): New group. + Updated all faces. + + * wid-edit.el (widget-map-buttons): New function. + Written by William M. Perry . + + * Version 1.9910 released. + +Wed Jun 11 13:35:16 1997 Simon Marshall + + * cus-edit.el (custom-buffer-sort-predicate): + (custom-menu-sort-predicate): Default to ignore. Rewrite :type form. + (custom-buffer-order-predicate): + (custom-menu-order-predicate): New variables. + (custom-buffer-sort-alphabetically): + (custom-menu-sort-alphabetically): Functions deleted. + (custom-sort-items-alphabetically): New function. Like deleted + functions, except that A and B must be the same custom type. + (custom-sort-groups-first): + (custom-sort-groups-last): New functions. Like deleted functions, + except that only A and B custom types are compared. + (custom-group-value-create): + (custom-menu-create): Also sort members using custom-*-order-predicate. + But sort the copy of the stored sequence to prevent changing the stored + value, and don't store the sorted copy. + +Wed Jun 11 11:10:18 1997 Per Abrahamsen + + * Version 1.9909 released. + +Wed Jun 11 10:13:05 1997 Per Abrahamsen + + * wid-edit.el (widget-specify-inactive): Don't set `mouse-face'. + (widget-setup): Don't use markers. + +Tue Jun 10 13:55:38 1997 Per Abrahamsen + + * wid-edit.el (widget-default-format-handler): Cleanup. + (widget-documentation-string-value-create): Also use documentation + properties on single line documentation strings. + +Mon Jun 9 06:21:49 1997 William M. Perry + + * wid-browse.el (widget-minor-mode): Fixed mistake in + widget-minor-mode - it had semantics of non-interactive calling + reveresed. + +Wed Jun 4 13:44:33 1997 Per Abrahamsen + + * all: Synched with FSF. Wed Jun 04 13:24:36 1997 Per Abrahamsen diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/cus-edit.el --- a/lisp/custom/cus-edit.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/cus-edit.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: help, faces -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;; This file is part of GNU Emacs. @@ -246,6 +246,16 @@ :group 'customize :group 'faces) +(defgroup custom-buffer nil + "Control the customize buffers." + :prefix "custom-" + :group 'customize) + +(defgroup custom-menu nil + "Control how the customize menus." + :prefix "custom-" + :group 'customize) + (defgroup abbrev-mode nil "Word abbreviations mode." :group 'abbrev) @@ -367,7 +377,7 @@ val) (setq val (completing-read (if (symbolp v) - (format "Customize variable: (default %s) " v) + (format "Customize option: (default %s) " v) "Customize variable: ") obarray (lambda (symbol) (and (boundp symbol) @@ -401,7 +411,7 @@ (defcustom custom-unlispify-menu-entries t "Display menu entries as words instead of symbols if non nil." - :group 'customize + :group 'custom-menu :type 'boolean) (defun custom-unlispify-menu-entry (symbol &optional no-suffix) @@ -440,7 +450,7 @@ (defcustom custom-unlispify-tag-names t "Display tag names as words instead of symbols if non nil." - :group 'customize + :group 'custom-buffer :type 'boolean) (defun custom-unlispify-tag-name (symbol) @@ -518,49 +528,59 @@ ;;; Sorting. -(defcustom custom-buffer-sort-predicate 'custom-buffer-sort-alphabetically +(defcustom custom-buffer-sort-predicate 'ignore + "Function used for sorting group members in buffers. +The value should be useful as a predicate for `sort'. +The list to be sorted is the value of the groups `custom-group' property." + :type '(radio (const :tag "Unsorted" ignore) + (const :tag "Alphabetic" custom-sort-items-alphabetically) + (function :tag "Other")) + :group 'custom-buffer) + +(defcustom custom-buffer-order-predicate 'custom-sort-groups-last "Function used for sorting group members in buffers. The value should be useful as a predicate for `sort'. The list to be sorted is the value of the groups `custom-group' property." - :type '(radio (function-item custom-buffer-sort-alphabetically) + :type '(radio (const :tag "Groups first" custom-sort-groups-first) + (const :tag "Groups last" custom-sort-groups-last) (function :tag "Other")) - :group 'customize) + :group 'custom-buffer) -(defun custom-buffer-sort-alphabetically (a b) - "Return t iff is A should be before B. -A and B should be members of a `custom-group' property. -The members are sorted alphabetically, except that all groups are -sorted after all non-groups." - (cond ((and (eq (nth 1 a) 'custom-group) - (not (eq (nth 1 b) 'custom-group))) - nil) - ((and (eq (nth 1 b) 'custom-group) - (not (eq (nth 1 a) 'custom-group))) - t) - (t - (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b)))))) +(defcustom custom-menu-sort-predicate 'ignore + "Function used for sorting group members in menus. +The value should be useful as a predicate for `sort'. +The list to be sorted is the value of the groups `custom-group' property." + :type '(radio (const :tag "Unsorted" ignore) + (const :tag "Alphabetic" custom-sort-items-alphabetically) + (function :tag "Other")) + :group 'custom-menu) -(defcustom custom-menu-sort-predicate 'custom-menu-sort-alphabetically +(defcustom custom-menu-order-predicate 'custom-sort-groups-first "Function used for sorting group members in menus. The value should be useful as a predicate for `sort'. The list to be sorted is the value of the groups `custom-group' property." - :type '(radio (function-item custom-menu-sort-alphabetically) + :type '(radio (const :tag "Groups first" custom-sort-groups-first) + (const :tag "Groups last" custom-sort-groups-last) (function :tag "Other")) - :group 'customize) + :group 'custom-menu) + +(defun custom-sort-items-alphabetically (a b) + "Return t iff A is alphabetically before B and the same custom type. +A and B should be members of a `custom-group' property." + (and (eq (nth 1 a) (nth 1 b)) + (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b))))) -(defun custom-menu-sort-alphabetically (a b) - "Return t iff is A should be before B. -A and B should be members of a `custom-group' property. -The members are sorted alphabetically, except that all groups are -sorted before all non-groups." - (cond ((and (eq (nth 1 a) 'custom-group) - (not (eq (nth 1 b) 'custom-group))) - t) - ((and (eq (nth 1 b) 'custom-group) - (not (eq (nth 1 a) 'custom-group))) - nil) - (t - (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b)))))) +(defun custom-sort-groups-first (a b) + "Return t iff A a custom group and B is a not. +A and B should be members of a `custom-group' property." + (and (eq (nth 1 a) 'custom-group) + (not (eq (nth 1 b) 'custom-group)))) + +(defun custom-sort-groups-last (a b) + "Return t iff B a custom group and A is a not. +A and B should be members of a `custom-group' property." + (and (eq (nth 1 b) 'custom-group) + (not (eq (nth 1 a) 'custom-group)))) ;;; Custom Mode Commands. @@ -897,7 +917,7 @@ "If non-nil, only show a single reset button in customize buffers. This button will have a menu with all three reset operations." :type 'boolean - :group 'customize) + :group 'custom-buffer) (defun custom-buffer-create-internal (options) (message "Creating customization buffer...") @@ -1017,38 +1037,49 @@ ;;; The `custom-magic' Widget. +(defgroup custom-magic-faces nil + "Faces used by the magic button." + :group 'custom-faces + :group 'custom-buffer) + (defface custom-invalid-face '((((class color)) (:foreground "yellow" :background "red")) (t (:bold t :italic t :underline t))) - "Face used when the customize item is invalid.") + "Face used when the customize item is invalid." + :group 'custom-magic-faces) (defface custom-rogue-face '((((class color)) (:foreground "pink" :background "black")) (t (:underline t))) - "Face used when the customize item is not defined for customization.") + "Face used when the customize item is not defined for customization." + :group 'custom-magic-faces) (defface custom-modified-face '((((class color)) (:foreground "white" :background "blue")) (t (:italic t :bold))) - "Face used when the customize item has been modified.") + "Face used when the customize item has been modified." + :group 'custom-magic-faces) (defface custom-set-face '((((class color)) (:foreground "blue" :background "white")) (t (:italic t))) - "Face used when the customize item has been set.") + "Face used when the customize item has been set." + :group 'custom-magic-faces) (defface custom-changed-face '((((class color)) (:foreground "white" :background "blue")) (t (:italic t))) - "Face used when the customize item has been changed.") + "Face used when the customize item has been changed." + :group 'custom-magic-faces) (defface custom-saved-face '((t (:underline t))) - "Face used when the customize item has been saved.") + "Face used when the customize item has been saved." + :group 'custom-magic-faces) (defconst custom-magic-alist '((nil "#" underline "\ uninitialized, you should not see this.") @@ -1123,7 +1154,7 @@ :type '(choice (const :tag "no" nil) (const short) (const long)) - :group 'customize) + :group 'custom-buffer) (defcustom custom-magic-show-hidden '(option face) "Control whether the state button is shown for hidden items. @@ -1131,12 +1162,12 @@ button should be visible. Possible categories are `group', `option', and `face'." :type '(set (const group) (const option) (const face)) - :group 'customize) + :group 'custom-buffer) (defcustom custom-magic-show-button nil "Show a magic button indicating the state of each customization option." :type 'boolean - :group 'customize) + :group 'custom-buffer) (define-widget 'custom-magic 'default "Show and manipulate state for a customization option." @@ -2176,8 +2207,9 @@ (custom-load-widget widget) (let* ((level (widget-get widget :custom-level)) (symbol (widget-value widget)) - (members (sort (get symbol 'custom-group) - custom-buffer-sort-predicate)) + (members (sort (sort (copy-sequence (get symbol 'custom-group)) + custom-buffer-sort-predicate) + custom-buffer-order-predicate)) (prefixes (widget-get widget :custom-prefixes)) (custom-prefix-list (custom-prefix-add symbol prefixes)) (length (length members)) @@ -2199,7 +2231,6 @@ (unless (eq (preceding-char) ?\n) (widget-insert "\n")))) members))) - (put symbol 'custom-group members) (message "Creating group magic...") (mapcar 'custom-magic-reset children) (message "Creating group state...") @@ -2465,7 +2496,7 @@ (defcustom custom-menu-nesting 2 "Maximum nesting in custom menus." :type 'integer - :group 'customize) + :group 'custom-menu) (defun custom-face-menu-create (widget symbol) "Ignoring WIDGET, create a menu entry for customization face SYMBOL." @@ -2518,9 +2549,9 @@ (< (length (get symbol 'custom-group)) widget-menu-max-size)) (let ((custom-prefix-list (custom-prefix-add symbol custom-prefix-list)) - (members (sort (get symbol 'custom-group) - custom-menu-sort-predicate))) - (put symbol 'custom-group members) + (members (sort (sort (copy-sequence (get symbol 'custom-group)) + custom-menu-sort-predicate) + custom-menu-order-predicate))) (custom-load-symbol symbol) `(,(custom-unlispify-menu-entry symbol t) ,item @@ -2579,7 +2610,7 @@ (defcustom custom-mode-hook nil "Hook called when entering custom-mode." :type 'hook - :group 'customize) + :group 'custom-buffer ) (defun custom-mode () "Major mode for editing customization buffers. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/cus-face.el --- a/lisp/custom/cus-face.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/cus-face.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: help, faces -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary: @@ -332,11 +332,14 @@ (setq att (car atts) atts (cdr atts) get (nth 3 att)) - (when get - (let ((answer (funcall get face frame))) - (unless (equal answer (funcall get 'default frame)) - (when (widget-apply (nth 1 att) :match answer) - (setq result (cons (nth 0 att) (cons answer result)))))))) + (condition-case nil + ;; This may fail if w3 doesn't exists. + (when get + (let ((answer (funcall get face frame))) + (unless (equal answer (funcall get 'default frame)) + (when (widget-apply (nth 1 att) :match answer) + (setq result (cons (nth 0 att) (cons answer result))))))) + (error nil))) result)) (defun custom-set-face-bold (face value &optional frame) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/custom.el --- a/lisp/custom/custom.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/custom.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: help, faces -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;; This file is part of GNU Emacs. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/wid-browse.el --- a/lisp/custom/wid-browse.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/wid-browse.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: extensions -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;; This file is part of GNU Emacs. @@ -282,7 +282,7 @@ (interactive "P") (cond ((null arg) (setq widget-minor-mode (not widget-minor-mode))) - ((<= 0 arg) + ((<= arg 0) (setq widget-minor-mode nil)) (t (setq widget-minor-mode t))) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/wid-edit.el --- a/lisp/custom/wid-edit.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/wid-edit.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: extensions -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;; This file is part of GNU Emacs. @@ -123,17 +123,36 @@ "http://www.dina.kvl.dk/~abraham/custom/") :prefix "widget-" :group 'extensions - :group 'faces :group 'hypermedia) +(defgroup widget-documentation nil + "Options controling the display of documentation strings." + :group 'widgets) + +(defgroup widget-faces nil + "Faces used by the widget library." + :group 'widgets + :group 'faces) + +(defface widget-documentation-face '((((class color) + (background dark)) + (:foreground "lime green")) + (((class color) + (background light)) + (:foreground "dark green")) + (t nil)) + "Face used for documentation text." + :group 'widget-documentation + :group 'widget-faces) + (defface widget-button-face '((t (:bold t))) "Face used for widget buttons." - :group 'widgets) + :group 'widget-faces) (defcustom widget-mouse-face 'highlight "Face used for widget buttons when the mouse is above them." :type 'face - :group 'widgets) + :group 'widget-faces) (defface widget-field-face '((((class grayscale color) (background light)) @@ -144,7 +163,7 @@ (t (:italic t))) "Face used for editable fields." - :group 'widgets) + :group 'widget-faces) ;;; Utility functions. ;; @@ -253,6 +272,19 @@ 'start-open nil 'end-open nil))) +(defcustom widget-field-add-space + (or (< emacs-major-version 20) + (and (eq emacs-major-version 20) + (< emacs-minor-version 3)) + (not (string-match "XEmacs" emacs-version))) + "Non-nil means add extra space at the end of editable text fields. + +This is needed on all versions of Emacs, and on XEmacs before 20.3. +If you don't add the space, it will become impossible to edit a zero +size field." + :type 'boolean + :group 'widgets) + (defun widget-specify-field (widget from to) "Specify editable button for WIDGET between FROM and TO." (put-text-property from to 'read-only nil) @@ -261,7 +293,8 @@ ;; at the end of the overlay. (save-excursion (goto-char to) - (insert-and-inherit " ") + (when widget-field-add-space + (insert-and-inherit " ")) (setq to (point))) (add-text-properties (1- to) to ;to (1+ to) '(front-sticky nil start-open t read-only to)) @@ -315,7 +348,6 @@ (add-text-properties from to (list 'start-open t 'end-open t 'face face))))) - (defun widget-specify-doc (widget from to) ;; Specify documentation for WIDGET between FROM and TO. (add-text-properties from to (list 'widget-doc widget @@ -347,14 +379,15 @@ (t (:italic t))) "Face used for inactive widgets." - :group 'widgets) + :group 'widget-faces) (defun widget-specify-inactive (widget from to) "Make WIDGET inactive for user modifications." (unless (widget-get widget :inactive) (let ((overlay (make-overlay from to nil t nil))) (overlay-put overlay 'face 'widget-inactive-face) - (overlay-put overlay 'mouse-face 'widget-inactive-face) + ;; This is disabled, as it makes the mouse cursor change shape. + ;; (overlay-put overlay 'mouse-face 'widget-inactive-face) (overlay-put overlay 'evaporate t) (overlay-put overlay 'priority 100) (overlay-put overlay (if (string-match "XEmacs" emacs-version) @@ -474,6 +507,26 @@ (throw 'child child))) nil))) +(defun widget-map-buttons (function &optional buffer maparg) + "Map FUNCTION over the buttons in BUFFER. +FUNCTION is called with the arguments WIDGET and MAPARG. + +If FUNCTION returns non-nil, the walk is cancelled. + +The arguments MAPARG, and BUFFER default to nil and (current-buffer), +respectively." + (let ((cur (point-min)) + (widget nil) + (parent nil) + (overlays (if buffer + (save-excursion (set-buffer buffer) (overlay-lists)) + (overlay-lists)))) + (setq overlays (append (car overlays) (cdr overlays))) + (while (setq cur (pop overlays)) + (setq widget (overlay-get cur 'button)) + (if (and widget (funcall function widget maparg)) + (setq overlays nil))))) + ;;; Glyphs. (defcustom widget-glyph-directory (concat data-directory "custom/") @@ -720,6 +773,48 @@ (apply 'insert args) (widget-specify-text from (point)))) +(defun widget-convert-text (type from to + &optional button-from button-to + &rest args) + "Return a widget of type TYPE with endpoint FROM TO. +Optional ARGS are extra keyword arguments for TYPE. +and TO will be used as the widgets end points. If optional arguments +BUTTON-FROM and BUTTON-TO are given, these will be used as the widgets +button end points. +Optional ARGS are extra keyword arguments for TYPE." + (let ((widget (apply 'widget-convert type :delete 'widget-leave-text args)) + (from (copy-marker from)) + (to (copy-marker to))) + (widget-specify-text from to) + (set-marker-insertion-type from t) + (set-marker-insertion-type to nil) + (widget-put widget :from from) + (widget-put widget :to to) + (when button-from + (widget-specify-button widget button-from button-to)) + widget)) + +(defun widget-convert-button (type from to &rest args) + "Return a widget of type TYPE with endpoint FROM TO. +Optional ARGS are extra keyword arguments for TYPE. +No text will be inserted to the buffer, instead the text between FROM +and TO will be used as the widgets end points, as well as the widgets +button end points." + (apply 'widget-convert-text type from to from to args)) + +(defun widget-leave-text (widget) + "Remove markers and overlays from WIDGET and its children." + (let ((from (widget-get widget :from)) + (to (widget-get widget :to)) + (button (widget-get widget :button-overlay)) + (field (widget-get widget :field-overlay)) + (children (widget-get widget :children))) + (set-marker from nil) + (set-marker to nil) + (delete-overlay button) + (delete-overlay field) + (mapcar 'widget-leave-text children))) + ;;; Keymap and Commands. (defvar widget-keymap nil @@ -783,7 +878,7 @@ (t (:bold t :underline t))) "Face used for pressed buttons." - :group 'widgets) + :group 'widget-faces) (defun widget-button-click (event) "Invoke button below mouse pointer." @@ -892,14 +987,29 @@ (when (commandp command) (call-interactively command)))))) +(defun widget-tabable-at (&optional pos) + "Return the tabable widget at POS, or nil. +POS defaults to the value of (point)." + (unless pos + (setq pos (point))) + (let ((widget (or (get-char-property (point) 'button) + (get-char-property (point) 'field)))) + (if widget + (let ((order (widget-get widget :tab-order))) + (if order + (if (>= order 0) + widget + nil) + widget)) + nil))) + (defun widget-move (arg) "Move point to the ARG next field or button. ARG may be negative to move backward." (or (bobp) (> arg 0) (backward-char)) (let ((pos (point)) (number arg) - (old (or (get-char-property (point) 'button) - (get-char-property (point) 'field))) + (old (widget-tabable-at)) new) ;; Forward. (while (> arg 0) @@ -909,13 +1019,10 @@ (and (eq pos (point)) (eq arg number) (error "No buttons or fields found")) - (let ((new (or (get-char-property (point) 'button) - (get-char-property (point) 'field)))) + (let ((new (widget-tabable-at))) (when new (unless (eq new old) - (unless (and (widget-get new :tab-order) - (< (widget-get new :tab-order) 0)) - (setq arg (1- arg))) + (setq arg (1- arg)) (setq old new))))) ;; Backward. (while (< arg 0) @@ -925,16 +1032,13 @@ (and (eq pos (point)) (eq arg number) (error "No buttons or fields found")) - (let ((new (or (get-char-property (point) 'button) - (get-char-property (point) 'field)))) + (let ((new (widget-tabable-at))) (when new (unless (eq new old) - (unless (and (widget-get new :tab-order) - (< (widget-get new :tab-order) 0)) - (setq arg (1+ arg))))))) - (while (or (get-char-property (point) 'button) - (get-char-property (point) 'field)) - (backward-char)) + (setq arg (1+ arg)))))) + (let ((new (widget-tabable-at))) + (while (eq (widget-tabable-at) new) + (backward-char))) (forward-char)) (widget-echo-help (point)) (run-hooks 'widget-move-hook)) @@ -1017,7 +1121,8 @@ widget-field-list (cons field widget-field-list)) (let ((from (car (widget-get field :field-overlay))) (to (cdr (widget-get field :field-overlay)))) - (widget-specify-field field from to) + (widget-specify-field field + (marker-position from) (marker-position to)) (set-marker from nil) (set-marker to nil)))) (widget-clear-undo) @@ -1037,16 +1142,21 @@ (defun widget-field-buffer (widget) "Return the start of WIDGET's editing field." - (overlay-buffer (widget-get widget :field-overlay))) + (let ((overlay (widget-get widget :field-overlay))) + (and overlay (overlay-buffer overlay)))) (defun widget-field-start (widget) "Return the start of WIDGET's editing field." - (overlay-start (widget-get widget :field-overlay))) + (let ((overlay (widget-get widget :field-overlay))) + (and overlay (overlay-start overlay)))) (defun widget-field-end (widget) "Return the end of WIDGET's editing field." - ;; Don't subtract one if local-map works at the end of the overlay. - (1- (overlay-end (widget-get widget :field-overlay)))) + (let ((overlay (widget-get widget :field-overlay))) + ;; Don't subtract one if local-map works at the end of the overlay. + (and overlay (if widget-field-add-space + (1- (overlay-end overlay)) + (overlay-end overlay))))) (defun widget-field-find (pos) "Return the field at POS. @@ -1072,7 +1182,8 @@ (when field (unless (eq field other) (debug "Change in different fields")) - (let ((size (widget-get field :size))) + (let ((size (widget-get field :size)) + (secret (widget-get field :secret))) (when size (let ((begin (widget-field-start field)) (end (widget-field-end field))) @@ -1093,7 +1204,20 @@ (goto-char end) (while (and (eq (preceding-char) ?\ ) (> (point) begin)) - (delete-backward-char 1)))))))) + (delete-backward-char 1))))))) + (when secret + (let ((begin (widget-field-start field)) + (end (widget-field-end field))) + (when size + (while (and (> end begin) + (eq (char-after (1- end)) ?\ )) + (setq end (1- end)))) + (while (< begin end) + (let ((old (char-after begin))) + (unless (eq old secret) + (subst-char-in-region begin (1+ begin) old secret) + (put-text-property begin (1+ begin) 'secret old)) + (setq begin (1+ begin))))))) (widget-apply field :notify field))) (error (debug "After Change")))) @@ -1253,32 +1377,34 @@ (defun widget-default-format-handler (widget escape) ;; We recognize the %h escape by default. - (let* ((buttons (widget-get widget :buttons)) - (doc-property (widget-get widget :documentation-property)) - (doc-try (cond ((widget-get widget :doc)) - ((symbolp doc-property) - (documentation-property (widget-get widget :value) - doc-property)) - (t - (funcall doc-property (widget-get widget :value))))) - (doc-text (and (stringp doc-try) - (> (length doc-try) 1) - doc-try))) + (let* ((buttons (widget-get widget :buttons))) (cond ((eq escape ?h) - (when doc-text - (and (eq (preceding-char) ?\n) - (widget-get widget :indent) - (insert-char ? (widget-get widget :indent))) - ;; The `*' in the beginning is redundant. - (when (eq (aref doc-text 0) ?*) - (setq doc-text (substring doc-text 1))) - ;; Get rid of trailing newlines. - (when (string-match "\n+\\'" doc-text) - (setq doc-text (substring doc-text 0 (match-beginning 0)))) - (push (widget-create-child-and-convert - widget 'documentation-string - doc-text) - buttons))) + (let* ((doc-property (widget-get widget :documentation-property)) + (doc-try (cond ((widget-get widget :doc)) + ((symbolp doc-property) + (documentation-property + (widget-get widget :value) + doc-property)) + (t + (funcall doc-property + (widget-get widget :value))))) + (doc-text (and (stringp doc-try) + (> (length doc-try) 1) + doc-try))) + (when doc-text + (and (eq (preceding-char) ?\n) + (widget-get widget :indent) + (insert-char ? (widget-get widget :indent))) + ;; The `*' in the beginning is redundant. + (when (eq (aref doc-text 0) ?*) + (setq doc-text (substring doc-text 1))) + ;; Get rid of trailing newlines. + (when (string-match "\n+\\'" doc-text) + (setq doc-text (substring doc-text 0 (match-beginning 0)))) + (push (widget-create-child-and-convert + widget 'documentation-string + doc-text) + buttons)))) (t (error "Unknown escape `%c'" escape))) (widget-put widget :buttons buttons))) @@ -2466,18 +2592,61 @@ (widget-glyph-insert widget off "right" "right-pushed") (insert "...")))) +;;; The `documentation-link' Widget. + +(define-widget 'documentation-link 'link + "Link type used in documentation strings." + :action 'widget-documentation-link-action) + +(defun widget-documentation-link-action (widget &optional event) + "Run apropos on WIDGET's value. Ignore optional argument EVENT." + (apropos (concat "\\`" (regexp-quote (widget-get widget :value)) "\\'"))) + +(defcustom widget-documentation-links t + "Add hyperlinks to documentation strings when non-nil." + :type 'boolean + :group 'widget-documentation) + +(defcustom widget-documentation-link-regexp "`\\([^\n`' ]+\\)'" + "Regexp for matching potential links in documentation strings. +The first group should be the link itself." + :type 'regexp + :group 'widget-documentation) + +(defcustom widget-documentation-link-p 'intern-soft + "Predicate used to test if a string is useful as a link. +The value should be a function. The function will be called one +argument, a string, and should return non-nil if there should be a +link for that string." + :type 'function + :options '(widget-documentation-link-p) + :group 'widget-documentation) + +(defcustom widget-documentation-link-type 'documentation-link + "Widget type used for links in documentation strings." + :type 'symbol + :group 'widget-documentation) + +(defun widget-documentation-link-add (widget from to) + (widget-specify-doc widget from to) + (when widget-documentation-links + (let ((regexp widget-documentation-link-regexp) + (predicate widget-documentation-link-p) + (type widget-documentation-link-type) + (buttons (widget-get widget :buttons))) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward regexp to t) + (let ((name (match-string 1)) + (begin (match-beginning 0)) + (end (match-end 0))) + (when (funcall predicate name) + (push (widget-convert-button type begin end :value name) + buttons))))) + (widget-put widget :buttons buttons)))) + ;;; The `documentation-string' Widget. -(defface widget-documentation-face '((((class color) - (background dark)) - (:foreground "lime green")) - (((class color) - (background light)) - (:foreground "dark green")) - (t nil)) - "Face used for documentation text." - :group 'widgets) - (define-widget 'documentation-string 'item "A documentation string." :format "%v" @@ -2488,14 +2657,14 @@ (defun widget-documentation-string-value-create (widget) ;; Insert documentation string. (let ((doc (widget-value widget)) - (shown (widget-get (widget-get widget :parent) :documentation-shown))) + (shown (widget-get (widget-get widget :parent) :documentation-shown)) + (start (point))) (if (string-match "\n" doc) (let ((before (substring doc 0 (match-beginning 0))) (after (substring doc (match-beginning 0))) - (start (point)) buttons) (insert before " ") - (widget-specify-doc widget start (point)) + (widget-documentation-link-add widget start (point)) (push (widget-create-child-and-convert widget 'visibility :off nil @@ -2505,9 +2674,10 @@ (when shown (setq start (point)) (insert after) - (widget-specify-doc widget start (point))) + (widget-documentation-link-add widget start (point))) (widget-put widget :buttons buttons)) - (insert doc))) + (insert doc) + (widget-documentation-link-add widget start (point)))) (insert "\n")) (defun widget-documentation-string-action (widget &rest ignore) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/widget-example.el --- a/lisp/custom/widget-example.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/widget-example.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: help, extensions, faces, hypermedia -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ (require 'widget) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/custom/widget.el --- a/lisp/custom/widget.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/custom/widget.el Mon Aug 13 09:42:26 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen ;; Keywords: help, extensions, faces, hypermedia -;; Version: 1.9908 +;; Version: 1.9916 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;; This file is part of GNU Emacs. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/edebug/edebug.el --- a/lisp/edebug/edebug.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/edebug/edebug.el Mon Aug 13 09:42:26 2007 +0200 @@ -29,7 +29,7 @@ ;; LCD Archive Entry: ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu ;; |A source level debugger for Emacs Lisp. -;; |$Date: 1997/04/24 03:59:43 $|$Revision: 1.5 $|~/modes/edebug.el| +;; |$Date: 1997/06/14 20:30:57 $|$Revision: 1.6 $|~/modes/edebug.el| ;; This minor mode allows programmers to step through Emacs Lisp ;; source code while executing functions. You can also set @@ -87,7 +87,7 @@ ;;; Code: (defconst edebug-version - (let ((raw-version "$Revision: 1.5 $")) + (let ((raw-version "$Revision: 1.6 $")) (substring raw-version (string-match "[0-9.]*" raw-version) (match-end 0)))) @@ -2164,6 +2164,14 @@ (def-edebug-spec eval-when-compile t) (def-edebug-spec eval-and-compile t) +(def-edebug-spec save-selected-window t) +(def-edebug-spec save-current-buffer t) +(def-edebug-spec save-match-data t) +(def-edebug-spec with-output-to-string t) +(def-edebug-spec with-current-buffer t) +(def-edebug-spec with-temp-file t) +(def-edebug-spec with-temp-buffer t) + ;; Anything else? diff -r 1c55655d6702 -r 28f395d8dc7a lisp/efs/dired.el --- a/lisp/efs/dired.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/efs/dired.el Mon Aug 13 09:42:26 2007 +0200 @@ -739,7 +739,7 @@ ;; the proper column. (goto-char (, temp-bolm)) (and (not (, temp-fnlp)) - (not (eq (following-char) 0)) (memq (following-char) '(?\n ?\r)) + (memq (char-after (point)) '(?\n ?\r)) ;; The line containing the point got deleted. Note that this ;; logic only works if we don't delete null lines, but we never ;; do. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/gnus/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,9 @@ +1997-06-13 MORIOKA Tomohiko + + * smiley.el (smiley-deformed-regexp-alist): Modify regexp for + horizontal smiley faces. + (smiley-nosey-regexp-alist): Add horizontal smiley faces. + 1997-06-10 Steven L Baur * nntp.el (nntp-wait-for): Replace following-char with char-after. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/gnus/smiley.el --- a/lisp/gnus/smiley.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/gnus/smiley.el Mon Aug 13 09:42:26 2007 +0200 @@ -53,12 +53,12 @@ ;; two alists below. (defcustom smiley-deformed-regexp-alist - '(("\\(\\^_?\\^;;;\\)\\W" 1 "Face_ase3.xbm") - ("\\(\\^_?\\^;;\\)\\W" 1 "Face_ase2.xbm") - ("\\(\\^_?\\^;\\)\\W" 1 "Face_ase.xbm") - ("\\(\\^_?\\^\\)\\W" 1 "Face_smile.xbm") - ("\\(\\;_;\\)\\W" 1 "Face_weep.xbm") - ("\\(\\T_T\\)\\W" 1 "Face_weep.xbm") + '(("(?\\(\\^_?\\^;;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase3.xbm") + ("(?\\(\\^_?\\^;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase2.xbm") + ("(?\\(\\^_?\\^;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase.xbm") + ("(\\(\\^_?\\^\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_smile.xbm") + ("(\\(;_?;\\))" 1 "Face_weep.xbm") + ("(\\(T_?T\\))" 1 "Face_weep.xbm") ("\\(:-*[<«]+\\)\\W" 1 "FaceAngry.xpm") ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm") ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm") @@ -81,7 +81,13 @@ :group 'smiley) (defcustom smiley-nosey-regexp-alist - '(("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm") + '(("(?\\(\\^_?\\^;;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase3.xbm") + ("(?\\(\\^_?\\^;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase2.xbm") + ("(?\\(\\^_?\\^;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase.xbm") + ("(\\(\\^_?\\^\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_smile.xbm") + ("(\\(;_?;\\))" 1 "Face_weep.xbm") + ("(\\(T_?T\\))" 1 "Face_weep.xbm") + ("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm") ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm") ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm") ("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm") diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/ada-mode.el --- a/lisp/modes/ada-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/ada-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -3308,8 +3308,6 @@ ;; Casing (define-key ada-mode-map "\C-c\C-r" 'ada-adjust-case-region) (define-key ada-mode-map "\C-c\C-b" 'ada-adjust-case-buffer) -;; GDF - don't rebind the DEL key -;; (define-key ada-mode-map "\177" 'backward-delete-char-untabify) ;; Use predefined function of emacs19 for comments (RE) (define-key ada-mode-map "\C-c;" 'comment-region) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/arc-mode.el --- a/lisp/modes/arc-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/arc-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -494,7 +494,8 @@ (define-key archive-mode-map "\M-\C-?" 'archive-unmark-all-files) (define-key archive-mode-map "v" 'archive-view) (define-key archive-mode-map "x" 'archive-expunge) - (define-key archive-mode-map "\177" 'archive-unflag-backwards) + (define-key archive-mode-map 'backspace 'archive-unflag-backwards) + (define-key archive-mode-map 'delete 'archive-unflag-backwards) (define-key archive-mode-map "E" 'archive-extract-other-window) (define-key archive-mode-map "M" 'archive-chmod-entry) (define-key archive-mode-map "G" 'archive-chgrp-entry) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/cperl-mode.el --- a/lisp/modes/cperl-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/cperl-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -32,7 +32,7 @@ ;;; Corrections made by Ilya Zakharevich ilya@math.mps.ohio-state.edu ;;; XEmacs changes by Peter Arius arius@informatik.uni-erlangen.de -;; $Id: cperl-mode.el,v 1.10 1997/06/11 19:25:59 steve Exp $ +;; $Id: cperl-mode.el,v 1.11 1997/06/14 20:31:09 steve Exp $ ;;; To use this mode put the following into your .emacs file: @@ -713,7 +713,8 @@ (cperl-define-key "\e\C-q" 'cperl-indent-exp) ; Usually not bound ;;(cperl-define-key "\M-q" 'cperl-fill-paragraph) ;;(cperl-define-key "\e;" 'cperl-indent-for-comment) - (cperl-define-key 'delete 'cperl-electric-backspace) + (cperl-define-key 'backspace 'cperl-electric-backspace) + (cperl-define-key 'delete 'cperl-electric-delete) (cperl-define-key "\t" 'cperl-indent-command) ;; don't clobber the backspace binding: (cperl-define-key "\C-hf" 'cperl-info-on-command [(control h) f]) @@ -1548,7 +1549,23 @@ (defun cperl-electric-backspace (arg) "Backspace-untabify, or remove the whitespace inserted by an electric key." - (interactive "*P") + (interactive "*p") + (if (and cperl-auto-newline + (memq last-command '(cperl-electric-semi + cperl-electric-terminator + cperl-electric-lbrace)) + (memq (preceding-char) '(? ?\t ?\n))) + (let (p) + (if (eq last-command 'cperl-electric-lbrace) + (skip-chars-forward " \t\n")) + (setq p (point)) + (skip-chars-backward " \t\n") + (delete-region (point) p)) + (backward-delete-char-untabify arg))) + +(defun cperl-electric-delete (arg) + "Backspace-untabify, or remove the whitespace inserted by an electric key." + (interactive "*p") (if (and cperl-auto-newline (memq last-command '(cperl-electric-semi cperl-electric-terminator @@ -1561,8 +1578,8 @@ (skip-chars-backward " \t\n") (delete-region (point) p)) (if (fboundp 'backward-or-forward-delete-char) - (backward-or-forward-delete-char (prefix-numeric-value arg)) - (backward-delete-char-untabify (prefix-numeric-value arg))))) + (backward-or-forward-delete-char arg) + (backward-delete-char-untabify arg)))) (defun cperl-inside-parens-p () (condition-case () diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/icon.el --- a/lisp/modes/icon.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/icon.el Mon Aug 13 09:42:26 2007 +0200 @@ -46,8 +46,6 @@ (define-key icon-mode-map "\e\C-a" 'beginning-of-icon-defun) (define-key icon-mode-map "\e\C-e" 'end-of-icon-defun) (define-key icon-mode-map "\e\C-q" 'indent-icon-exp) -;; GDF - Don't rebind the DEL key -;; (define-key icon-mode-map "\177" 'backward-delete-char-untabify) (define-key icon-mode-map "\t" 'icon-indent-command)) (defvar icon-mode-syntax-table nil diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/ksh-mode.el --- a/lisp/modes/ksh-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/ksh-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -24,7 +24,7 @@ ;; LCD Archive Entry: ;; ksh-mode|Gary F. Ellison|Gary.F.Ellison@ATT.COM ;; |Mode for editing sh/ksh/bash scripts -;; |$Date: 1997/05/23 01:36:24 $|$Revision: 1.3 $|~/modes/ksh-mode.el.Z| +;; |$Date: 1997/06/14 20:31:11 $|$Revision: 1.4 $|~/modes/ksh-mode.el.Z| ;; Author: Gary F. Ellison ;; AT&T Laboratories @@ -33,10 +33,10 @@ ;; ;; Maintainer: Gary F. Ellison ;; Created: Fri Jun 19 -;; $Revision: 1.3 $ +;; $Revision: 1.4 $ ;; Keywords: shell, korn, bourne, sh, ksh, bash ;; -;; Delta On $Date: 1997/05/23 01:36:24 $ +;; Delta On $Date: 1997/06/14 20:31:11 $ ;; Last Modified By: Gary Ellison ;; Last Modified On: Mon Sep 11 12:26:47 1995 ;; Update Count : 35 @@ -231,7 +231,7 @@ ;; Conception of this mode. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconst ksh-mode-version "$Revision: 1.3 $" +(defconst ksh-mode-version "$Revision: 1.4 $" "*Version numbers of this version of ksh-mode") ;; @@ -459,7 +459,6 @@ (setq ksh-mode-map (make-sparse-keymap)) (define-key ksh-mode-map "\t" 'ksh-indent-command) ;; (define-key ksh-mode-map "\t" 'ksh-indent-line) -;; (define-key ksh-mode-map "\177" 'backward-delete-char-untabify) (define-key ksh-mode-map "\C-j" 'reindent-then-newline-and-indent) (define-key ksh-mode-map "\e\t" 'ksh-complete-symbol) (define-key ksh-mode-map "\C-c\t" 'ksh-completion-init-and-pickup) @@ -468,7 +467,7 @@ ;;;###autoload (defun ksh-mode () - "ksh-mode $Revision: 1.3 $ - Major mode for editing (Bourne, Korn or Bourne again) + "ksh-mode $Revision: 1.4 $ - Major mode for editing (Bourne, Korn or Bourne again) shell scripts. Special key bindings and commands: \\{ksh-mode-map} diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/lisp-mode.el --- a/lisp/modes/lisp-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/lisp-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -202,9 +202,6 @@ ;; XEmacs changes (set-keymap-name shared-lisp-mode-map 'shared-lisp-mode-map) (define-key shared-lisp-mode-map "\M-;" 'lisp-indent-for-comment) -;; GDF - don't rebind the DEL key -;; (define-key shared-lisp-mode-map "\177" 'backward-delete-char-untabify) - (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)) (defvar emacs-lisp-mode-map () @@ -713,6 +710,10 @@ (put 'catch 'lisp-indent-function 1) (put 'condition-case 'lisp-indent-function 2) (put 'unwind-protect 'lisp-indent-function 1) +(put 'save-current-buffer 'lisp-indent-function 0) +(put 'with-current-buffer 'lisp-indent-function 1) +(put 'with-temp-file 'lisp-indent-function 1) +(put 'with-output-to-string 'lisp-indent-function 0) (put 'with-output-to-temp-buffer 'lisp-indent-function 1) (defun indent-sexp (&optional endpos) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/make-mode.el --- a/lisp/modes/make-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/make-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -1140,7 +1140,6 @@ (setq buffer-read-only t)) (defun makefile-browse (targets macros) - (interactive) (if (zerop (+ (length targets) (length macros))) (progn (beep) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/pascal.el --- a/lisp/modes/pascal.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/pascal.el Mon Aug 13 09:42:26 2007 +0200 @@ -88,8 +88,6 @@ (define-key pascal-mode-map "\t" 'electric-pascal-tab) (define-key pascal-mode-map "\M-\t" 'pascal-complete-word) (define-key pascal-mode-map "\M-?" 'pascal-show-completions) -;; GDF - don't rebind the delete key. -;; (define-key pascal-mode-map "\177" 'backward-delete-char-untabify) (define-key pascal-mode-map "\M-\C-h" 'pascal-mark-defun) (define-key pascal-mode-map "\C-c\C-b" 'pascal-insert-block) (define-key pascal-mode-map "\M-*" 'pascal-star-comment) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/perl-mode.el --- a/lisp/modes/perl-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/perl-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -120,8 +120,6 @@ (define-key perl-mode-map "\e\C-e" 'perl-end-of-function) (define-key perl-mode-map "\e\C-h" 'mark-perl-function) (define-key perl-mode-map "\e\C-q" 'indent-perl-exp) -;; GDF - Don't rebind the delete key -;; (define-key perl-mode-map "\177" 'backward-delete-char-untabify) (define-key perl-mode-map "\t" 'perl-indent-command)) (autoload 'c-macro-expand "cmacexp" diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/python-mode.el --- a/lisp/modes/python-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/python-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -304,8 +304,7 @@ ("\C-c\C-c" . py-execute-buffer) ("\C-c|" . py-execute-region) ("\C-c!" . py-shell) -;; GDF - Don't rebind the delete key -;; ("\177" . py-delete-char) + ('backspace . py-delete-char) ("\n" . py-newline-and-indent) ("\C-c:" . py-guess-indent-offset) ("\C-c\t" . py-indent-region) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/scheme.el --- a/lisp/modes/scheme.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/scheme.el Mon Aug 13 09:42:26 2007 +0200 @@ -121,8 +121,6 @@ (defun scheme-mode-commands (map) (define-key map "\t" 'scheme-indent-line) -;; GDF - Don't rebind the delete key -;; (define-key map "\177" 'backward-delete-char-untabify) (define-key map "\e\C-q" 'scheme-indent-sexp)) (defvar scheme-mode-map nil) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/simula.el --- a/lisp/modes/simula.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/simula.el Mon Aug 13 09:42:26 2007 +0200 @@ -123,8 +123,6 @@ (define-key simula-mode-map "\C-c\C-n" 'simula-next-statement) ;(define-key simula-mode-map "\C-c\C-g" 'simula-goto-definition) ;(define-key simula-mode-map "\C-c\C-h" 'simula-standard-help) -;; GDF - Don't mess with DEL -;; (define-key simula-mode-map "\177" 'backward-delete-char-untabify) (define-key simula-mode-map ":" 'simula-electric-label) (define-key simula-mode-map "\t" 'simula-indent-command)) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/tcl.el --- a/lisp/modes/tcl.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/tcl.el Mon Aug 13 09:42:26 2007 +0200 @@ -565,8 +565,6 @@ ;; FIXME. (define-key tcl-mode-map "\e\C-h" 'tcl-mark-defun) (define-key tcl-mode-map "\e\C-q" 'indent-tcl-exp) -;; GDF - Don't mess with the DEL key -;; (define-key tcl-mode-map "\177" 'backward-delete-char-untabify) (define-key tcl-mode-map "\t" 'tcl-indent-command) (define-key tcl-mode-map "\M-;" 'tcl-indent-for-comment) (define-key tcl-mode-map "\M-\C-x" 'tcl-eval-defun) @@ -591,8 +589,6 @@ 'comint-dynamic-list-filename-completions) (define-key inferior-tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun) (define-key inferior-tcl-mode-map "\e\C-e" 'tcl-end-of-defun) -;; GDF - Don't mess with the DEL key -;; (define-key inferior-tcl-mode-map "\177" 'backward-delete-char-untabify) (define-key inferior-tcl-mode-map "\M-\C-x" 'tcl-eval-defun) (define-key inferior-tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report) (define-key inferior-tcl-mode-map "\C-c\C-i" 'tcl-help-on-word) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/verilog-mode.el --- a/lisp/modes/verilog-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/verilog-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -1,6 +1,6 @@ ;;; verilog-mode.el --- major mode for editing verilog source in Emacs ;; -;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.5 1997/05/29 23:49:56 steve Exp $ +;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.6 1997/06/14 20:31:18 steve Exp $ ;; Copyright (C) 1996 Free Software Foundation, Inc. @@ -70,7 +70,7 @@ (provide 'verilog-mode) ;; This variable will always hold the version number of the mode -(defconst verilog-mode-version "$$Revision: 1.5 $$" +(defconst verilog-mode-version "$$Revision: 1.6 $$" "Version of this verilog mode.") ;; @@ -264,8 +264,6 @@ (define-key verilog-mode-map "\M-\C-f" 'electric-verilog-forward-sexp) (define-key verilog-mode-map "\M-\r" (function (lambda () (interactive) (electric-verilog-terminate-line 1)))) -;; GDF - Leave the DEL key alone -;; (define-key verilog-mode-map "\177" 'backward-delete-char-untabify) (define-key verilog-mode-map "\M-\t" 'verilog-complete-word) (define-key verilog-mode-map "\M-?" 'verilog-show-completions) (define-key verilog-mode-map "\M-\C-h" 'verilog-mark-defun) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/vhdl-mode.el --- a/lisp/modes/vhdl-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/vhdl-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -7,8 +7,8 @@ ;; Author: Rodney J. Whitby ;; Maintainer: Rodney J. Whitby ;; Created: June 1994, adapted from cc-mode.el 4.29 by Barry A. Warsaw. -;; Version: $Revision: 1.4 $ -;; Last Modified: $Date: 1997/06/06 00:57:20 $ +;; Version: $Revision: 1.5 $ +;; Last Modified: $Date: 1997/06/14 20:31:18 $ ;; Keywords: languages VHDL ;; Archive: ftp.eda.com.au:/pub/emacs/vhdl-mode.tar.gz @@ -69,7 +69,7 @@ ;; LCD Archive Entry: ;; vhdl-mode.el|Rodney J. Whitby|rwhitby@asc.corp.mot.com ;; |Major mode for editing VHDL code -;; |$Date: 1997/06/06 00:57:20 $|$Revision: 1.4 $ +;; |$Date: 1997/06/14 20:31:18 $|$Revision: 1.5 $ ;; |ftp.eda.com.au:/pub/emacs/vhdl-mode.tar.gz @@ -347,8 +347,6 @@ (define-key vhdl-mode-map "\M-\C-h" 'vhdl-mark-defun) (define-key vhdl-mode-map "\M-\C-q" 'vhdl-indent-sexp) (define-key vhdl-mode-map "\t" 'vhdl-indent-command) -;; GDF - leave the DEL key alone! -;; (define-key vhdl-mode-map "\177" 'backward-delete-char-untabify) ;; these are new keybindings, with no counterpart to BOCM (define-key vhdl-mode-map "\C-c\C-b" 'vhdl-submit-bug-report) (define-key vhdl-mode-map "\C-c\C-c" 'comment-region) @@ -540,7 +538,7 @@ ;;;###autoload (defun vhdl-mode () "Major mode for editing VHDL code. -vhdl-mode $Revision: 1.4 $ +vhdl-mode $Revision: 1.5 $ To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a vhdl-mode buffer. This automatically sets up a mail buffer with version information already added. You just need to add a description of the @@ -2594,7 +2592,7 @@ ;; Defuns for submitting bug reports: -(defconst vhdl-version "$Revision: 1.4 $" +(defconst vhdl-version "$Revision: 1.5 $" "vhdl-mode version number.") (defconst vhdl-mode-help-address "rwhitby@asc.corp.mot.com" "Address accepting submission of bug reports.") diff -r 1c55655d6702 -r 28f395d8dc7a lisp/modes/vrml-mode.el --- a/lisp/modes/vrml-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/modes/vrml-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -98,8 +98,6 @@ (define-key vrml-mode-map "{" 'vrml-electric-brace) (define-key vrml-mode-map "}" 'vrml-electric-brace) (define-key vrml-mode-map "\e\C-q" 'indent-vrml-exp) -;; GDF - why does EVERYONE want to rebind the DEL key? *sigh* -;; (define-key vrml-mode-map "\177" 'backward-delete-char-untabify) (define-key vrml-mode-map "\t" 'vrml-indent-command) (define-key vrml-mode-map "\M-;" 'vrml-indent-for-comment) )) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/chinese-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/chinese.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/cyrillic-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/cyrillic.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/european-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/greek-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/ipa-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/japanese-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/korean-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/thai-hooks.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/mule/thai.el diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/add-log.el --- a/lisp/packages/add-log.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/add-log.el Mon Aug 13 09:42:26 2007 +0200 @@ -32,18 +32,17 @@ (defgroup change-log nil "Change log maintenance" :group 'tools + :group 'maint :prefix "change-log-" :prefix "add-log-") -;;;###autoload (defcustom change-log-default-name nil "*Name of a change log file for \\[add-change-log-entry]." :type '(choice (const :tag "default" nil) string) :group 'change-log) -;;;###autoload (defcustom add-log-current-defun-function nil "\ *If non-nil, function to guess name of current function from surrounding text. @@ -52,7 +51,6 @@ :type 'boolean :group 'change-log) -;;;###autoload (defcustom add-log-full-name nil "*Full name of user, for inclusion in ChangeLog daily headers. This defaults to the value returned by the `user-full-name' function." @@ -60,11 +58,6 @@ string) :group 'change-log) -;; XEmacs; -;; So that the dump-time value doesn't go into loaddefs.el with the autoload. -(or add-log-full-name (setq add-log-full-name (user-full-name))) - -;;;###autoload (defcustom add-log-mailing-address nil "*Electronic mail address of user, for inclusion in ChangeLog daily headers. This defaults to the value of `user-mail-address'." @@ -72,10 +65,16 @@ string) :group 'change-log) -;; XEmacs: -;; So that the dump-time value doesn't go into loaddefs.el with the autoload. -(or add-log-mailing-address - (setq add-log-mailing-address (user-mail-address))) +(defcustom add-log-time-format 'iso8601-time-string + "*Function that defines the time format. +For example, `iso8601-time-string' (time in international ISO 8601 format) +and `current-time-string' are valid values." + :type '(radio (const :tag "International ISO 8601 format" iso8601-time-string) + (const :tag "Old format, as returned by `current-time-string'" + current-time-string) + (function :tag "Other")) + :group 'change-log) + (defvar change-log-font-lock-keywords '(;; @@ -130,6 +129,20 @@ (t "%c%02d")) sign hh mm ss))) +(defun iso8601-time-string () + (if change-log-time-zone-rule + (let ((tz (getenv "TZ")) + (now (current-time))) + (unwind-protect + (progn + (set-time-zone-rule + change-log-time-zone-rule) + (concat + (format-time-string "%Y-%m-%d " now) + (iso8601-time-zone now))) + (set-time-zone-rule tz))) + (format-time-string "%Y-%m-%d"))) + (defun change-log-name () (or change-log-default-name (if (eq system-type 'vax-vms) @@ -211,6 +224,7 @@ (set (make-local-variable 'change-log-default-name) file-name) file-name) + ;;;###autoload (defun add-change-log-entry (&optional whoami file-name other-window new-entry) "Find change log file and add an entry for today. @@ -259,18 +273,7 @@ (change-log-mode)) (undo-boundary) (goto-char (point-min)) - (let ((new-entry (concat (if change-log-time-zone-rule - (let ((tz (getenv "TZ")) - (now (current-time))) - (unwind-protect - (progn - (set-time-zone-rule - change-log-time-zone-rule) - (concat - (format-time-string "%Y-%m-%d " now) - (iso8601-time-zone now))) - (set-time-zone-rule tz))) - (format-time-string "%Y-%m-%d")) + (let ((new-entry (concat (funcall add-log-time-format) " " add-log-full-name " <" add-log-mailing-address ">"))) (if (looking-at (regexp-quote new-entry)) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/bookmark.el --- a/lisp/packages/bookmark.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/bookmark.el Mon Aug 13 09:42:26 2007 +0200 @@ -1443,7 +1443,8 @@ (define-key bookmark-bmenu-mode-map " " 'next-line) (define-key bookmark-bmenu-mode-map "n" 'next-line) (define-key bookmark-bmenu-mode-map "p" 'previous-line) - (define-key bookmark-bmenu-mode-map "\177" 'bookmark-bmenu-backup-unmark) + (define-key bookmark-bmenu-mode-map 'backspace 'bookmark-bmenu-backup-unmark) + (define-key bookmark-bmenu-mode-map 'delete 'bookmark-bmenu-backup-unmark) (define-key bookmark-bmenu-mode-map "?" 'describe-mode) (define-key bookmark-bmenu-mode-map "u" 'bookmark-bmenu-unmark) (define-key bookmark-bmenu-mode-map "m" 'bookmark-bmenu-mark) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/buff-menu.el --- a/lisp/packages/buff-menu.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/buff-menu.el Mon Aug 13 09:42:26 2007 +0200 @@ -88,7 +88,8 @@ (define-key Buffer-menu-mode-map " " 'next-line) (define-key Buffer-menu-mode-map "n" 'next-line) (define-key Buffer-menu-mode-map "p" 'previous-line) - (define-key Buffer-menu-mode-map "\177" 'Buffer-menu-backup-unmark) + (define-key Buffer-menu-mode-map 'backspace 'Buffer-menu-backup-unmark) + (define-key Buffer-menu-mode-map 'delete 'Buffer-menu-backup-unmark) (define-key Buffer-menu-mode-map "~" 'Buffer-menu-not-modified) (define-key Buffer-menu-mode-map "?" 'describe-mode) (define-key Buffer-menu-mode-map "u" 'Buffer-menu-unmark) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/chistory.el --- a/lisp/packages/chistory.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/chistory.el Mon Aug 13 09:42:26 2007 +0200 @@ -142,7 +142,8 @@ (define-key command-history-map "x" 'command-history-repeat) (define-key command-history-map "\n" 'next-line) (define-key command-history-map "\r" 'next-line) - (define-key command-history-map "\177" 'previous-line)) + (define-key command-history-map 'backspace 'previous-line) + (define-key command-history-map 'delete 'previous-line)) (defun command-history-repeat () "Repeat the command shown on the current line. diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/diff.el --- a/lisp/packages/diff.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/diff.el Mon Aug 13 09:42:26 2007 +0200 @@ -2,7 +2,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: diff.el -;; Version: $Revision: 1.5 $ +;; Version: $Revision: 1.6 $ ;; Author: This file is based on diff.el by ;; sunpitt!wpmstr!fbresz@Sun.COM 1/27/89. ;; It has been completely rewritten in July 1994 by @@ -125,7 +125,8 @@ (define-key diff-mode-map "w" 'diff-find-file-other-frame) (define-key diff-mode-map "\C-c\C-c" 'diff-find-file-other-window) (define-key diff-mode-map " " 'diff-advertised-scroll-up) - (define-key diff-mode-map "\177" 'diff-advertised-scroll-down) + (define-key diff-mode-map 'backspace 'diff-advertised-scroll-down) + (define-key diff-mode-map 'delete 'diff-advertised-scroll-down) (define-key diff-mode-map "\C-n" 'diff-next-line) (define-key diff-mode-map "\C-p" 'diff-previous-line) (define-key diff-mode-map "\M->" 'diff-end-of-buffer) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/hexl.el --- a/lisp/packages/hexl.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/hexl.el Mon Aug 13 09:42:26 2007 +0200 @@ -697,8 +697,10 @@ (define-key hexl-mode-map [deletechar] 'undefined) (define-key hexl-mode-map [deleteline] 'undefined) (define-key hexl-mode-map [insertline] 'undefined) + (define-key hexl-mode-map [(shift backspace)] 'undefined) (define-key hexl-mode-map [(shift delete)] 'undefined) - (define-key hexl-mode-map "\177" 'undefined) + (define-key hexl-mode-map 'backspace 'undefined) + (define-key hexl-mode-map 'delete 'undefined) (define-key hexl-mode-map "\C-a" 'hexl-beginning-of-line) (define-key hexl-mode-map "\C-b" 'hexl-backward-char) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/hyper-apropos.el --- a/lisp/packages/hyper-apropos.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/hyper-apropos.el Mon Aug 13 09:42:26 2007 +0200 @@ -55,18 +55,20 @@ ;; added support for function aliases, made programmer's apropos be the ;; default, various other hacking. ;; Massive changes by Christoph Wedler +;; Some changes for XEmacs 20.3 by hniksic ;;; Code: -(or (fboundp 'pprint) - (progn (autoload 'pp "pp") - (fset 'pprint 'pp))) -;;(require 'tags "etags") +(require 'pp) (defgroup hyper-apropos nil "Hypertext emacs lisp documentation interface." :prefix "hypropos-" - :group 'docs) + :group 'docs + :group 'lisp + :group 'tools + :group 'help + :group 'matching) ;;;###autoload (defcustom hypropos-show-brief-docs t @@ -75,6 +77,15 @@ :type 'boolean :group 'hyper-apropos) +;; I changed this to true because I think it's more useful this way. --ben + +(defcustom hypropos-programming-apropos t + "*If non-nil, then `hyper-apropos' takes a bit longer and generates more +output. If nil, then only functions that are interactive and variables that +are user variables are found by `hyper-apropos'." + :type 'boolean + :group 'hyper-apropos) + (defcustom hypropos-shrink-window nil "*If non-nil, shrink *Hyper Help* buffer if possible." :type 'boolean @@ -85,133 +96,105 @@ :type 'boolean :group 'hyper-apropos) -;; I changed this to true because I think it's more useful this way. --ben + +(defgroup hypropos-faces nil + "Faces defined by hyper-apropos." + :prefix "hypropos-" + :group 'hyper-apropos) + + +(defface hypropos-documentation '((((class color) (background light)) + (:foreground "darkred")) + (((class color) (background dark)) + (:foreground "gray90"))) + "Hyper-apropos documentation." + :group 'hypropos-faces) -(defcustom hypropos-programming-apropos t - "*If non-nil, then `hyper-apropos' takes a bit longer and generates more -output. If nil, then only functions that are interactive and variables that -are user variables are found by `hyper-apropos'." - :type 'boolean - :group 'hyper-apropos) +(defface hypropos-hyperlink '((((class color) (background light)) + (:foreground "blue4")) + (((class color) (background dark)) + (:foreground "lightseagreen")) + (t + (:bold t))) + "Hyper-apropos hyperlinks." + :group 'hypropos-faces) + +(defface hypropos-major-heading '((t (:bold t))) + "Hyper-apropos major heading." + :group 'hypropos-faces) + +(defface hypropos-section-heading '((t (:bold t :italic t))) + "Hyper-apropos section heading." + :group 'hypropos-faces) + +(defface hypropos-heading '((t (:bold t))) + "Hyper-apropos heading." + :group 'hypropos-faces) + +(defface hypropos-warning '((t (:bold t :foreground "red"))) + "Hyper-apropos warning." + :group 'hypropos-faces) + + +;;; Internal variables below this point (defvar hypropos-ref-buffer) (defvar hypropos-prev-wconfig) -;; #### - move this to subr.el -(or (fboundp 'event-buffer) - (defun event-buffer (event) - "Returns the buffer associated with event, or nil." - (let ((win (event-window event))) - (and win (window-buffer win))))) - -(defmacro eval-in-buffer (buffer &rest forms) - "Evaluate FORMS in BUFFER." - (` (let ((_unwind_buf_ (current-buffer))) - (unwind-protect - (progn (set-buffer (, buffer)) - (,@ forms)) - (set-buffer _unwind_buf_))))) -(put 'eval-in-buffer 'lisp-indent-function 'defun) - -;; #### - move to faces.el -(defmacro init-face (face &rest init-forms) - "Make a FACE if it doesn't already exist. Then if it does not differ from -the default face, execute INIT-FORMS to initialize the face. While the -init-forms are executing, the symbol `this' is bound to the face-object -being initialized." - (` (let ((this (make-face (, face)))) ; harmless if the face is already there - (or (face-differs-from-default-p this) - (, (cons 'progn init-forms)))))) -(put 'init-face 'lisp-indent-function 'defun) - -(init-face 'hyperlink - (copy-face 'bold this) - ;;(set-face-underline-p this nil) -- dog slow and ugly - (condition-case nil - (set-face-foreground this "blue") - (error nil))) -(init-face 'documentation - (let* ((ff-instance (face-font-instance 'default)) - (ff (and ff-instance (font-instance-name ff-instance)))) - (cond ((and ff (string-match "courier" ff)) - ;; too wide unless you shrink it - ;; (copy-face 'italic this) fugly. - ;; (make-face-smaller this) fugly. - )) - (condition-case nil - (set-face-foreground this "firebrick") - (error (copy-face 'italic this))))) - -;; mucking with the sizes of fonts (perhaps with the exception of courier or -;; misc) is a generally losing thing to do. Changing the size of 'clean' -;; really loses, for instance... - -(init-face 'major-heading - (copy-face 'bold this) - (make-face-larger this) - (make-face-larger this)) -(init-face 'section-heading - (copy-face 'bold this) - (make-face-larger this)) -(init-face 'heading - (copy-face 'bold this)) -(init-face 'standout - (copy-face 'italic this)) - -(init-face 'warning - (copy-face 'bold this) - (and (eq (device-type) 'x) - (eq (device-class) 'color) - (set-face-foreground this "red"))) - -(defvar hypropos-help-map (let ((map (make-sparse-keymap))) - (suppress-keymap map) - (set-keymap-name map 'hypropos-help-map) - ;; movement - (define-key map " " 'scroll-up) - (define-key map "b" 'scroll-down) - (define-key map [delete] 'scroll-down) - (define-key map [backspace] 'scroll-down) - (define-key map "/" 'isearch-forward) - (define-key map "?" 'isearch-backward) - ;; follow links - (define-key map "\r" 'hypropos-get-doc) - (define-key map "s" 'hypropos-set-variable) - (define-key map "t" 'hypropos-find-tag) - (define-key map "l" 'hypropos-last-help) - (define-key map [button2] 'hypropos-mouse-get-doc) - (define-key map [button3] 'hypropos-popup-menu) - ;; for the totally hardcore... - (define-key map "D" 'hypropos-disassemble) - ;; administrativa - (define-key map "a" 'hyper-apropos) - (define-key map "n" 'hyper-apropos) - (define-key map "q" 'hypropos-quit) - map - ) +(defvar hypropos-help-map + (let ((map (make-sparse-keymap))) + (suppress-keymap map) + (set-keymap-name map 'hypropos-help-map) + ;; movement + (define-key map " " 'scroll-up) + (define-key map "b" 'scroll-down) + (define-key map [delete] 'scroll-down) + (define-key map [backspace] 'scroll-down) + (define-key map "/" 'isearch-forward) + (define-key map "?" 'isearch-backward) + ;; follow links + (define-key map [return] 'hypropos-get-doc) + (define-key map "s" 'hypropos-set-variable) + (define-key map "t" 'hypropos-find-tag) + (define-key map "l" 'hypropos-last-help) + (define-key map "c" 'hypropos-customize-variable) + (define-key map [button2] 'hypropos-mouse-get-doc) + (define-key map [button3] 'hypropos-popup-menu) + ;; for the totally hardcore... + (define-key map "D" 'hypropos-disassemble) + ;; administrativa + (define-key map "a" 'hyper-apropos) + (define-key map "n" 'hyper-apropos) + (define-key map "q" 'hypropos-quit) + map) "Keybindings for both the *Hyper Help* buffer and the *Hyper Apropos* buffer") -(defvar hypropos-map (let ((map (make-sparse-keymap))) - (set-keymap-name map 'hypropos-map) - (set-keymap-parents map (list hypropos-help-map)) - ;; slightly different scrolling... - (define-key map " " 'hypropos-scroll-up) - (define-key map "b" 'hypropos-scroll-down) - (define-key map [delete] 'hypropos-scroll-down) - (define-key map [backspace] 'hypropos-scroll-down) - ;; act on the current line... - (define-key map "w" 'hypropos-where-is) - (define-key map "i" 'hypropos-invoke-fn) - (define-key map "s" 'hypropos-set-variable) - ;; more administrativa... - (define-key map "P" 'hypropos-toggle-programming-flag) - (define-key map "k" 'hypropos-add-keyword) - (define-key map "e" 'hypropos-eliminate-keyword) - map - ) +(defvar hypropos-map + (let ((map (make-sparse-keymap))) + (set-keymap-name map 'hypropos-map) + (set-keymap-parents map (list hypropos-help-map)) + ;; slightly different scrolling... + (define-key map " " 'hypropos-scroll-up) + (define-key map "b" 'hypropos-scroll-down) + (define-key map [delete] 'hypropos-scroll-down) + (define-key map [backspace] 'hypropos-scroll-down) + ;; act on the current line... + (define-key map "w" 'hypropos-where-is) + (define-key map "i" 'hypropos-invoke-fn) + (define-key map "s" 'hypropos-set-variable) + ;; more administrativa... + (define-key map "P" 'hypropos-toggle-programming-flag) + (define-key map "k" 'hypropos-add-keyword) + (define-key map "e" 'hypropos-eliminate-keyword) + map) "Keybindings for the *Hyper Apropos* buffer. This map inherits from `hypropos-help-map.'") +;;(defvar hypropos-mousable-keymap +;; (let ((map (make-sparse-keymap))) +;; (define-key map [button2] 'hypropos-mouse-get-doc) +;; map)) + (defvar hyper-apropos-mode-hook nil "*User function run after hyper-apropos mode initialization. Usage: \(setq hyper-apropos-mode-hook '(lambda () ... your init forms ...)).") @@ -248,29 +231,32 @@ (hypropos-toggle-programming-flag) (message "Using last search results")) (error "Be more specific...")) - (let (flist vlist) - (set-buffer (get-buffer-create hypropos-apropos-buf)) - (setq buffer-read-only nil) - (erase-buffer) - (if toggle-apropos - (set (make-local-variable 'hypropos-programming-apropos) - (not (default-value 'hypropos-programming-apropos)))) - (if (not hypropos-programming-apropos) - (setq flist (apropos-internal regexp 'commandp) - vlist (apropos-internal regexp 'user-variable-p)) - ;; #### - add obsolete functions/variables here... - ;; #### - 'variables' may be unbound !!! - (setq flist (apropos-internal regexp 'fboundp) - vlist (apropos-internal regexp 'boundp))) - (insert-face (format "Apropos search for: %S\n\n" regexp) 'major-heading) - (insert-face "* = command (M-x) or user-variable.\n" 'documentation) - (insert-face "a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n" 'documentation) - (insert-face "Functions and Macros:\n\n" 'major-heading) + (set-buffer (get-buffer-create hypropos-apropos-buf)) + (setq buffer-read-only nil) + (erase-buffer) + (if toggle-apropos + (set (make-local-variable 'hypropos-programming-apropos) + (not (default-value 'hypropos-programming-apropos)))) + (let ((flist (apropos-internal regexp + (if hypropos-programming-apropos + #'fboundp + #'commandp))) + (vlist (apropos-internal regexp + (if hypropos-programming-apropos + #'boundp + #'user-variable-p)))) + (insert-face (format "Apropos search for: %S\n\n" regexp) + 'hypropos-major-heading) + (insert-face "* = command (M-x) or user-variable.\n" + 'hypropos-documentation) + (insert-face "\ +a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n" + 'hypropos-documentation) + (insert-face "Functions and Macros:\n\n" 'hypropos-major-heading) (hypropos-grok-functions flist) - (insert-face "\n\nVariables and Constants:\n\n" 'major-heading) + (insert-face "\n\nVariables and Constants:\n\n" 'hypropos-major-heading) (hypropos-grok-variables vlist) - (goto-char (point-min)) - )) + (goto-char (point-min)))) (switch-to-buffer hypropos-apropos-buf) (hyper-apropos-mode regexp)) @@ -283,8 +269,8 @@ (hyper-apropos hypropos-last-regexp nil)) (defun hypropos-grok-functions (fns) - (let (fn bind doc type) - (while (setq fn (car fns)) + (let (bind doc type) + (dolist (fn fns) (setq bind (symbol-function fn) type (cond ((subrp bind) ?i) ((compiled-function-p bind) ?b) @@ -293,36 +279,38 @@ (lambda . ?l) (macro . ?m)))) ??)) - (t ? ))) + (t ?\ ))) (insert type (if (commandp fn) "* " " ")) - (insert-face (format "%-30S" fn) 'hyperlink) + (let ((e (insert-face (format "%S" fn) 'hypropos-hyperlink))) + (set-extent-property e 'mouse-face 'highlight)) + (insert-char ?\ (let ((l (- 30 (length (format "%S" fn))))) + (if (natnump l) l 0))) (and hypropos-show-brief-docs (setq doc (documentation fn)) (insert-face (if doc (concat " - " (substring doc 0 (string-match "\n" doc))) " Not documented.") - 'documentation)) - (insert ?\n) - (setq fns (cdr fns)) - ))) + 'hypropos-documentation)) + (insert ?\n)))) (defun hypropos-grok-variables (vars) - (let (var doc userp) - (while (setq var (car vars)) - (setq userp (user-variable-p var) - vars (cdr vars)) + (let (doc userp) + (dolist (var vars) + (setq userp (user-variable-p var)) (insert (if userp " * " " ")) - (insert-face (format "%-30S" var) 'hyperlink) + (let ((e (insert-face (format "%S" var) 'hypropos-hyperlink))) + (set-extent-property e 'mouse-face 'highlight)) + (insert-char ?\ (let ((l (- 30 (length (format "%S" var))))) + (if (natnump l) l 0))) (and hypropos-show-brief-docs (setq doc (documentation-property var 'variable-documentation)) (insert-face (if doc (concat " - " (substring doc (if userp 1 0) (string-match "\n" doc))) " - Not documented.") - 'documentation)) - (insert ?\n) - ))) + 'hypropos-documentation)) + (insert ?\n)))) ;; ---------------------------------------------------------------------- ;; @@ -361,7 +349,6 @@ modeline-buffer-identification (list (cons modeline-buffer-id-left-extent "Hyper Apropos: ") (cons modeline-buffer-id-right-extent (concat "\"" regexp "\"")))) - (setq mode-motion-hook 'mode-motion-highlight-line) (use-local-map hypropos-map) (run-hooks 'hyper-apropos-mode-hook)) @@ -547,29 +534,30 @@ (display-buffer hypropos-help-buf)))) (defun hypropos-insert-face (string &optional face) - "Insert STRING and fontify some parts with face `hyperlink'." + "Insert STRING and fontify some parts with face `hypropos-hyperlink'." (let ((beg (point)) end) - (insert-face string (or face 'documentation)) + (insert-face string (or face 'hypropos-documentation)) (setq end (point)) (goto-char beg) (while (re-search-forward "`\\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)'" end 'limit) - (set-extent-face (make-extent (match-beginning 1) (match-end 1)) - 'hyperlink)) + (let ((e (make-extent (match-beginning 1) (match-end 1)))) + (set-extent-face e 'hypropos-hyperlink) + (set-extent-property e 'mouse-face 'highlight)) (goto-char beg) (while (re-search-forward "M-x \\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)" end 'limit) - (set-extent-face (make-extent (match-beginning 1) (match-end 1)) - 'hyperlink)))) + (let ((e (make-extent (match-beginning 1) (match-end 1)))) + (set-extent-face e 'hypropos-hyperlink) + (set-extent-property e 'mouse-face 'highlight)))))) (defun hypropos-insert-keybinding (keys string) (if keys (insert " (" string " bound to \"" (mapconcat 'key-description - (sort keys #'(lambda (x y) - (< (length x) (length y)))) + (sort* keys #'< :key #'length) "\", \"") "\")\n"))) @@ -585,10 +573,10 @@ (aset desc 0 (upcase (aref desc 0))) ; capitalize (goto-char (point-max)) (newline 3) (delete-blank-lines) (newline 2) - (hypropos-insert-face desc 'section-heading)) + (hypropos-insert-face desc 'hypropos-section-heading)) (defun hypropos-insert-value (string symbol val) - (insert-face string 'heading) + (insert-face string 'hypropos-heading) (insert (if (symbol-value symbol) (if (or (null val) (eq val t) (integerp val)) (prog1 @@ -665,7 +653,7 @@ ;;(setq standard-output (current-buffer)) (setq buffer-read-only nil) (erase-buffer) - (insert-face (format "`%s'" symbol) 'major-heading) + (insert-face (format "`%s'" symbol) 'hypropos-major-heading) (insert (format " (buffer: %s, mode: %s)\n" (buffer-name hypropos-ref-buffer) local))) @@ -693,7 +681,10 @@ (bytecode . "compiled Lisp ") (autoload . "autoloaded Lisp ") (lambda . "Lisp ")))) - desc) + desc + (if (eq symtype 'autoload) + (format ", (autoloaded from \"%s\")" + (nth 1 newsym)))) local (current-local-map) global (current-global-map) obsolete (get symbol 'byte-obsolete-info) @@ -703,9 +694,6 @@ (goto-char (point-max)) (setq standard-output (current-buffer)) (hypropos-insert-section-heading alias-desc desc) - (and (eq symtype 'autoload) - (insert (format ", (autoloaded from \"%s\")" - (nth 1 newsym)))) (insert ":\n") (if local (hypropos-insert-keybinding @@ -721,9 +709,9 @@ (if (stringp (car obsolete)) (car obsolete) (format "use `%s' instead." (car obsolete)))) - 'warning)) + 'hypropos-warning)) (setq beg (point)) - (insert-face "arguments: " 'heading) + (insert-face "arguments: " 'hypropos-heading) (cond ((eq symtype 'lambda) (princ (or (nth 1 newsym) "()"))) ((eq symtype 'bytecode) @@ -738,7 +726,8 @@ (setq doc (substring doc 0 (match-beginning 0)))) ((and (eq symtype 'subr) (string-match - "[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)" + "\ +\[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)" doc)) (insert "(" (if (match-end 1) @@ -767,7 +756,9 @@ (and (local-variable-p newsym (current-buffer) t) 'auto-local)) - desc (concat (if (user-variable-p newsym) + desc (concat (and (get newsym 'custom-type) + "customizable ") + (if (user-variable-p newsym) "user variable" "variable") (cond ((eq symtype t) ", buffer-local") @@ -792,6 +783,15 @@ (goto-char (point-max)) (setq standard-output (current-buffer)) (hypropos-insert-section-heading alias-desc desc) + (when (and (user-variable-p newsym) + (get newsym 'custom-type)) + (let ((e (make-extent (point-at-bol) (point)))) + (set-extent-property e 'mouse-face 'highlight) + (set-extent-property e 'help-echo + (format "Customize %s" newsym)) + (set-extent-property + e 'hypropos-custom + `(lambda () (customize-variable (quote ,newsym)))))) (insert ":\n\n") (setq beg (point)) (if obsolete @@ -800,7 +800,7 @@ (if (stringp obsolete) obsolete (format "use `%s' instead." obsolete))) - 'warning)) + 'hypropos-warning)) ;; generally, the value of the variable is short and the ;; documentation of the variable long, so it's desirable ;; to see all of the value and the start of the @@ -811,12 +811,12 @@ (if (and (or (null local-str) (< (length local-str) 69)) (or (null global-str) (< (length global-str) 69))) ; 80 cols. docstrings assume this. - (progn (insert-face "value: " 'heading) + (progn (insert-face "value: " 'hypropos-heading) (insert (or local-str "is void")) (if (eq symtype t) (progn (insert "\n") - (insert-face "default value: " 'heading) + (insert-face "default value: " 'hypropos-heading) (insert (or global-str "is void")))) (insert "\n\n") (hypropos-insert-face doc)) @@ -831,7 +831,7 @@ (if local-str (progn (newline 3) (delete-blank-lines) (newline 1) - (insert-face "value: " 'heading) + (insert-face "value: " 'hypropos-heading) (if hypropos-prettyprint-long-values (condition-case nil (let ((pp-print-readably nil)) (pprint local)) @@ -840,7 +840,7 @@ (if global-str (progn (newline 3) (delete-blank-lines) (newline 1) - (insert-face "default value: " 'heading) + (insert-face "default value: " 'hypropos-heading) (if hypropos-prettyprint-long-values (condition-case nil (let ((pp-print-readably nil)) (pprint global)) @@ -875,23 +875,38 @@ (save-excursion (set-buffer hypropos-help-buf) (setq standard-output (current-buffer)) - (hypropos-insert-section-heading "Face:\n\n ") - (insert-face "ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789" + (hypropos-insert-section-heading + (concat "Face" + (when (get symbol 'face-defface-spec) + (let* ((str " (customizable)") + (e (make-extent 1 (length str) str))) + (set-extent-property e 'mouse-face 'highlight) + (set-extent-property e 'help-echo + (format "Customize %s" symbol)) + (set-extent-property e 'unique t) + (set-extent-property e 'duplicable t) + (set-extent-property + e 'hypropos-custom + `(lambda () (customize-face (quote ,symbol)))) + str)) + ":\n\n ")) + (insert-face "\ +ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789" 'hypropos-temp-face) (newline 2) - (insert-face " Font: " 'heading) + (insert-face " Font: " 'hypropos-heading) (insert (format (if (numberp (car font)) "(%s)\n" "%s\n") (and (cdr font) (font-instance-name (cdr font))))) - (insert-face " Foreground: " 'heading) + (insert-face " Foreground: " 'hypropos-heading) (insert (format (if (numberp (car fore)) "(%s)\n" "%s\n") (and (cdr fore) (color-instance-name (cdr fore))))) - (insert-face " Background: " 'heading) + (insert-face " Background: " 'hypropos-heading) (insert (format (if (numberp (car back)) "(%s)\n" "%s\n") (and (cdr back) (color-instance-name (cdr back))))) - (insert-face " Underline: " 'heading) + (insert-face " Underline: " 'hypropos-heading) (insert (format (if (numberp (car undl)) "(%s)\n" "%s\n") (cdr undl))) (if doc @@ -920,7 +935,7 @@ (setq symtype (cdr symtype)) (insert-face (concat " " (symbol-name (car symtype)) ": ") - 'heading) + 'hypropos-heading) (setq symtype (cdr symtype)) (indent-to 32) (insert (prin1-to-string (car symtype)) "\n")) @@ -944,54 +959,30 @@ different variables and functions. Common commands: \\{hypropos-help-map}" - (setq mode-motion-hook 'hypropos-highlight-lisp-symbol - buffer-read-only t + (setq buffer-read-only t major-mode 'hyper-help-mode mode-name "Hyper-Help") (set-syntax-table emacs-lisp-mode-syntax-table) + (hypropos-highlightify) (use-local-map hypropos-help-map)) -(defun hypropos-highlight-lisp-symbol (event) - ;; mostly copied from mode-motion-highlight-internal - (let* ((window (event-window event)) - (buffer (and window (window-buffer window))) - (point (and buffer (event-point event))) - st en sym highlight-p) - (if buffer - (progn - (set-buffer buffer) - (if point - (save-excursion - (goto-char point) - (setq st (save-excursion - (skip-syntax-backward "w_") - (skip-chars-forward "`") - (point)) - en (save-excursion - (goto-char st) - (skip-syntax-forward "w_") - (skip-chars-backward ".") - (point)) - sym (and (not (eq st en)) - (intern-soft (buffer-substring st en))) - highlight-p (and sym - (or (boundp sym) - (fboundp sym)))) - (if highlight-p - (if mode-motion-extent - (set-extent-endpoints mode-motion-extent st en) - (setq mode-motion-extent (make-extent st en)) - (set-extent-property mode-motion-extent 'highlight t)) - (and mode-motion-extent - (progn (delete-extent mode-motion-extent) - (setq mode-motion-extent nil))) - )) - ;; not over text; zero the extent. - (if (and mode-motion-extent (extent-buffer mode-motion-extent) - (not (eq (extent-start-position mode-motion-extent) - (extent-end-position mode-motion-extent)))) - (set-extent-endpoints mode-motion-extent 1 1))))))) +;; ---------------------------------------------------------------------- ;; +(defun hypropos-highlightify () + (save-excursion + (goto-char (point-min)) + (let ((st (point-min)) + sym) + (while (not (eobp)) + (if (zerop (skip-syntax-forward "w_")) + (forward-char 1) + (and (> (- (point) st) 3) + (setq sym (intern-soft (buffer-substring st (point)))) + (or (boundp sym) + (fboundp sym)) + (set-extent-property (make-extent st (point)) + 'mouse-face 'highlight))) + (setq st (point)))))) ;; ---------------------------------------------------------------------- ;; @@ -1029,11 +1020,14 @@ "Get the documentation for the symbol the mouse is on." (interactive "e") (mouse-set-point event) - (save-excursion - (let ((symbol (hypropos-this-symbol))) - (if symbol - (hypropos-get-doc symbol) - (error "Click on a symbol"))))) + (let ((e (extent-at (point) nil 'hypropos-custom))) + (if e + (funcall (extent-property e 'hypropos-custom)) + (save-excursion + (let ((symbol (hypropos-this-symbol))) + (if symbol + (hypropos-get-doc symbol) + (error "Click on a symbol"))))))) ;; ---------------------------------------------------------------------- ;; @@ -1157,6 +1151,11 @@ str)) (error nil))))))) +(defun hypropos-customize-variable () + (interactive) + (let ((var (hypropos-this-symbol))) + (customize-variable var))) + ;; ---------------------------------------------------------------------- ;; (defun hypropos-find-tag (&optional tag-name) @@ -1223,6 +1222,9 @@ (notjunk (not (null sym))) (command-p (if (commandp sym) t)) (variable-p (and sym (boundp sym))) + (customizable-p (and variable-p + (get sym 'custom-type) + t)) (function-p (fboundp sym)) (apropos-p (eq 'hyper-apropos-mode (save-excursion (set-buffer (event-buffer event)) @@ -1234,6 +1236,8 @@ (list (concat "Hyper-Help: " name) (vector "Display documentation" 'hypropos-get-doc notjunk) (vector "Set variable" 'hypropos-set-variable variable-p) + (vector "Customize variable" 'hypropos-customize-variable + customizable-p) (vector "Show keys for" 'hypropos-where-is command-p) (vector "Invoke command" 'hypropos-invoke-fn command-p) (vector "Find tag" 'hypropos-find-tag notjunk) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/info.el --- a/lisp/packages/info.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/info.el Mon Aug 13 09:42:26 2007 +0200 @@ -2077,10 +2077,9 @@ (define-key Info-mode-map "\t" 'Info-next-reference) (define-key Info-mode-map "\e\t" 'Info-prev-reference) (define-key Info-mode-map "\r" 'Info-follow-nearest-node) - (define-key Info-mode-map "\177" 'Info-scroll-prev) ;; XEmacs addition - (define-key Info-mode-map [backspace] 'Info-scroll-prev) - + (define-key Info-mode-map 'backspace 'Info-scroll-prev) + (define-key Info-mode-map 'delete 'Info-scroll-prev) (define-key Info-mode-map 'button2 'Info-follow-clicked-node) (define-key Info-mode-map 'button3 'Info-select-node-menu)) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/ispell.el --- a/lisp/packages/ispell.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/ispell.el Mon Aug 13 09:42:26 2007 +0200 @@ -1066,13 +1066,15 @@ max-lines)) ;; not so good if there are over 20 or 30 options, but then, if ;; there are that many you don't want to scan them all anyway... + (when (integerp count) + (setq count (int-char count))) (while (memq count command-characters) ; skip command characters. - (setq count (1+ count) + (setq count (int-char (1+ count)) skipped (1+ skipped))) (insert "(" count ") " (car choices) " ") (setq choices (cdr choices) count (1+ count))) - (setq count (- count ?0 skipped))) + (setq count (int-char (- count ?0 skipped)))) ;; Assure word is visible (if (not (pos-visible-in-window-p end)) @@ -1124,7 +1126,7 @@ (read-char-exclusive) (read-char)) skipped 0) - (if (or quit-flag (= char ?\C-g)) ; C-g is like typing X + (if (or quit-flag (eq char ?\C-g)) ; C-g is like typing X (setq char ?X quit-flag nil))) ;; Adjust num to array offset skipping command characters. @@ -1136,36 +1138,36 @@ (setq num (- char ?0 skipped))) (cond - ((= char ? ) nil) ; accept word this time only - ((= char ?i) ; accept and insert word into pers dict + ((eq char ? ) nil) ; accept word this time only + ((eq char ?i) ; accept and insert word into pers dict (process-send-string ispell-process (concat "*" word "\n")) (setq ispell-pdict-modified-p '(t)) ; dictionary modified! nil) - ((or (= char ?a) (= char ?A)) ; accept word without insert + ((or (eq char ?a) (eq char ?A)) ; accept word without insert (process-send-string ispell-process (concat "@" word "\n")) (if (null ispell-pdict-modified-p) (setq ispell-pdict-modified-p (list ispell-pdict-modified-p))) - (if (= char ?A) 0)) ; return 0 for ispell-add buffer-local - ((or (= char ?r) (= char ?R)) ; type in replacement - (if (or (= char ?R) ispell-query-replace-choices) + (if (eq char ?A) 0)) ; return 0 for ispell-add buffer-local + ((or (eq char ?r) (eq char ?R)) ; type in replacement + (if (or (eq char ?R) ispell-query-replace-choices) (list (read-string "Query-replacement for: " word) t) (cons (read-string "Replacement for: " word) nil))) - ((or (= char ??) + ((or (eq char ??) ;; XEmacs change: help-char may not be an int. (eq char (event-to-character (character-to-event help-char))) - (= char ?\C-h)) + (eq char ?\C-h)) (ispell-help) t) ;; Quit and move point back. - ((= char ?x) + ((eq char ?x) (ispell-pdict-save ispell-silently-savep) (message "Exited spell-checking") (setq ispell-quit t) nil) ;; Quit and preserve point. - ((= char ?X) + ((eq char ?X) (ispell-pdict-save ispell-silently-savep) (message "%s" (substitute-command-keys @@ -1174,7 +1176,7 @@ (setq ispell-quit (max (point-min) (- (point) (length word)))) nil) - ((= char ?q) + ((eq char ?q) (if (y-or-n-p "Really kill Ispell process? ") (progn (ispell-kill-ispell t) ; terminate process. @@ -1182,7 +1184,7 @@ (point)) ispell-pdict-modified-p nil)) t)) ; continue if they don't quit. - ((= char ?l) + ((eq char ?l) (let ((new-word (read-string "Lookup string (`*' is wildcard): " word)) @@ -1212,7 +1214,7 @@ new-line) max-lines)) (while (memq count command-characters) - (setq count (1+ count) + (setq count (int-char (1+ count)) skipped (1+ skipped))) (insert "(" count ") " (car choices) " ") (setq choices (cdr choices) @@ -1235,12 +1237,12 @@ (setq line new-line))) (select-window (next-window))))) t) ; reselect from new choices - ((= char ?u) + ((eq char ?u) (process-send-string ispell-process (concat "*" (downcase word) "\n")) (setq ispell-pdict-modified-p '(t)) ; dictionary modified! nil) - ((= char ?m) ; type in what to insert + ((eq char ?m) ; type in what to insert (process-send-string ispell-process (concat "*" (read-string "Insert: " word) "\n")) @@ -1250,11 +1252,11 @@ (if ispell-query-replace-choices ; Query replace flag (list (nth num miss) 'query-replace) (nth num miss))) - ((= char ?\C-l) + ((eq char ?\C-l) (redraw-display) t) - ((= char ?\C-r) + ((eq char ?\C-r) (save-window-excursion (recursive-edit)) t) - ((= char ?\C-z) + ((eq char ?\C-z) (funcall (key-binding "\C-z")) t) (t (ding) t)))))) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/pending-del.el --- a/lisp/packages/pending-del.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/pending-del.el Mon Aug 13 09:42:26 2007 +0200 @@ -75,6 +75,8 @@ ;; Support the XEmacs 20.3 'delete functions (put 'backward-or-forward-delete-char 'pending-delete 'supersede) +(put 'cperl-electric-backspace 'pending-delete 'supersede) +(put 'cperl-electric-delete 'pending-delete 'supersede) ;; Don't delete for these. They're more problematic than helpful. ;; diff -r 1c55655d6702 -r 28f395d8dc7a lisp/packages/tar-mode.el --- a/lisp/packages/tar-mode.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/packages/tar-mode.el Mon Aug 13 09:42:26 2007 +0200 @@ -488,7 +488,8 @@ (define-key tar-mode-map "u" 'tar-unflag) (define-key tar-mode-map "v" 'tar-view) (define-key tar-mode-map "x" 'tar-expunge) - (define-key tar-mode-map "\177" 'tar-unflag-backwards) + (define-key tar-mode-map 'backspace 'tar-unflag-backwards) + (define-key tar-mode-map 'delete 'tar-unflag-backwards) (define-key tar-mode-map "E" 'tar-extract-other-window) (define-key tar-mode-map "M" 'tar-chmod-entry) (define-key tar-mode-map "G" 'tar-chgrp-entry) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/auto-autoloads.el --- a/lisp/prim/auto-autoloads.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/auto-autoloads.el Mon Aug 13 09:42:26 2007 +0200 @@ -3918,7 +3918,7 @@ ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el") (autoload 'ksh-mode "ksh-mode" "\ -ksh-mode $Revision: 1.32 $ - Major mode for editing (Bourne, Korn or Bourne again) +ksh-mode $Revision: 1.33 $ - Major mode for editing (Bourne, Korn or Bourne again) shell scripts. Special key bindings and commands: \\{ksh-mode-map} @@ -5260,7 +5260,7 @@ (autoload 'vhdl-mode "vhdl-mode" "\ Major mode for editing VHDL code. -vhdl-mode $Revision: 1.32 $ +vhdl-mode $Revision: 1.33 $ To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a vhdl-mode buffer. This automatically sets up a mail buffer with version information already added. You just need to add a description of the @@ -5529,14 +5529,6 @@ ;;;### (autoloads (add-log-current-defun change-log-mode add-change-log-entry-other-window add-change-log-entry find-change-log prompt-for-change-log-name) "add-log" "packages/add-log.el") -(defcustom change-log-default-name nil "*Name of a change log file for \\[add-change-log-entry]." :type '(choice (const :tag "default" nil) string) :group 'change-log) - -(defcustom add-log-current-defun-function nil "*If non-nil, function to guess name of current function from surrounding text.\n\\[add-change-log-entry] calls this function (if nil, `add-log-current-defun'\ninstead) with no arguments. It returns a string or nil if it cannot guess." :type 'boolean :group 'change-log) - -(defcustom add-log-full-name nil "*Full name of user, for inclusion in ChangeLog daily headers.\nThis defaults to the value returned by the `user-full-name' function." :type '(choice (const :tag "Default" nil) string) :group 'change-log) - -(defcustom add-log-mailing-address nil "*Electronic mail address of user, for inclusion in ChangeLog daily headers.\nThis defaults to the value of `user-mail-address'." :type '(choice (const :tag "Default" nil) string) :group 'change-log) - (autoload 'prompt-for-change-log-name "add-log" "\ Prompt for a change log name." nil nil) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/cus-load.el --- a/lisp/prim/cus-load.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/cus-load.el Mon Aug 13 09:42:26 2007 +0200 @@ -6,6 +6,7 @@ (put 'psgml-dtd 'custom-loads '("psgml")) (put 'copyright 'custom-loads '("upd-copyr")) (put 'gnus-score-expire 'custom-loads '("gnus-kill" "gnus-score")) +(put 'custom-buffer 'custom-loads '("cus-edit")) (put 'gnus-score-kill 'custom-loads '("gnus-kill")) (put 'eldoc 'custom-loads '("eldoc")) (put 'prolog 'custom-loads '("prolog")) @@ -56,7 +57,7 @@ (put 'xrdb 'custom-loads '("xrdb-mode")) (put 'gnus-article-washing 'custom-loads '("gnus-xmas" "gnus-art")) (put 'ispell 'custom-loads '("ispell")) -(put 'mail 'custom-loads '("gnus" "message" "mh-e" "mail-abbrevs" "feedmail" "metamail" "supercite" "highlight-headers" "smtpmail")) +(put 'mail 'custom-loads '("gnus" "message" "mh-e" "mail-abbrevs" "feedmail" "metamail" "supercite" "highlight-headers" "ph" "smtpmail")) (put 'gnus-summary-exit 'custom-loads '("gnus-sum")) (put 'fortran-indent 'custom-loads '("fortran")) (put 'ps-print-face 'custom-loads '("ps-print")) @@ -71,10 +72,11 @@ (put 'gnus-summary 'custom-loads '("gnus-sum" "gnus")) (put 'message-headers 'custom-loads '("message")) (put 'ps-print-header 'custom-loads '("ps-print")) +(put 'custom-menu 'custom-loads '("cus-edit")) (put 'docs 'custom-loads '("texinfo" "hyper-apropos" "makeinfo")) (put 'lisp-indent 'custom-loads '("cl-indent")) (put 'completion 'custom-loads '("completion")) -(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "etags" "func-menu" "generic-sc" "rcompile")) +(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "etags" "func-menu" "generic-sc" "hyper-apropos" "rcompile")) (put 'cc-comment 'custom-loads '("cc-mode")) (put 'url-cookie 'custom-loads '("url-cookie" "url-vars")) (put 'TeX-output 'custom-loads '("tex-buf" "tex")) @@ -92,7 +94,7 @@ (put 'hypermedia 'custom-loads '("wid-edit" "gopher" "metamail" "browse-url" "url-vars" "w3-cus")) (put 'save-place 'custom-loads '("saveplace")) (put 'w3-advanced 'custom-loads '("w3-cus")) -(put 'lisp 'custom-loads '("edebug" "cl-indent" "elp")) +(put 'lisp 'custom-loads '("edebug" "cl-indent" "hyper-apropos" "elp")) (put 'jka-compr 'custom-loads '("jka-compr")) (put 'rlogin 'custom-loads '("rlogin")) (put 'reftex 'custom-loads '("reftex")) @@ -119,7 +121,7 @@ (put 'f90 'custom-loads '("f90")) (put 'term 'custom-loads '("term")) (put 'gnus-extract 'custom-loads '("gnus" "gnus-uu")) -(put 'help 'custom-loads '("help" "cus-edit" "info" "man")) +(put 'help 'custom-loads '("help" "cus-edit" "hyper-apropos" "info" "man")) (put 'supercite 'custom-loads '("supercite")) (put 'generic-sc 'custom-loads '("generic-sc")) (put 'local 'custom-loads '("calendar" "gopher")) @@ -139,12 +141,13 @@ (put 'gnus-article 'custom-loads '("gnus-art" "gnus-cite")) (put 'AUC-TeX 'custom-loads '("tex")) (put 'TeX-command 'custom-loads '("tex")) +(put 'widget-documentation 'custom-loads '("wid-edit")) (put 'TeX-command-name 'custom-loads '("tex")) (put 'edebug 'custom-loads '("edebug")) (put 'ps-print 'custom-loads '("ps-print")) (put 'TeX-commands 'custom-loads '("tex-buf")) (put 'cc-indent 'custom-loads '("cc-mode")) -(put 'comm 'custom-loads '("ssl")) +(put 'comm 'custom-loads '("ph" "ssl")) (put 'ediff-window 'custom-loads '()) (put 'gnus 'custom-loads '("gnus-art" "gnus-async" "gnus-cache" "gnus-demon" "gnus-dup" "gnus-eform" "gnus-uu" "gnus-win" "gnus-xmas" "gnus" "nnmail")) (put 'ps-print-font 'custom-loads '("ps-print")) @@ -223,11 +226,12 @@ (put 'gnuserv 'custom-loads '("gnuserv")) (put 'ps-print-horizontal 'custom-loads '("ps-print")) (put 'gnus-windows 'custom-loads '("gnus-win")) -(put 'maint 'custom-loads '("upd-copyr")) +(put 'maint 'custom-loads '("add-log" "upd-copyr")) (put 'detached-minibuf 'custom-loads '("detached-minibuf")) (put 'message-mail 'custom-loads '("message")) (put 'ediff-mult 'custom-loads '("ediff-mult")) (put 'windows 'custom-loads '()) +(put 'widget-faces 'custom-loads '("wid-edit")) (put 'message-various 'custom-loads '("message")) (put 'resize-minibuffer 'custom-loads '("rsz-minibuf")) (put 'gnus-group-levels 'custom-loads '("gnus-group")) @@ -236,6 +240,7 @@ (put 'gnus-score-decay 'custom-loads '("gnus-score")) (put 'fill 'custom-loads '("filladapt")) (put 'edmacro 'custom-loads '("edmacro")) +(put 'custom-magic-faces 'custom-loads '("cus-edit")) (put 'balloon-help 'custom-loads '("balloon-help")) (put 'gnus-extract-post 'custom-loads '("gnus-uu")) (put 'debug 'custom-loads '()) @@ -279,10 +284,12 @@ (put 'url-file 'custom-loads '("url-cache" "url-vars")) (put 'alloc 'custom-loads '()) (put 'isearch 'custom-loads '("isearch-mode")) +(put 'ph 'custom-loads '("ph")) (put 'mh 'custom-loads '("mh-comp" "mh-e" "mh-utils")) (put 'gnus-score-files 'custom-loads '("gnus-score")) (put 'gopher 'custom-loads '("gopher")) (put 'modeline 'custom-loads '("modeline")) +(put 'hypropos-faces 'custom-loads '("hyper-apropos")) (put 'makefile-mode 'custom-loads '("make-mode")) (put 'gnus-summary-marks 'custom-loads '("gnus-sum")) (put 'appt 'custom-loads '("appt")) @@ -294,7 +301,7 @@ (put 'w3-parsing 'custom-loads '("w3-cus")) (put 'message-buffers 'custom-loads '("message")) (put 'editing 'custom-loads '("simple" "cus-edit")) -(put 'matching 'custom-loads '("simple" "isearch-mode" "whitespace-mode" "completion")) +(put 'matching 'custom-loads '("simple" "isearch-mode" "whitespace-mode" "completion" "hyper-apropos")) (put 'ediff 'custom-loads '("ediff-diff" "ediff-merg" "ediff-mult" "ediff-ptch" "ediff-wind" "ediff")) (put 'gnus-article-mime 'custom-loads '("gnus-art" "gnus-sum")) (put 'i18n 'custom-loads '("cus-edit" "url-vars")) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/files.el --- a/lisp/prim/files.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/files.el Mon Aug 13 09:42:26 2007 +0200 @@ -1173,14 +1173,14 @@ (defconst interpreter-mode-alist '(("^#!.*csh" . sh-mode) - ("^#!.*sh\\b" . ksh-mode) + ("^#!.*sh\\b" . sh-mode) ("^#!.*\\b\\(scope\\|wish\\|tcl\\|expect\\)" . tcl-mode) ("perl" . perl-mode) ("python" . python-mode) ("awk\\b" . awk-mode) ("rexx" . rexx-mode) ("scm" . scheme-mode) - ("^:" . ksh-mode)) + ("^:" . sh-mode)) "Alist mapping interpreter names to major modes. This alist is used to guess the major mode of a file based on the contents of the first line. This line often contains something like: diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/rect.el --- a/lisp/prim/rect.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/rect.el Mon Aug 13 09:42:26 2007 +0200 @@ -69,7 +69,8 @@ (if (< begextra 0) (setq endextra (+ endextra begextra) begextra 0)) - (apply function startpos begextra endextra extra-args)) + (if (< endextra 0) (setq endextra 0)) + (apply function startpos begextra endextra extra-args)) (forward-line 1))) (- endcol startcol))) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/subr.el --- a/lisp/prim/subr.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/subr.el Mon Aug 13 09:42:26 2007 +0200 @@ -333,6 +333,33 @@ (buffer-string) (erase-buffer))))) +(defmacro with-current-buffer (buffer &rest body) + "Execute the forms in BODY with BUFFER as the current buffer. +The value returned is the value of the last form in BODY. +See also `with-temp-buffer'." + `(save-current-buffer + (set-buffer ,buffer) + ,@body)) + +(defmacro with-temp-file (file &rest forms) + "Create a new buffer, evaluate FORMS there, and write the buffer to FILE. +The value of the last form in FORMS is returned, like `progn'. +See also `with-temp-buffer'." + (let ((temp-file (make-symbol "temp-file")) + (temp-buffer (make-symbol "temp-buffer"))) + `(let ((,temp-file ,file) + (,temp-buffer + (get-buffer-create (generate-new-buffer-name " *temp file*")))) + (unwind-protect + (prog1 + (with-current-buffer ,temp-buffer + ,@forms) + (with-current-buffer ,temp-buffer + (widen) + (write-region (point-min) (point-max) ,temp-file nil 0))) + (and (buffer-name ,temp-buffer) + (kill-buffer ,temp-buffer)))))) + (defmacro with-temp-buffer (&rest forms) "Create a temporary buffer, and evaluate FORMS there like `progn'." (let ((temp-buffer (make-symbol "temp-buffer"))) @@ -524,16 +551,6 @@ (interactive) nil) -(defmacro save-current-buffer (&rest forms) - "Restore the current buffer setting after executing FORMS. -Does not restore the values of point and mark. -See also: `save-excursion'." - ;; by Stig@hackvan.com - (` (let ((_cur_buf_ (current-buffer))) - (unwind-protect - (progn (,@ forms)) - (set-buffer _cur_buf_))))) - (defmacro eval-in-buffer (buffer &rest forms) "Evaluate FORMS in BUFFER. See also: `save-current-buffer' and `save-excursion'." diff -r 1c55655d6702 -r 28f395d8dc7a lisp/prim/syntax.el --- a/lisp/prim/syntax.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/prim/syntax.el Mon Aug 13 09:42:26 2007 +0200 @@ -392,7 +392,7 @@ (interactive) ;alg stolen from etag.el (save-excursion - (if (not (memq (char-syntax (char-before)) '(?w ?_))) + (if (or (bobp) (not (memq (char-syntax (char-before)) '(?w ?_)))) (while (not (looking-at "\\sw\\|\\s_\\|\\'")) (forward-char 1))) (while (looking-at "\\sw\\|\\s_") diff -r 1c55655d6702 -r 28f395d8dc7a lisp/psgml/ChangeLog --- a/lisp/psgml/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/psgml/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,8 @@ +1997-06-14 Steven L Baur + + * psgml-parse.el (sgml-read-model): Ebola vaccine. + From Andrew J Cosgriff + Wed Apr 23 11:28:10 1997 Steven L Baur * psgml-charent.el (sgml-display-char-list-filename): Move diff -r 1c55655d6702 -r 28f395d8dc7a lisp/psgml/psgml-parse.el --- a/lisp/psgml/psgml-parse.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/psgml/psgml-parse.el Mon Aug 13 09:42:26 2007 +0200 @@ -1,5 +1,5 @@ ;;;; psgml-parse.el --- Parser for SGML-editing mode with parsing support -;; $Id: psgml-parse.el,v 1.5 1997/03/16 03:05:41 steve Exp $ +;; $Id: psgml-parse.el,v 1.6 1997/06/14 20:31:36 steve Exp $ ;; Copyright (C) 1994, 1995 Lennart Staflin @@ -1035,7 +1035,7 @@ (sgml-read-nodes (make-vector n nil))) (loop for i below n do (aset sgml-read-nodes i (sgml-make-state))) (loop for e across sgml-read-nodes do - (cond ((eq 255 (sgml-read-peek)) ; a and-node + (cond ((eq ?\377 (sgml-read-peek)) ; a and-node (sgml-read-octet) ; skip (setf (sgml-and-node-next e) (sgml-read-node-ref)) (setf (sgml-and-node-dfas e) (sgml-read-model-seq))) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/tm/tm-ew-e.el --- a/lisp/tm/tm-ew-e.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/tm/tm-ew-e.el Mon Aug 13 09:42:26 2007 +0200 @@ -3,7 +3,7 @@ ;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko -;; Version: $Revision: 1.3 $ +;; Version: $Revision: 1.4 $ ;; Keywords: encoded-word, MIME, multilingual, header, mail, news ;; This file is part of tm (Tools for MIME). @@ -35,7 +35,7 @@ ;;; (defconst tm-ew-e/RCS-ID - "$Id: tm-ew-e.el,v 1.3 1997/06/11 19:26:16 steve Exp $") + "$Id: tm-ew-e.el,v 1.4 1997/06/14 20:31:38 steve Exp $") (defconst mime-eword/encoder-version (get-version-string tm-ew-e/RCS-ID)) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/utils/lib-complete.el --- a/lisp/utils/lib-complete.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/utils/lib-complete.el Mon Aug 13 09:42:26 2007 +0200 @@ -36,7 +36,7 @@ ;; Last Modified By: Heiko M|nkel ;; Additional XEmacs integration By: Chuck Thompson ;; Last Modified On: Thu Jul 1 14:23:00 1994 -;; RCS Info : $Revision: 1.3 $ $Locker: $ +;; RCS Info : $Revision: 1.4 $ $Locker: $ ;; ======================================================================== ;; NOTE: XEmacs must be redumped if this file is changed. ;; @@ -252,7 +252,11 @@ FILTER (or MUST-MATCH FULL) nil))) (cond ((equal library "") DEFAULT) - (FULL (locate-file library read-library-internal-search-path ".el:.elc")) + (FULL (locate-file library read-library-internal-search-path + ;; decompression doesn't work with Mule -slb + (if (featurep 'mule) + ".el:.elc" + ".el:.el.gz:.elc"))) (t library)))) ;; NOTE: as a special case, read-library may be used to read a filename @@ -265,8 +269,11 @@ "Front end to read-library" (read-library "Find Library file: " load-path nil t t (function (lambda (fn) - (cond - ((string-match "\\.el$" fn) + (cond + ;; decompression doesn't work with mule -slb + ((string-match (if (featurep 'mule) + "\\.el$" + "\\.el\\(\\.gz\\)?$") fn) (substring fn 0 (match-beginning 0)))))) )) diff -r 1c55655d6702 -r 28f395d8dc7a lisp/utils/ph.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/utils/ph.el Mon Aug 13 09:42:26 2007 +0200 @@ -0,0 +1,897 @@ +;;; ph.el --- Client for the CCSO directory system (aka PH/QI) + +;; Copyright (C) 1997 Oscar Figueiredo + +;; Author: Oscar Figueiredo +;; Maintainer: Oscar Figueiredo +;; Created: May 1997 +;; Version: $Revision: 1.2 $ +;; Keywords: help + +;; This file is part of XEmacs + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; LCD Archive Entry (not registered yet): +;; ph|Oscar Figueiredo|Oscar.Figueiredo@di.epfl.ch| +;; Client for the CCSO directory system (aka PH/QI)| +;; 27-May-1997|Version $Revision: 1.2 $|ftp://(Not Available) + +;; This package provides functions to query CCSO nameservers through an +;; interactive form or replace inline query strings in buffers with +;; appropriately formatted query results (especially used to expand email +;; addresses in message buffers). It also interfaces with the BBDB package +;; to let you register entries of the CCSO directory into your own database. +;; The CCSO white pages system was developped at UIUC and is in use in more +;; than 300 sites in the world. The distribution can be found at +;; ftp://uiarchive.cso.uiuc.edu/pub/packages/ph +;; Traditionally the server is called QI while the client is called PH. + +;;; Installation: +;; This package uses the custom and widget libraries. If they are not already +;; installed on your system get them from http://www.dina.kvl.dk/~abraham/custom/ +;; Then uncomment and add the following to your .emacs file: +;; (require 'ph) +;; (eval-after-load "message" +;; (define-key message-mode-map [(control ?c) (tab)] 'ph-expand-inline)) +;; (eval-after-load "mail" +;; (define-key mail-mode-map [(control ?c) (tab)] 'ph-expand-inline)) + +;; This package should run under XEmacs 19.15 or 20 as well as under Emacs 19.34 and above + +;;; Usage: +;; * Provided you did the installation as proposed in the above section, +;; inline expansion will be available when you compose an email +;; message. Type the name of somebody recorded in your PH/QI server and hit +;; C-c TAB, this will overwrite the name with the corresponding email +;; address +;; * M-x ph-customize to customize inline expansion and other features to +;; your needs. +;; * Look for the Ph submenu in the tools menu for more. + +;;; Code: + +(eval-when-compile + (require 'wid-edit)) +(require 'custom) +(if (not (fboundp 'make-overlay)) + (require 'overlay)) +(if (locate-library "timer") + (require 'timer)) +(autoload 'custom-menu-create "cus-edit") + +;;{{{ Package customization variables + +(defgroup ph nil + "CCSO (PH/QI) directory system client" + :group 'mail + :group 'comm) + +(defcustom ph-server nil + "*The name or IP address of the CCSO (PH/QI) server. +A port number may be specified by appending a colon and a +number to the name of the server." + :type '(string :tag "Server") + :group 'ph) + +(defcustom ph-strict-return-matches t + "*If non-nil, entries that do not contain all the requested return fields are ignored." + :type 'boolean + :group 'ph) + +(defcustom ph-default-return-fields nil + "*A list of the default fields to extract from CCSO entries. +If it contains `all' then all available fields are returned. +nil means return the default fields as configured in the server." + :type '(repeat (symbol :tag "Field name")) + :group 'ph) + +(defcustom ph-multiple-match-handling-method 'select + "*What to do when multiple entries match a query for an inline expansion. +Possible values are: +`first' (equivalent to nil) which means consider the first match. +`select' pop-up a selection buffer +`all' use all matches +`abort' the operation is aborted, an error is signaled" + :type '(choice :menu-tag "Method" + (const :menu-tag "First" first) + (const :menu-tag "Select" select) + (const :menu-tag "All" all) + (const :menu-tag "Abort" abort) + (const :menu-tag "None" nil)) + :group 'ph) + +(defcustom ph-duplicate-fields-handling-method 'list + "*A method to handle entries containing duplicate fields. +This is either an alist (FIELD . METHOD) or a symbol METHOD. +The alist form of the variable associates a method to an individual field, +the second form specifies a method applicable to all fields. +Available methods are: +`list' or nil lets the value of the field be a list of values +`first' keeps the first value and discards the others, +`concat' concatenates the values into a single multiline string, +`duplicate' duplicates the entire entry into as many instances as +different values." + :type '(choice (const :menu-tag "List" list) + (const :menu-tag "First" first) + (const :menu-tag "Concat" concat) + (const :menu-tag "Duplicate" duplicate) + (repeat :menu-tag "Per Field Specification" + :tag "Per Field Specification" + (cons :tag "Field/Method" + :value (nil . list) + (symbol :tag "Field name") + (choice :tag "Method" + :menu-tag "Method" + (const :menu-tag "List" list) + (const :menu-tag "First" first) + (const :menu-tag "Concat" concat) + (const :menu-tag "Duplicate" duplicate))))) + :group 'ph +) + +(defcustom ph-inline-query-format-list nil + "*Format of an inline expansion query. +If the inline query string consists of several words, this list specifies +how these individual words are associated to CCSO database field names. +If nil all the words will be mapped onto the default CCSO database key." + :type '(repeat (symbol :tag "Field name")) + :group 'ph) + +(defcustom ph-expanding-overwrites-query t + "*If non nil, expanding a query overwrites the query string" + :type 'boolean + :group 'ph) + +(defcustom ph-inline-expansion-format '("%s" email) + "*A list specifying the format of the expansion of inline queries. +This variable controls what ph-expand-inline actually inserts in the buffer. +First element is a string passed to format. Remaining elements are symbols +indicating CCSO database field names, corresponding field values are passed +as additional arguments to format." + :type '(list (string :tag "Format String") + (repeat :inline t + :tag "Field names" + (symbol :tag ""))) + :group 'ph) + +(defcustom ph-form-fields '(name firstname email phone) + "*A list of fields presented in the query form." + :tag "Default Fields in Query Forms" + :type '(repeat (symbol :tag "Field name")) + :group 'ph) + +(defcustom ph-fieldname-formstring-alist '((url . "URL") + (unix_gid . "Unix GID") + (unix_uid . "Unix UID") + (unit_code . "Unit Code") + (department_code . "Department Code") + (high_school . "High School") + (home_phone . "Home Phone") + (office_phone . "Office Phone") + (callsign . "HAM Call Sign") + (office_address . "Office Address") + (office_location . "Office Location") + (id . "ID") + (email . "E-Mail") + (firstname . "First Name")) + "*A mapping of CCSO database field names onto prompt strings used in query/response forms. +Prompt strings for fields that are not in this are derived by capitalizing +the field name." + :tag "Mapping of Field Names onto Prompt Strings" + :type '(repeat (cons :tag "Field" + (symbol :tag "Name") + (string :tag "Prompt string"))) + :group 'ph) + +(defcustom ph-bbdb-mapping-alist '((name . (firstname name)) + (email . net)) + "*A mapping of CCSO database field names onto BBDB field names" + :tag "CCSO to BBDB Field Name Mapping" + :type '(repeat (cons :tag "Field Name" + (symbol :tag "CCSO") + (sexp :tag "BBDB"))) + :group 'ph) + +(defcustom ph-options-file "~/.emacs" + "*A file where the servers hotlist is stored. +It should be loaded automatically at startup so ~/.emacs is a reasonable +choice." + :type '(file :Tag "File Name:")) + +;;}}} + + +;;{{{ Internal cooking + +(defconst ph-xemacs-p (string-match "XEmacs" emacs-version)) +(defconst ph-fsfemacs-p (not ph-xemacs-p)) +(defconst ph-xemacs-mule-p (and ph-xemacs-p + (featurep 'mule))) +(defconst ph-fsfemacs-mule-p (and ph-fsfemacs-p + (featurep 'mule))) + +(defvar ph-server-hotlist nil) + +(defconst ph-default-server-port 105 + "Default TCP port for CCSO directory services") + +(defvar ph-form-widget-list nil) +(defvar ph-process-buffer nil) +(defvar ph-read-point) + +(defun ph-display-records (records &optional raw-field-names) + "Display the record list RECORDS in a formatted buffer. +If RAW-FIELD-NAMES is non nil, no translation to form strings or +capitalization is done on field names." + (let ((buffer (get-buffer-create "*PH Query Results*")) + inhibit-read-only + precords + (width 0) + beg field-beg + field-name) + (switch-to-buffer buffer) + (setq buffer-read-only t) + (setq inhibit-read-only t) + (erase-buffer) + (kill-all-local-variables) + (insert "PH Query Result\n") + (insert "===============\n\n\n") + (if (null records) + (insert "No match found.\n" + (if ph-strict-return-matches + "Try setting ph-strict-return-matches to nil or change ph-default-return-fields." + "")) + ;; Replace field names with prompt strings, compute prompt max width + (setq precords + (mapcar + (function + (lambda (record) + (mapcar + (function + (lambda (field) + (setq field-name (if raw-field-names + (symbol-name (car field)) + (or (and (assq (car field) ph-fieldname-formstring-alist) + (cdr (assq (car field) ph-fieldname-formstring-alist))) + (capitalize (symbol-name (car field)))))) + (if (> (length field-name) width) + (setq width (length field-name))) + (cons field-name (cdr field)))) + record))) + records)) + (mapcar (function + (lambda (record) + (setq beg (point)) + ;; Actually insert the field/value pairs + (mapcar (function + (lambda (field) + (setq field-beg (point)) + (insert (format (concat "%" width "s: ") (car field))) + (put-text-property field-beg (point) 'face 'bold) + (mapcar (function + (lambda (val) + (indent-to (+ 2 width)) + (insert val "\n"))) + (if (stringp (cdr field)) + (split-string (cdr field) "\n") + (cdr field))))) + record) + ;; Store the record internal format in some convenient place + (overlay-put (make-overlay beg (point)) + 'ph-record + (car records)) + (setq records (cdr records)) + (insert "\n"))) + precords)) + (insert "\n") + (widget-create 'push-button + :notify (lambda (&rest ignore) + (ph-query-form)) + "New query") + (widget-insert " ") + (widget-create 'push-button + :notify (lambda (&rest ignore) + (kill-this-buffer)) + "Quit") + (use-local-map widget-keymap) + (widget-setup) + ) +) + +(defun ph-process-form () + "Process the form in current buffer and display the results" + (let (query-alist + value) + (if (not (and (boundp 'ph-form-widget-list) + ph-form-widget-list)) + (error "Not in a PH query form buffer") + (mapcar (function + (lambda (wid-field) + (setq value (widget-value (cdr wid-field))) + (if (not (string= value "")) + (setq query-alist (cons (cons (car wid-field) value) + query-alist))))) + ph-form-widget-list) + (kill-buffer (current-buffer)) + (ph-display-records (ph-query-internal query-alist)) + ))) + + +(defun ph-query-internal (query &optional return-fields) + "Query the PH/QI server with QUERY. +QUERY can be a string NAME or a list made of strings NAME +and/or cons cells (KEY . VALUE) where KEYs should be valid +CCSO database keys. NAME is equivalent to (DEFAULT . NAME) where +DEFAULT is the default key of the database) +RETURN-FIELDS is a list of database fields to return defaulting to +ph-default-return-fields." + (let (request) + (if (null return-fields) + (setq return-fields ph-default-return-fields)) + (setq request + (concat "query " + (if (stringp query) + query + (mapconcat (function (lambda (elt) + (if (stringp elt) elt) + (format "%s=%s" (car elt) (cdr elt)))) + query + " ")) + (if return-fields + (concat " return " (mapconcat 'symbol-name return-fields " "))))) + (and (> (length request) 6) + (ph-do-request request) + (ph-parse-query-result return-fields)))) + +(defun ph-parse-query-result (&optional fields) + "Return a list of alists of key/values from the record in ph-process-buffer. +Fields not in FIELDS are discarded." + (let (record records + line-regexp + current-key key value + ignore) + (save-excursion + (message "Parsing results...") + (set-buffer ph-process-buffer) + (goto-char (point-min)) + (while (re-search-forward "^\\(-[0-9]+\\):\\([0-9]+\\):" nil t) + (catch 'ignore + (setq line-regexp (concat "^\\(-[0-9]+\\):" (match-string 2) ":[ \t]*\\([-a-zA-Z_]*\\)?:[ \t]*\\(.*\\)$")) + (beginning-of-line) + (setq record nil + ignore nil + current-key nil) + (while (re-search-forward line-regexp nil t) + (catch 'skip-line + (if (string= "-508" (match-string 1)) + ;; A field is missing in this entry. Skip it or skip the + ;; whole record (see ph-strict-return-matches) + (if (not ph-strict-return-matches) + (throw 'skip-line t) + (while (re-search-forward line-regexp nil t)) + (setq ignore t) + (throw 'ignore t))) + (setq key (and (not (string= (match-string 2) "")) + (intern (match-string 2))) + value (match-string 3)) + (if (and current-key + (eq key current-key)) + (setq key nil) + (setq current-key key)) + (if (or (null fields) + (memq 'all fields) + (memq current-key fields)) + (if key + (setq record (cons (cons key value) record)) + (setcdr (car record) (cons value (if (listp (cdar record)) + (cdar record) + (cons (cdar record) nil))))))))) + (and (not ignore) + (or (null fields) + (memq 'all fields) + (setq record (nreverse record))) + (setq record (if (not (eq 'list ph-duplicate-fields-handling-method)) + (ph-filter-duplicate-fields record) + (list record))) + (setq records (append record records)))) + ) + (message "Done") + records) + ) + +(defun ph-filter-duplicate-fields (record) + "Filter RECORD according to ph-duplicate-fields-handling-method." + (let ((rec record) + unique + duplicates + result) + + ;; Search for multiple records + (while (and rec + (not (listp (cdar rec)))) + (setq rec (cdr rec))) + + (if (null (cdar rec)) + (list record) ; No duplicate fields in this record + (mapcar (function + (lambda (field) + (if (listp (cdr field)) + (setq duplicates (cons field duplicates)) + (setq unique (cons field unique))))) + record) + (setq result (list unique)) + (mapcar (function + (lambda (field) + (let ((method (if (consp ph-duplicate-fields-handling-method) + (cdr (assq (car field) ph-duplicate-fields-handling-method)) + ph-duplicate-fields-handling-method))) + (cond + ((or (null method) (eq 'list method)) + (setq result + (ph-add-field-to-records field result))) + ((eq 'first method) + (setq result + (ph-add-field-to-records (cons (car field) (cadr field)) result))) + ((eq 'concat method) + (setq result + (ph-add-field-to-records (cons (car field) + (mapconcat + 'identity + (cdr field) + "\n")) result))) + ((eq 'duplicate method) + (setq result + (ph-distribute-field-on-records field result))))))) + duplicates) + result))) + +(defun ph-add-field-to-records (field records) + "Add FIELD to each individual record in RECORDS and return the resulting list." + (mapcar (function + (lambda (r) + (cons field r))) + records)) + +(defun ph-distribute-field-on-records (field records) + "Duplicate each individual record in RECORDS according to value of FIELD. +Each copy is added a new field containing one of the values of FIELD." + (let (result + (values (cdr field))) + ;; Uniquify values first + (while values + (setcdr values (delete (car values) (cdr values))) + (setq values (cdr values))) + (mapcar (function + (lambda (value) + (let ((result-list (copy-sequence records))) + (setq result-list (ph-add-field-to-records (cons (car field) value) + result-list)) + (setq result (append result-list result)) + ))) + (cdr field)) + result) +) + +(defun ph-do-request (request) + "Send REQUEST to the server. Wait for response and return the buffer containing it." + (let (process + buffer) + (unwind-protect + (progn + (message "Contacting server...") + (setq process (ph-open-session)) + (if process + (save-excursion + (set-buffer (setq buffer (process-buffer process))) + (ph-send-command process request) + (message "Request sent, waiting for reply...") + (ph-read-response process)))) + (if process + (ph-close-session process))) + buffer)) + +(defun ph-open-session (&optional server) + "Open a connection to the given CCSO SERVER. +SERVER is either a string naming the server or a list (NAME PORT)." + (let (process + host + port) + (catch 'done + (if (null server) + (setq server (or ph-server + (call-interactively 'ph-set-server)))) + (string-match "\\(.*\\)\\(:\\(.*\\)\\)?" server) + (setq host (match-string 1 server)) + (setq port (or (match-string 3 server) + ph-default-server-port)) + (setq ph-process-buffer (get-buffer-create (format " *PH-%s*" host))) + (save-excursion + (set-buffer ph-process-buffer) + (erase-buffer) + (setq ph-read-point (point)) + (and ph-xemacs-mule-p + (set-buffer-file-coding-system 'binary t))) + (setq process (open-network-stream "ph" ph-process-buffer host port)) + (if (null process) + (throw 'done nil)) + (process-kill-without-query process) + process))) + + +(defun ph-close-session (process) + (save-excursion + (set-buffer (process-buffer process)) + (ph-send-command process "quit") + (ph-read-response process) + (if (fboundp 'add-async-timeout) + (add-async-timeout 10 'delete-process process) + (run-at-time 2 nil 'delete-process process)))) + +(defun ph-send-command (process command) + (goto-char (point-max)) + (process-send-string process command) + (process-send-string process "\r\n") +) + +(defun ph-read-response (process &optional return-response) + "Read a response from the PH/QI query process PROCESS. +Returns nil if response starts with an error code. If the +response is successful the return code or the reponse itself is returned +depending on RETURN-RESPONSE" + (let ((case-fold-search nil) + return-code + match-end) + (goto-char ph-read-point) + ;; CCSO protocol : response complete if status >= 200 + (while (not (re-search-forward "^\\(^[2-5].*\\):.*\n" nil t)) + (accept-process-output process) + (goto-char ph-read-point)) + (setq match-end (point)) + (goto-char ph-read-point) + (if (and (setq return-code (match-string 1)) + (setq return-code (string-to-number return-code)) + (>= (abs return-code) 300)) + (progn (setq ph-read-point match-end) nil) + (setq ph-read-point match-end) + (if return-response + (buffer-substring (point) match-end) + return-code)))) + +;;; FSF Emacs does not provide that one +(if (not (fboundp 'split-string)) + (defun split-string (string pattern) + "Return a list of substrings of STRING which are separated by PATTERN." + (let (parts (start 0)) + (while (string-match pattern string start) + (setq parts (cons (substring string start (match-beginning 0)) parts) + start (match-end 0))) + (nreverse (cons (substring string start) parts)) + ))) + +;;}}} + +;;{{{ High-level interfaces (interactive functions) + +(defun ph-customize () + "Customize the PH package." + (interactive) + (customize 'ph)) + +(defun ph-set-server (server) + "Set the server to SERVER." + (interactive "sNew PH/QI Server: ") + (setq ph-server server) + (message "Selected PH/QI server is now %s" server)) + +(defun ph-get-email (name) + "Get the email field of NAME from the PH/QI directory server." + (interactive "sName: ") + (let ((email (cdaar (ph-query-internal name '(email))))) + (if (interactive-p) + (if email + (message "%s" email) + (message "No record matching %s" name))) + email)) + +(defun ph-get-phone (name) + "Get the phone field of NAME from the PH/QI directory server." + (interactive "sName: ") + (let ((phone (cdaar (ph-query-internal name '(phone))))) + (if (interactive-p) + (if phone + (message "%s" phone) + (message "No record matching %s" name))) + phone)) + +(defun ph-get-field-list () + "Return a list of valid field names for current server. +When called interactively the list is formatted in a dedicated buffer +otherwise a list of symbols is returned." + (interactive) + (ph-do-request "fields") + (if (interactive-p) + (let ((ph-duplicate-fields-handling-method 'list)) + (ph-display-records (ph-parse-query-result) t)) + (mapcar 'caar + (ph-parse-query-result))) +) + +(defun ph-expand-inline (&optional replace) + "Query the server and expand the query string before point. +The query string consists of the buffer substring from the point back to +the preceding comma, colon or beginning of line. If it consists of more than +one word the variable ph-inline-query-format-list controls how these are mapped +onto CCSO database field names. +After querying the server for the given string, the expansion specified by +ph-inline-expansion-format is inserted in the buffer at point. If REPLACE is t +then this expansion replaces the name in the buffer. +If ph-expanding-overwrites-query is t then the meaning of REPLACE is inverted." + (interactive) + (let* ((end (point)) + (beg (save-excursion + (if (re-search-backward "[:,][ \t]*" + (save-excursion + (beginning-of-line) + (point)) + 'move) + (goto-char (match-end 0))) + (point))) + (words (buffer-substring beg end)) + query + query-alist + (query-format ph-inline-query-format-list) + response + response-strings + key val cell) + + ;; Prepare the query + (if (or (not query-format) + (not (string-match "[ \t]+" words))) + (setq query words) + (setq words (split-string words "[ \t]+")) + (while (and words query-format) + (setq query-alist (cons (cons (car query-format) (car words)) query-alist)) + (setq words (cdr words) + query-format (cdr query-format))) + (if words + (setcdr (car query-alist) + (concat (cdar query-alist) " " + (mapconcat 'identity words " ")))) + ;; Uniquify query-alist + (setq query-alist (nreverse query-alist)) + (while query-alist + (setq key (caar query-alist) + val (cdar query-alist) + cell (assq key query)) + (if cell + (setcdr cell (concat val " " (cdr cell))) + (setq query (cons (car query-alist) query)))) + (setq query-alist (cdr query-alist))) + + (setq response (ph-query-internal query (cdr ph-inline-expansion-format))) + + (if (null response) + (error "No match found") + + ;; Process response through ph-inline-expansion-format + (while response + (setq response-strings + (cons (apply 'format + (car ph-inline-expansion-format) + (mapcar (function + (lambda (field) + (or (cdr (assq field (car response))) + ""))) + (cdr ph-inline-expansion-format))) + response-strings)) + (setq response (cdr response))) + + (if (or + (and replace (not ph-expanding-overwrites-query)) + (and (not replace) ph-expanding-overwrites-query)) + (delete-region beg end)) + (cond + ((or (= (length response-strings) 1) + (null ph-multiple-match-handling-method) + (eq ph-multiple-match-handling-method 'first)) + (insert (car response-strings))) + ((eq ph-multiple-match-handling-method 'select) + (with-output-to-temp-buffer "*Completions*" + (display-completion-list response-strings))) + ((eq ph-multiple-match-handling-method 'all) + (insert (mapconcat 'identity response-strings ", "))) + ((eq ph-multiple-match-handling-method 'abort) + (error "There is more than one match for the query")) + )) + ) +) + +(defun ph-query-form (&optional get-fields-from-server) + "*Display a form to query the CCSO PH/QI nameserver. +If given a non-nil argument the function first queries the server +for the existing fields and displays a corresponding form." + (interactive "P") + (let ((fields (or (and get-fields-from-server + (ph-get-field-list)) + ph-form-fields)) + (buffer (get-buffer-create "*PH/QI Query Form*")) + field-name + widget + (width 0) + inhibit-read-only + pt) + (switch-to-buffer buffer) + (setq inhibit-read-only t) + (erase-buffer) + (kill-all-local-variables) + (make-local-variable 'ph-form-widget-list) + (widget-insert "PH/QI Query Form\n") + (widget-insert "================\n\n") + (widget-insert "Current server is: " (or ph-server + (call-interactively 'ph-set-server)) "\n") + ;; Loop over prompt strings to find the biggest one + (setq fields + (mapcar (function + (lambda (field) + (setq field-name (or (and (assq field ph-fieldname-formstring-alist) + (cdr (assq field ph-fieldname-formstring-alist))) + (capitalize (symbol-name field)))) + (if (> (length field-name) width) + (setq width (length field-name))) + (cons field field-name))) + fields)) + ;; Insert the first widget out of the mapcar to leave the cursor + ;; in the first field + (widget-insert "\n\n" (format (concat "%" width "s: ") (cdr (car fields)))) + (setq pt (point)) + (setq widget (widget-create 'editable-field :size 15)) + (setq ph-form-widget-list (cons (cons (car (car fields)) widget) + ph-form-widget-list)) + (setq fields (cdr fields)) + (mapcar (function + (lambda (field) + (widget-insert "\n\n" (format (concat "%" width "s: ") (cdr field))) + (setq widget (widget-create 'editable-field + :size 15)) + (setq ph-form-widget-list (cons (cons (car field) widget) + ph-form-widget-list)))) + fields) + (widget-insert "\n\n") + (widget-create 'push-button + :notify (lambda (&rest ignore) + (ph-process-form)) + "Query Server") + (widget-insert " ") + (widget-create 'push-button + :notify (lambda (&rest ignore) + (ph-query-form)) + "Reset Form") + (widget-insert " ") + (widget-create 'push-button + :notify (lambda (&rest ignore) + (kill-this-buffer)) + "Quit") + (goto-char (1+ pt)) ; 1+ for some extent boundary reason + (use-local-map widget-keymap) + (widget-setup)) + ) + +(defun ph-bookmark-server (server) + "Add SERVER to the servers' hotlist." + (interactive "sServer: ") + (if (member server ph-server-hotlist) + (error "%s is already in the hotlist" server) + (setq ph-server-hotlist (cons server ph-server-hotlist)) + (ph-install-menu) + (ph-save-hotlist))) + +(defun ph-bookmark-current-server () + "Add current server to the servers' hotlist." + (interactive) + (ph-bookmark-server ph-server)) + +(defun ph-save-hotlist () + "Save the servers hotlist to ph-options-file" + (save-excursion + (set-buffer (find-file-noselect ph-options-file)) + ;; delete the previous setq + (catch 'found + (while t + (let ((sexp (condition-case nil + (read (current-buffer)) + (end-of-file (throw 'found nil))))) + (if (and (listp sexp) + (eq (car sexp) 'setq) + (eq (cadr sexp) 'ph-server-hotlist)) + (progn + (delete-region (save-excursion + (backward-sexp) + (point)) + (point)) + (throw 'found t)))))) + (let ((standard-output (current-buffer))) + (if (not (bolp)) + (princ "\n")) + (princ "(setq ph-server-hotlist '") + (prin1 ph-server-hotlist) + (princ ")\n")) + (save-buffer)) +) + +;;}}} + +;;{{{ Menu interface + +(require 'easymenu) + +(defconst ph-tail-menu + `(["---" nil nil] + ["Query Form" ph-query-form t] + ["Expand Inline" ph-expand-inline t] + ["---" nil nil] + ["Get Email" ph-get-email t] + ["Get Phone" ph-get-phone t] + ["List Valid Field Names" ph-get-field-list t] + ["---" nil nil] + ,(cons "Customize" (cdr (custom-menu-create 'ph))))) + +(defconst ph-server-menu + '(["---" ph-bookmark-server t] + ["Bookmark Current Server" ph-bookmark-current-server t] + ["New Server" ph-set-server t])) + + +(defun ph-menu () + (let (command) + (append '("Ph") + (list + (append '("Server") + (mapcar (function + (lambda (server) + (setq command (intern (concat "ph-set-server-" server))) + (if (not (fboundp command)) + (fset command `(lambda () + (interactive) + (setq ph-server ,server) + (message "Selected PH/QI server is now %s" ,server)))) + (vector server command t))) + ph-server-hotlist) + ph-server-menu)) + ph-tail-menu))) + +(defun ph-install-menu () + (cond + (ph-xemacs-p + (add-submenu '("Tools") (ph-menu))) + (ph-fsfemacs-p + (define-key + global-map + [menu-bar tools ph] + (cons "Ph" + (easy-menu-create-keymaps "Ph" (cdr (ph-menu)))))) + )) + +(ph-install-menu) + + +;;}}} + +(provide 'ph) + +;;; ph.el ends here diff -r 1c55655d6702 -r 28f395d8dc7a lisp/version.el --- a/lisp/version.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/version.el Mon Aug 13 09:42:26 2007 +0200 @@ -25,11 +25,11 @@ (defconst emacs-version "20.3" "Version numbers of this version of XEmacs.") -(defconst xemacs-codename "Moscow" +(defconst xemacs-codename "Oslo" "Release nickname, primarily useful for trial prereleases. Warning, this variable did not exist in XEmacs versions prior to 20.3") -(defconst xemacs-betaname "(beta6)" +(defconst xemacs-betaname "(beta7)" "Non-nil when this is a test (beta) version of XEmacs. Warning, this variable did not exist in XEmacs versions prior to 20.3") diff -r 1c55655d6702 -r 28f395d8dc7a lisp/x11/x-iso8859-1.el --- a/lisp/x11/x-iso8859-1.el Mon Aug 13 09:41:47 2007 +0200 +++ b/lisp/x11/x-iso8859-1.el Mon Aug 13 09:42:26 2007 +0200 @@ -19,6 +19,7 @@ ;; Boston, MA 02111-1307, USA. ;; created by jwz, 13-jun-92. +;; changed by Heiko Muenkel, 12-jun-1997: Added a grave keysym. ;; Under X, when the user types a character that is ISO-8859/1 but not ASCII, ;; it comes in as a symbol instead of as a character code. This keeps things @@ -93,6 +94,7 @@ ;; distributions. If a vendor varies from this, adjustments will need ;; to be made... + (grave ?\140) (nobreakspace ?\240) (exclamdown ?\241) (cent ?\242) @@ -116,9 +118,9 @@ (acute ?\264) ; Why is there an acute keysym that is (mu ?\265) ; distinct from apostrophe/quote, but (paragraph ?\266) ; no grave keysym that is distinct from - (periodcentered ?\267) ; backquote? - (cedilla ?\270) - (onesuperior ?\271) + (periodcentered ?\267) ; backquote? + (cedilla ?\270) ; I've added the grave keysym, because it's + (onesuperior ?\271) ; used in x-compose (Heiko Muenkel). (masculine ?\272) (guillemotright ?\273) (onequarter ?\274) diff -r 1c55655d6702 -r 28f395d8dc7a man/custom.texi --- a/man/custom.texi Mon Aug 13 09:41:47 2007 +0200 +++ b/man/custom.texi Mon Aug 13 09:42:26 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo.tex @c %**start of header -@setfilename custom +@setfilename ../info/custom @settitle The Customization Library @iftex @afourpaper @@ -36,12 +36,12 @@ Add @var{symbol} to that group. @item :link @var{value} should be a widget type. -Add @var{value} to the extrenal links for this customization option. +Add @var{value} to the external links for this customization option. Useful widget types include @code{custom-manual}, @code{info-link}, and @code{url-link}. @item :load -Add @var{value} to the files that should be loaded nefore displaying -this customization option. The value should be iether a string, which +Add @var{value} to the files that should be loaded before displaying +this customization option. The value should be either a string, which should be a string which will be loaded with @code{load-library} unless present in @code{load-history}, or a symbol which will be loaded with @code{require}. @@ -143,7 +143,8 @@ @item :require @var{value} should be a feature symbol. Each feature will be required -after initialization, of the the user have saved this option. +when the `defcustom' is evaluated, or when Emacs is started if the user +has saved this option. @end table @@ -157,7 +158,7 @@ user, and @code{variable-documentation} for the documentation string. Use @code{custom-add-option} to specify that a specific function is -useful as an meber of a hook. +useful as an member of a hook. @defun custom-add-option symbol option To the variable @var{symbol} add @var{option}. @@ -322,7 +323,7 @@ @samp{}.@refill @item -Explain why it is necessary that all choices have differnet default +Explain why it is necessary that all choices have different default values. @item diff -r 1c55655d6702 -r 28f395d8dc7a man/widget.texi --- a/man/widget.texi Mon Aug 13 09:41:47 2007 +0200 +++ b/man/widget.texi Mon Aug 13 09:42:26 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo.tex @c %**start of header -@setfilename widget +@setfilename ../info/widget @settitle The Emacs Widget Library @iftex @afourpaper @@ -13,7 +13,7 @@ @comment node-name, next, previous, up @top The Emacs Widget Library -Version: 1.9908 +Version: 1.9916 @menu * Introduction:: @@ -343,7 +343,7 @@ :notify (lambda (widget &rest ignore) (message "You selected %s" (widget-value widget))) - '(item "One") '(item "Anthor One.") '(item "A Final One.")) + '(item "One") '(item "Another One.") '(item "A Final One.")) (widget-insert "\n") (widget-create 'push-button :notify (lambda (&rest ignore) @@ -604,7 +604,7 @@ @end deffn @deffn{User Option} widget-glyph-enable -If non-nil, allow glyphs to appear on displayes where they are supported. +If non-nil, allow glyphs to appear on displays where they are supported. @end deffn @@ -738,7 +738,7 @@ @item :keymap Keymap used in the editable field. The default value is @code{widget-field-keymap}, which allows you to use all the normal -editing commands, even if the buffers major mode supress some of them. +editing commands, even if the buffers major mode suppress some of them. Pressing return invokes the function specified by @code{:action}. @end table @@ -1525,7 +1525,7 @@ intended to be useful for programmers doing experiments. @deffn Command widget-minor-mode -Togle minor mode for traversing widgets. +Toggle minor mode for traversing widgets. With arg, turn widget mode on if and only if arg is positive. @end deffn @@ -1571,7 +1571,7 @@ Finish @code{:tab-order}. @item -Make indentation work with glyphs and propertional fonts. +Make indentation work with glyphs and proportional fonts. @item Add commands to show overview of object and class hierarchies to the diff -r 1c55655d6702 -r 28f395d8dc7a src/ChangeLog --- a/src/ChangeLog Mon Aug 13 09:41:47 2007 +0200 +++ b/src/ChangeLog Mon Aug 13 09:42:26 2007 +0200 @@ -1,3 +1,50 @@ +1997-06-13 Steven L Baur + + * data.c (eq_with_ebola_notice): Remove horrible hack to avoid + unavoidable Ebola notices in the bytecompiler. + + * emacsfns.h: Fextent_in_region_p: Move. + + * keymap.c Fextent_in_region_p: Move. + +Fri Jun 13 00:38:29 1997 Kyle Jones + + * src/console.c (Fsuspend_console): + Disable input on ttys. Hide unhidden frames. + + * src/console.c (Fresume_console): + Enable input on ttys. Raise the device selected frame. + +Fri Jun 13 00:25:46 1997 Kyle Jones + + * process.c (status_notify): + Revert back to the code that does not use + save_excursion_restore. Just bounds check opoint + instead. + + * process.c (read_process_output): + Bounds check saved clip region and point values for + validity before using them. Call Fwiden before calling + Fnarrow_to_region to insure values will not be out of + range. + +1997-06-12 Steven L Baur + + * alloc.c: Make the GC cursor appear on all frames. + From Hrvoje Niksic + +1997-06-11 Steven L Baur + + * data.c (eq_with_ebola_notice): Add byte-optimize-logmumble and + byte-compile-push-constant to list of ignored functions. + +1997-06-11 Hrvoje Niksic + + * bytecode.c (Bsave_current_buffer): Register. + (Fbyte_code): Do action. + + * editfns.c (Fsave_current_buffer): New SUBR. + 1997-06-11 Steven L Baur * syntax.c (Fchar_syntax): Handle case of being passed nil. diff -r 1c55655d6702 -r 28f395d8dc7a src/alloc.c --- a/src/alloc.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/alloc.c Mon Aug 13 09:42:26 2007 +0200 @@ -3956,12 +3956,12 @@ char stack_top_variable; extern char *stack_bottom; int i; - struct frame *f = selected_frame (); int speccount = specpdl_depth (); Lisp_Object pre_gc_cursor = Qnil; + Lisp_Object changed_frames = Qnil; struct gcpro gcpro1; - int cursor_changed = 0; + int cursor_changed_selected_frame = 0; if (gc_in_progress != 0) return; @@ -3972,7 +3972,7 @@ if (preparing_for_armageddon) return; - GCPRO1 (pre_gc_cursor); + GCPRO1 (changed_frames); /* Very important to prevent GC during any of the following stuff that might run Lisp code; otherwise, we'll likely @@ -3987,36 +3987,55 @@ /* Now show the GC cursor/message. */ if (!noninteractive) { - if (FRAME_WIN_P (f)) + /* No need to gcpro this; gc won't catch us now. */ + Lisp_Object frmcons, devcons, concons; + Lisp_Object selframe = make_frame (selected_frame ()); + + FRAME_LOOP_NO_BREAK (frmcons, devcons, concons) { - Lisp_Object frame = make_frame (f); - Lisp_Object cursor = glyph_image_instance (Vgc_pointer_glyph, - FRAME_SELECTED_WINDOW (f), - ERROR_ME_NOT, 1); - pre_gc_cursor = f->pointer; - if (POINTER_IMAGE_INSTANCEP (cursor) - /* don't change if we don't know how to change back. */ - && POINTER_IMAGE_INSTANCEP (pre_gc_cursor)) + struct frame *f = XFRAME (XCAR (frmcons)); + int cursor_changed; + + if (FRAME_WIN_P (f)) { - cursor_changed = 1; - Fset_frame_pointer (frame, cursor); + Lisp_Object frame = XCAR (frmcons); + Lisp_Object cursor = + glyph_image_instance (Vgc_pointer_glyph, + FRAME_SELECTED_WINDOW (f), + ERROR_ME_NOT, 1); + pre_gc_cursor = f->pointer; + if (POINTER_IMAGE_INSTANCEP (cursor) + /* don't change if we don't know how to change back. */ + && POINTER_IMAGE_INSTANCEP (pre_gc_cursor)) + { + Fset_frame_pointer (frame, cursor); + /* Add the frame to the list. */ + changed_frames = Fcons (pre_gc_cursor, changed_frames); + changed_frames = Fcons (XCAR (frmcons), changed_frames); + if (EQ (XCAR (frmcons), selframe)) + cursor_changed_selected_frame = 1; + } } } - - /* Don't print messages to the stream device. */ - if (!cursor_changed && !FRAME_STREAM_P (f)) - { - char *msg = (STRINGP (Vgc_message) - ? GETTEXT ((char *) XSTRING_DATA (Vgc_message)) - : 0); - Lisp_Object args[2], whole_msg; - args[0] = build_string (msg ? msg : - GETTEXT ((CONST char *) gc_default_message)); - args[1] = build_string ("..."); - whole_msg = Fconcat (2, args); - echo_area_message (f, (Bufbyte *) 0, whole_msg, 0, -1, - Qgarbage_collecting); - } + /* Now handle the plain old message. */ + { + struct frame *f = XFRAME (selframe); + /* Don't print messages to the stream device. */ + if (!cursor_changed_selected_frame && !FRAME_STREAM_P (f)) + { + char *msg = (STRINGP (Vgc_message) + ? GETTEXT ((char *) XSTRING_DATA (Vgc_message)) + : 0); + Lisp_Object args[2], whole_msg; + args[0] = + build_string (msg ? msg : + GETTEXT ((CONST char *) gc_default_message)); + args[1] = build_string ("..."); + whole_msg = Fconcat (2, args); + echo_area_message (f, (Bufbyte *) 0, whole_msg, 0, -1, + Qgarbage_collecting); + } + } } /***** Now we actually start the garbage collection. */ @@ -4152,9 +4171,13 @@ /* Now remove the GC cursor/message */ if (!noninteractive) { - if (cursor_changed) - Fset_frame_pointer (make_frame (f), pre_gc_cursor); - else if (!FRAME_STREAM_P (f)) + Lisp_Object tail = changed_frames; + while (CONSP (tail) && CONSP (XCDR (tail))) + { + Fset_frame_pointer (XCAR (tail), XCAR (XCDR (tail))); + tail = XCDR (XCDR (tail)); + } + if (!cursor_changed_selected_frame && !FRAME_STREAM_P (selected_frame ())) { char *msg = (STRINGP (Vgc_message) ? GETTEXT ((char *) XSTRING_DATA (Vgc_message)) diff -r 1c55655d6702 -r 28f395d8dc7a src/bytecode.c --- a/src/bytecode.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/bytecode.c Mon Aug 13 09:42:26 2007 +0200 @@ -155,7 +155,8 @@ #define Bbobp 0157 #define Bcurrent_buffer 0160 #define Bset_buffer 0161 -#define Bread_char 0162 /* No longer generated as of v19 */ +#define Bsave_current_buffer 0162 /* was Bread_char, but no longer + generated as of v19 */ #define Bmemq 0163 /* was Bset_mark, but no longer generated as of v18 */ #define Binteractive_p 0164 /* Needed since interactive-p takes unevalled args */ @@ -941,9 +942,14 @@ TOP = Fset_buffer (TOP); break; - case Bread_char: - error ("read-char is an obsolete byte code"); - break; + case Bsave_current_buffer: + { + Lisp_Object save_current_buffer_restore (Lisp_Object); + + record_unwind_protect (save_current_buffer_restore, + Fcurrent_buffer ()); + break; + } case Binteractive_p: PUSH (Finteractive_p ()); diff -r 1c55655d6702 -r 28f395d8dc7a src/console.c --- a/src/console.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/console.c Mon Aug 13 09:42:26 2007 +0200 @@ -914,34 +914,35 @@ */ (console)) { - Lisp_Object devcons; - Lisp_Object framecons; struct console *c; - struct gcpro gcpro1; #ifdef HAVE_TTY - if (NILP (console)) - console=Fselected_console(); - - GCPRO1 (console); - - c = decode_console(console); + c = decode_console (console); if (CONSOLE_TTY_P (c)) { - CONSOLE_DEVICE_LOOP (devcons, c) + /* + * hide all the unhidden frames so the display code won't update + * them while the console is suspended. + */ + Lisp_Object device = CONSOLE_SELECTED_DEVICE (c); + if (!NILP (device)) { - struct device *d = XDEVICE (XCAR (devcons)); - DEVICE_FRAME_LOOP (framecons, d) + struct device *d = XDEVICE (device); + Lisp_Object frame_list = DEVICE_FRAME_LIST (d); + while (CONSP (frame_list)) { - Fmake_frame_invisible(XCAR(framecons), Qt); + struct frame *f = XFRAME (XCAR (frame_list)); + if (FRAME_REPAINT_P (f)) + f->visible = -1; + frame_list = XCDR (frame_list); } } - reset_one_console(c); + reset_one_console (c); + event_stream_unselect_console (c); sys_suspend_process(XINT(Fconsole_tty_controlling_process(console))); } - UNGCPRO; #endif return Qnil; } @@ -952,27 +953,28 @@ */ (console)) { - Lisp_Object devcons; - Lisp_Object framecons; struct console *c; - struct gcpro gcpro1, gcpro2, gcpro3; #ifdef HAVE_TTY - GCPRO2 (console, devcons); + c = decode_console (console); - c = decode_console(console); - - if (CONSOLE_TTY_P(c)) + if (CONSOLE_TTY_P (c)) { - CONSOLE_DEVICE_LOOP (devcons, c) + /* raise the selected frame */ + Lisp_Object device = CONSOLE_SELECTED_DEVICE (c); + if (!NILP (device)) { - struct device *d = XDEVICE (XCAR (devcons)); - DEVICE_FRAME_LOOP (framecons, d) + struct device *d = XDEVICE (device); + Lisp_Object frame = DEVICE_SELECTED_FRAME (d); + if (!NILP (frame)) { - Fmake_frame_visible(XCAR(framecons)); + /* force the frame to be cleared */ + SET_FRAME_CLEAR (XFRAME (frame)); + Fraise_frame (frame); } } - init_one_console(c); + init_one_console (c); + event_stream_select_console (c); #ifdef SIGWINCH /* The same as in Fsuspend_emacs: it is possible that a size change occurred while we were suspended. Assume one did just @@ -981,7 +983,6 @@ #endif } - UNGCPRO; #endif return Qnil; } diff -r 1c55655d6702 -r 28f395d8dc7a src/data.c --- a/src/data.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/data.c Mon Aug 13 09:42:26 2007 +0200 @@ -77,7 +77,10 @@ int debug_ebola_backtrace_length; +#if 0 +/*#ifndef LRECORD_SYMBOL*/ #include "backtrace.h" +#endif int eq_with_ebola_notice (Lisp_Object obj1, Lisp_Object obj2) @@ -86,12 +89,13 @@ && (debug_issue_ebola_notices >= 2 || XREALINT (obj1) == XREALINT (obj2))) { +#if 0 +/*#ifndef LRECORD_SYMBOL*/ struct backtrace *bt = backtrace_list; char *p; /* Continuing the joke by printing `Ebola warning!!!' confuses */ /* too many people. The message must be printed because Emacs used */ /* to work differently for two decades. */ -#ifndef LRECORD_SYMBOL /* temporary hack that will probably be around too long -slb */ if (XTYPE(*bt->function) == Lisp_Symbol) { @@ -100,7 +104,9 @@ !strcmp(p, "byte-compile-constants-vector") || !strcmp(p, "byte-optimize-minus") || !strcmp(p, "byte-optimize-plus") || - !strcmp(p, "byte-decompile-bytecode-1")) goto sc; + !strcmp(p, "byte-decompile-bytecode-1") || + !strcmp(p, "byte-optimize-logmumble") || + !strcmp(p, "byte-compile-push-constant")) goto sc; } #endif stderr_out("Comparison between integer and character is constant nil ("); diff -r 1c55655d6702 -r 28f395d8dc7a src/editfns.c --- a/src/editfns.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/editfns.c Mon Aug 13 09:42:26 2007 +0200 @@ -489,6 +489,30 @@ return unbind_to (speccount, Fprogn (args)); } + +Lisp_Object +save_current_buffer_restore(Lisp_Object buffer) +{ + struct buffer *buf = XBUFFER (buffer); + if (!BUFFER_LIVE_P (buf)) + return Qnil; + set_buffer_internal (buf); + return Qnil; +} + +DEFUN ("save-current-buffer", Fsave_current_buffer, 0, UNEVALLED, 0, /* +Save the current buffer; execute BODY; restore the current buffer. +Executes BODY just like `progn'. +*/ + (args)) +{ + /* This function can GC */ + int speccount = specpdl_depth (); + + record_unwind_protect (save_current_buffer_restore, Fcurrent_buffer ()); + + return unbind_to (speccount, Fprogn (args)); +} DEFUN ("buffer-size", Fbufsize, 0, 1, 0, /* Return the number of characters in BUFFER. @@ -2100,6 +2124,7 @@ DEFSUBR (Fregion_beginning); DEFSUBR (Fregion_end); DEFSUBR (Fsave_excursion); + DEFSUBR (Fsave_current_buffer); DEFSUBR (Fbufsize); DEFSUBR (Fpoint_max); diff -r 1c55655d6702 -r 28f395d8dc7a src/emacsfns.h --- a/src/emacsfns.h Mon Aug 13 09:41:47 2007 +0200 +++ b/src/emacsfns.h Mon Aug 13 09:42:26 2007 +0200 @@ -861,6 +861,11 @@ Lisp_Object prop, Lisp_Object value, Lisp_Object object); +Lisp_Object Fextent_in_region_p(Lisp_Object extent, + Lisp_Object from, + Lisp_Object to, + Lisp_Object flags); + extern Lisp_Object Qdetached, Qdestroyed, Qbegin_glyph, Qend_glyph; extern Lisp_Object Qstart_open, Qend_open, Qread_only; extern Lisp_Object Qunique, Qduplicable; diff -r 1c55655d6702 -r 28f395d8dc7a src/keymap.c --- a/src/keymap.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/keymap.c Mon Aug 13 09:42:26 2007 +0200 @@ -2418,11 +2418,6 @@ which may not itself be under the mouse. */ -extern Lisp_Object Fextent_in_region_p(Lisp_Object extent, - Lisp_Object from, - Lisp_Object to, - Lisp_Object flags); - static void get_relevant_extent_keymaps (Lisp_Object pos, Lisp_Object buffer_or_string, Lisp_Object glyph, diff -r 1c55655d6702 -r 28f395d8dc7a src/process.c --- a/src/process.c Mon Aug 13 09:41:47 2007 +0200 +++ b/src/process.c Mon Aug 13 09:42:26 2007 +0200 @@ -1771,12 +1771,24 @@ /* If the restriction isn't what it should be, set it. */ if (old_begv != BUF_BEGV (buf) || old_zv != BUF_ZV (buf)) - Fnarrow_to_region (make_int (old_begv), make_int (old_zv), - p->buffer); + { + Fwiden(p->buffer); + old_begv = bufpos_clip_to_bounds (BUF_BEG (buf), + old_begv, + BUF_Z (buf)); + old_zv = bufpos_clip_to_bounds (BUF_BEG (buf), + old_zv, + BUF_Z (buf)); + Fnarrow_to_region (make_int (old_begv), make_int (old_zv), + p->buffer); + } /* Handling the process output should not deactivate the mark. */ zmacs_region_stays = old_zmacs_region_stays; buf->read_only = old_read_only; + old_point = bufpos_clip_to_bounds (BUF_BEGV (buf), + old_point, + BUF_ZV (buf)); BUF_SET_PT (buf, old_point); UNGCPRO; @@ -2600,19 +2612,19 @@ when a process becomes runnable. */ else if (!EQ (symbol, Qrun) && !NILP (p->buffer)) { - int speccount = specpdl_depth (); + Lisp_Object old_read_only = Qnil; + Lisp_Object old = Fcurrent_buffer (); + Bufpos opoint; + struct gcpro ngcpro1, ngcpro2; /* Avoid error if buffer is deleted (probably that's why the process is dead, too) */ if (!BUFFER_LIVE_P (XBUFFER (p->buffer))) continue; - record_unwind_protect (save_excursion_restore, - save_excursion_save ()); + NGCPRO2 (old, old_read_only); Fset_buffer (p->buffer); - record_unwind_protect (save_excursion_restore, - save_excursion_save ()); - specbind(Qbuffer_read_only, Qnil); + opoint = BUF_PT (current_buffer); /* Insert new output into buffer at the current end-of-output marker, thus preserving logical ordering of input and output. */ @@ -2620,13 +2632,27 @@ BUF_SET_PT (current_buffer, marker_position (p->mark)); else BUF_SET_PT (current_buffer, BUF_ZV (current_buffer)); + if (BUF_PT (current_buffer) <= opoint) + opoint += (string_char_length (XSTRING (msg)) + + string_char_length (XSTRING (p->name)) + + 10); + + old_read_only = current_buffer->read_only; + current_buffer->read_only = Qnil; buffer_insert_c_string (current_buffer, "\nProcess "); Finsert (1, &p->name); buffer_insert_c_string (current_buffer, " "); Finsert (1, &msg); + current_buffer->read_only = old_read_only; Fset_marker (p->mark, make_int (BUF_PT (current_buffer)), p->buffer); - unbind_to(speccount, Qnil); + + opoint = bufpos_clip_to_bounds(BUF_BEGV (XBUFFER (p->buffer)), + opoint, + BUF_ZV (XBUFFER (p->buffer))); + BUF_SET_PT (current_buffer, opoint); + Fset_buffer (old); + NUNGCPRO; } } } /* end for */