diff options
author | Miles Bader <miles@gnu.org> | 2005-06-30 00:31:46 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2005-06-30 00:31:46 +0000 |
commit | eeb88b27e1dbd3f412aa684d44e4a784f6e536a2 (patch) | |
tree | 23ea1eda87f588e060b6c00e9c7ffac6a89a7e42 | |
parent | 16e1457021e3f6e3b83fc9b5262fde38b7140c96 (diff) | |
parent | 84861437f914ac45c1eea7b6477ffc4783bb3bdd (diff) | |
download | emacs-eeb88b27e1dbd3f412aa684d44e4a784f6e536a2.tar.gz |
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-67
Merge from emacs--cvs-trunk--0
Patches applied:
* emacs--cvs-trunk--0 (patch 447-458)
- Update from CVS
- Update from CVS: lisp/subr.el (add-to-ordered-list): Doc fix.
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 83-85)
- Merge from emacs--cvs-trunk--0
- Update from CVS
79 files changed, 6403 insertions, 1265 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index ce878fc173f..eb0e06750da 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -14,6 +14,8 @@ has to be set to nil: when t, it can leak memory and cause other problems. ** Check for widow and orphan lines in manuals; make sure all the pages really look ok in the manual as formatted. +** Update facemenu-unlisted-faces, adding whatever other +face name prefixes should be in it for good results. * NEW FEATURES @@ -21,9 +23,6 @@ make sure all the pages really look ok in the manual as formatted. gracefully if something isn't supported over Tramp. To be done by Andre Spiegel <spiegel@gnu.org>. -** define-minor-mode should not put :require into defcustom. -See msg from rms to emacs-devel on 21 Dec. - ** Update Speedbar. ** Update vhdl-mode.el based on changes in @@ -43,6 +42,36 @@ invalid pointer from string_free_list. * BUGS +** Bug in ebrowse + +Date: Fri, 27 May 2005 17:35:48 +0200 +From: Markus Gritsch <gritsch@iue.tuwien.ac.at> + +the C++ header file which led to the problematic BROWSE file reads + +namespace test { + class Base + { + }; + + class B : public Base + { + }; +} + +class A : public test::Base +{ +}; + +The *Tree* is then displayed as + + *Globals* + test + test::Base + test::B + +The class A seems to be missing. + ** Ange-ftp should ignore irrelevant IPv6 errors: Message-Id: <4121-Tue23Mar2004165249+0100-piet@cs.uu.nl> diff --git a/etc/ChangeLog b/etc/ChangeLog index 9fb41788feb..8ed59b05be3 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,12 @@ +2005-06-29 Carsten Dominik <dominik@science.uva.nl> + + * NEWS: Added an entry for Org-mode, and a change entry for + reftex-mode. + +2005-06-28 Richard M. Stallman <rms@gnu.org> + + * PROBLEMS (Fedora Core 4 GNU/Linux: Segfault during dumping): New. + 2005-06-11 Eli Zaretskii <eliz@gnu.org> * DEBUG: Mention emacs-buffer.gdb. @@ -1623,6 +1623,21 @@ must remove older versions of cua.el or cua-mode.el as well as the loading and customization of those packages from the .emacs file. +++ +** Org mode is now part of the Emacs distribution + +Org mode is a mode for keeping notes, maintaining ToDo lists, and +doing project planning with a fast and effective plain-text system. +It also contains a plain-text table editor with spreadsheet-like +capabilities. + +The Org mode table editor can be integrated into any major mode by +activating the minor Orgtbl-mode. + +The documentation for org-mode is in a separate manual; within Emacs, +type "C-h i m org RET" to read that manual. A reference card is +available in `etc/orgcard.tex' and `etc/orgcard.ps'. + ++++ ** The new package dns-mode.el add syntax highlight of DNS master files. The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used to increment the SOA serial. @@ -2277,6 +2292,80 @@ majority. the syntax of backslashes in F90 buffers. --- +** Reftex mode changes ++++ +*** Changes to RefTeX's table of contents + +The new command keys "<" and ">" in the TOC buffer promote/demote the +section at point or all sections in the current region, with full +support for multifile documents. + +The new command `reftex-toc-recenter' (`C-c -') shows the current +section in the TOC buffer without selecting the TOC window. +Recentering can happen automatically in idle time when the option +`reftex-auto-recenter-toc' is turned on. The highlight in the TOC +buffer stays when the focus moves to a different window. A dedicated +frame can show the TOC with the current section always automatically +highlighted. The frame is created and deleted from the toc buffer +with the `d' key. + +The toc window can be split off horizontally instead of vertically. +See new option `reftex-toc-split-windows-horizontally'. + +Labels can be renamed globally from the table of contents using the +key `M-%'. + +The new command `reftex-goto-label' jumps directly to a label +location. + ++++ +*** Changes related to citations and BibTeX database files + +Commands that insert a citation now prompt for optional arguments when +called with a prefix argument. Related new options are +`reftex-cite-prompt-optional-args' and `reftex-cite-cleanup-optional-args'. + +The new command `reftex-create-bibtex-file' creates a BibTeX database +with all entries referenced in the current document. The keys "e" and +"E" allow to produce a BibTeX database file from entries marked in a +citation selection buffer. + +The command `reftex-citation' uses the word in the buffer before the +cursor as a default search string. + +The support for chapterbib has been improved. Different chapters can +now use BibTeX or an explicit `thebibliography' environment. + +The macros which specify the bibliography file (like \bibliography) +can be configured with the new option `reftex-bibliography-commands'. + +Support for jurabib has been added. + ++++ +*** Global index matched may be verified with a user function + +During global indexing, a user function can verify an index match. +See new option `reftex-index-verify-function'. + ++++ +*** Parsing documents with many labels can be sped up. + +Operating in a document with thousands of labels can be sped up +considerably by allowing RefTeX to derive the type of a label directly +from the label prefix like `eq:' or `fig:'. The option +`reftex-trust-label-prefix' needs to be configured in order to enable +this feature. While the speed-up is significant, this may reduce the +quality of the context offered by RefTeX to describe a label. + ++++ +*** Miscellaneous changes + +The macros which input a file in LaTeX (like \input, \include) can be +configured in the new option `reftex-include-file-commands'. + +RefTeX supports global incremental search. + ++++ ** Prolog mode has a new variable `prolog-font-lock-keywords' to support use of font-lock. @@ -4172,6 +4261,7 @@ return window edges in units of pixels, rather than columns and lines. +++ *** The new macro `with-selected-window' temporarily switches the selected window without impacting the order of `buffer-list'. +It saves and restores the current buffer, too. +++ *** `select-window' takes an optional second argument NORECORD. @@ -4181,7 +4271,8 @@ This is like `switch-to-buffer'. +++ *** `save-selected-window' now saves and restores the selected window of every frame. This way, it restores everything that can be changed -by calling `select-window'. +by calling `select-window'. It also saves and restores the current +buffer. +++ *** `set-window-buffer' has an optional argument KEEP-MARGINS. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index f2c0cfaec50..0fc5bb299b6 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -965,6 +965,20 @@ xmodmap command to the xdm setup script for that display. Use the shell command `xset bc' to make the old X Menu package work. +*** C-SPC fails to work on Fedora GNU/Linux. + +Fedora Core 4 steals the C-SPC key by default for the `iiimx' program +which is the input method for some languages. It blocks Emacs users +from using the C-SPC key for `set-mark-command'. + +One solutions is to remove the `<Ctrl>space' from the `Iiimx' file +which can be found in the `/usr/lib/X11/app-defaults' directory. +However, that requires root access. + +Another is to specify `Emacs*useXIM: false' in your X resources. + +Another is to build Emacs with the `--without-xim' configure option. + *** M-SPC seems to be ignored as input. See if your X server is set up to use this as a command @@ -2367,7 +2381,9 @@ The fix is to install a newer version of ncurses, such as version 4.2. With certain recent Linux kernels (like the one of Redhat Fedora Core 1 and 2), the new "Exec-shield" functionality is enabled by default, which -creates a different memory layout that breaks the emacs dumper. +creates a different memory layout that breaks the emacs dumper. +The work-around explained here is not enough on Fedora Core 4. Read the +next item. Configure can overcome the problem of exec-shield if the architecture is x86 and the program setarch is present. On other architectures no @@ -2394,6 +2410,20 @@ command when running temacs like this: setarch i386 ./temacs --batch --load loadup [dump|bootstrap] +*** Fedora Core 4 GNU/Linux: Segfault during dumping. + +In addition to exec-shield explained above "Linux: Segfault during +`make bootstrap' under certain recent versions of the Linux kernel" +item, Linux kernel shipped with Fedora Core 4 randomizes the virtual +address space of a process. As the result dumping is failed even if +you turn off the exec-shield. In such case use -R option of setarch +command: + + setarch -R i386 ./temacs --batch --load loadup [dump|bootstrap] + +or + + setarch -R i386 make bootstrap *** Fatal signal in the command temacs -l loadup inc dump. diff --git a/etc/TUTORIAL.translators b/etc/TUTORIAL.translators index 671c52e0b1e..dfda17bedb7 100644 --- a/etc/TUTORIAL.translators +++ b/etc/TUTORIAL.translators @@ -48,8 +48,7 @@ Maintainer: Pieter Schoenmakers <tiggr@tiggr.net> * TUTORIAL.pl: Author: Beatę Wierzchołowską <beataw@orient.uw.edu.pl> Janusz S. Bien <jsbien@mail.uw.edu.pl> -Maintainer: Beatę Wierzchołowską <beataw@orient.uw.edu.pl> - Janusz S. Bien <jsbien@mail.uw.edu.pl> +Maintainer: Radoslaw Moszczynski <rm@banita.pl> * TUTORIAL.pt_BR: Author: Marcelo Toledo <marcelo@gnu.org> diff --git a/etc/orgcard.ps b/etc/orgcard.ps new file mode 100644 index 00000000000..0653b59e56f --- /dev/null +++ b/etc/orgcard.ps @@ -0,0 +1,2749 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software +%%Title: org-ref.dvi +%%Pages: 2 +%%PageOrder: Ascend +%%Orientation: Landscape +%%BoundingBox: 0 0 596 842 +%%DocumentFonts: CMBX10 CMR8 CMTT8 CMR7 CMSY8 CMBX8 CMTI8 CMR6 CMSY6 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -t landscape -o org-ref.ps org-ref.dvi +%DVIPSParameters: dpi=600, compressed +%DVIPSSource: TeX output 2005.06.29:1143 +%%BeginProcSet: texc.pro +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 +1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx +0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx +sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ +rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp +gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B +/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ +/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ +A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy +get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} +ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp +fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 +{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add +chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ +1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} +forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: f7b6d320.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10 +% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8 +% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 +% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10 +% +/TeXf7b6d320Encoding [ +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega +/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve +/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash +/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand +/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen +/period /slash /zero /one /two /three /four /five /six /seven /eight +/nine /colon /semicolon /exclamdown /equal /questiondown /question /at +/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X +/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent +/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u +/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef +/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute +/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE +/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +] def + +%%EndProcSet +%%BeginProcSet: 09fbbfac.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9 +/TeX09fbbfacEncoding [ +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi +/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown +/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla +/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam +/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft +/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon /less +/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N +/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright +/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l +/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright +/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi +/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown +/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute +/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE +/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +] def + +%%EndProcSet +%%BeginProcSet: bbad153f.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9 +% +/TeXbbad153fEncoding [ +/minus /periodcentered /multiply /asteriskmath /divide /diamondmath +/plusminus /minusplus /circleplus /circleminus /circlemultiply +/circledivide /circledot /circlecopyrt /openbullet /bullet +/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal +/greaterequal /precedesequal /followsequal /similar /approxequal +/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows +/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast +/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup +/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional +/prime /infinity /element /owner /triangle /triangleinv /negationslash +/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur +/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K +/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection +/unionmulti /logicaland /logicalor /turnstileleft /turnstileright +/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright +/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv +/backslash /wreathproduct /radical /coproduct /nabla /integral +/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section +/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/minus /periodcentered /multiply /asteriskmath /divide /diamondmath +/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef +/circlemultiply /circledivide /circledot /circlecopyrt /openbullet +/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset +/lessequal /greaterequal /precedesequal /followsequal /similar +/approxequal /propersubset /propersuperset /lessmuch /greatermuch +/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +] def + +%%EndProcSet +%%BeginProcSet: 74afc74c.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10 +% +/TeX74afc74cEncoding [ +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega +/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve +/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash +/suppress /exclam /quotedblright /numbersign /sterling /percent +/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma +/hyphen /period /slash /zero /one /two /three /four /five /six /seven +/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question +/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W +/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent +/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u +/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef +/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute +/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE +/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +] def + +%%EndProcSet +%%BeginProcSet: texps.pro +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: CMSY6 +%!PS-AdobeFont-1.1: CMSY6 1.0 +%%CreationDate: 1991 Aug 15 07:21:34 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY6) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY6 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-4 -948 1329 786}readonly def +/UniqueID 5000816 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6 +49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E +9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2 +1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761 +6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0 +007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673 +F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115 +C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571 +CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B +85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5 +6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45 +0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9 +AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199 +72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56 +4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83 +2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5 +E97F71E04BB623E0BC9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR6 +%!PS-AdobeFont-1.1: CMR6 1.0 +%%CreationDate: 1991 Aug 20 16:39:02 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR6) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR6 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-20 -250 1193 750}readonly def +/UniqueID 5000789 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C +BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E +CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A +C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5 +D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D +23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8 +D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B +93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711 +6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4 +EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953 +CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF +D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE +00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5 +B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E07BB563C96C0A3E +6D4DF600BB73729BC4A5B134928F1370B9F07C587F79388B1D9AC62BFB1566DD +CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43 +0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F +08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E +588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C2 +C87A1A169C5ADE44B561EC1660E617FB39D1B1547B33C0FEB33C3A1D7340A62A +CD9CEFA49481F19B39A704A53A0B98A11744143CDDA0E668E6325935C6497A9F +AFF471194932AFECBF25B441AD55A43751FBAB76F3E544C4254AEC4BEB5CFE4C +C1318C3A0FAD0E8C1BABEE20B203E1DD9412E66BC55BEBD6FBBEBA84F56604FD +85D50F733D9794611F4137EC10ACB4C4ECA5A81CAACC45213E92ED3C26726BBE +91430E7633A2BDB8EA3D0C55259D7DBE468AC0964A63728C9B8EA4E15CF0EEA3 +2E754B9170EAE6B8818DCCDDAD643B9F6C91C3C5B245CD442358C60AF390DC76 +342E659D4EC45552626F069F346F46B18062CE26D5912336C6B29FCBFA5C3113 +ED86E44B529CD95B7B5B934D899762C4F3457F56ACCC763BCCD5BD08975EB5F1 +C5216DA4CBF3409EC71054B0145183F7DFB31517D199EB16D4C6DB0AF05E5720 +10B06F395BE3C8C59CEEBCEA1E00F9EA3FD880AC197508CEC11E33B6B6EABE3C +0FAEBF246743F62D280875D052656696AA88DABB918F793CB2994A1ACCFA0CAE +AF6FDDF489109DEF07F93B5B0078FC5FD9829DD296F62F23400F5DD6CB096557 +EDA737413C744FDBB0615BD40A79EA2929EB7AC767E58D886B310700733D2895 +3925911133631F28291974294AACF4A35F92A5E5262DCF33810A6F9C51E9D141 +F84B0C26B5ADECB44B646C79DD1C656529B7122739C0459B2B47A2C357EF9A36 +2B376DDF54F1F4F133419EF14CCC6010D360DFA8A7B122FFC5A4C560ED184F16 +057D3F76B6B2E935B31B17FC4066916FFBA0B9AFF287D251985AB3FC3D0D7E9A +91F094356B3D6CDBCB2D74A3FDE23526B22C223EA35C9E5054053B23AF004324 +80F023FCDFDFA6B8F0E03A799D87FC2690C5D1ABB9C52B03402E37309091A1FC +1D66EB48FE3E4BD326AA65839A9A7276C876F8079C11F2F3A7CBFDAB5AD3D4A3 +8377AE4862F390039E3FBE5D79B5318774B0A9B1321AAFCE8E87568C0AD0E82F +D4DCEEA5DD4EFDB2E89D336174E76036DA08DE4A26FC63560057B87FDE9E060A +3AA30E1B447B1E8EF31762C0998DF24B2860CF8B589FCE1050CC259171420306 +F4DAC090E032E4C3E0DD43305541155C1EB135B2093F7E23106387AB7A3DA0E6 +1A835F6D058227003A8C974907CC073F2ADE33AA774165BB24381E65DF19FD6E +F15BB66BBAB0129C79A80CF32E542B68FFAD1BCBF6A4D867933FBBFA82771E7F +1B2E677040596B7872A038FF8F23511C33E23D362CED5E303736D1CA28D78AA2 +20701B83020AE62003DC59413C6A2413C593CDC819644742F8CDF60D541710C6 +5A23FFCE6F6CF6AE26953CA4F01A62D6F7DB8F122B30506891DA023D16E56BE4 +84D72EC9DE3B16197B3BF97EB8A840BD2C17861583477317DEA062693B2EA959 +5F5233B416B4E1D63C6014BB96D0718DD9D81A885793F315402E91C274122E5D +96AF9A05E10DA6276A33E861C006807BBA6B005583CD961491D5F183B62EA558 +C50F25F2F6B211BD3723FF98E01167C48C0A6CCEA0477895D21519AE86FEB4D7 +47C77202688775B4C86882C20D24EBF7AC98A3B9BCBFF750433E17824A4425C5 +7444E5201F1313A4C9FF361FCD9ECB1597C1F0605FEA98DD109C636433920603 +6671529E0E7AE2EC8A7D196FCA784D3CD2F88190B3F150533BAF3CFE15247D01 +864A2552F602D65088AA7F0D87C02768D8FA62930E18702F98558982C5A202AC +111C6B0359273116F1DF9E5610AC46B99995425144D1352A881C79D9E0042850 +B51B2375DA55C34A47510C7D7435FAE7D391BAEC1F8BC0C93B866E7CE261384C +6B277C66E817BF006B636AB133309384FE0985DBC34190E1E1ABB3A63892361C +9970FC5732C7A4259809EEF348E6D3BC6AAB5BB012A098A02E33F9BDDA250A8A +421EE4EBA46B82C10A5A6ADB2390A7B363CF16A0FFEFAAD7F6D2A80FE4720095 +BD78A6E4B95D6FC7DA4196E61C5FD0F9F37537E6BA581496E38625EF0B7826DF +F021663E6D5DF3C93C5EC2C5B510867ABFC5404F490C683337EE7B22D3CBE7DC +8EB4F9F2C25034C8779010A6835ACED2B05B9CF9753760A803073509C71A6372 +3634DB39F894B6EBAA9A34511357F3C106E42E9A6A592C1B49BB0AF668C95448 +9E0968CE39754452648068F82C53CA2ABE392713979634E7DD66819E7B3FF5D3 +A8890FA876857F4560A44029389A6E425ED8DBB25BFDDCFB510C071414760191 +A36723D251F10830B03E21B6FD61C1E92BD630B5EFD283AF248DA69C537D6F0C +1CDC58032A7A91E836FF66810D886A73453A28044F55F754CD70A9B3EB5D27DF +51D6E57085AC4487C5D015FC51F840F7DBB1733500062C608802C556F8A4623D +0F94B67BC91E07FC2AD7E067F3C033E53216804B7371498113125A8CFC63D450 +4760B98ED1397A8862A8FA5D13923D22ABDF48B7F502916EF7C7D6BC52EBA5F7 +AD95E37E4979B7417C8C0E2599E4BB85883AF9E9A3C9DA432859AF9C909DDA53 +8ED9C0B3DC6BF49C5FB81780078209D21E6B54A8E669212B6E3569B615502ECA +D67BC610E59409178B640ECD0A125371ECAA360FDD5843892BCBD22BF4D640EB +99515496E12E2C68567610FC8F6E03C176D14B692A9A23BE3B50C2EB30BCE5F4 +481500B293CA54AAE5CA0A85C221493792B967423418E870C4DC7344E07A7E52 +1B2DED4C2FED4C602DCF37065FEE9BDE6D1FD95FEC1F30A5E3A1833B09E6B1DA +D6A41C57493D4C1D8D87C8BE2443D2B917A0E3D26C324CA101E84369AFA73586 +E499C3627661DCFABF7478DCEF651E33C666957BE759F9DCB9F263AD3FA48BBF +B47A84A914CFD8297141FF5AD0186753DADAD79315D14C68C19305D73DE6E4DB +56BDDF037DA982E956F9C3B554E0746178294ABF6F46D1669D1675AEB8C924EB +F9966956C8AC25940640B8C9DE9A76B36D04806A918FB4F7160503031AEB7DD4 +61C04BD3F6711F09EC71FEB6EA3904FD8AF75054659ECE0DAAEA1A614AAC6574 +9098FB7BD891E65552583AA519C7E4F9E6B5531B2215300CB262F42763BFDF5D +FA2E6EB7E7F6585C80CD880ABAE340087A781C7EABD56C59A14EC17920FA7AE3 +049BA2DE8D5BB77ADECA23767F842642B7C0CC9AA177990CF0DD00A9DD8458CA +5506DD3A5E5BCF2329047F560F0E30FCA7CA304594B738A0C7C70D8FE364AF59 +620E6527C061B6FECEBEEF0841969656F1A7A27731338B640A3AF243F58FBBF8 +E8ADA1CCD8DE701243EBA2E1F44C732143BFC4FA89B24B3B473CDC022111D477 +ADDB77AAA600B6C6948133D05EF0838BD1E1EA1C747BDBA8A0BBF92DADE753EE +9F556D938E16961C2D13E7534B2B5F9EFEB2AFD65FADA831E81237BEDE73F7FA +B076E562E08D57555B3830834B64E4C1E0E1F89D9A5BFB959032106B1EFEE431 +DC828EB4EF66DEA434DAF191E92F1EFDC31954D055DDD87B1A2762DAD6AE5994 +322DC4FA2FCA4AADC293158C75900C540BC85384340B29A4B25F486145C311D0 +4296CA91BB16569CDAFDC9047D9FC8C26792828DD3CA18E045A2F9B473491501 +CD3ADB57FB1D94C1A0353861EAC98E1630E14BEA6DFB04A5B3FAE97F4EA3C792 +2C9ACBF61A5C14605AC9D0DA7E4D9904C6C6FDFF564723FDE4E72413067055C7 +22946CD598266AE7FBC63FF62068CA4F40B80C8EF9961503F7894AF2A392B595 +376F0CA48B4B23AB7112453DA02274095741C7102733C553B6EFB43A6E1DB0AC +C320C44357C4C7E98B96B30D9FEE86B7083080F0B6262FD69E07557FD018C1E4 +2CF6A276E789A63A9CEBCC8867E12C60D78B81F7C1AB5592E4AFE1AB1C8ADF1C +FE8A4773FDC6FC01BF698E5D46B4282983FF16F028D14104423D07047AC7003E +6B5CD6FC2D30DD0E6162498FF67D4091D68AC65A4658215B845AF706F4B74262 +C3A28732A7E1E786006F544853CCCED8B530ECE3460B11E11CC87B22DC0AB93A +AB7EC47BCE2BAEF0FC23C9A15C0D421D75AD13D931B8669F1018A207D8C57228 +028FEBB6453827DE33B1CDD0527CC4815CA2CF05CDF4735A1EFB79DED9AA8AC5 +A074DA91B9B860EE88F5269AC4C604DE488C269959A108FC5175637DFFB08DBD +2AE093CFF20E15AA2624D8E2A141EC3290852E27FBAC6BE21B65CD8036221193 +9967C4A6AD631F2374582F8DA277621961DE7EA41FA110782DD3E1E7CFC51058 +C961948FDBF02A2E7BF0A299EE696F0B98A0C4ABB7CB67AB28A2EF50D3D212AC +1C51DF3909E484FC3430FF1AB2CD9CE667A9EB489A981A9A02F8F999D9215F5A +DD609F5DF9519DA3410867680942AAFF2275D255709997653E88CB23D16A110D +C5C65DC18750D868C8F60E64265C81DD7CD7C2036D13532E3DC7D12600FAAFDE +EC32EB7989458A220339D451A25E3C4B2D52D265875F06465C913FD75BA30285 +AC61B32BD2C307FCBAF38E14FF6A64C6A5C874A2D7DFE3025E3CD30BA9C60D89 +00BE5411544E97D9791949722F76A99D549D344BC1EB88C9B8BFEB74EC94D190 +F5DE00D2EA0003DECDD4FDEDC0834053AFE3EFF04193E360460A286794D02FDD +A174E3CE72C69D32C7C4EF33B97CAB2929A26662E4E3C2313469ACB6BD21CAFD +8C81FBAB0EE7C26BC5B40AC9880623CB5D595A4351BF7848CA3212D74AE449CB +35BE1BE2C6C795B56D2731C0BC9C5DBCC652F025212C35C50B3937212871472C +7B6AA7AA075FCE6068BCF7474EE3FCA088733439E5AB06D78F62A574157DFCDC +43990D8A9673300AF0D2450C2B9B9000BDC9C4A5CE57764A7236370458E8A0D5 +0D777DC1156A9D82D070FFE0DEA2DED3854CB7A09FD34F1B3513821C26FB6F6E +F3BA660EBB0C08D8B976CB89B4E05C95A20EB2F74F4C1DA67E783E9C936A749A +E20866E646774E132A0A12BD5907BA8D7FCBACC83004895110BD65223C4A2821 +02C709F5A8E1E9EE3C0C2430D6CDD4AAC32F45093EEB1AE961B1BCAA823E7F55 +0B9E5614DF4B2703532E2260B70062E33F40463B176D7645168DD4AF226B39E5 +8B74BCA01988FCF9475B9935412016704A09A331365D2E745E778331ACAED5E9 +AF662A9D5C7A5FECE76F73EE20E2BBD0647304E75161347291906E7ADB3F2446 +9769F36EEBCEC59167199793122D96428A44A2D8C9B704802543B0569C140134 +8F180AFAAEDC8550B566E6D460544DB84402A9AF79D8A315C53FAFA3A5898B26 +CF8D7EAEF6B7E19B9DDF927B7DAEA9249FFF69872A6C3F4289546E6969D29360 +0A8684B1D5025DDEBF2554248AF53EE9D53F9412CA89F004911834BE96221C1E +8582F51F1A345ADAD0537938A96E73E35063A2207FF7FFCC55C9F7AEF734D089 +A0693D41848236FCE67E85AD5372C73B61BF5B58CC2D9616FB78144198E65267 +6940C7E3E3381C91C877B7F78B4747F46D12CF347E20C1A2A78BFAF96C42D81F +16715D7E1FE7E671242791DA7D84D5D885F905093969F3836299BF6874A8B12E +9E1F3A05D940BFABFDD7D3085AF8A4FD01092C88CB75F4060BD85F2F958DB0A6 +64145DC3DCA6903E0E018A7594BD7114F336D12C61AE4E29138A0165FE21BE5C +C2F4B9D496ACE81861919BB69DC06E5AEABD3F5E5BDFF3F507BDA4E366BDD481 +05558CE1213A6D28CC2D5D2E5265A754141E312F42B64EA2D51C79C71DA5BC92 +920821C437120A19F9EA3BC48F16073251D458BA53C4C7DDF0035ABB32939C11 +4842DA0E489C7C2025B432B66352C56D78BB8391DA79E75DDEC29588C596BB4D +67EDF9492B91B83D9F1F26444094D60329A5D3F1BDE976DB2E71B6E4CA9B8EA4 +BF43C91A16A2D9D23E5448C2FA38B8D24D142549E45572A29655C9BD31755718 +A58C3DC4964C0B49791F36809863835CD8E4B196CE8D18D714B2B3AE2BE90C4D +65C1210B9E3A8F248BAFB0CC5579302F6FC26FC3E197076891FB758B0595DC4E +7F1EEC99FFB654D46736BCE43BF37DB7681CF7655DF55592B7A494EA541AFFC5 +CE5815E1D989D9E1CE87E116DA4BCB7E16AFAD2327C434AC71EC756B96476BBC +0C997DC8C439E839EC939B55BEA698E3435BD911258234B6993B3890077DADCA +4DE92B37E94166A24DABCEAC3BB808557FE09FAAFD6DD316F44952A6710B4824 +6F5B5D4AE9F8A14DD207DFB697D5DC67FC3EBAE49A1A339525ED5ADBFFE58333 +43E8AAD4030869427226950AEEBD11A07815D9C3BBF2570A51D6C0249CCE9026 +B12ECEBAF112069547DBD47B7C8869523AFA7177F6E87F534A5425693DB8AD79 +497B95A90B056F61B6B4A89A7BB23B4F93BF5DAF637D71DDF4F48E34CF347EB4 +12173D9A72526C9B561F6CB2C3D43B0487E09B2C7B1822E9CF5D2D3836553AE5 +5A71793EFB52216CAA4948C203E1EA410B3BA72B6E2059AD04B5ADF54B6A5BD6 +33EDE67267334D9170FF9E7F9802516295D91F1A63EA8433F696E3565EBDDB1F +1055025C16B5EB6708479CBDE2188D8371EE8863CBCD8533DE37E0242842C0AD +114045C8B131BA3790146335EE07690C8DCAFE2F61824BE4F109F33486663D45 +24391006E700052BC8E90098BE7B5F13EF5412DAF6BDF0DFE9775FDC185369B1 +C53AAAEB34A9727AF997415595F8EED263C0B1B9448119E705396F6143E8276C +C6C586E5FA8FF1C6B701578D1399211EA9398DB2A6397F68C7B7E0B6434DD516 +E4F039207D1BE48AD5F63C3E804C2DCEB39E97DA8D1D6E8C73180A916D8923FB +5EA2430412C28ADEE42F3B6390ADD6159BE501FE3252B6EDE96AAD8035E2C8DA +B00C25B07488F2BCD84508719DA8D309F8191B86CDC22E73730C9C91B7CD6062 +86032E22F92B948647A3351A31DABAD5F5F8D2C9911892C359471026AC047E49 +BFCC10C17712C6B7123EC9FE3BDF0ADFBA2BEC0A69B18DA231B43BE20694139C +D6C856E3B7C6907F8BFEAFD753BDD5B50F8B25ACC61C778FE96B229CA7F891C6 +07EAA8551B790D6CAB23C80436A3E2A7F24FE4CDA84AB81AF8D4105E2386F3EF +D77DD83730332F0F4B176E0C4ABF39ACC995CE3EECCE76C6363557C08F0DC723 +5E2B680D852174AF6BADB73DAF19EB4F921AC61E1FCE16EACABEB591173F687A +DDD0909654D7A243F4105F8201B6343221DAA1589DB4C496C1F702E0BD3CE68D +75071205B4D8ED2DF85276A3E53AAA46573771E0868482A2BC805C6A9D6C5480 +E23F690D6FA9CA9600A9F42F7F0EC92853C8FF64E2F137DB193543F78356EC5D +A090542039B0501650B6184093DDA5CDD52B6F8CE4460AC781C2F93EA339F10C +4921774575EDAB301E387C5A9200679ED86127611043364A319CB0C68B6FE176 +B0BA672AB3DE3F2B14A9E7C8CEA1DF76C716FD53CBFE583D1D0D20D0062A3DE2 +689408AE3D527703C591BA8C9982607CC08384A1049A1B328846A719FCA05D38 +087619AE510325FBDC54307AA468827EC8D84A19376740210EE95E5844872259 +7E2A055BFDC40D3C12946ACFE8CF26095719C3E10670A10417679DA5639B4175 +9DF86246392C78E114D745B9FCBE5D4D33E4E5935E6D4EB9F00F408045AAAB98 +47E445AE32BFAFF24107A37EDE0E9BA08934370E212F39035BA2AA51E2D711F4 +6D7215A05F5AD11422C9E8F65B80405D29CCDEE79165F59EBED93F9EB264792D +35F8C1FD095F18511EB516DB40AC15B6045D2A24A2B910EF3A632278208A0D66 +E19963591F45FD61AC0183CD5D4C5C1C8D69020874EF6079376801145636901B +D9EA1E35EF1E6B37D257D5B90862CED7C0D1F1B32C5324A28716EAC93B556BE4 +C2716C85ACD7AF85D52DA2E33312C42A6B7F28797BE80102E37B7F9C933BBE85 +121C64FCA542C6D5B7FA7FCB7CD0C41295625FA2D99E6FFC4D08450EE7C1EE81 +BC356927FF6F5AB869D083929EC1A643515702F602AB140A410378A65A721DE8 +1BE9F270589F468D5D2003FAC662A907296302C873DE919466A128FBECF122AE +6259456457D21A217D359EFFF23758BB537BD97472F22EC4EBE932F762884EAB +5D59AAC0097E2EE5A9EF77B1E0376AECE3AA529E5E518A24569007F5DB2F27BB +776BFF2348E9B2E9AB0B07B9BDBCA49E37E11E2980754CEF43ADCBBF32B9575A +C611F4AEBEB5A718524AB25FEA08E9E913E24FD94AB4E2E4FEFEF29C7A70055B +5FA0FA771D485CADF65EFFDD9B6897F675598532D8E974CB042BC7DD6B5A4B99 +F5D36E27D80AAA8417465223649E44E28D5AFABE693265DED4FE7711BB4BA083 +DC71244042798FE7E1965A469B8F8202DEB7C563F43A7E17A088FA36180AEDDE +345A2D7705A5ECEE8E305218791D9956DB2E848E422291D7E2E249329246BE92 +892554EBAC59949D310F38819EDCCAB09F4DCB80144604F8F1F43447138B311C +FCA400AD225FEF31D3B0F6A5E8DF91E4FBC39C93DDD11A2E54D1B8ECF5F386B8 +FD0DA95AE3E981FB36D9FA0344D6D41CCBE8F2320539411FA23360B88ECB4D38 +FADCAABE8049B06887D053FBF3ECC8A89BDE4A9F1ED7F6629866FA14ABAA2924 +9BDB9D6C93F6080593A4BBC0CE2567813B2AD04C99FB09443A684E644BA51B9E +9480AE4AB2148A081F6BCE154261D4B0F03864C6F79DBD622EF471A844048766 +6A872C8E99A82CB468B6FA50260CDD90B81CCB48A6F3BCE3865AE56A86569E23 +16B13DD6114D98293C0DF2585F4E2D01E5EC8E43DD6FFE027E2F0C9CC360BE2B +823DAB713978E73D7AA80DF69CADA74D8E23D902B9DA35EA2BC9D03AEF265D54 +79E86089AC4E8312FB9CE325D8DC9E4DB22BC048CD1F0EFCD64E62B785D97685 +6A34EB62E657BB2F3658B1EA87B4C07C45C8D8283BD35634EC67399AB00AA2F4 +A15A723E8EF9AD000007ADE862D7ADFF32A907D40BF9491FE05BCEADFDB83187 +2825ABF2EF18608411F9E31C3306B37E245F1571155D5651BA291AE16EBC0390 +FEEF8EDA9B9EAB02F1D3BABA0C4DE4FD20FEBC2DDA743FA0C32F7A746FBFAB22 +27B2B8547359B5EC413F98024A5574F48349213502D0F1C71093EF2AF2A7EE88 +67332DDCB9D9652B705E9D2ED1BEF1B9699D84F9B8520DDE2609F752E8D77F8D +ECF010C2F18EA526B4E2EAE1694834494990A4AFAF57286E171E4053788F3B2A +B7A2DDF04308E47448A06C66E987C2BEE43B5FD8890A1E11FCF4E0548E201941 +8437B4BC7A92174B7D5D8F4E9E98F48779968F00803F2FF59B1764EE197873EE +D1DFF6B12B54459FB5A6864CA9D73B89ADCBDBCA2DAAD3B42C4A9175F503F21D +C48D5145E2C6AA7D7FD787BC0D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTI8 +%!PS-AdobeFont-1.1: CMTI8 1.0 +%%CreationDate: 1991 Aug 18 21:07:42 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-35 -250 1190 750}readonly def +/UniqueID 5000826 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68 +F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360 +84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57 +0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0 +06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94 +5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908 +D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C +93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8 +FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA +E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737 +46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193 +8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E +4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9 +1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7 +9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5 +BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2 +09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF +3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C +E8929A4BBA0EC700D5662AAD9EB38047C6C7C63EB3FA03B5EA9E56DF0E30B3AC +058198429E22081FFD4CCC1F3A7A88AB8A22C7C6C6448934DEC2212E89998259 +653D779091F4F7F6C0A76024363A9001817B1D572847779F98F02FF9A1B45270 +2F7E42A25C687D6E56C89BBB580DE865D7372A02F329E71E0BDDA2CC8CEE41B7 +FE95846B78982FAF79E544CEF8D72A94FA73E69ED3A5F834BBE082CE0E8D4EA0 +2F619CF8441B5E057482D71D834BC6D93BF9F7777FDD2A5216911D31D34CDD76 +8D0F805FF6A71D77AED0D540ABF995DC77C30ACB207DB2513D691105199B2555 +CA9418777932A54E99E56E5171261B3708D8646A28803DEC8EABB44E80F3132A +B273B74A56B5770C09508637BE122DEFA8A0B3438403DF67AD2FE9641009CF03 +44E39E8A56E244C56B8777F486C958C5196286F36761F2568FE1A8A6E74D6891 +19F7E393FB94388DE651E078D4D40DFD141A0FC074ACB3384BE70073C08E2EE6 +065EEF9768D260C08E40B2461EB226D820BC43EBCC49A943528B8E5FFA474300 +BEE3AE339C2E0C4B247A4F8F9CE588AC67CB6FF85ABAE18AE0F77219E44DBBF0 +C6B5958D89EA19BCA780BEBC7C29EC8919CB9754753DCF4781F34FF4F75FB52D +C00A65650B9AEA0411B117D2DB6A813F17569F8D0BD600FF94F063EED10A9F10 +72B6FF606A4778CD73CE7A03EC5F31B6B4C9D93B80921FB7109C1E9926C77113 +5AAF1CA527E5D262674D0B05681E38FE2F14916248E81C52079AE46C4AA3C1F6 +9BDE6B8A497600BF36E594079AD3637D27E2F4FB0E89F80CD10A1991CDFABF46 +C36D32D5309D24024BF22F920D954E50EF667272BFB5CAAD0824641634CA4CB5 +E7491D66A5ADE670AEF9C5B1F1B45497FF99C2361EDB1FB5C8F5D9EDAE288C68 +EA3337F3AC1EC76037252B7107C3F96746EB0A6BB2DD05F1D372B0ED5C3F56B9 +CD6BB3EE200D9A60372D4EFAC7739E2629151FDB2BC336A95260119FCE6A9511 +2937DC9F522CC0CC6DDFDDF5673A962E2DFE6EA3923A5CFE9C4EC0C69BD1DEE6 +9F56420E6E8F972A3B7462F4DFACDE97B4F821E1109099298C77FC831E6837D0 +5BEA4AE2D59CBD525A79C96E491C20EFE0138F1F9A9AA1B30367982357719380 +EDDD75F4547F1997BEADCB8B7FA9227DD211433CC05C0B804E8BAAE95171EAEC +EFB60DBB8399E83709895D5B4DC11E11FF91E2A39861B12FFA587E8D752D74F8 +71456FE15C7B6A885F2BE67C63B2D9CDC1EE5688CE99156821183B552DF78DAD +64F178CDF98390D8C1967CE7D9BDBA99AFD5A9908A950A11FBED22FF6A61D0B9 +3BF4842A22E2295DD259B0DCE2773F9D672B217B7F19A4D22BACD2DF929FFDED +EEF43C052D515BF739EB5B397F9B8762083965A85F96E6BD48E0402C85FA03CC +5CBB51BF4CDD01B891BDF1959AB822E9E6A8B9CD914EC25E861DAB64C443641C +BC2F1ECFDF4C3966E11F137787AAE702564B3EC4754982726AD67DB2A98E2EA6 +3B843D824EE3FB92888AF133ED29CA1B92A87C50E71640E418A5ABFFF469F972 +8AAE580B2E255272870AF5BBF923F9805104847880113BBFEA1FFED8B19915E0 +A0F0436BBE20C7E3FA1DCECFF072B8FBE3A100A33B181C0816CD4E28A8E432AF +BF308B89336A8710EE740E1583A9ED41C97F96D546DD7613CC7B214501E14087 +1E8F1002BDBDC12DBC8F4CDB5D2E62EEC19007B3D89407B865721C28C7579845 +04CB6EE7A3AD6032D3DCF9D01F83DE750BC8F0DFDFF13FD400AACEC35690983F +B5E04373CCBF469472B8AA0FA6A398BEBEFA8D914D548D0BB5589E1C40D7F625 +4F8E0FC08108C2288DECAC258D819FF92AFCB63954960A5B194934FAB5F4E757 +FAB4AF44176447EFE9E20B44F0E8BDCCC0925DD4703F6DA0B2E61E3121CB737E +9E5FAE5B899987C8851CCE11408B5B12D5F67DE0552ABEAC69596F377AC65A83 +25E8ED90ACA8DD09D0D9AC984C2EB9A01F3502CC81422C68456A9B15796C8B08 +0060EDCACA5CAA76549D613EE7CFF973E9091B2B8EE4B1DD0117DC140C16527B +47B335576E75C4E558E3777AA9EEDD3DA21B63E7DDDC10CBA609090099118E86 +37A4AAA5300E6DCB887E36A60601D4A02E98A547AE834960BFE45F644A23211A +3D039D63BE8A49BC421B19E6FCD8132DD37D65E88C685B1775B1D05FEB41C705 +E3DEEA6307A5B44AF3153407B8042099128F867D3924B477FE258B3A23A47757 +B8F09B52A747698DD84E7EE65C4B30ADC97F7D6A63BB621E9EA9CD76BF8F3408 +0FF1D4AAB7A5F1417EDD399AD210F59E06B606A26C69368CC896616E802BFBB1 +613B4CD2AC76FB267B7EB1178B703F33B8D199BFB0968A82B193A1A32325442D +C4FEA2BB70F971AACFB0722724724FEE9041A3232BEA3A9870939C5F0A5C00D2 +B292BEB07201BA6FF9B43D887E7F18A28AC2B9C998419378DCFFD57DAA9A88BB +B97758828F0CFD6B810FF4D2A0B2D62D06110F2C804EB4E555E1B2E0E316E503 +D30F7878704FD816B6F19D49A1F9B37CAFCEDBA771421CE1C43DF0BCF2B2912C +2E9F1105A4A91EB3BE467C8D4B3312D204915C237E09327BEBE496031CA2BD42 +EEF53F0ED5CE1F9D6496624A97042B0B45B3E59D01D41ED3DD16399C6279A9A3 +491272AE972C2F332CA37E1D074B97C62E7308EC803C251DD44A2B9B2317FC72 +345F338F335BA8A1C0F4E6BCFF7DA5CEEC539C08B26384F70724118E3D6BFC45 +608966E2FAAEA78A14234FE7547DA9C2D02EB4EA39835064BA994175B8BEFB61 +D0450C331985D54E2B1602D85EFE3A09FDA2346D13E203F3A52C2AF678ACBC01 +3980E95BDC04F2BC968C1341FCD4463783167C3361AF4777333EA568DA52D2FD +A2B34B7064477C2B455385ABCC88BCDF277A1B33C90D3A6A431DEC8BB5863B70 +E1C769932C49EC1540B1139F1300003F59042EF79953930CC90C087370B46999 +0CCA827C1F1AE29E1CE29098CB4B3CCB91A61052071A550DC52284DA71169D75 +EB5B418A7CAB2DD4D9245615DAF8D846D45EF49C331E11EF875B2C62E470B0F2 +01BA91B2141C4380CCF5773C0C7B90B4447DBA415A2372B2DA4AB109D13DA0C0 +6E5E54C9DBA4FC967F0350E655425D1A896A2E6FF676657F4241A76F9F018190 +6AC7B8F53052B8DCD54168874304FCF0530E38EA0A422D292DC6E310495B5AF2 +E2F54210227F0FE30576CD6EC8E8BA26A398BE076716C20F0972F153C404D539 +ABDFE8BCB69D8E9A7D7733A7123BDB6E7755E35B10C233DE30BCB34227D7E550 +56DAF2DC5ED812C1127B1EECE52E1485FF2DD092984B0DC1E58F13115E939B3C +9639DD3B13604CE8DCD603A13E8DCB7520461CFD6EC06F7B0B729CBDDDBB89CC +9A70CDA0840B9098C39A01DFD556E3DF37966F07921067DE045A80D5716C8F11 +BDACA5F2AF25C7527440BAACA8C5F211A3C30FE38DDF87F34FE9E3DA9BD3ADB1 +7C151D5AD23BE78FB5672C9339F8BD904AFAD6674453A3BB589C1AF295358C1E +4F6F89BB020E1A146B5855B46A366773B65CC0C449319CCDBE75B3D8AED76104 +E4C4ECC307FBAD006E98A40268DA58CFB135869C0DF12F3D9F96AE010BBD2AFA +5297D587D5C599DB3687EDFE865BF7AB530C8396A7DCBF84D196D65055E078FF +CF1BA51EDE702BCDE009D9903EA7658E906887C4BD16E91D9FD49FCA8F75517A +332077D8284E564D84789C561E93E27CA36D32DF337713FF2E91861683F6DA40 +C5E8F505640B8CE65895FACF142565AAB691F7C9376978F98B679CBE1C163029 +1E49797740BF747243A3A569811EBAC9119E7FDE8026E752C198D116BEA29A14 +03F40F6C30C571146C72E6AB8F581AA24D24B639BE55E925DB8640CCEEBF1277 +C5628599AAF6D1858ACBDA07C56A7AA9009221D0DA3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX8 +%!PS-AdobeFont-1.1: CMBX8 1.0 +%%CreationDate: 1991 Aug 20 16:36:07 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-59 -250 1235 750}readonly def +/UniqueID 5000766 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB +7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D +EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C +7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E +AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30 +E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420 +4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272 +5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762 +611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025 +D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9 +EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923 +35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606 +ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404 +7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178 +C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10 +B3F5A131BB19D1E5414C86C5F995521076340536E10613E427782B91F1098562 +3E22288F48ADE6EFA58CAEBE7C070A920C3A85F4327940DBD99179C26E3ABF17 +64E9CC6A45F17F19F3EC1C53B17485B813CB01915D55CA2034552666D5E44A96 +A0FAE064F599AEF095CA1816F7066EF0AFB220FE1DF11FAFD503505C5E6793A2 +6475E95FB467E2F3B5E7C6663A70B15698A1D158E23D3ABE3B6942B24832AC3C +13F258038DDF209525C4124806A369ADB0423C2FD0F823AE3056F380B7128089 +689FD4E84B455C7EC6C5BFEEBEB422E156C67D7E56B8267EA704318ECE801014 +D563FBF79D9AE4F8C41CC649EFA07C8FF9FDF6109E05FE58B92CCA7E26204CE8 +05A20B86CE43C9EF809DCCC2E28021EF11EDBF36F6EF75E9AEF7FA793CB81E47 +E2618947764B7CE6C3B94321D6FB8B824794362CC8CB6BE9EB3FE6C601820830 +E7C6F16E48574F329A642AF235347CD0017155299B70CD489095443A726C89B2 +7F7110D2C8643B1FA3A938D53C087EA3491B9EC4E5B213815A281C03E8936424 +614FF39012545B995E60E3FDCB92E45F51BB69F8683F62668FED702AED16E709 +8FAAD0CD9355995820FE80C4496D133F1714114FC89E871E2F6A994A4CFE14A0 +0CB974E2ADCDD20F11FAC0101A90C215E40234B027DAFD9D31530B96239816B3 +6006A6A69E800D7EC779FD10C721F7A476C02BFE5FFFB04DDF1B12D0779080A0 +0279EFC2D4BD5A8F224083C15008218EADFD8D6089E79A4BD0EFAC995EEFECE0 +83ACF32C0790A54F6D04C945ACDF739E06690A00AE579B5DB9C91D21731DD420 +5E2891FE9E43F0F78B797C299F8C6EB6B0AA2808E28E5A01A2BA1FCFCB54598A +E5C49FB68DEE2A0101CA67B827122072AD6E53E0DD6B62AA4A41EDF0A3C13DBB +B42D8C0FB4BED03ED493F38EFDBD7157D84183E726CA215005699ADF49B6A5EA +2A2F0B7599A783CBE0FFA0AA965969AA222977A13F88EBFB3C134B4445EED5AB +80C9882E54A5E1DDB9014DB04FAD3D159857FEBC2CD56EAC237BAC2177E02C74 +0AB0C3195B3847D5D21EAC3AA0F3B916664370D6B366F877DA0BFE4A282E96AA +F804B144DF7DE52415E39877B8D85D55D40E3B8BE0809BD5AA0E58278A9F5EE3 +33FCB97E79EDA72DF08A258DD09E18D69E8B2EA33E4E1131D58EE27B80FBE72C +3F513A556AB5A7A4C00C6332D373E96BD0B9F037BF86ADCE6481C7CD44A0141B +419DE72F671FAD0C4041A819F9313FC7357F775FA341F290FA4F15DD9F5742CF +B969D56DB370C3A8F94818A1728B00B44FF035CCF32AA1F31BCCFCE4FF49FEA6 +813943645ABA47BC8E8E51A709EF55D7125156925FF994974EFA2E9BF696B153 +B5189911933C09246BA6AA23282496C2551C4F879D2A556217DCAB15EE185070 +840051E3F27BC72676B39817AB3A2AF8824151395B50DBC3999549F9AE1B6D90 +47EE409A7E1816B588A4864C783FFE112D73928193B1DD3359D9FF1ABC73C3A8 +B29027ED24B04E3AA855DC1F719AC8746BA11FA5B676BC09DBC80574114F4290 +65C30DE7F659BC1A2E5FBFB5286624B1AC8767508B0F178B3665B53BAD6363C4 +816D94B542F6AEE1E824420080AA591D66F6348A7C1225C098309DC1C491E80B +5B1EDC8B75DD42A89BE2C598E58A3E4DC4B0B8944318006D207699E492031E15 +FBA791B235D7F677D14AC516B76700859974FB8820438F7BCD3D3B3D7D7D008F +3880F72358A882ECB76BFAE04C1B8E0977155AB62D07D7AE038C00C267C6D9C8 +FB31C40D91A6371C0A3B0A8B7E4C92242A924D48BF3335E80C33EAB8B8B11571 +A817D8993A9C238DD5D8A6B91BDD18223B0C21A864F190E012AFB44216A9983E +5191F4D77F7A6EE8E2967438C8975EEF92E6A436717FE2B13B2B65B1D4BA6E58 +48F4E97D41910B3C79E72B84B23D446B96EA9E74A502049A6A670F40BA362A74 +8920731738746163937EC778B249AFFC20603A6BC546E139DEA7F5FAC96723F8 +6544F0BF630B274977966135115497C1AFF7E581AA7B1B4C456CB15474929C2A +796E752106F068D3B232D3979B27BB4C28098A657E1D4C76CB470D42BFA072A3 +1E0A1952C2DD97FAF260EA58C755DBFDC679E0CB0F20B8A25C8DCC86BA990031 +F16B1F3AF1714386545B42ED4F0CEDB0B3935D3BF86FA4D884A58A56A0737792 +094F830BD1255B695BD756987CFA4AE5030E1B24E9565289AF240C76D78D7E6E +6299436C5853BC086D5F22A5CCEF4234E2FFAFBAF3F4F0B4B5299D47A2C6DF9C +22EFA43E822B6140EB66BAB6268F66DF737764E84134DB9AA6BAF0663BC73421 +B7888BE30321CF239AD0AEE6B1803EF817F8B6B6A6F274D87E88EA67135BF116 +B2BBB8E8C9EFCD757A6ABCD2F799CA0CB381628507118D1082904B728534C129 +07DC200EF69A137D09D5B31A8E3EEF61C1AAA3DAAC733CDABBEA7577201938EC +8C58115FDE70557319A6E6F7B3A746CE653AD77660FCA75ADCD1FE75C1D42DB4 +FF0CCF21DCB92274CAEEAE47782B0033BE1A5F08F98427C38FD7D337BA2DBEB0 +473157DF41B432B3859823FC2EB912C3B10FBD381CE5F4B7712B1FCE8D9AF5C3 +9FD44A255163880A8104069DAE3199515D813BDC58B0348BE7C1BBEB4105B1E8 +D33431E5F536FD5FA5C60ECB139F47402BF42E1228C2E08C7CAE985C9EB7E3D5 +1A98D830DF57DE98548ACA2C748C18FD938F30CE93F112410CC35C8D76690715 +7A0D8F4726F2E31A722E8F76DFAF3A88AE7969FAE1EDEF99EA90A19A9692899F +A4A6F4E9C5724B5D8688A0EFA7D2FE4565B05FF5906046BD1AEDE1E992C84289 +E9BDD813EA9E87791229ED1E267A3023B53F808F1F96EE21049F02E6703A22EB +A1ACA6DBB4310D15DC12192150BAE79EC915281ECBEC904A49301438F53986DF +E7EB0EFC44985266EC846A4A12AA7B9A90E3799FFFF4110D311643B2E2EF8961 +A61CBA357C947A91056C798B23641C2CF30FB4B38BD53E7DB9AFB0B8F69F1074 +7CB154A179B796DF230D1ECD4E6569EE80190C6361593946BCC005EE3732D343 +16935D2FE49856756B9F87DD6B8DE288AA3A3201FC7E77F75A42CD95BFB42236 +0C1DE3177DA2B50F1C68DC36BFC189EAFE388116160F65EA2626D9B7CE44C375 +7D5FD83F8E9B8E9609A9B46777932A21B73ED98B8C714A954EEB2DD9FA3937A3 +DF41FE76D214E9C9D8DB712B275E91F9E32F31D98E30A7D0B3CF718A52134F86 +D1E088F91FF3D86490EE0852AF23D9856F271A1617F6B06E0CE1C163D7886908 +77E5C0C522E0F0AF8E7B05205FEBB92C68FF99DA858BE00E6C7CBFDEF8ACCC60 +FF9E48E4F5B1FB95DDB11AB4CB09D9E59E4B981E2A59F77881E2CB31057A6416 +5208B180D301DC13F842CEBBF97AE7A3523EA8C6FEB5DBC96437EDBA53F78730 +93EAE0A81715E303894E12977EA37DA3559AE4B5AC49B84E44B71DA99F487A55 +CF35FD75E5EDAC5397F373B018CBFF45E00F704D3AD2CBA79F1119C31EA1475E +3289FF427407ACC5F516CF88F3F762543D765609CB618ECD786425F54CC509F7 +7734B0E217F638A61D169706EEA92A552766FC0ADB2D87AD46D8EEA079CC96FE +8CEC5B7E61A87FD26BDA35F8508177C74B42B694A6BAA8BE7A906B30C5CECCD5 +C0CC4857450612B69DAB66EDD6BE13E9B106A26DAFF419095859D5D1D01641B5 +B34155887DB441C5ED0BCE1A7B9E12497F681BD03FAD87AFC6BAAFE23B406427 +763455BB4B9DA86CEFA6484BE30BEA1E43FF8C3007147745A35F283CEEFE1866 +26DAD4A22200F50E638BBA2EFF73C1DC358CB9C1D377E6EE9E9A18B8ADCCA028 +FDD4BB09DDB37C0DE0E56512AF00C57D4FD02B6DB966ECFD0BC122A55BB9FE05 +F20D682CF3FE2954F32BE305CAA9E50BD652D52460152B9149E891D419FCC078 +E9EBC6A940048EA2173C0CA463D7DE339CCAB9A86467CD1548066788C54FCF5D +8C87CC51FAF946C75EDA7F6A9165D42E5F5BD629B84F298D790523D5AFB2FE10 +C2B9D578FAF1748BC0EB868D498BA46999F36722A7C38A6A7B34B85238F4A640 +ED5327411CA5D44E22219BE1157F163C145DA6E93ABC5D0DE2B3A7AB01EA33F1 +2B46502148336F06D6501AAC93717117BCE587FA86DA114DD9E264F5B1120A08 +AC1CF7C42992AFE0DBEA926A731FDB4996BC9405BD35245A6D08FAD20D3FBB49 +3075948A25C1634F0290D5AAFFCD7ABBEDDD607A7250D3023BCF2D2002395BBA +B252F6D039EF1FBA7C71C94F45029FD935F5CC48F6277B5C843881569C5C4AD3 +7B54E2248A81B42FAE507F105CFEB1C3EA4D99C9451A05829733D2AB14F26B26 +C02D1496C8EBB12425A2B90E94E76C507C14673665DDBAB34668C44BD1834992 +3542D09B76604E40F61B2869D09E568E03003F15752B066E4CE03836F49E699D +9A4AE3C95AA7C73CDB829E7384288A696CFBB0169BD6A38AFA1D514CA7F1145A +9ABA828991D7C553A30F340FD31ED6C6FBE5403E983ED3792A3B4BD34BAEA85B +2171D8C91E3B6D8C44E9B464B1723D035BD38F65561AD340C1396CF2153E166D +EC384FDF9BEEFC97CD9542FC26601AC4CFF9AD232AAC0C2E36FBBA289DF156F8 +B5872E75BA8D7947433A935387F49100C80213EE8F55622A7BDA1531FF68E5E3 +6810922DCEAEA6D335021087F623FC7FFCF401C40D848AB54951788FBD03D87D +6CB419871FCB786D3E9B3C67A0F9473D1437B207904ABC36532D01FEFD1CE90D +45E201D5A119F18F22A820A28D74FDA3B36D4560AAA27C7DB2881BE51D8B9D5F +D8BB25D3CDF776CA9EFD032B9EA3D4337A393289B02EBFF68727F8511CADB4A8 +82C08DB25B1193AE786E9AAD1A929519A93CCD44D1FED5C82D5FC461A9B19852 +48E075C46A8C00A10CC95F32B2E63367F95971CD81B60CB3D5820E7C0A14E2B0 +00681E53305C074E6DCF4F2C0E4D7F5468868ED3ED09C1CF7D19ABBDF904D2B2 +5250126EB91E19F24EFF107D86BD4D5AA7BE3B23E2782C7EB3018D1E23E11526 +03B929656A4ABF84CBD36304951204FA43CCD202225B59E6EEAB55BE99894501 +6FCB70F8F01113CBD194AADC48250D1DC39C07D578D3B883796D2AA489D197F0 +CB13E7BCF91121B7019F92431786E58CDBDD29E46463DFBC06BC43254E7D5EF6 +8377EAADD1F4B6C80C6CEFED86924F4B9BC4FFB42250ABB944862C39E9498CBC +744E6838E7AC0BFC57B1857898D586C3D1CC2F5C344A39CCF0955D95649962B3 +9B2FE61EB993FC2A0FD2DAE84F26CE93489B12B921ED8F7B06F08BD1D3967366 +255B1E5C01D7E1999EFEB6D5522901650DAE91AF9179787DE84D036469ADA85B +8A4BC32248E176EEEE808C72D095F941BE5E6BD14D1C82D5402FE177C6EC2069 +842B7073935BA15F5C49F275F878C344BE880F01DE28C735B1B30424F63D8670 +C4CF154CC98F030B2259798F9E62F14B5FF3DF856B7BFF262B88F0EB12C7AD29 +03D0C3AA02A3D51011057FA9C1D06D56BE593137A8532A60B6DEB05BCAE23DF5 +02F05CE14181B7F00ED410ADE26B070C1FA51C22562698CC442BB5BC1E2007E5 +BA70DA947C0D4613C0B1925E7BB88A7B82383D165B3D8A045EBD8DF273F5E174 +E7F66051FDD55E9560102CFCC1D5523BCD843038A46C8BBD7142AA2BE7B22A11 +D822E93F01F25DF7F1F89833B166F3CD0B1631EF2B15DE9E33F4220AD53D7291 +E43FE0BD7B47CD0B89199E206B36FEDA5B471BB5F4B14D96529FA3B053DBD9AC +3F0D45357F2008EC4A4194A6EA0497E1977D6F4E5C35C013DAC1281CB16307FE +2888BE19CC22892556C9D8B1B2BAB7DEDE89F39F00AB6C6B1AB3C6C61FD98009 +A8DD8E2BD378B724B72D866CDB1C497EB3A270C6BC423BAAEB11BECD4079F28D +5111F14CBE73EDB6F327316641BEB1E987779D42C71F95E8E00BD3E205427215 +E2EA543A83124CBAC0F79347F9C801E255D553EEC4A62B718D4AC2F54EBF31BA +5522AF73E9680E62B122390743D879CF0E69DE4F4C3DE374EE3CEFF1E3759407 +2CED877D736F939D30774F24A24C9F83473F9BE23AC56BC67BCF3D29A18D28F8 +5BA0C2AE83A41DC4C3EF4F74A4AA78787D0B9146BB375F3322FE40E994C0E12E +CD0AE0A276911061FD23186374BE6EC5833E6ABC09E1AB5C46B098B1A1AF33FF +E11B1E730819A27A2C768C003D7E5E3325AC3D51AC9DFD993F74DA68CD1A7698 +D4BA04DA1A690A595FE3340D702D57678187ED6459A8C8128F164F7851871D91 +B922F2F30A99286EBB3EC8E1501599109B4575096B89AB5D86201FE35E193295 +886322EF4F72623A7903FC8AD577C70D80ADEA4570DE5BF89455CF407275F7ED +7265752232EF39EB140725C03B25B832EED91CFBED42042CD6482B161A649891 +F12A097ED1A99B77B42459A69017D113E14788ED463571086D293EB9A29762C9 +CC304629324B48E67631AC2A56D246B4A77746029DF182DEB8DA0D9D2D845CAC +69FB6D6CC03C0C1C021F6BD8838520008882C2FF0D7D5B5AD98D3869E5C263E9 +A4E83BDB6C1074CF2501247498DF02449A1215F4345E1024F9877FF86D441F17 +7C3487D6B2B7D07BFD0B33EBB519ACC3E7411DD4D2C096CB9BAFADEC8EFDC904 +0ED54AEEFECF1E96D0614784B1B9DC8F1D856F390D2C0273FE99FCC892763317 +A26940B09B46D79342E159D2B5B4B307C5BC1523EFB1968504B2FD69AFB37B20 +A787F7295B6586626D9D0F480E34D366011E99FB01F44C45CCEABF9F24B52502 +C4FBDE3790BBC0B9A4B8579294E692363B4A496EB236F77F319C0B661C42FB4C +3849B8E338AE185E904AE8922341CC0CC18604290526483394D43947F34F534E +8A1A0C028771267B757EC2E356BEEA3C0C42C19CFC53F84D9C81D03CAFFB8944 +0AE6B68D15CDADE9FE4B31F9DCF7999EA3D70A3EB09E20D2DD5119A4425E83D0 +825BF77EF18C6CB6A134D513FB9B6E623CCC3482B52DCE326C6AA77BC464B8C9 +AE0D7A0E9D9D96838B2612A1C56DD1DC475A146DCC08918537F7D7D8CFB4C632 +384F9591649CCD36887163FCAFAD51207D00C7567C81C72EF4FD7079C322BDB4 +9F92D883A7230B55AE2B7CB33224843B8080A748CBA3338038E3CAFE39759254 +8C25295A497199F99F66DE767BA520FA0889CA2947FA4E28AE74FDF80472D5B1 +5047D83CD272ADE577283B6FB785FB10043E7BCE5090912D544CABE81A784EE9 +27CB0525FB5461D84A221C8A66432D8C0F3D11801B08B5A0A6E81BB30567D0CA +B58D2C33D90C300B03D494008433071BA6A245EFA16EE229CE4A94DE6DFC1A41 +AF69154DD23AEA4972EA5067E894ECF9EEF3E4671D00B947BEA81DBAB8CC01DB +37AF810B5DE58EF5B0089C6AB06E8DAB6A71887741C0CBE58F9864B7E4FF3013 +D6CE6A489DC5729AE9E21863FA566A00F573E63F172748D8F6231C0F211947FB +8DE5AC7D3C4397A24974BECAD814F9FCCE56B89CA779F39B5C73242B0D6BC5FF +0DF7FF155DE8180122FFD2C2ADA2689DBADD7D26C78586DD0310C838923EF309 +7429A96FCBCCF22F968875B92AD7FE9716823C54D50CE987DE5F487342BF69D5 +EDE136B7E2C92C55B3A378298225A525C1D04E187997302B4F75D0672547F227 +06F9A21C16B40CB112B3D1E0E02B701E657666E4A16E227578B68A9DED734A1C +32AEC59EE64DEC565BB123C481AB0AB941A14FB66667148F1C13BA3C48817735 +207D0A17F0860C7A2E82C5F4E1201635BFA79AC0E6CC7A77071D32DEB1E35EA7 +5CBB675DF5D68E4A88CD8DF04DA8D6CE1156BA93967E4DD90A5C1E72E3A228BA +50BD4A3AC049E501F76E76F55909368A8F76E0EB8D85741F8CD9B9D5C6BD424B +C25889D930B3A6EC36170A4CEF7E3E274DE7616000C14BDFDC726F323B4E3429 +74B7280C12FE3332FAFEF006A7BD47E97134EF23D3E83DE9A8E04D3E914F3510 +15016B4489959321E320E0BBA88D58B2732EF3655703C58B64CF71C1D5A2723D +AB7C59AF13AB1ED12A39ED877BD06E1748FDC97300976CBBD128BB054CCD8405 +6F495791F69588AF6298279D065341A47CC018CB76EF3A1F7B78C16450E06D1F +879107BA9926202B55FA95FF7F685D7BDF1D893FEC66DF13CBCB1FF992D0998D +87B62C35DC4991014E64F9BDBF5D47A64949EFE4F076C5F5610EA4A743378116 +A6739DCF540EFF064EAB053B9ED34743C724E7D2C6CA542D150EF887CA78D53C +A96ED7F1340B2ED6D5A67F5513DA63D4909E1F8CBC25ACC24B743A3B49058633 +B605A132FE9F9B01EB75243BFB248FDCE25E82FA7B589E5403B8C1B822931D03 +ADEC24EBFA8AE740E7692AB5418E71ED25885FDB38087E3755227BF9D7D14CE0 +9DDF48A7CE11128AB6B0A53A75C0AB7B9CD68FDD2A4B29217443CEC5C8680222 +CBFE6EC20F17193ADBAACD485D8333A95276C071B0A8385E43E9D7CAAECDD39A +D649CFB1EC72212C5296D1AACB75EDE6D4360F2EC9F441A73AA7BC2AA04ED028 +4B95F1264DF0F21A969494A1E959372937C624058A1B37414254BB718BBE99E8 +5DEFA7C0EC0D741D7612F73044AC37BA46564ED2307CBA6E22264B3539020A93 +E2685648B95216CBBD4B22EDFE51F4BD6C91F41828A00F844660B32A5BF9C5C7 +D68A46412DABD78659AA24A4D6BF67D2147972C47AC2C3217C55F95A992205E0 +68199AF701DB276C7A53D7104560A645E89EE2CABE14B5DBA333859D81C20293 +84EA8DF06BA4AA429FFA34E5C87CCA5525D360C5848AD2CE6051564B9FD6B454 +A2E4C1913E0EA6F7B5E4119026CF2C8488D5DDB905C64D5F07378B05B9DCF5F7 +552EDE447A018DA29A677BE310D0B6B22469F97353ED39C6BF5526605EE7941B +9773DA131070B75AC8F50177659EB138A07DECE0524EB34DA9F3EAAFC01C0374 +728B0202ABACCD138A1E7F1A4B3C006D794A19596641959CE10A5E83F848A919 +E6C0101EC00465563F1BB028A0882D619CC2D923E9CC4B1C85BDCA479F188E52 +2A90133B45626B6623D039B471F9D9FC144E5228207DF1A8035BFC0301CD173A +7A7B828D27CDAD2A0B4BCAF8C99C62310B04F72EBBBC458C785E5F23BE9D1459 +8773C9C0648E11D92B73D49BC7D587E4E1CE1C0E93FDB67B432C35A21253775F +754EFA2148EC95CE33B6686BEA49224E818533235E8493364C6078513FCFB982 +4155EFAA41B59986DADBE962285C9E842AD3DF0DF9E9075D28E1B45BE27A2AFE +2CF48B90ED76F75C4D40A48649177285FD19340660BB45564D70D179772CEB69 +D701FD356CF5A551CB8B36EA1E30DAECED401294B7715509417F08BF1CB7277E +C73392AE92C0DEA0E8D08E0E4ECE92334ECED69508B32C565F1E54B227F57B9A +BC49EFA298E8364979C63AAF76F1129836C32F04286271DFD85C5EB08BA45FB9 +097409B5491F3FD6A921E5385EE763B6F9867EF2BBA496AA64529CBBCC534AB9 +165C59BE8A43CB0BC47DDF1F6127A9A9DE5E69126B5B1C54B396C9EFA01BE602 +3A7165A39E8F80E58EE14E6AB9A8EAC5EEEED389ED027319E66974B710E887C3 +9EE4AF6AA8387E81CF302D8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY8 +%!PS-AdobeFont-1.1: CMSY8 1.0 +%%CreationDate: 1991 Aug 15 07:22:10 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-30 -955 1185 779}readonly def +/UniqueID 5000818 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0 +5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F +80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107 +1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB +DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20 +9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1 +CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA +F83C7D393392BCBC227771CDCB976E933025375FFCDD9E2FD073678A57A333F9 +6BDA68191ED103DB904FC6A75017A9939B1F14A711BC0B140F6C4E6C217EEADC +2B649171318049FC272C351B1417B517204D5DBE34FA6D6B93E1E6086F880CF6 +401E7F67B5A91AD4822EF4FFFBB79015651EAAF84024DFD7A74045CA18515E88 +7EE363BCB8BF9D97ED631D5C1CD97006AB3AC94DA76099C945488544974B0FE8 +A3F15D97A0BE56338625A0D0CFE8566B8FB3A70AE8CEC759E7B52084939014AC +604115957B2FB7E97BAFEE38905AA81476D225B96F0379A68BF3270503F3B605 +A77CCFC93318E4C44A1C17F011F4BB61E95E82A0FB39A886C2CABDCD59D5A7A4 +02936AD8819B50869E5B3080E67ACB7DF8FAA4DE4F95E8679063A8A442696EF4 +E0F13F9F966B536A4BF33A36A9A43B025255B682726E76504D03A6724E62BAD6 +63F90049D953A490976D70C6B1E9B8EB268C452EE5DE8387D12C679EE0BD9CA7 +FD250629BC87CB357480E70C655668AD8DB83DD15E4D4FD79FE1B857D70F2B36 +D49659715E1985E9945F4C694D004220D03FF36AA87F37F403654BEFFF0730C4 +FF9D5D6D172B12C72B56F4EF01F647E79C2C2FF41D8D8209CB316FE7CFF71F6E +5200D1F92FD7928FB8E90B3B0D6C51F2757B30DB38C12874628ABF1159B244A8 +0957D756FE6AF818421A7D15AFBB29D24FDCB4BF305BF5C7D2AB5ECD83E3E1C0 +1C2AF2321C8B497AC074CBD0EC5879AC61E5F0549F39BF447A4B6A88870FAEF8 +3F4BD675FF5F0901E3B88DB5C6BD3F6BAAF9A842C2724D007121E63F33CE21D5 +37D3F50B33FBB92C371BCC73C7071D4EC40C8E0E5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.1: CMR7 1.0 +%%CreationDate: 1991 Aug 20 16:39:21 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR7 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-27 -250 1122 750}readonly def +/UniqueID 5000790 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D +E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 +47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C +8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 +78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 +1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E +01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B +C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 +F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 +8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF +A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 +455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 +9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 +EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B +52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 +563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F +0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB +7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 +0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 +1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4A78141CA32C +B3C74E1A0AE0520B950B826B0ABD81766035058ED1654D00FE541CAD1D246C0E +DE85FCD3C0BF7A70B913487B1A527EA823C00C39DB61FD6641B140FCED8580D8 +046741D2494B4E7CA1F120CBB0A532BE049CABEB70A39018E8212F8178E93C98 +B377AE2880FE39BA0EE29451857DB34964DA26ACA4CD23CE284ACE37D89571FF +CB67DE7AE379B74B32ECACC5F3DE0566CE9EE820E96F27653C75935851CD9360 +A83C7EE8270383CB8A80715BC2B62B1F709235A5A73D99710D7665182D461095 +B98C8A0FEA44F0F1959055D50BABC7880E7BA1CA4CD72531A240A622663A0A1F +DBE4FB907F97515CB1100282C9A0241F65F84EBAB1701FC105BD25F82807F4CB +6A5EDB5CB156A7D55F64146818245C112DB0FEE9E0AC96B4B2AEB27F89FE0560 +727D85FE6CFF5C457EB1EE5D7E2A09979684E2611BA57A1BC7BA4E37DC4BA761 +557D986F9A8B495CB7212507AA79C297B0665CB5883F2332DF5CB088A92E24BD +1EBADCAA515B567FAA9E15E7B8DA60C1BBEEF5A2E0D4C0C67EDAD822B5E8D81C +6D29928726D36EF0A9238476FE54D4990E8D75FE0109C0336DD50F9021307213 +F69C700D2291C546007CF3A5DF3BF5ABEEB640D3AEF585055A65EB2CA7AD7F11 +22182523EAA8FCF029C604212529C03F179566E6B731FFE2283D6402A350EAB9 +3C7FFF41383A9398B33C48FB2F9A8241D65425FC5E49DC9BB97521D91E44B3C8 +B2EB1BA8D532BBF175486D1DDB914BCB92968D342B5C1FD6FC72DA462FF68992 +464BF0E00D05C2AC3729E598991C6EE7354F0C400296356ABAB37A16FA504DC9 +B6369F88BDB7061D5EEB761527E588B4A6C83169B517991789D664BB543A0E57 +6F2529BDC7838AFB93D53D5794E57B65A7DB00584492C046F72CE19E4D1B177D +1D951362B2F7CE2B720B305D45B7FC74183C1DE46073D8E20FDF8027FBFCDF40 +5F0950F5AAC19AC8E8D9A57A271C0BB212822798DCD068B4F05DBAC2AF7BB25F +5DFBFBFB5A51ED26ACB22541E1971002A5D97B5E148F8F087A3229C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT8 +%!PS-AdobeFont-1.1: CMTT8 1.0 +%%CreationDate: 1991 Aug 20 16:46:05 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-5 -232 545 699}readonly def +/UniqueID 5000830 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE +3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A +ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477 +C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD +F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D +4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7 +61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16 +6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173 +B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31 +6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23 +C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B +BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE +52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9 +48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5 +351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128 +C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348 +5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367 +1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1 +3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5 +F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB +6501DA7E6D96E227068E993DBB0072F037CA411E429252586CA153360490EC5E +2AA8727E9605FB75714E22C232C05DA77FE4B12630E21C745889A8ADC706FD27 +831F980EAC18330D5D2E46563316C36CB25F50875F7848978142575A3D2784BD +C9C3A029D9600CA3E9D7A26A5DDB8567F8BF48DA2B08CBE7B76EA261CD180CF3 +3385CDAD915A90244C5660C6F9E32E6027D730681B88FC02E6C9B401E93072DD +6E018048D22EE65F0A03018F444194BDEA833D8EAE56C2E5E03FBC7558684C32 +C1353169FC072C0A217D2CD18C4FEF6F6EE2E1D687939244014B09DDD8CF6193 +034D71F007EC89B97005E00A81721503C87B875A6BA33B4D6B2D65AE32141AD4 +160293043FC5425EECEA875CE6F87E7C6F6200B9D52C0E285891C0FF88A0E361 +E7A51574CEE3918B9CBC83B37DEE303859B4545A7F1EEA33C7A4459E6EF15953 +A57D7DE99C7BD953B7DE84BC5C0A60A1768EFBA317849A4A8436F6364BE2F323 +4C99478E2B7C83BFF1AEB394C489CD87D7606181C61D15C85760761DC7F3A81F +AB9F63366378809931F10710C8A595966590AE5A85DFE5DF86D59853546C87D9 +957992FF7C0D11FBA2193EAF02356A1D08F2C8A7AB2FE92001E0EE2AEC0ACD52 +E52D961E65B79F613F0F9B51EB31F244087B484697C3D4DC28550B173BA7E4CD +8D0B0FBE866090BEAF95403D5D03D90AEB48688A8BDDA8AA0E8AB89DD3EB27F0 +99622F21C77FFAA3A8A5A67DD6F16AFF35C2B96957216B0021F2D6415A0F5730 +D179FACB55678F5976010A20EF3C0B4EF5CADEE4C4DDE59A3DD93A87881DAD14 +5E9438F095C9970B2DE2AA6CC85D26471A93BF7D9ABF0253FACFAEC66AC40563 +24CE6C4DEF61D3855985116CCDB53A70AA7B5F941DD21A2DE52FE42AD35E08CD +0FDED28B65290948030C5F40DCFAC51F51E4AA828CDBC114060B7370DA18F7C9 +12378ED10D192F3BDD11375603EC90EE421E4781A41549555F35021C57813161 +145511117E96E829386BF43423099250C8695DB2B891D68B4DB7D949F481CBBA +1DDE08680F7FBC05F9F00FF10ABD21032FC71E7EE2EB4BD97F48842FBCB00E73 +BA581330A21BEEF313BA3E5B8729459393B15B5FF7B63D985F6B0DDF3C90F3D0 +75691B2628BB9D93049A634FABC67137F727E13CA04481820112D953881ACBD7 +9A85175D2394FE355A4A6E485F3B1D69D8C06EE532CB2508D8F3F1E65C0369F5 +F10B3D86E8333AA1228560C37614F8F924585323FF0AA91465B288F5BA39AB56 +27CB01ED906DF594DF3BDE610AE97315B6E0C0786691CA63CD16F32C883B5FB6 +DAE4A1C028BF5D935A377C317C2AC0F738BF2F5001BB6347B1EE4E851B7D4264 +20EAA262FF69C8C01A4361C9CD7558F4D57E14C0F631D4576C0754191CEBAD26 +2598FA77F1B5F8C511953EAD4A92ECE452C5EC23065C812C7C355AA448F429D5 +99D4B28A65F539333EFBC3CADD3F0824F8D04368A12F309A71917FFD1CB30364 +CF98DCC3BD50B0B30CB8E07348267B834EA740352F90312B24BBC22D30D28C0D +2E571EB8C6B7BD316C311D84B168CB4E95C4AB2D6A1351EDD204696C2D728E73 +5352F0CF2504B6A32D07F207AB5207E465239EB916A77EB60ABA8D3BB42A207C +468068A6E9820747D8F4DA73D8352B70F1284545A66D4A5128B96F48AD7F24E4 +5978B267C2E65E0EA8BCE8A8CC397F50C5E0946842F0AFAC4D058D93D5125836 +0FF4BCCA05CB3C4AE932E73878A04D07D431B8940466E58690DB3824BA18AB19 +6A4154392C85B170BFB08A4E2B20A22971BB62BB54BC5476B70FB2A36D319917 +49A7138FCBD505B64FE319DB6B160B1C55450F7C3EB1AE1C1E1596B9FB4601B0 +8293C6D340C9A301F0B3A16BEA8EE0B593E1442E802AAC63BB90B7069D758E9D +183E3B753D8872EF6F584673E41838C891DA7B2931FCB41C2AABA22CDEC44AA5 +23646E86239A2A638EC8E0D7AF8A060F6932C10C7C933FE4C3B8FD2FE068CF15 +B0A0D71564C70C420B3443D8038A2D42EAD34FA04B405970223376E59B8A6DEA +314520BFA5ED90353E0A8DF082478ABAD2AB826BF12EEF1918C1BADC6AA043E0 +90A8DA3A412917629A1CBBF535C2E0DC90929DE932CC286CEE95228B73031E77 +3B0B87E4BA3E539FC92A2730B03E6DF5F947C09B9E99400D5E081BA931FE79E2 +306FE667D7C94545C0311F3D9939F315A586BDF6AE2FEDE5F32861DF838567F7 +530FF07F5A3210373C39C6A63B03CDF708EAF7229ACF271D0C78E02550B0A51F +68B9235465D181CAA18607B10F23597AF69510A74EEA27ACE4EB74EDFDE2DEF1 +93A0DC2E47252E4CEA86790164EF264EFF54519DA5AD87A12177B15776140E86 +D5CE9F213FF3E3ADFD8CD77FAEFEDB903761EC61BBFB2D4E04DBCE5E2A25EB81 +973F8158177C0DCA0426E27E048FF3726702B4ED43053B1ABBFF23DF91720A8F +2233266ACB4850A51F94644F90BFBB9573DCA298C47E77D111489D8B8DA44DAF +4B943A5373AC74CD66A0572A173F85B959A511D0C3EC4A2C339A0157255C8DF8 +7F6E8C1DCB677CC115006ABBF37E4DF57E67F1B6E2D061995F31DADF8618E596 +FBE25F8E0E89EBDD6456E4CC212F0BBE2DEB6E67F64B599D810680DCB4F1AB73 +87016A9ACBCBE0F369DC9E5FFB1E10D6972BCCB70B708DFF31D680AC7440658A +23A460F7AE49361DB66264638C63DFAAE5FD596B78D5B67366694FBD5E0F5D46 +23BE41CFBF87BB1516F1292F4C0CD729C65BA9CA1CDDC19E3B61B015024C21AF +751DE2EBC67F4C2C3141B0356D0143C7A980AF68FF61C30DB9CAA9D037D880A4 +1B456B6811B6FE5E452DBE16ABC3FECD679DFAB214951C5E77581BD007BCDD6B +1E266FED7A65200B8AA2950E73A061775385A6E519A53BCEA85193EAB87D286F +751457CBA382189086E34FE5714F4899E38ECBD456F243D235B9E8472DD8F40D +14D5B68BEDBA0E21DF657524EDAC18DE0B09CF7876E0408F69851B98717754A6 +4B2C1957EE4370920647A67C66B95DE345D6D5718C05132A86BC3256425493C4 +C83E23014A7988E89F223B2A123041BFDB762BE64061DF119440A1256FC72AD4 +2F4F3F979042288CE008E1BDF144FDCCD0BB26F467BBA9E8B2ACE438E4EB7F2D +98B82CA0E129CBE7E21453AD0EE151C4D9D09AE6B32E29CF82F64E2DE3C76827 +099B86E2B64F1B4A2705A259301B221C6C5A1ADE04BE8A1F8022A0D3C1E4F601 +37AFB8D973ADE45BA343DEC97919298B12DAF45D41A36C886A1573071A30A0F8 +0FACAA8F25D8B3035EFC3C1C6A2BEF12A387368C790FC900FC9F74A61C7D4C3D +23400F710573A56685325CA26B23461BF8D1123E16A9A2C107B9EE8DCD39E138 +0E10E36A6467BD5046B6BC967D981B598BFBE2AD90FDCBA7015609344924544A +11E86E02FC9727B2770B732E60C21A7C60EAA31C14DF51BAF8A525041D15D1AB +685B03E7B74A1B97F2D77448F02B3BE93316C49C07B4EE31E7195043D05D7C10 +88C1847E54896977A09E3A1BAD475A3F812EC64FC99A1E86EB3CFC01391E5C7D +8696BA362A7DA2172FB0EF99185C01741F97D66FF795B10E84385B6C9E996853 +5C72B3A226E18AB4EE7FAC1D4C5141C716BCA627E3305245A04D7EE11A7AC97F +59862F5577EAC9D9976FA5F6C3514D296454AFFAB78EB568DB11DDCB1AC4BCDC +0CB0CE0A02AE97380F9978FF55B10C9882279AD6314FBDC587FD9A7E6E443773 +72EB7C52A118F79EB4CE3FDB2F666D43227B3059999CA25DC06ACD657F4768D8 +C82CE400837C08A2935F430987348A27CAD51AC8639CDBDC4C911ECE62CFE94F +2A1F28F10EC80A3946566FB09F6B8731EEC4571522ABB2A90792339331F3FB1E +EF0BB328C57D30E5B1849B6937698E49ACA84FFF48F716EC81025091EEE4CD06 +A3404843DF013CCDFE867C7CF2A29C1DFE96DFDC47B65E916070E6D019C0A62E +3A1D5EA282B3702B1B20729F4791D90E6968342C440622EB34D774BEA2339FBE +F52C4655ADA9515B0A79A2C4E628E6539E57D2BEE0D7084F74BFC2B3C4B36F55 +7B9003ECFDAA58BC265C1E8ECDC78CD47038ACF5F0C37E7A076A8B16F9F712BF +E16240917C281C41EA3CE87CE4C1C976711D83374974D37A00FFA7B280D76FDF +79D1BF415CE8686414CAEE79D2FDE623D40A789A98DC2A6B88255A67717EBE54 +8E0FABA8082EDC2AEAA66F509CDCB5E73BDA6E20CA603B83446213A967B77C99 +2D6A58FBBE0159CBF46E368A28956E45816173719983CD1B775C940CDC769E71 +3331680DEAC9FCE0C9FC2B1CFCBC6C6638E02F93B4F51219A6FD277024F8A61F +1641A540CCDAF1CC25EF0429A0C9D403F6A31852249D3ACCCF14E4110A58399F +12FF0DCB0B4FA1AAE66F52C9A6C6718FEFBA51292F2D48A762197034B06FE1C6 +B784B4DC6AD9578BE38A33896B6C528208C33BB5482E1D2DE4217743A4DE46E4 +1C2F02BC25B4BD8F2037D362E9DC6F7878B77AB6D3DEDA9C7E1EDCFF9257C7EA +B42065CC8BC029FA1AE9570B17811DFCFA0E23A12B9C7A42444A02A8A2CFF5C4 +5013A984668C3BAA0B4186182054E8CE7EEB9B09DFE7A4F081BF16A57D26169B +EFA22E7BA38AAE8D01B1A894904AAE56B79DC018E63030B58849FFF875A675D8 +A52F9606650450A452EC0C0D3B494506903DB65BF4BFC8BF6C8B79033737BD1C +1915A4451B10CA2C5195458B4E6D193CB1AC7386730AEECD1184A69B07B418FF +B0E5620F8D2ADFF93CEA7F5DD4E71FC497FA6F64AB31D16BC00EC5F8A01FE192 +4E7EF5104EEB6D098D617268E79A4A2B9F4869EC952B4D6887FE9BDB61D26397 +69AB66F43996DFE771736F081719B6987C5DFA86B91F07CF1FADEA6390AA9B4D +53093D427DA39F08096161E1742740639C332FCC40DF91A295A671782CF8C713 +0FA36B95A55406BD18FDCBE9D1AF9492CC5C3DB7DCCDACC1DA5D40F2CC2C365E +F99EDC21B3EDC564D282029AAF62A49B6BA5C6937DD1BB15E68BFA698549EDFF +BF0D4FB2645885BEC5B79E8475C43E5DABA6B60E72E31174054724F711FF3884 +36B27B2DB7677F04A704E7427B00FBF8880C0482E98893E23AE0ABB7CE35F2B0 +3662B322718BFFE777F395D551E13CDB3179756FD85B1F132E62C44A11340E7D +B8B274D22D0493F70E8D587356B84D4238439F2E816D589B04831E8F8CF691B5 +98DF446720310D929B1C8E29C51F2FD1C70AB8F8FF4AF21A05D3A520D44554DF +736DFD865EF1B73A0C06BC9E2ED21C9D1444D3F41CADC2A666045ABE51203C6E +BAE3CC3C3F6A482868951970747C45270070D2FF52C5C9B1953F845AEA12C02A +DB5AE7B1E9ECEEC8B533182B46B8ABA08D587806E88B87C1272877C3DDC6B14A +2CDD31A1F0B8555F59C5CF6A73244B70F5022683A789F7E0BAE3457337B709AB +CA88BE9ECA5D0389275946CEE8BCA349889E64D8240FF5AF76EE020223AE5E25 +59A007E200CE8576C2A5646F0B1F35E4004D132A123CBCAB8522F2E0CDDF17F3 +4BAF1FCC0BA38648EEEBAA38C1A783033951C59F5D52F3262DFE4C6E9E6D8E16 +F23015385A1C4E06ED360BD33579A6B1D1B119665B24294A69B4ACD82B5C801B +5162AFDA181F01C80AE0148867FC419C7D536D3ADB336780838F34CAF311279A +E4FFBF6809892F0BB1D090C678C1254A9C10DDF87B3DAC22305907C982AEDA69 +32366E4F2AC672D65A2F71A842C3D6694640DD821BD4D9C4E96E49799322EDC5 +4FFCC0D50EE4FFF6F09C935542FFFB8D8B7EA6B647BAAF44BCABA88520DE7AAC +2A4001008C5CD2A973129B418D800F9B8BC24675C800713195C4C2DD36DF73CF +35D69E71B10D31C8DCD84A0E2FD96EE6CC79F08F4DE10E04B7F2E6145C2B7409 +D52C6E3089D6DE31BA5062113DE1063F954A03B80540EF62D4F9F41A957A90A5 +E2E64323671EAFF01D2A5B93928F6346C41B99B866B08AB6420396EDC8320DB1 +ADA75B667AF93D1CCFA9EEFC5BC0C889ABEF879138A86EBB2D5620E8621B924C +F60AC2456F0FE9E6762330CE743DA37D2CD9EC859A61521D6BF6D3B3FBABE3C4 +E7EFBAB21F0694697B87FFCF6089E585B8CD57F4D7C22A5E1A2AAEEFA4FD8623 +333F90E77DCA57BFF970D593B3EDCD64B40EE3C27326661B4413BEB7714F152A +935427525E08E248193142B91CEEDB3B0209C70ED9FFF57971F524026EB4A194 +5622DCBA91A6BC854B3B3272769AFCC4D2B64B7D71619FC1F39F435835C0AA10 +0FF412ED58C0CCC0BB1888A883C56864912E693441902E66DB83C56956C2E7BC +F98621BBAD7F5117FEE6CF287A5BEEFE3F5959108A88B76365A5ED6039B6A798 +408FCDE095A872463F33D417EDE584D34B721118D3C29D22E6AFA7BE5D141139 +46F3E6BBC0AF1CAB844822AF1AB941681481F4E763AE6A1F7CCE0CBFE337364B +3174464E6C21DAD8F3BCFA5CFCDD2F5FBE00394C6BEB1157580707CCE8A81DD0 +9E3D37025413C47F77BFF4B275EB40FF05F3EAAF70AF8D4B9420AE2E1DD66A46 +A44BA9C7E6991DAA7CFFB406AD98CBB1177775A1D6629FCBB6F60C3942199455 +70B3B93579338C424AD1642B9109502B232B42E50A58A7055068E43F56B9BB78 +5D387FEEE382A33A97A3A7C29DA4DAD8CE9F503FBB85893E7FCF18238A83525D +1958B38A24817BDC440EDEB913BC3C61EB2022A71E7F1D8D683A36FC1D84C570 +2BCFC3A3218C9C6FA9657980BFD482DE8DC4867959CA93B46F2887B1329DB496 +F69C4A43641ED3842145BB868A430E03EAFBE786B98355527882CCC8B4EF734E +BD0DAAD6CAA8B36A4405E5CA9FDB69FAB8C5D85480D81A83EF6038AA3FA8D687 +017741F80B94CE67F86A1C4DE3E3C197320568238C7A7A1056520646A674C3B0 +BBA0CAF9413FC95E938F46D8588A94FF77079DB1698082601DE0D71003C74392 +68D48A8BDAEECDCD2138BAA3CC43F83532F27F4B20AFD658109BC2A26D8B6C07 +5DF873C2114531AE6E98753DFED7214D634A453239990329F08B6F22C32D097F +85FB45CBCC189ED8FFA918DF0EF2B81CE018B93374A5BEE3653336C68AFC21C5 +77BF87F75199D869B68DC72A22274D883D836974E0AE8A74FA8BA55EBB024688 +3EFFFE119F54B75E5BBBBB66B46B7E77227E680870DE9EA2BC4B7867AD7F3512 +AA3DC6E37E89E420CF097F26C7CD717869DD8CA401DDE7375FFF18A35CADDBEF +DD027E352DD8B99893C37F1F84C5920EF3B3B2CC254EC794FCE1C8B154866B5E +E3ECA7870521BA860031931B924E082AF12DED9962E5E9E59C1FC08DF1258462 +6A5BD8BF23648D1131C67BAD67F17E5276E82EF31C44A5A9A5CD664EE85F9CA3 +FFEB95982ED1FCC1EE9DBC11368EFFF6C53AE3AC805D78D3EE4BED7DBE490920 +C5542128E68F9A6CF46D1693345C9822C77303397822C3B3F7CF5B7C39A9B606 +C5C57B4723A3B9F15C4B4B1BBB4D7267EEE3098285772B1D4CF1E15277EAFA84 +3B54EDC3753F347AD7EFD7BD292539FAD422EA17240A8377D894475E6ED70094 +7648F9850E1F8F2BD5F7C3AB23BF64C692762DB1727E10CE0E6AE83295B91349 +28617E2F90124BD97F19951C55E895767AC141C421380AE9C311D41E7CFF7DEC +880263507BBF160AFC57F931995CA3CD773DFA34654899BF1FB5FACB5D39E67B +FCF44618A2F553ABB7707FCA8C118001D9A541D0FBAE34DD4978FD40362E03EA +F9C9AC0A6B23E3911F8E869E06271640C2E9A0F6F810E1E8E6F35099EB5D238E +78CF6CDD08B6CA7895BEAA8A3F42546B7BBD19E99518E94D83CBC5AD2028487E +FC3E8037D954767EA744A08388A946BF6B48399BAC6552DD0D6D81C4639D4E4D +FB3AF3F09AEFE96C24D5A73B839AA47AF5C2B6A1C2ADA3B5299B59C4D39FC3E4 +F537A1D9739BE21DDA12247DD50EC83A24B335BFBE60A307583DE9EDC6A4B41E +F95306F407890B11FF762DB110C81F1C40558E23FB49ABB698CD00AFE090F590 +BD55F31056D5499B2C5D8B838421291EF18646A5791164ED41061DB6B44744C1 +BCDFEE00A092033DEDB0CCFEFDCC484A08C7AE206821883BF5EC194FDD158C18 +EC56D2891C5517D274303F10AACA8524C43E88108FB59626DAC8252A30AA3A63 +CCDAF5D7F2BD922EDBE80B219706E22E6F4EA6C6ED2BDA5FDBA42C3C7E615F7E +85A9CE4784CE32BCC4FF9F14EC3233E7728DEDFE0A65F36B43CD100DFC0D9257 +F027C0F1D42B79ADCC90FDD53C50B092CCB89BC737A0212AA7C7B2F1E234D97B +7CD5651919685521D8799FBC97CDB2E6718E4840A88CC6BA5CCC9F8BB4DC2B7F +13EF9948947FF035E9DD4CC81994F22CC588A08E3DB3BF1808B1B8ACD5DEC501 +DFEBF7B9F0C1E9098710F18BB28324A09730F819D2A1346962011E3325A06EC5 +0CDE3B13A2B2AFC1E88AD6AE109841216AE9C0E34BD4180D31D500C22A2A4D56 +15F720C054CBC6FC0CCB252010B9D1B30995A9DCB50F3F15FC4A2ED963279754 +A51603672403C6143D57E5FC97CB977C9B561F50F73F2A17365A12FB5606D75C +F85679CE7A4CA183915EEB79008942DDEDF0CB51FD786C7F4EF8AD0DBE291D8B +235160320998FF12783922D32C29244763F9B7B5894BED6B5C7793AE22AC11B5 +1E5D1F3BCC402237B9506589E6B8DB0638E730958A8F9517D051FA07D98882E0 +4E4C3AA9E031515DE0F413B9ACF75685ED1D8CDFE44B21FF5ADB57FE6D109E63 +F201F8FF8734B60FDA2275BEDC077308652AF9EE34674455D9C5FBEC15363D30 +973F411544C35F6581D7F135BB3A2B2DE6B286DCBC29AD9B1F28A9B25934DC4C +2DB7BBC6D6B4D1B4459370E29A15A7728061DE3070205FB5D6524521995DC28F +AA9514F37FA6D55DA2482E56C995E5063755123D151959DEC4E406C18ED4B052 +A8992EF41208C4F6AC5539380EFD70240CB1F6A46B451690B32A91757EBEF5DB +4A94DCC49AD7EF038E87BB6F3DAC2B4D2707BEE805BDDBE96D0249C55BD4C140 +77173BADFEF9F85BB4D0E2194BC65483EE34CAAC79530023369275768BB8846E +CDD21414F0FCA20913EDEF6160623E28B6CB22EBD429778E7AA44D20EE944DF0 +D0047258E71110ED3A398DF018009C92D3B694337CB5FA99071B9B1DA40CF5DD +DD478551634ED561834104A01B7F6E49529237262080A001D121DACA8B5FE018 +B8C3565E1292A66B341CB33B1B30BC9A8E6B9682B0598B4AAEB34F080D58E008 +242D14D34AC61F925D0208EB26E47985FC45B1B870AD1AA618DBC877A4947F97 +0BC57C1A9A8816072B36222FB66F29B54BAE35BDE6809ED17CB6440DD4FA6F70 +7679B10C2BED86B468DB104141A1837665E512DC97F592550E85AF86BFFF3F99 +AC12ACB75B2ED3336B1D17EEADDB4ABE03D0F1658A57EA4861F041346EE2CA40 +A729730123EC61186295ABA4134F1DF5722DF186546D2906ECBC3430E7E3BD03 +CA0D6159091024728783D68001DE7187171E28DB5907F084A94D2462E703EDE9 +590583BBA61BEA4B1161BD4C41FE39BFC93B0FBCC5EC9FF4AFB5939F0CEEE032 +FE5AEE66D56547CF94D88C2EA7BE5C78D4BF227A02AA229FEED9BC5DB1340B02 +1B9E8FB9729564C3EFAF35411B7B28941960E5DD45C9DB122AE3DE1076E5AA31 +F7C6DEA00FC2E4E72059547CD89389E8C7C980829C896FBFC2DDF77EB3206BC3 +F1E21347942EA591DC3FB59BC8E2BBC4C3C657305F30A2D18DF93CFC0F0F0216 +4F19A938BCF2A4BB8FD1F1B965F22C9729E94D040585936C020B24289066E742 +D1DD955A35056402B40B3EEAB83A29F47EF3B229EB5EC517177862FC86EF08C8 +BC4D9FD57A0D8FECE71A4439DB8954D836071130964105DA82607FBF2C9A1810 +3BB2D7EBA820809E677FC5952AADECADE3AF4AA90BC15F40BC86F071875E0C2B +0BE47794B817AE5FEADE9E4092425312A71087A7CAFD886CD39069BE426671B7 +CE8E4FC97F7C16A702C6F8FB677483D7299BB4BB06EFC04B7A32DC93075B79F1 +BDF4470621FF49D372AB3C5213E5A070E27BFAF7169FB18582BB796671D539D7 +CA7F0E072B5A394FC2B6587187E1349F69848D5DCF048E71531B13F73895CD7B +7D81B338AD6D445C27EB4C4D76C0B5E64A07D03BD7D8CD3A3DB491C2794CB031 +E56618C5E0D65F562ED857B81FB384228FF762CD2718C723B7B261750E25D0D0 +D26060723382911F867F46AE73AD67C943C44196997F574FB36D1FBA79E61A32 +D53145364DAB0E0C6922CB21CC3B03418747546E48397A7DBCE9AD89193709A6 +B85AC7F6167D7DF1A6B72D876C4AFF990CFB68B83B0C4C494C7F8CBC60B1E7A6 +7B3695A2CC0FA011FADD2527FF4D47726782C19CDBBE2D55BADAE4350B053B8A +1EF6B385ED4A0A00E1D0DE7E4F74BDE3497F13D80A6C30E833DC6FCB3E597454 +68EFAE3D397D4C8817EB082DCE98A0F4BBE0F39C79F22021C84270AACE7E2E12 +617F4FD655B9F5BBA5D4F8AC935F6E2F5007DEC58A1929188A9D5FE5F4C4AB03 +662ECD86676D7CCB50C0546426C8B92864019A2DBCD4247BFB904D8559F2A9D2 +0993D260CF293B40550AC6DB3A93EEEFDDF7D8EF947E1B487104E0D0E4365BC3 +62FCE7CCF52930C429532AA2E3FE62AAE9425A97EFC23EFAF6DA75C98CDDFB18 +175006EFFDC2A6ADC9B8A8B1D343FCA0155D476E5AA2362F404B00F493D97DCB +3AB5CC9ED868D00939AA1B55E0824C09A1B7D8B38B98ABD0966E73B5019504EE +7C3A6EB0F094A3760C96658CACDAC422442B04957FE7A61544A5F99C6F7BC695 +4658AC5403D3395CEDAE6ABADCE9F4EC6311FD92B340952DCC23AA72B514E163 +2E87B7F5588F4EC9DC915BC3E6BD8994BD380F0ED79C4E47DC0DD89828D65709 +29F085518387CF2EAC62D2505DF0CB47D307E1DE4F0A147979C6D5B93327B7DA +4BA34DD209946E8022C11A4E0767FD809A2F628C73B0A79201C40281BE044CDD +5F9130EDAD2CB86B1A324B824C8A1A60D34FD32558089C4FC8E70AAF7AAEAD06 +48C7F711B33C7A421C1B4C0FDA2392ACF4C850315283E86B0DCCE689AC9AD3B5 +91E91329B5CC58DC2CB4466D669E956488262A12DEAD838577743D7867030F25 +BD5B2B0A04C9DDB6C904E40AAA82B54542321711ED1D80348797F35A093D3D77 +3560B459F177D388F4855C82C277179834A94D5B9F4C974DFDF3929A1BA0B301 +CB3558D6BA4BE0B1EFFDC2101352FDAEEAC17D60BBDADE15FC093161B872F98D +71BCE512AE88BF012B3F96E02EED08A7CE8802D409A07C27F1F3AB40589CDEAC +99642D6C6133BFD2F6B1B86A80CBA0CC62347644D25BA14C9E24A53DA2DCCD1E +8B0EABC4B0500D18AAAF3D634D5D1E3D23775FC02C91B1D5C600986E72185A65 +F6C926A5E48E4EDBB4862D9CEA4F491C0FE2DE07B9055975A6FAF60B692D5310 +B6EFE781BF90EED228709404DAF22172D7CA8B050EC477B6ABDE89E6A53CA72C +5B6FE5A099DC209AF9DE1318FC114ED28E871B705DA184114CDEC65EF79D489E +347718519EBEB40CE19D3CAA1288413FFF08D1D6B42A8B24E5B00E259BF2EF56 +600EC9C721981559BD0A443F1EDB12DD99401AC2C5F84593FDBBB1C1DD654A84 +562D8ECED1A1E456D56D47D60DE039639ADD3FB1A342F4C3A5071ACC35CBC60E +F6F10ED429606609B68BD3B3D19F02F652B2DA1EB2884C4246BFC49108D3B95B +62102EE49D5FB31929C0DF59F98F5F36F07C5C7E9D0244991D2A1BF8ADBF158D +9D21B928B484102F7882D8A0DD1B66B9C0DF4C95A6ACDDB70619FE403AF8AB12 +56334E17E1E4CDA7E4E006CD042D9FC9F83694B83D45C9C34CC0B945E13ECBBB +1C74BD8E12558E49A5875A64012B7B5F9C2EB2D50B51C21B9645BE62CF32FA34 +72E85AC778705A888355E9DF59DE3CA815264513E20B9F211D5CFF80C39A3DBB +D4602AA4C81461514E74AEBE92E88B8DF861465ADB524AEC40C630CD7DCE9A54 +22FF67D94F13612679717BD4012C52A614BFC5E7D6D067A478BD19B6B25BA513 +2589E8B402A4DF511A3239B1E657FD93B3918F05D6AEDE1A27B640F4CF54E698 +820368D069F5376EB9E9486288FEF0F64683096850A6305B648A527E10BAEB5C +D1660D266731950CC130D634AED2CC2031CF18A9E29E1D1AE56F6A449EC3C4C5 +54EB55F42637D974407202438467C45808958670D5A597883591F81F69B9AAE7 +F95ABD2C94F0F233ECFDEB7CB4C876E2B0279F07786686E1D55652011495C4FF +5C09DD11E6AC3419E53E778FC951592E6871964CF182963CD3E2E2ED54B0387D +A65CBF4C3786B9FFB4FC9BE817BA5ADF7C56904E49D76C050F739D8269A0F367 +C07D29ECE96EE7EC9409A5F815F8BB27CD8ABA52DD41D8406271C2BA96F9AD78 +039042C71ECC942D7898AF8DFEECEF2B7D93230FF418B589EABE2CA606B24263 +AF595EA9A092FA271102B6B4A5C2A67E5B06CE6691D36B49A07F1616C79DC6D6 +E86D6734E7C3C50F5D879606627A8F22D92661567C0EF73A1A67657C09493699 +49C7A748B0DE88E6C99528AC4D6BAC414EB025B58CBE163B38308BAC4E08B9C2 +BE464858A6F6450954DA2E5782B78BCC63A28795E07D2C60C10806E21B90B2CD +CFB625AA73BF95A30AB31EE4172EE9976B307C002BE02BF9955F0193507E5071 +316AD5A467DEAE1A1AEF879C7DAC1B5205EC133DDEB5DD6A9E41D9BA6FE56C88 +CC865D56E2F305979AEB7FCDA4A3C98EA941B09A0AABF4AE5EADC62F1B0B92FF +0D856E7EB38F355A30B38F39872813261E71A3D1338A8A5BBCE26B874993AA09 +DEB4FF1D4C3F43FCB1972F703BB7140C348A64FB02B5E29A07CDE55883E4F2C5 +702D5D9FD05EACBB3411584715ADAFC54DC38155A17FE2C4D471EBEF717482D2 +10DF613440926BE3DCC427CB106727B12B04464E3A50A49575321F84F64B708E +86FCFA5921A52B2D459240AD0DB45300715069CFA36E6FB4BA47CCE6856E8B93 +D6A2A43BCFD748872304AC3BE3D905A54A47D303CC1A087B03A33C0763010F56 +AB46520CEDF84F146EE5FB86BE086A472D5C0684FE9A1A633DCFACB6E79CD0C3 +0B1A3B29611306F024F34AFAEBBAD8C18631A68C49FAD20E9DFEE55D14EC95E5 +B5B4A5089A2ED0EF848F88B421857631FA651DD99D87706F4F0FF196ABAC6BC8 +8F7CF1268BE748CAD300D6298BD43283C487D0D6E340E5ADA956498D28AB457B +46F2DF314922B58CBFDA49200F47676319039A68899BE5D2C78EA7A507640402 +418C8A6F8ABD38723F19E856774316EE90E92C3AF1677D083398D640DD20AE37 +C88DF64010339DB844B5BD2A61B298BBE52B0B2251F16668F8E94D6A95DB778F +9B4BF7654EA0CA2A418893E8CA6B6BBEE0BBB1347D3F3B56577C5AB1E76AB97A +E48BC675922974A24E0A75122F5ED8CB912B883A949E9535D41AB4426AEAFAA7 +4CDB413079D7D5C72D9433B8DF1C046E1157849FF78D2C1FD45BC4B4E2927154 +D168E4E33323D2703300F7991165B48F1F95B419B0DC01764F0BE63D861E0E77 +D339CE777BD531C527DDF660AE1AB5E7DD90C430F66E8584BF40D5DF54AF911B +B39EAFB983AA0D038D227B66021DD587EB51FE1DB18858BC362C438F51774198 +10F1EE25B8896097AC44B0E56AB1B341EC95AB570BE4700DCFD82DEA4664BCBA +46E0A9E7C7C99C397E97EA27A5AAE8F6260158235A148C849D9992563F401019 +6460B3526AED81B45B9932700C0D1270689EFB94A5E47A6AA094D9F7F2FC581B +D164CBCBC08CE9A04DB525224D2731265E6E54E278D2BA3E91C3AE6DE2BECC5C +8FBF58627D29CC1662704DC08735F36038E54D783CED5E60DC2CC7D731CCE092 +DED3F30E3B363E588E714F8A3FD537EB4C95B00FED97F9265114181ECFB39A00 +8E060643C6D238C0F8806D9C8810A545620F7AFB5CF3B504CAA7EC13B13BA1EB +04F754834D150B942FEC94DD8A5A6E3AC6ED86E1681BA52E9D910D68E31C0FE9 +6E28DBC93BB5A6111E524D04DDC2B49B8DB82883028CEE5EA40C65CC5ED0D886 +1AFB444D05B58E67408321EBE3D4D17905459D71712F81C6BD43F46D11EF6AF9 +5046036ECA41AC72338AEFB1B6F0EF3CBCF089655C12F564451C605B2DBC0E08 +F3235BB3DEC9322BD75A9928A53DA829647DDB8F2795D9CCD76E764EAA2202F6 +01D1C65FF46D5C8B1044B6860D22BE8B98B56B56F3B54EE8A9C2169DD2DDC73F +94EF440A000DCE60581E409C49165D676E6A32CF9D1B23299991493DBA38614F +76B6A5703FC9C27ED286B5897DD5539FFA1979915D1A768A6D0C40EEA679C048 +D9D870879EE9C46E1575E815E3842D1F1150ECED41F60A30BCC20D53E8629799 +04B60E21FEA41F1D3084E7A26FE0ABC0555C5AD4A92F2B3F691D60D0424BC7B6 +13CF40D7C615FB767A9DA0AC4582AE0C1B67D62E20F3C698D66D7BAC2592E9A7 +F38F683804AA0052527C0D3889E21D6E9DFD8600A3257F80DCCE0D128CE442F7 +0CF351B360DB45B7D04CCEB3457E444E0C54FC5D337531E4131866D6836F33EF +066937C7706617311CE8E1BC54D3195B4CE7B1EDAF7EF57DCE8BF17FEC2F3157 +BCC8A5751EA89F5F9578299504D344C1A5951083609B60C8C83FA67F5F44154D +862DBECFF7016083BDBAA480CFD5C63ABFADB534A7CC8691C40DAB5EDF4331A5 +A3F055929456774257BF44BC31C383E43C3C8E37E18A4E7C499F72FB29A63A23 +9662649680CD9009B1CF9D5A38322832AC98BCBA05C4351007CB2549B8008576 +4B496AC8487B43F3702D58834F0A0477340C9FAC8C4FF9D7D4C20CBCBFD915F5 +F55617D851317330636B302D38140E465F3782F45561C18875BCB2FDA48CA6EA +71B88FA9A87918A343E1F2E0E759884C1DF5FF3E7A51069FC427D7DCB3CB162C +2AE28D41F5CE96FCFA37A5E5750CB88FEE027F97E978EAB9326C64B87FF19626 +9EA9B6A7316CF6FAB3A49AEA2433FFBDC202F6564953AD3546101E295C2CBDFE +A758DFD9912E8096C22C0308AD6705F7807F151628CA9D66FD36B48D49860F53 +064096525B0028D3D6279306872A42BCEE965FD73F9F41FAD18ACC569BA23F3A +F72CCF9A09A69F49A1AD5EE5A8B62360E363E0B1113E008B16D94AAD5551DD1D +E689CD903DB992FE50775033CC10A091FCEB9692D875F7DC7BD179BA5E8FC955 +ED7F6B3A08453B03F75D825C5815815915EA89276251D1D03787EE0ADD5B7144 +4076D29801085C7B128C5491C7A2DDEAC62B54330DEC660403FDB73A8B267094 +DA5BCC57E428FF59EA99900E59A4296C676CBCD11C3EDBCE68077224D7715999 +36F3D3FC2240BC2CB58A5EB06C5BA59EBF9823AF6FCDBDE93CE2E1A5A16B02D6 +F5ECB676FFE824061B02FBA31FE7FB7B9E9E065B9AC4CB23C96DD0764A6C568A +D858FE44B23F04284F9009BB75751D98BFE5147A1F7184FF8D36AA1CA978D694 +F72DBA10074ED7A82B322387A91E1A4F0070B8426074A584ACC462D284860457 +C9BF4790C5FA7941183F4D9C6D0C7017F3C288A8E2DD5367499B1DA0D2A88925 +3F2A2E5AA0FF572681B1C92E2589DA97AA2FB527285ED3633C6F289C67B0390D +50B884BD5759E7EA412F75592791848B2D9F3CD06497440B1093EC93095A7C86 +6AB1E8752CAD96C0076B0F9EB4CE2220B630EED701D1A3796A4BD3FF35293934 +A69CBB8A74CF22836CE5200DC14E5295D6DA56A3AA44A004357F575E5547ACED +A1982AE3CE7EB7A59840DF825F970A11E563AAF3974F547F806AFDFC6F0F4BAD +88F56A4F8510E0AE842B9BF551230FAE47803AC5A959DB6B62F291C6A040584E +2C4A02D41EC7DDE254F21D6091D62D8598B6697744966BFF5E86CCE46D9AF24B +6C9AA017F944D42AA02F6775CAC2671BF2D4EFAFD3E529EFE3A5595F01D66408 +9513C728725B3CF6211808898E4C28A3F643B6E537D883A738CFC13B97FB3D23 +9AAD448F38C6267D36C0FA594AB6FBB577ADFDA1722A9E0B598432C8B4E2AFF0 +38DEE9F21CB910657C1AD8BA2C821767C0158D7AE3DEEC883372DEAC9CE7A2DD +C440B233FE7093E2B03E702F57A082F438EDACE37F29FE29849958C5079DEABD +7954EEA31EC67B0CAF068FF58C731AE5A77607D6FE13472C5A70C111177C1E99 +2657B20BB0D01C7C638A1E588CFAE59CB3171B685522FCFBD4330C941079C9C3 +AB5D5FACCC98BF9691DA89AF9691D20154B1805AED841931700A3F7F25924981 +F6521B0C6E55C98AD91ADEB1174786A6412671C602DFBD482462AE2F1DFCFE28 +7AD206FD98F5238665DFA789A4EDCC298C64B4E72C0C1B457BD64B4479413356 +2DB85E29E862C2AD57F150E1CA943D85D71E82219E735C7D8EBACFEF4DA9C725 +EF436AEC25D36C9E9D32C67A062605E963BD036886CD9688F7EFE6434A29A2C7 +730F1C610F3DBD29A4A71EBC3D179E3BC1F48657E2DD6800E5B1EA7508A8D439 +11C3CB84980DCBFC33875E20784CA711B061AB5957CA59B43AE4E4A44B361349 +823D45AA26B51ADE783ABF1C32E49DACEC7DEDBDCF2648ACD5A0DF02BF7256F5 +FA2F054B79A548996442DF9205F4F3F2C27607D11B5EB4080B3FC1BBAAF8CFE7 +5FBB35B87B540546203FBD90341CF38AEC32B6BB46ABA368EA42C69BC9834A8D +E915C163692174A5D51136308383FA693024DBE6552DC525BAD6CFBF9B61D2B3 +61FBB94AF1507EC144591C621B8DAD5452BD53B0BFEF03F6B9D53736FDA5689B +A9FF78255396DF20AEE452D5D3D2978B2D681BC60506ED10145ABE6B719CA44B +6535DF1E593498F8C6742B84BE204883ED8D8D624D52F0FDC9C8AFE1B7808519 +1E056CB591B6A2DFC4AA44604AFC512151FB0D3A3187FE57F409F04092035DC6 +1164C06205083E54B6036D9AAB673FEE23A3688591DA15FF698B25C5B8890540 +17869CDEC5D3B4F12E83F75C164F26FB41A0919A412A447E6DBED19843A0581D +B73610113FD75D28EAA34F2A47D99C13EBCACF96DBDB867D83EEB53488E3478A +63A2EC583536A3FB63CB406078595F220F5BF53956116F9FDB05A226FE01EE4D +C28A48A250CED2AFE801BE10029013C9685D60F6F74628A5F5961E4708EBF3F7 +1EB5DF7837356E20C075DFBD15D9891A1A9934A585C0F881D104BA927A70B832 +5CD9EDC7E9CDADAC7BBC4DB1ABAF6547C3BC08C6AC73CA345AB18A9651151CF7 +4752C8E74157D3A3575D4D81FB937D0061192D1643741CEF3E218272FCDA17BA +2B9FB73A7A008F91248F5C57C91266CFD1E7119ED0BBB80D009330DC501CD8FF +423AC58BC8E1AD0813D11354BCE3DD1F511115C9F571E25A58E1A42D4B2F5C6B +F39BBD15B1CCAB68D7C8E75634C69BAC05D3DA6A2D54976CC3BDC370F3274326 +98CB0EF0B999032718381A4BA16220F8088E87F3B0282C8011BF2A8BE5B0624F +10C83F79C1623AB3D1D62F1A030DBDD3B400D64BD7D1EE88695B5EA257094B71 +38806AE74E3CBB7615710E2D75428930EAB82417B11008D3278C035152B527B4 +44DFDA85769635DB0650CFFFC6650ACF0E7873A53464C5BD41889A2A89F3ED47 +0C4DEB5AE511FE61870B9EAC40952E531FB6216E8D6CAC1A480774C0EDBDE9C0 +B7C880E28F9FC77F853183B4444EB15880E8EE0AA9BFC908CD9CAF6E16921BB5 +8675F3B3A4FCE2B60EA3A11CEAE4D0512F383998001BFDB48EEC41A6767B55B5 +2786A2D2A35A1CE437A29B023AE6301D85B5773A31348976AD970556AA208158 +970360327DB5F65E210A9D76525E44FE9051E71C0262B84F2C54E0EF4F280FA7 +69511C576842AFE25D4FDD651E286A94728CB56DE3C79FEB6B4727A11502F876 +FAABD8DDB97AC18F3F19B272C4541D1807DED62466389F92AFAFAB9FED162630 +6104796F4B2C9F26BF46F94100BF569BD3755C35CDC08A1C5F03A4324EBA28DA +B2A41FB6562BBB85B6444B98C90DBAD78D79FF7293280894AD326FC95E28B435 +BB74C1B7DC963D201F2CC9B5C224023D77C0B2C69A497C5314DC418B6519E25A +197D85EF1430FEB760478E29AF6D9530817F777384D3EA17FD4AC22AB1F81B5A +19C853EDCDE39174062A4A6D0DD5A0206D6C577D148E103EB5BC30890110367D +537186A9E8D70AFD70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX10 +%!PS-AdobeFont-1.1: CMBX10 1.00B +%%CreationDate: 1992 Feb 19 19:54:06 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-301 -250 1164 946}readonly def +/UniqueID 5000768 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82 +7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378 +77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18 +2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91 +FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F +DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68 +7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4 +9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176 +CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D +6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6 +E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E +8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E +3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99 +EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4 +0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9 +4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF +1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910 +757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E +0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665 +6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED +E067598E1B8B781EB59569E3D0D54D8EFAE0F3EDE26279776ABA15341E42E636 +6E02817082BE6FE0B04249A4840C11F95F8ADEFF72173E9A5F2AB2F62C427E5B +DC010E18641EAC906A5EF0F9BC2108062134A7F10956219C5847C0D82F0E8663 +12D963E012DF0DD899911EC5D8096F80B49CA3444CF1294FBFAB57DFACC9D01C +46F3BA2F3D1C14EC30CBF83E5729F1C074D4F1665405CF54722827FBC24AEF08 +F6DD0BC6A79A2DB1FF539454E8F5D1A42D40CCFBC093AFD3E57973A009095CEA +B91FAFD236C47F453B38DB0067907A28EB5E9ADE87A2181F1D6DE4E183631716 +C21F0F952E0666AC74371F8B5C888DC44FBA5607435A619684F502CF625663C7 +94B0DAA79BE8E129E7F5C5AD1B7495C1BC9B1C759FD67200DFF251DB7C95C09E +89EA1F66EADC3439C7234E50DEE5F62AD67768C3A5127E31DC8BEACE15EB5666 +437B94525E34FA2D35B51730CB8CC9D763F1A56F65B8FC21FEC40F4059C2EA3D +EE94D79A8E322FA0DAEAE3B82721F771106F21B7497099A15DADD8CDAF70AB71 +7FC1A9CE6AA0E05ACF6E210DE1CA0418BA7012183FD6BEA93DD38776C68CEF54 +75145C4C0AAFD684964295D68EF8E7CE0AAF272EAB35BE26334C6A2F63D89425 +F6DC7F49F63A53152DA883E46105D8F21F7368F9CA04B7F4BFB67ED9FD13987E +816BC3741FAE1D8630479927F6636F084ACE881372BF695E55747B9354674443 +AC79EF734025EB13E3336B807B6D75D86A801BCF860EF78BFE0C76227875AD31 +49638E7070152E16CFF32B2DE735F7BD089186F1FF68A2CC558B26C7D3416AD6 +0FD3E8929011C8635279CB1D64F3C8FECAF89DF0469DD890E8CD6EF325DCAE4E +8804DAADC647BA4F6A96E27D5F1716A800104777374DFB8AFEFA19F230BE8C1E +2B1DA5B9F504BED3487D1FC3E2A11BBD869AD3E2131253789C00651A03320D8C +F3B2844347AC9860ABA40A83030FB4F567761548607BB01FBE2086AC1BEF4F61 +48AA7B421BFEFE6EBCBA9042FA4AD9530EE7A9A7E11D9BD9AE3FB217F2A9B5D5 +1FA941494B11A4CDE8973C1CED5062F6CB666FD32E4CEC15CA9DE1721D4E6E10 +D78756DFCACD3A41E50C6BAE9A9A5F044BA599F1EDFAE61CFB8B7B0DF5BCCE17 +4D88512A8506E97204457F2D12533BAE1B552F23340D4AD7AF3029FB6C6583B2 +67A9B299882EBEDE6696B97D7E89B0C397D61D4417079D426B29246910F4DE84 +7C5D48C72126F80CB5B135D6D2CC719968C1924EA4BD6E305B7FCB06520983CC +6741DE803E5B6EB1E7F5517A8600491A4957645949701EBFEB42716542EABF2C +16B955D4A1EB29BAD152EC888572C3D4E2F02309DC60E94272D2F2EBCFE32969 +5180EDCE322BDD38E3B34D24819E03ED61C913A9FAFE2DA1822A660C246B1132 +D2C18F76CC413D4AD1BB8F7A6719FDC7C7E54307495BC0E671CC6F4257C82574 +5FFC9C7EACE612207FC80AD04F0CE33A9308DD615A4307677F9ADF6B98D66A77 +2510BB8B5C985DA4658F7637BB4C7643AC9CC424E2571EE4CF5C15C7EDD306DA +C41DED0B1339553A5F8265DBD9DA06374B37D77A9C9E4AEBCB4ACA8B909E9C48 +70C16A5A042CBC8825CF675BF574B16254541B69E203D5E3CE29C339C907D11B +28F9AD8DF700C945FF11B0C99172FE6B25D131526C31E19D5637FF4249440651 +86C1D4C8A7B60CCA184FAA3E27F7244698A99CCF94E9135769C726307F940449 +48239486ED7BA4B8DCAF87EB1D2A8D1753E7EFA9468924DC0BEEA33484830DF0 +2CC726EB379B5668550B61B2D401C5D1012B16B9E2BF0A336073544F65124481 +F23611E8675B40FB28F393A1A8DFFDC13AD08A67AF396D454E3CCE141925D9A7 +9CCCA2D829E4DB2467F2F8CA1BE3FDC5E13120BFCDD7F0DDCA66E65FA69CC475 +866C8A62DBD00D09D867D0040BD804A1D7F17F3B8AAAB21FD48B11BD96C13774 +0BCB85CBA1E12A459B221ABEA106D74BC0EAED03ACBC0120CD47294D9D0F3B96 +CB570779E46519DA8854697AB48089B56025D3787243666855333F0AF2625DAC +502DEDFD5529924E50B1740A93E8B58C54DE09BEDA69B4FDA8A37AA6E32F1ED9 +B323763F9DA9A59BD9F179A567BAD612B8634FB8463FFB073184294038307E22 +BD0D05B160331B848E7D7243DC7EFAF26F8E6518855F679372B94938E90E7D40 +9A45E12A3203ED0047D4E2CBAF8D5AF2191EAE42CCF2E2939022FAA57FA90CEE +1FAE7BE6E23C4E32D372908E149B2096D480B82C143A26C604AF950FFACF596E +3CBD6C5C86EDE699622F50FF70D278E11741D18CBC6EC804F7803FA00BB693CE +2CBA9437C5041EE62CDDA5B5E4DA501C6841614AB271633E748AEEF52AB40E2E +245080043BF749542EDA7FF6B74C41FA8B61640E4DBA1C44226785F2E3DDC7D3 +B6B33B44E511C0152B679FADE241F0857C3CFDA8FF5E0FA4A7BA26A1A428387E +1CE83E956CD8AC28EE4F4A818B2F64C72FC65D4D5054781B6177E54C75AE1396 +505E5562B7F6CABC9515CAC5670A69AB00668ED859DFDB673378080BB5539A18 +8D347ED0D06DF019859CED07566B5B51376C5AF5876D3232DE8DADE7909B13CC +8086DAA5B7AC78759D0998A0AC451CB7B9491A681A58D4FC3CD45555B20EB170 +31466D6B09ED870E735606D2E91201F85809A24027035B2BC5761B71FDF655B2 +63FA45D0633E9A8D6890B6C4CE4A5E237CB48B72A2A2BD8D2176408BD8F6B2E5 +A39668D92EF921178190DB989A5C6E3FE318A56D799CC42B6B58DCF3FE6E8ABC +7662CAC717B368F886D44F0ACACCC4AB8E8C24D35869D9BAA91C64917796D2CF +DEB05E44A43074F1A53ABDE558457687B2D9FFF1AD7A33E64625B35E994FC613 +5F66CE83ECFE45777AFDF7C9DE3284C06670B8BE2C7CA2DC73244378FA73CDFB +02C7DA8AE1E57FD5FB6F41707D4D90C2A4E3D0E77D78867976FC53589FE4D0B7 +DD6AC71C010C15B3A8FEC1E5673EA53D928D9A90040FF6E3C30BABAC5CF8BBAC +5BBF3814E9709FF2C8B59C7C732B0C7BA597E00E61232B4B433A74646203F260 +CF694D67E878159FB571D766C398AC5755082BBA1B2A5E71546FCC94999E4262 +F18BE1A41E919FA7A53013621A6399A39C74181FEE13D4003468C7A343BDD085 +FFCF2E1EFEC20119FD923E97CE26A66780BD8BF09D66DAD588ED91DC369B0863 +C22BB347374EF5FD616A70CA07C91E5F48849D09F4823C8A02A6D80E4DA5DCEB +33D190D72702A78FBF7328A7D5ECC822D907B7908CA44BAB4A959F21ACD2A1C4 +6C6069DEE6B2F208628DF65FC40A05ECD8956505D43F883E7992A2B7621551FD +34C580D14136445DB52C9843BBF00F92537A65704B0DD575B1BA7863F971F2EE +479A9657AAE6627A321309A4A12DEAFA0C0B2EF5EE8C0F75ECACDD58E610938A +5907433061E78FC48581B87AFDA9226ED79555ADF9F0443D60996A1084B0B4B4 +C9E01EC092279E300CED0D34EDFD946C5660ED85CC0512F8A8982A7DF771E24A +D57B07A67D2745521178BE4C259EB3DEE7D6F820C40A2D939A4A484559207C1E +0719083EACBA076020776AF7C45DA52CB7173B54237942CC063E5491B8527185 +15E7B30ECAAA49124B9915D9AFEDDB98513CC30EFC161C9D1F2371D8E0BAAAD7 +44AD4BA2CE425A0B8ADDE7A5056645F9FF0F305E43E8CCB0869E03F0F510FC75 +EDA9CA416F5E14E6FF577CEA44706C2BDBCE79E7C692DDB097BD6A852A33925C +8A30E83FC93CA7FF3D60062F06DCBDC9AB390622768B7F2370D4FBCAD40CFC1F +061899B30F760D58E9787EA232AF7305F2E178BB101FE1C172D5011378B93437 +D19B7F3505A8A758C9B0C2E395EB48F13A5DE5B81C085344E3E57EE6FDC6BF35 +6CE8B2B48A59AAA519D2014818724948FDE669EFA9DD4BFA76319E84B6928C00 +CCCF36793E1A533E3E9822684C4F0B1A60297EAF24D79FD1B728145C2F2EB2D7 +7F0CEA0F72B6ADE7E8AB02501EF56772DA610E1A6D855AE4BC828BFB3F36E5DF +E1087B9732BADC3DCF7B72C1FA15A1517DE3DB6360630E55952A0DE142EC11C7 +0DA0B033C405457DE4F619647B623EDEDA588A29D9D457C835320A1FE2E879AA +18E5125E95D48EA5E1886C7C8B353CC3B5C3C91333E48EE9E6866E23107C24D7 +738BA7F34A9B9AE25C3DF1DDB072AF68202EE17413929E4B39C0F165441BA9CE +7587D7C6F181EDC1F55C51B7D8D04FFC47CB79038680FA609360A9BDD44F3787 +14CFBDB4F730BECB4876871DCF0811991151113C3C8F27BE0651F0B97FA21B6F +CCD040F39A945AA4549C0327A380F6F2D498CD074168EE3180DC205D18EEA359 +C24E06EEAA49F08474F7E441F4A2C7B11C6BE15FF0777661064B66A33DD45EAC +63B97B312E4B93C10F8E583D3827E6CB814EF8B73A6AABF11D638C707750A765 +92D5BF3C59B961569D9BC007DA19AC308EB09045F79D29BD970C4943E4ECBD7C +0C9148378BFC202102B297A6511E956BDDAF5A64B84BCC16BB6C4C747BA8D422 +508DF34DBB3F36B9EC0188EBE1A1288C1E3AA548B0D799D73DBD6584FC4F795E +1A4B0DE9D930B4ABFC9CB303CC0380C8664F21595EB9EA9983B21A4F3FB46D1B +E5A16D5C58C12323CBE9CA9AB79DF7A2776E1993CF3AB4A6177BCCF147117DEA +5304FEEC5903A4982A77793C4B360453F865540F5B0EADD4FDD40F85C72712C5 +07A6F447BE494A85494BA59B241540E84510B3BDF3B6927E69B006567C04BA6F +AC056E315F53971769687A314C874D8E62A383394A8C1359C9254432CE771A3A +61655E881B22D7FA0BCBE24C46EAC022992FD5904555D84612A168BDED0B365C +EE54FD4CDB9DBD9AFBC3EB392400446D3A125D3C375EDAB7D551876345FF6343 +1D31E6A4E82AC340B16B1266D9E90418E8F3796F1A43DDB762F03F828981CA31 +2DFB4BE9ACCEB2FBAA4882520B01D36B1A7A98602E9D3951B23D3E5634EFB973 +485C863847E780463B29F61C4FAA11250331A5C0D4A2E03A1FDA25D8FB40E464 +5384691A0CF3B929561C6F3E225DFE52C651B541B719FD7D60F1D23C8405741A +70FA5024A86039E1B2BC64DC37AD27464ADA20B980ADF292B0F53BC7E5E2F9D3 +C40C4D5FF6EB094A1CA0159EC547F0A19020E580A94A4833F4CA7B94190D5DB2 +20530215E33B34AC25C7BB38158C9369EA2EEA2EAB6A29499DEABDAFE5243255 +CDE450920F62BCD0C8B6455C3EF9BB44D987A2754B8D5253D1E02DBBF3A740D9 +A502CDADF38BDC4ED9CBF33E966CA6D81CD9DDE1DBA86A768EA720868AE9FEFA +3586048721720633D9B73F16A5E0BA13644A44D64C8C7F2E7B22E488D77B9177 +F27E7A960A65DB9674C9471175F136E436E908D10DE577F8E318769DE0934EB5 +15C9AC907F2799A2123A745D3813FD5CFBC260A454797E8EDAABC2A727B23DE8 +96026CE2CD0FD891197D1751AD87F1DD61F2B5406B3390E67AA7A942FE0F746D +0444E21D51A6A103FECFE2FD2863EB1BF9FB55BC75EDE6D3192FCEB8267C656D +7186ADE66BA749E1AE37BCF784A1E467D0B83C73ABE2550510AA57007771DE91 +04485B4601D14ACBD97C4BE879FDDF748AF1429ACBF3D41FD918A4D238D26F95 +9F86669789C9D03A04FAB2308419482DAAA77C47EE164B276257F0114D370F41 +82D109A24A95107695F87C6459A7EA5A28A83CA6F45029E32DE497E76DA7F99B +2A87C4936275DE2DFD7DA865B8FF52668493ACCBA80AD419443D1B2C0659EA69 +D16680F63A27DB05409EAA1E94613A6100E0CC78F8EA507144C9BB13E29CB482 +5A813BDA35C973616778E273A01943FD5FDDDF7489FA4D49C50396B07A06C86C +F2CDA26CEDB033B50E06F817A4F0631E0659E49726DC4A88F6A4D3A355F9966F +AAF445EA2B16C547B1EFF050879B3EABAF2B868613E9B47AF1AE7E90847123A9 +F4E09E7D25D6778A87011AF3E42B8F05AAA2989AE67FD8DB9A560D4C75E79196 +602996F939A0121A321DD323706068FE1CB46B0E95DC45845F14C06D9437EE31 +2BCE925B8742D0A1A226F225D7EC6A7A807DC1977C9195D91771BF8A5B2BE31A +15D4D206107421213AD41CA456E3025F069432F21C4AB291D9A548C65A49EC2F +7A1C5A640FF17D8BC4C04487D0CAD2E08DF0F0524B67CE49379A1E81DA971A8C +CC237FBBA08A90BD4A882DA93F915C7F3248569BA03794B9C2F12D51691B4CFB +CA5AA67E71599B33585E21593CA83ECB9CFDD5C547DD87694206B0AE32372B06 +8825223E060F1BECE3FCF5E76B5C0F963B7637EF59EB389F12B5B0CC5DD91286 +0673258290FDD422C4450B4A9329D0017FC2105E09DC969232489507B76CF9F7 +E18550397EAF067B3A9E0347970994A6507C177EDB973A69EF7C382A941E69DD +BFDB14F5B3299BDFAE7CCC331CFB83FCCEEA55026AAF4757121A2F577F2EF618 +ED54EF62FADDB76D4FBCE11FBDDB7F4FD6B919E046B5A0346A0539C598CD9A22 +BD414EA34E25FAB77D3769E05EEB5A0FD51EA9C7A2433DB5AE9955127C403910 +2B6A66262BC8B0657A3973F1482138AF77E9F8774C2658F15645660C90973B23 +9C30EA7DA830BA0C55671AEDFAF0FD96AD60098E768EAD067F0A63E06B0CEA3B +B7E6B4F2D00F575DB0A6B078962B4CB9709A343EA520E57E826C9E89375D7F4C +1231463A236751F69E097A994E4043DBA8692D7E9B16E214575D0F2978518E66 +397FCA66BEFE1F4A7A1B7CB123DD85A90E1A0E88185EED105D7995D0EBB936A5 +76CDD7B4791AE48A7368912404F3A34A2AD049E694CE9B3F3C648143C7C2D6C6 +E78B173E08B7129A1C443B6D4A307341184919EC3FACAA11B3DE39B10E855749 +99FF4ABB58030091CE8F975FF327D2A824B95437D993702700EDD7850A7A01EE +3DDC985BE66619EEADDCD13B328CA490DE02087FDC35C1290C2F5D58E1ECE85D +2BF79955108608606229028ADDC9EB448CCC54D7381C7EA8F9590E1BE3551FD8 +8D8BEF116597CD277E1A6DA692F84C83513E4E671D6F48EE46A78B7BD2056948 +CFA4DD257747BFD38E6813A3D83FAF54FE128ADCCAE38D74CD0486ACFA15A6B0 +1D8469984101347A4F34DE18417F089C197DAE1E9E3CD5D8D8FF7A09DB77BD00 +986359424222FFA593449F7CE00221DAD4731B341B11066FD3DB5138D163EC82 +9D89F5CEA8EBD5B9BC2FF6A7577E696A3787B6A07A8562648EBF9C1435B0272D +995814A9B100631205ED935D0A50866E74A8E332E31654A57C031541B0DA849D +9B8221773B03527FC9B32F327842CC6285BDC49350501D8F7B728CCA5AE742CF +010F8A859E411DEA98F1ACEEB0F27890157F804AC9CD2B3DF5BBD1EA4C72BB26 +0133A4E0B21D07277D7792E076D7F11EBE47E673972DF8A2AB1DC562B0CBD324 +712A40198D448E0E5AC50F6AF123DDA23DF6AD4587030AE9AB358A64E3D175F7 +D278603073AA2DCB65626788B2919F675A5D41432DB8DC56B946D2EAD7D29B7F +A564E0CA7E8D37EE506C87D574B56E32503734D1A8B90BB97E47CB057FE58799 +603EC3F828B7A5AC3863CC169C0D8B40C204716528F4FF3BB206DA9CF7A0C325 +176939038B142297A349CB7BFD48022CD351FB7C99D2827A5F51F4772C437B6D +8BC7DFFF5A46DCAC13BBF46CF14A5D8F1E9CE23FF35614F408BFC9DE7F36EE5F +4947F4F664D5CF47E53377A4F9179C83D62EB8BD87F133BF2E4DA3E4443D8BE1 +2F206585D371003CEFC9BADC4547C28D21773D2853459EA4E7790743E1D0A144 +56C80938A89879D0724B79C8F883896099B9399BA2D7696225332A1EAF8C1365 +D582481D1F93A28459D60DA6220F602CF121CE16F62C22B4F98F379CA401ABB6 +1843F2A4E7096D3982CCB6DB6DDB9ABE784EE9B2762D3A8E5768558755C63698 +7F02DECF75D2FCC99CD93494E8C5021D3B48F10E153020A5E1EB547311E3265F +109263954E7DB3409462351B6311ACF63053ED32904B98701A6B99F59915E9B6 +2AD813EDA9523A4BF3E430D8793D10E830E6E620892CCBA72BF9D437EBBDAC7B +B237AC58DDF7A684F5A338713C78396FFD6B92816647444BE9BCDD8CA0BB2E56 +4531639B3D74D2C2B369A79AE166109F5FE26A55AC2E4F7FB25A0D4FABD0FE99 +621A447278BE95EE1D72D60B5B5572CD302B01989DBA8056CF701E4C59FAE8A8 +D8853CD5E21952882001BC6CEDD8E195DE5EFEAD54C7CD2B4D1E0AE4893BFED3 +6F5A4E156D3B4415EB827F7515405C825CA42C75B9E9761FD797078A81997863 +99D1A40F45A65BEADEFF5B1818C8DF726B7129E984C33516CE9DC16547C158CD +9DBDA49082C9693C10A08C3B623ED921EA5F4BF064CA812607AD44B779C9ADBF +5C7EA8BD6F0DBA23B2F8505EE65D2DC384ACFF2D1ACEA8E6C6B6F18149D48D19 +96B365FA505B474B7C9292701736A0D48EDFA11152F622178EB33156291EB6B9 +BA958F5ECB78F96BCEA8D7DAC90803001513FF64E4251C48FA3F4AECB8CECA8F +A3247EE067044CF459EE80D7DAD8F02BD6608C27A6FD5BB9880514A7B1FDB33A +9AB70A3700CC5DE44973D1103EAAC669DE3B41E53F9D6F40F65580FC1365E0A9 +6303A8545B34A00A20AFC15851942FE866CC3F1FCEBB71C9673B5B5A086108A8 +FFE0B0B51DB22813E11BBBC2EA53383DCF2D7B719680795E05541B026B41B6C9 +CDE5B88522A362C908D0E65A1FE1073068507C63AB8FF157832AEE7228BDCF26 +7207EFB3A82CED3A2411064B24C50A24579A2A66A6FC70B7AE48E544B790D375 +7317DA0432E4893F70087D68F8B382FAF770C3B0AE74119A7474265BD6356FEF +CF9AB053E9F2F53E49E800969C7D6F128C69DBFABE01D464494CA06C24E0DDD6 +93FC8E0C026D68DFD3FF29A6F6D5D40928E1DE1351D457A6750F1A75DDBB0B13 +343B3EA6791AC35A8D72E685073B01C0DDBCA8E07D8ED48EBA8E6EA2CB380118 +6D65D5C3D1C081058FC9CC54E9F49EA02A8FAB4CC126CF85E51960C402CD7A55 +E8FFE2F22EDB8D6458F97E48A901CDB89BBCA78AC0DC93C1AF4D4A91D730FDA0 +577B7F5E5540528E36DC29A5EA4E99C3D8A3D95B2E9926CFE3B29FEF6D55333E +B87C4B28FFA9A582203ACC9528DACF226E78041B2E675AFCB823ED7B01619F5C +7E5EE4F4B800040F96F2693CB79F41A375D8C502E1253D74210ACC226BDE60CA +F7431720D00720D3C900098D13D9775A4E94A91801C5D460DFF396319F49AC57 +D9318CD4DA5B30FE4A2AF67CFC34961EEA35B985D02F41B4AF51679CF1131327 +78C0A045D5D259494F86B486767B0835259C9976314CDB29F0E70DA314611903 +BB43B448C7E0FDDCE42BD623D2919B0EB1B0D5C92C0C6D44FF220B12612A6E9D +087D4EC32DC0164C3C1EEBB4D42C24403DDFA87BD9397B34F4129BBC1F5DCED2 +EC698ABBBCD76137BA92DC8FF989299B5AE9B0C9FE7A7C4C6AB9A98BB4D9F86B +EBB1A5ECCBA6633459814589DB7BEE88CEC1C1C4BE0792027C736C74AE0ABBA9 +B7AB5AD51FAEADA4A53684D2BC12E6F60C3C19899D6DA7A0691CAE19306FEE5E +C3E3AF07D6D6D1921DC57C02DF25F3CEFFC56AA2A284FA26C99C467A603F410C +38642DDBDA66623FD2FCF0A3BF49252E1F3B1EDCA0C39D6466998A06ED2D59D6 +33984620E4C5190365AC6A15852E9F114B7C6BE44631184E620CFC547B061DC1 +B0F28EA6198560D45E951FE8CC2F375B3F29954C14E7DC2F1804218C28AFF3A8 +B01643302DA4D47DD87E5C54BC270A012E3109526E5E78406DAEF9D91F410B7B +06400A2A08E2096A391AA15D3863A7D276AC17FD6936833A707395DADB969E29 +ADD9E78E54BDD88E66292953ED2783010B32CCF920349E866428533680CCE907 +F6F0E92F2747FB8A090F33B2ABE187D25DFE64B65B333CC84D730A58DD47BD30 +D55755AF60625D867503C5E5E5AE2B2526E7CFC602754DD6AC4CB2BA2B81F160 +10147BE356D1F8DCAF71FBBCE217456605FC236B8CD696B617E4091889DD5481 +FD861F9571C92DF7B4BDBA694A36B23FECCBBB8D44E51FBF37ACED02CA5C9409 +2E8ED9A632E1DC490D7166A23F71572EE8670C8A718DFC74ACA4A28409EE1A67 +FE3CEFA903307D670CE1C938D2958E26ED0497F4BFBA845EF1EC62A3C97AFAC9 +D37A9785B4F9C6CA19BD85D5166C4035FB1806A7480451D6AEAFA0D64803792C +E0B184FAC3BF110C337218585C4EA31D4E76E292328A93194BA54AE22515FCF4 +EFCCD3A6BB35164AE4DAFFF7CCC786D9E90BFA2478566F41A5ECCD277DA32B7A +10ED094F6E7F054393986B8B7E1A08179F6FA3935BEA925CC8C7EB0661105B64 +07F9A35DD203B9D5688A1DBE7E4F52A57F439EB54401D191F0AF6F9B73E45FC7 +0409361F3A7608C499DE7BDDDF831D4FC1C7442E1E713AB71A4D38210B3612B6 +15F9AB3921999286C3CE9271F36D738EF691E06468B06E3FFD19CA3181CF5693 +A0E7C2CCE9B01724AB154D6510343784B3EF0DA3316E65CB37EEE337BA295447 +7ADFA6BE5D314DB0F596999279BD833E280FF84A94EFA52030033023A42F932E +CA1F9A2177C83A6E9F7ED2FB89D4AAE5BE8F2C4175FFA039B8DD7FD9604DA38F +8F1A2D98B7143D09A27CB1AE73E58DC9FF4CE1971E6ACB3FE713D3DFA13E7C53 +B2454417A5DAFDAFB094C0811D9A12AD6B212A4FA2DE5A09E4FEC5D99BEC5222 +F8BE9EB2B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR8 +%!PS-AdobeFont-1.1: CMR8 1.0 +%%CreationDate: 1991 Aug 20 16:39:40 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR8 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-36 -250 1070 750}readonly def +/UniqueID 5000791 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65 +48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3 +9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB +0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB +8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F +EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466 +FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3 +9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62 +D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8 +9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5 +ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6 +10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582 +83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493 +2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29 +044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49 +A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0 +23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413 +19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42 +1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39 +8BF32C1F1BE935F51A1E6A2B3EEC69C02A0BA8F2CB4A4F68FB7896DC43147822 +7617A156AA00BAB69F17AB7D05874335CE3C819E21DB0FEACF1E752980A202CA +BB393069D59FAAEA4B47BCC0FB9C4DAF2FA0710A8A3DF10E3300A162A988FD1B +D02BB074BC5A4AEB6F0F3F89B3D68E9392AE07E73D7B8D18FE83564C52823804 +979B6136D35154A701E9448881565857394B0D7405004459EE0C68EC17802041 +03FCE184AEDD76833090A32DAC65B34FB1BCDC136D12DA0D6F734F09A5F87BB2 +5407964AD8FBCA56F0CDF8AF907AD5352E4D93A6386BB2006E0FAF74AA8D548D +FFFC997F92F929B794A07CA8848DB5EBA8BA904DBE1AE6DB74FD125E11D39FD2 +293ED39ED1780FDB87D969679CD590297FD9939ACC30B4728227077FD6353E98 +9E62CB8E355522861928A6A4C4747D5794F4DAE08C94FF902D83E5C9FD260800 +FAF713E15B90131C1230A572514B78C4140A3BBE1C1A394F4C0FC8216C9A44B6 +56C67513A4D15B6FC3997D906F69BD022A380D1E6DEAC37434EEC14CB066C7A5 +3EDB6E01DEDF4D58FDAB5A263115D8DD8467F551283B349D0EDCD102A4CDC4DB +6133E4F3942264E0BC3D4FA9F42C3EA90B4FBC54DA6CF0339D0EB1B1BED4D7AB +86DFC6133D38627E2BF545E123B6B848938B4987D5C793EB031AAC98482B242A +B4F9662932E171F439CC1F75B38084F9460FAEFDBA8FAEC336348010BE72BF3C +B481A0F628CA6A15602A648DEFA045F796473FA9D1D1838128BE6AC22EE49445 +14C049A7DDF8CE32418992973BE5A03C61CB64088DD227CE312A802C34FDB144 +A48C3F4A2758D0A547693067D9FA6A36FF3F6349791133C440B1A9D3CCEC40FD +0449009528C4DA20FDB85B57F30B9941D61BD6C722E4E42C243BD21AB59CF8B2 +461F44EC175031BFC898F198D9453F580363DF0C4CC10245A23FEF9FBB5E7AE4 +7EDD08A647BDF27390BE255F3C5E9590CC56B68BF26F97463162A601F6FBDB73 +6B9C7E6B0C9944C91F24FB36F87C737E4A30F3782AA2237EDD48A259D283515C +030E4FD0F67BC97E1C2E1F82761D4AC4E0F19D5BCE52F69C4698376EFADA56E5 +A7540CCABDCD035DD158BF6EEB97E4E491AEFA346B5849E8841E1C512926219E +3D3F1C444D1CEFB2468DB2AA00708A6CACFCEAA65D922EDC5D64A9A66B17C938 +BC7CA14D2EC98A72C976F149DFA98DE557C4A52700856693C7AB5D80151B1C95 +663D913F0AE40F67F2648524E6B06B379D9E0E2EB8E4CCE6B026E7AB5C3DBB48 +B3F6963F58A66C267252AFF7CF2391D350A43377DF8C3E08E6E8DB5E0D26C996 +441A716B3DD2778E2067A37E6F1A9887855A539CC282609A42BE27F6F815B064 +A27B8CE2EF121386E670AA7442B14BE8B66530094EAA93E3FC6668A567F760D7 +D060D8605CDAC6440F2CD8F24493BAC8104211B03A4A115E78DEF16372A1EEA8 +840A5AD4E050CE415A938D1D9E9F0286A8E6345BF7EC8D096833B2BFC9E94C08 +D2927028B30C62D9F95E9FC78FE7D598799CF3D0D24912899DF0A387FA5EADD9 +F3D617D218F949AC82BDAA67D3D2863C5B7311E63CB1FA6C633254477A570DAA +E98E2E08BDC5F85AF690C3E71D958F9F63373D9D8AC9A52B4B89F3DB04B87131 +E3123D7D06FF0B20365F0FF541AB3440579A0F482E74ED7331CE040BF5ADA33E +5ACE0D28130EDF1683C60D79B25103C71AE56B87006BA19C8EC3CE08EFF66FDD +C6B4551ED82322C9089FF612381C320B3792B66B952062FA2971ED005A468FA9 +F9CA87E42DD3F8D610E10824986E9A83961009759E216532ED5BB5A8C27EACDD +A83660DEA812ACDB82271E1BF1B15D020FF800C8E80D0DB2A7793D85F124E4FC +C89268A6159F1734E97AE92022955D040362EDFC1A2F77954B35840B42996675 +00F6A0C6283059263244190DF799E158893572F2650A0A27AE03BBE64ECCE095 +BDCC8924567A84E89A7AE812ABBB82A4D0526054BDBD6A44C4A86DCDFC76397D +B49C98C5ACA66CB80CF32455348D9968E19898677D6AC6C22FAE5747D8C6D9ED +424A9D671130BA557F0BE38972CA0B6F7439F630FB07C409CAA8302212C426D1 +77859925DFF96F842FED263912E6AEC336B99FCDCAB61E8E3BC0C6D7F760FB74 +051321626865771FF83BB6DFE1A9035BB3ACD54836B901CEC6F3AF5B6603E31B +864BEB1C6DE0AD60BDB42508105EBA426E0396B19EE14B539BCE68853929A63D +8B27167E4D43F5502AF30B8111E42A0A593A0AA52F3EE42C23486B16BE004F8D +93BDA3EFB798A58D10F79E8EBAD6DCA69D8CA91C1D6ED75036066D153C6057CD +CCCCF40784B26F87F27345FBCF45435223490BCF6B84B4CFC5AB7B8B9FDC5F60 +EF9A3F0B60A6560C57E71BE1557C5466EFBE1AD76CD5D59681C6164FEBAD21D5 +D93E01DD9A881648CFD245E8F0791B361D64B0DD8BA93BC783B4F1403E002676 +9A4DB0B69E646F4D4497EC87CA672056CA7BF0B5AA0BB7CBC8A93919A1224757 +1DF0AFABB5F2013DD3FD67132BCD5D30247C329BB6B13BFC3E683DCC35026FC3 +515DD8A2D629818A9A9C9AD3263D781B86F52F352A3A0FD0A4F74E5BA65FE64B +162BBE0E843C31BDFE4AEBE3782F85C423DFF302D4F4BB3FAC7C6FAE7870626D +4C118C4885ACD643DFFD9DD232309AFE871E57CE81EE352EBD82A9769542E5BC +E3AE55CEFC790B1744D6B09535CB1A17AFEA289295A88F08A607F28E2D6D229F +6FBAB27397A3A3266B3FC952538A01E066EB51AB2AF4C13790BDF92977C3D4FD +8C76653BEBFB42BF5A93AB343CF71E006CCB1AA6DF07C3BE55DE82D86552ED2B +63A25D1B3D892EA7BFBA8401BE87F7D3C0F70BA06D0806D418DE025AD2A44BE9 +B0576406EF122471F4080B32FC8397C12BC550BBEFE63B119210CCF2856BDA5D +881DE21D34C7BF597ECBAF72DE16E2443932C864AFCDF2FB4C233D510176AF0E +E6B9C20EE11CE7A78BA76F19F2C81BD3F5ADE5A47C74D77B6E1BA858132FA09E +44D167069ECF433A3F5B74AAAC73E1E95EF7D983ED370B4C2287FE814154FF33 +6788130449F5536E305865CF8C513E9351A5103A3F338082E4F1D5F0C3D4F5B4 +E20EAC7BE2F363B012FFD806C5D2EE99F48B92B41019E794C7BF7A410776234F +26459D88A4D68494BC281E57C8C2CDD5DCBDF64E9E4B184AEB5C94D09305C0A8 +72835A6F6DF44F2A7B1848CE38EC6E938E0185988F39B9BC62D4BA3071E7FE54 +6DC79B49BF6A42756F398ADD8156F322CAE4AB583A9E47A1453F8410AFDD420E +5D32F0408E7BA999F52FAEA73DEB5035F083472D1C4EC6FDFC6E029534749597 +6037B0C4D49484DC804B14C87D708242AD05536AB037BCBDADBDDA4226E85F98 +A5BB63E8885348722C0938FB9EE57CA792B20F06280969D8C231AB8090BFD160 +0991D1DF5F89432045D3A0CC4E361A2AC466A402F89F09D7238900FD50AD0DE0 +46D8749949662F5FFA5A2258E5D35F4818E107EF5010A9720B63BA107387EE37 +A4448F122BD880D288CD50DD5033D06A2983F7F62D5A93CC12F9CCAB25654688 +50C5E7091FEBF634A1C2E5DA4C8CAEF51F9D9BFE236DA6958759B19CDD522947 +C4E74F63EF468B19ADCFFF7E6D44EC6406C4F70D11575793D9B783B24528C867 +2A4629BFCB1DDB087888C5625B4B552851BE71E5642FF42399B0A362ECBF34EA +EC45113E3A978EA6C403162C496B3BE73E5C67B9D0F8559B189ABEED9EE5B5BB +BA5D9F8EEC40035F176D7E445743979CB013ED191F3C1D4D7ACCD8BF0F2BD9EE +C34DEEC3F2A88547A7E7910C9586AFE4FD55E41422CD70AD0A55C27A2DBF267C +60FCD61946C94894CEADC4289799910A0E8FEFB941E9492610B6006E19748779 +5D3D455A46A6633EF137D10AE2797B14F9624CE9380ACBDB482F729EC8171913 +C24781311366642B79643C88AFC58457B8753B2842F16DEF21FC2FF03F0184CB +83DB0E89B74A13EC0DCFB29D435286FFD9B0B5BDF3B844E02EDDA76D3E0BD977 +A86F8F2BB836545B3D7D8793D5D327D32E5FF48FCCB7686104A851501D74955B +2C1CEFEF59B031487C246BDD6DB2299645286233B0885CCB51F1E600E6C90151 +CC1DABEBB50A7BE6F66B06D6340EE795C53CA2238E90281A26D09BF60E8FCBFE +A3A37C91DE4974908657F5805B1B1567294C155DA7FAE5E434A371BD9592A4D2 +CF57508CC3EDFBC11EB406E668B8F1204282E2A9EA9173D983A6CC7F2D3F578A +3904E5EB22C286B7930E5519F6A40A23DA7A3088E274284C1F640D2773D1028B +D299D969145FCC9B5F89DF1D5BE6F847F9F49326CBA4835EF03D1819045FAE5C +72895A3D0828BAC414291F042334B17EE49D849928E39BD9A464D31346BA4D6E +03DA880AA0C3C78F283ED687E2F70DC889A7B9D777845F1097F520704CE81333 +9B6EA93DF1A11ED41F821A831C0BEB917FABC8F68AF945E95B0BC9B883724BE2 +BCC7CF84650B0D5B43FCA10052093E832AB862B354EE89129CDE68C7364BFF6E +3B93F0CA5D19228F1F44E015B4B8E8DABE4229560E89589F11BB46E0F42BC64C +273CD536BAF00DF26FEEBF9EC4300DF01B221FAE541132674E6D16F43AB98040 +4CB4D0A72F272FC3320DB8B4B9BA8161B4895FF9EE2B18EC90FE9C5FD3F40622 +8E510CF33BF664475ECD70380164A55ABB43734650170D44B9B9BEF6FC727984 +975D5053360ECC7C0A375215AD4AB63DBB7B2E3F75AB136F6BC002D029A9AAE5 +05671CD18D26006CD662C47A4DA9E7FA08CD9C9EEA9ECD2B31FC65D7071F0B76 +BA692C320C49910F61B1152D71A36AD4B10D3C80AE250F50156ACDB218F59CA5 +028E43917181FBE4B062AD0CB441A0DB976C2F7D09C30D37B09C55C4F5C420E1 +887B196B4468A42AAFBB95F69C79EC97B378148A3DB04011C7F33D9662C89D6E +ACD69C757851AA44F830EFB11C1D259C041E9B56924F84CCEBBCE6AA0D10E45C +73E191726704188DC82FBA0AD70B98C7B183C9C529B145C2DD63E08393185543 +1894E2588815FA14DCE9EF5BABD58AD3D798F64F9418B62B2E02686F8B8D962A +CB20B6B04E581B9DF6C52F544BE97CDCD2F2740A92226D97211DD8168AC3D13C +17360807EE886289C78768D1116E3EBD682120FB6F90278CB3A70503A8B8CD28 +4E0F7E5A3BD6B7CF63B5B6ED9431D8E1434587EB4B74EA388FA301896F3E0FF5 +2CAC688D84B0B33C87AB1A7DF3D90792E9B7442AC5B1A450230A9DC514D3ABC4 +C6A7EFAC0B18488844946BDE5DDC18FCD3D832C1D6C62633D6E46F3D561D40EA +2A3B225E71717A2FF5E6DFB29FB611FA3122FC60364104458D9CFA6F5BC74117 +5582AFD3A15115290BD8F966176DE34A62173844D79EC73FE81EE77448AF1A35 +5F4AA813530949CFD5E53F5CED0323292DA6B28EC13C2B35A3B74165A2CE729F +F9C7EB1A728077725790A4F0FDA6AC9D9942D52CCD8652959E0BA58EFA5BE6CB +B07DCC2FD207F400F01F7D910ACB7CB87ED3FAC751A8DAF3516EA71AFF38EB27 +705217106FD0FCA158063E80FCF454444A5C16DC12FFD5EBCDF0F70C1E5CCBE2 +ED0A6270E1BA271989BCBAACF6085AD252AD2137644450360934D03D6A014150 +FD21949EB35C0F2104DC44643C56AD864CDD802D6BA57EDC7F8263A86DCFB0EA +439875AF0EFBAA5CA147B7CF6DBC691E32ECB2432328FD3B0C7AC5E3058FF419 +2F629075692FBAA974E2071E798EE81CE61545D6BCE7B40DF72416DD3161CCA8 +EE3F294DD3C7C61CCDF78F69C1AB0B63F4EEDBC01372D240268F2C60AA62E8DF +EE52909ADCC47044BA3BEE85D077986F179CDFF53AD8F9F22B1897C7C5D23B5B +A8C26584116FEC0E562E688EE078FC2D0082F92090A8585A8178102D22BED49C +62C9F7B589F105541DCDD6A157AB685699C580C282A5BA26126FB08FEEEB9CD7 +71781251823AFEB12F5B37DB4CFE59D5B23281D33911416D8EB55CF4DA0CCC88 +E380CB53BAFF81CEC5F29FB54DA3B66231E0A24BE4EA672A08F9E2046AEECF4C +B9AE458E76A3FDBB1A1BB37BA2F8E756D5E3D96A97750B0974D67EBAC26D6C17 +823A144AB04D93D93ABD0FA46E52D4FA04504542C6FB9ED028297D9B22F6C1BA +2FD3773F1E71E4BA936A4033351E12F48CACA9137BBA250D145D5A3E4B9BCF81 +F3EFFCD532FF2DD2085AA5F8259393B316EE9C9E3DC74C2B0015B018D1DDA120 +BACBEDA6E0BF7D91DD13E0D6AE3000E03E9FC0A2871C909476D2FA8B1E852E68 +2A20EF414950FE7D899F554245FB6E041723FFF36FBB0CDA14BC162C81884487 +A255D99BBA35BCBFED3369730FC89EFF68B64C5E84B007230368B32A7B2C3476 +6C1CC1F41A951D9D84B796EDFF484106F7479ACE356EB889453E138A98DE20F0 +F10EA068AF4B2C67F877AF2FC067669891F7EFE3EC3AD48A61CCB907C6573868 +0A47DD38ED7A60BFE77ECF4E6DF3DFA70E5217EDBF20DFC9F5B707665AD365E8 +F225B0708F9877CA0D27F6BF42250854129AB0F0096B03E653C83D65B03C4E4C +4B5B2B2FA881E58D94813A0C82B4BE017D7FE636544E7E698ED1F229372E856E +5A9D61BA773D85DB651D44FE34B770D37D6AA24B011C27A421E12FE0DAEEBDC7 +4EB72CCBDF1C68968DDA127416C7508FB39F3CC98DA18D3B00D083BBB9092413 +05582D08F7AEE5866B030F3000E08C4B18C3798B64511EC0B8C5F64625445609 +EB750668DCFC76A6CE41F18808D4D59CD8C4DCFEAE74E4AE9B5526774484C928 +3EDD497B94E12A6B8AA151BA9071A8A6F6B842C568C2FB1B9DA2668928966A71 +1FF06469F4EC05524A59683E4FF003D0C1D8501B35172985D3AE7B0104915E3C +1CDA23EFEA6702D67A2FE1C37EAB2AFEA5B23FFC3146C0AD143FD4B67E240A12 +A9FA5BB54B85B8B0DF788A9B6D70375D293BE862A648BA03620BE3D00F5DB2FC +2A5CB1CDDAC650FE19E4E67BE94F6D2C0CA491CF04736F001E8A440558D7630F +18B6F0C51A7A88D7DDF3B3E0B356CEDDA2DD90F1DEBBC2E0A00D356240D95D3D +8804DDB50C087DD7D743D37F787D519FF0E5331E40FEC71FC172B7B9FB4BFBDD +A9E4ADBDC72B68AE0B906EE04566DE98C2142137787C6FDC6959BCFD5DAFED7E +745ED34DF81F2BE2BA71FD29ABD9F9EA2EE83188B3530D0BF75A8524CB3B74B4 +8894B558118BF20CDF56AF809295491269D2103B8EB87B7B1E9FDC515E1BB263 +7BC9148A7EBFCE70188D0B1A17B7D658DA1C68718B5D877E766ADB4F9E1D2CAD +09F2D2A0BEC2AAAF29E2CE02D92AD9D69EA3B82725A81B66E6D7DFABEA83686B +43DDE5495E14ECDFF314283FEE34E12304720E21AD065ED65CC4927B2CF19F19 +7BFADECEB4AD2A72C922F275841A9A32B7F59F9CEC85993119EA5D84960A7E16 +A78AAC396EF0E30C9EA0F14FCFCF334B27866D2DA6340FD44C35036B82206996 +BD42AAD9C7BF510D6F99351E00341ECBCBDEFBF78F1ED10AE4949377D95B9E33 +70E081EDA5A607B2DC1A9738392F5F4877FF63D96F3FC6471B0F1A28F82B948E +82EB06170AD13DE4ECD5434847DD230A34B7107FA0413425D6D9CA32C28481AA +393953FD84CC739316952259CC15DB3D04E7A2576128710187537FCABE9C122A +42FFB3E2BF87A0E3C01687C35A8A814A2C2E2D8F0683CE2BC0AD76E751779DAA +E2F71CD0D6A404477FC407C1C7ECDEE10C2ACE04AD173BFC01FC4DBBD91FE636 +702E00578A58B04A6356BC929E89B7C23EA2B4D2F05463F440ABD43619D359A6 +4DBEE2BCD153E8E2B798E48F59B4075ECDC4B6AC81DF75B60D5C55A9BA18D9B0 +0BEEF152C02CD4C9D614F229E15036D1669D4F0715AD4871A84DF047F298069C +20FDBB5D9D622940F3489F5AC9D8C48901F97B387D9F6971FE46BD41BD122929 +D113A49E4D220947F7800AB6DF6B6DAB345383F9232798C0D8742EB0AB37FB67 +46FA98D45EDD95050E8CB3763A0BD67C1F32CE256F2D81FB05414A0F4845C692 +0D7C997CE76362A4460DB895D4B34415E594BD1D6D3C629A217804122CA41D81 +C1A7226B41F7B8D3DCBD2AC9F1A58ED888F90158CED2BD1BD4881F0330667738 +997AEE6011D252489AC0C346C2E7997EB962B34424C1625A1137031FB5CBC425 +5A9E08A920E51541ADB58324D27E59760716B01EFACE7A2C436C7663C7A1D378 +4EFD66FF16BDB57AE42BAC37DF2846DBC12C6902775FA98C23FA68D9790858DE +9260E0A722317CCF99FB562CF92E762C9F59E04590948D507B0D44364D33B16F +424137252B67978A00BFFAE3C4E30D1D62DF2D22CC2866663D3D90E78F1D8C4A +C6AB96093E510628D8AEC1C00C4569862EF44E462E74AC21F7896C344CE9C529 +51DADD8E3DDAF7F77D5F561DD629569E559981F2521E624D77D1F7A515FD206A +F90733AE19CAA4D93BAF58892C1B5D18354351591A2A8FA469544D2A9DECDE28 +56A75E8F53C1F385A0E3138DF166F8A0971E3C6DAD42779BE51EA4B13A9078F6 +8155CF68CC6BD9E39D94A8CF31E5BE1A65E55BB7C9B2F41F98C2AB3BFD841AA9 +E9A69AAA7CC0A6BBC2F66A35AB9DDCE6F4F6741C9B2CCDA05F3E40A84604B459 +E96202AC1170606CFBBBFA0B66161CF976C42D3336082CD69FD3B21F5417B036 +058E6AC406903CE2BAD1443F029BEA088AAA7C5213C3D70922AE267AC1C5CADC +D040E5F17A570D34211EDC65ADE16835AD8882D79F7B4C46EED948440B731343 +5B37EA4276D19FDD5C17A90A90248B2EBF259354D61210BA54DD4D2DAF6A0B2C +14559DDAB0960DC0947D84952190D915D3CDFAA9A1161A0A0377B09DF62A8768 +1A321D657C2EBDC021733D71CB34399F3D134EADD455317D3BCB792F37D9298B +354A6C7B5EE3852036A5F22E05534EBF403ED6A9736A6C0A421CDF94B58708DC +2F37D6C2888D75C51C9A55FD1E468E31513C14A54317470E2DD84C692CCFFF36 +3EC351523B2C74281D68A1BEE6C180A0FE9855946268089D2A3931D5B3BF5F24 +1032AF0478059F8B909EDEB7D70F85BED45C1EA6B8FB69AF45AE3FB21BF40DAE +26E41674163C34FE3CE0908F3232EE6E6AE5C3AC527BDB7BDC7F9B620C9A8A87 +E8128354A3EDE2243427C95C150CDEDC5DA74FD10D61233054458D238EE6CCE8 +9C2E0F1CCD3AFD4C2BF9A9B438A9705206158CF09FB6753CB1379514E7827BA5 +396140E312185010A0F5C87A2D1D11A8402605B126B9D05CDB76F76803AE4EB2 +7A190302B5F50E650F358D04FF254432EDDE270CFF6F78453683AE2025B01EF6 +03F5D4AD7957A6F86CAC3A2D74DC073531409F3B185AB35FA422947063DF0849 +78238111CFFF66D21699954EAED3A26F5FDAAE070E5CF90365A623F05668A538 +00FE77A3A96F2A88BEB512A8BF25EE225E2697D16D39183418F2F90B9FD7187C +EAB5897A82113EC001FEABBA122CE2070EC3EB6E7A88EF8EA57BB4492E7F024A +3267EF86D78C54921FD8EFFB34C21686C29306E8413EBC7B087D001FCB7C18DB +585B55B54FB039810DF11EC19920FFB54CFFBD9B45F578019D66076D8D0CA425 +C2E55FAF85482DE1B7A3DCDDBF9FE378A6EEBF10D5B611312DB5732899F43CD4 +B2A4438C079E3650E552B82B49ED62D6DFC44EFDCF0C24CC290BB1EEF039B240 +13498147AEA835E093CAC01A3B0BF650F500AEAAE8E3BBAD06CC2F4ECAA95171 +C4A5D518DC09275B568D6A158D9F56439294419FF440630B243BEA99AA35C5A2 +84B97065386298C112A0F2209C6B1D9642477D17D5D48240BACAF9B9D7514A13 +1E0CBA1635556B63ECC3370ACF16EF98573D1228992002FEBA55B2EB94D26C81 +A8F89BB0E68917E175CC541DA96FC8770588DB3FF81D79AF952F9152D1F780BB +72BC93DF8646172AD24772A60E3B61F21292CB763C3DD2AD09DC990AA7AC91B0 +71E9B638D76A68AFF89BADC28ED1B771F1A122BC3DBBA7DABA181B86A0511961 +25606E1EEED78F3978BB97316BCA93784A73B70AA3B6104ABFDBBE4E8F7AF09D +6F7B45289A33CEFFA4648B6A74998AAC30C2FFCA787581B88E00200038844881 +77A8A5C762732D65582B9E95985720E13E9D2EE241C7784086EF9673D521E6D7 +728E8FBD6E82C9F59CD93A7E5E93383C75344D3BDE2E9A1C23BA7BDEDC44CA68 +266421FF0A6521BA082A7C0FAC41E8B891D7964C8B311414C2A7B9D511BF6F4D +BB466698CA561CEDB4C18C6A747057398AA7AE03B5D25366577098AC736791EF +6F7F2F4AD50049DE2DE937C10E007DFE266132AFD3B0759552BCFBD1DE7701D7 +40C0684E5198A4C5EA720EFE65AD3F3B7E7120DF1C37A0541336720A8662CF8A +60322F8DF190C333CCEAB8DA4E0BACAC1AD33B58D1E62CD9F88221B77D06B3C1 +9A076EE251011008224346C273901D11D174F7D8F73622197B633FF38A420DE6 +E566FDD431CE5CEB23854DAABA5AB2186988F33BE5629F296B00F1423881ADFB +BB21447A07891BF5243C5575DB67757C038376FFA751EA0D192D36FC6ABAD593 +FF99224D445C2CD3E17D693BB6F9DA64C4511D9D3A1A3D7E192780CEBCED176B +C473241EB2A5975191757073797E3CCCE1CC6A4D22526D5832A5AC3368C3BAAE +F47C7946FD755A5BF3C6EC9F9339F29F135BEA25225F5BDB48A4ED71C0A6F756 +B727C0727264ADDD56A068EC732A7C3EB157CE2F698BF93D09B6226AD8962871 +0115EDBF7CAEE3684C982FBB1706257603E541C9EA473359169C0D6E21177E1C +634FFB095CA8E4806FF2CEFED1AA5F223F6C1415933D45598E05BEE7860F8A02 +B22AC51BCF3099A489AAD858FAF5F25F2970C2C34F369180A5FF993A33606B04 +D86DC7393F3F56BFD4F49BC0B710E514D8CB3686F4C559851653714E916E1A14 +E163094F5E5AB877457E41798A7F772571D18F3DC1745A1292A723F4F2BFEFAC +55946DB6E7049F2CEABB8683EA0405BA71C26E440ADC486E90E9FEE8006FC7D0 +946284B9FB12726148181F9911ADB7EEA6D4EEF7D0883F0734DEA6011E93F333 +0CEB6EF60FB5C598E88C807114FBFC708C866E10283B253F7221F77548050052 +CC6395F359BEF8CD051D7FE8CDCB7356DE21C9992DDA3E3AEF4C39D67A642750 +854AFB2F1F623BD1411FEE89F268EEB31BA3301A0B2F0E255195ADF88AA9519F +045213BFE0C5229566C8693220BEDBAE43A2D7C5EAE8B70C7C7615BFB6BDEBFC +656478BAA7222C3C2208698B9CB31ADA9974BB9F52CD9849FD6AE54577B550C8 +BC7E7030268B7A3F60D6F1A5E3068163058F8BABE065FAF131234841258081A5 +DFCFB8B95BAED2F177082D9428A05D98161679851047AC680676555D5790DC90 +3024C143E712CAD97AE14C686DFD0B0AF8678A0E900AE0B6ACCA5E147343F6D0 +FA16F5001B77FA3CA828C39B639009ED3667C7C4CAC30C73FBB3FF198E25F3A7 +7ACAA47FDAEFCA162DA9EBFFB0B67E6D1E30888EB7B1390A2F904086C9C193B9 +7D7C38B6FE2C505CB79A928ED7B160C9312A367D563EEB2EB633C290D4D91AE8 +626C7C75056C60439FAC82EFEC2C55B219A4A5A46BA158009DBE1F2DB4DB32B5 +54A34E2687E9303774BFD9315A64923E6038E658BA523F704FF7450C7B25D7C5 +52CABADDAD0273D310C683590B97FDDD457ED674B9C4610B2CF0051437207918 +D3B5AB0F8F6BE5F2E3B0FF2D330A32CB0010CDB1236DE60A475CF643CE7282F6 +11E68B8065CF6F3F976E9A13EEA94260365A8FB0E5420B69643AB2DA936F3450 +E02CBF5DD991FAB244743110857B621BA930BF4877BDFCABA8F1EFA1AACDFE58 +41E09B2F7D6B8782961D7B26DD4E2B3ED872A4E049F6E9DDE2B09192E3B2D967 +25C06C9FC87D57579268FF9D1EAFAA86153F21BCA6AB7207B314CC7CA0E274AA +38B3B30E18E870324C4849AC3B8B526F063F4E5AC9D8C72989046A6EB49C0DF8 +EBE7FF1BA628BFAA897816A3B07FCCD0F10F7E19D1CA42EB71E55E7E5E57041B +8BC3FCD4EF14828489A158F644470993260E5E80F0CB0C6ED889CD3716677D7D +EAE111BEEDBE67898879243C0D1AA6CD15369E54D5D29EFD0A8A080EF8BDB4D7 +EB1C93DB28F7ADD7F784BF863A93430021C2A04A2EAE0953375D42615E5086D4 +1A3D8F95483CE6980655EAB12C0D6C8AD2258F63E50A310407486012EE4796F1 +04B718864FEB1F3BBAFB7EE522D2F83EB1FB9ECD7023DE884BA8B866EBC9210E +E5EDA79A815E37A361335A68D1C98C5FBE4D1C1AC867D139E29F6345C4D1AFEE +917B302994F5C0FC7F5D7E12AD12FF0B874415085F178E9957EC0BC8AAEB0136 +42CBAFD49882A9551F011F8461BCCB5EBE0BFAB9404AFE911098F4EDA74C2D5E +0F30BC2301C2D679221A8D00F20811987F22091F3C94D79B683F58166108566C +93BBEE66C99FE19FD8B1B9EF7F6070B1C504E1B2234DB691F6C94580945649D6 +0757EF8710C2D531F56D6A7D78814F69860F064695124D064019E3380AAAB72E +FB510D19DDAB9D550D088F1FEFF0C17BBF82B8F4911DF9B01CEB823190481DB1 +83D0D22388F3720846A9215F2CA1E0604C868E7E8E92BAD134D8E19BA637C16A +5EE5A9E7EFF106E197B7132F50AAF4B104E81B96696DB2A8AD870548971E8301 +DDC68DA8DEF897FC56554FC40315EB3D53AB95C979B5E62A12CEEAF5D6E213B5 +652A442495893B25DBF4BAA06A31715571354799D9ADA92A57C260610C32338D +F5DD11B327B70F584E9CCBD4821034E7338543BBE03DD2B343E54ED390656E65 +9E2D9B94DF1E44D4140DD80CA27A0E6AD833115CC3F93BD8AB3D778A56B8A969 +B9CCD3F3D61FC8F1F3A5FAB1963FCE04C252537F13F9B74C172102ED79F89BCE +F70B95D7DF614D3587B61D233FEEA57C7589CB664E61D4B299F17E45173D3E49 +FE23C80BA00229D6358A573733A401836897F2CABD8B1CCB352F5206A05B23B4 +4013EF2C5FCBE0F0672171FE4DA6D0A353508CEA09698E1DB43E78D04212106A +78B2FF52AFC676E012C9E62A2799BE98DFBE41E3D64E061610967E6C6AEA048A +AF259A391C1273D02FAFB4EC4D803143C5AEAA0577D8CC78568A8D2F3B8A22D4 +86FC83BDD6B614C9D5DAB4D65172CAB96086F52D3F1E7622A13E46D44510E9C1 +B640792C4CD0A9B0857CACE924843DC37084830567198F916CE48909BC084B24 +81C7D9E054966EA4A6177059A6FCFAD0E4A6F4C860EF3E023366F03E4FC3C2C8 +919214A7E22D25D4F1D28955FC357FCA42FA3826EF0F107621415CE81A90244E +2A8E393B29838D4DD200BCD80D498D6A28A1916A61820E44BA0D49DBC1368222 +891208B4CA964BFF4A077B1888DAA163277816BE4DBE66390E05C40106116FD8 +84922685F08E8617B2818836F714C9AA79C7E79A719879AC766446BAE08F5F58 +A85A469FCA296FC08FAFD2B17527E7E5D6E33B16CEB6748AFF4F3A4E04051335 +0E0F2792DCDF9479BCF93859B2E65C77808DE602666048762980F3F9E2AD9994 +08CDC436573F2C0D1F52C09BAE774F357B90BD750BB66B0A76DA7544BD3ACC3C +B910B651FFA2EF8295A149E286BB3EC8A5FAB79F30F3887997E35CE0406111D8 +63775287F7D94CBFA794B3FE5526686DA4EE25F6E843AAF44CF63E3EA4AD0995 +351DBAF44AD39A83B3B455447B62258DEEE619598C653C97133A55BEC3416312 +9B68486989310823164233A2EB274A9011570E3C6EB0FD47012E1C28523ADB18 +7C6D7E1F35CCFC8843B336E4374E6311E9DC8DD37C5E80577532CACE6DCE4665 +A16B9AE6695698A5AE3DDAED9322F33A4ECE00B002CDD06D68E2813391883E03 +A6CCE6E3224AC4230E95EA50CBEF985686156D9EC009C4F2D5F535FE95A2D207 +A28C00969249452ABB5EACC9CDB04E122C2E7D2A2C605FF91577189C45523EEE +1C60491715E8721C6203489084BC7F89AAE3E2FBCC30AC852EE8671AE57FCC78 +EC97A60233431B28255B195A0161A71393FD35E3D779C9F057030859D66A0DBE +3B6CFB001D7F78D549736BDA4525F452A62D24CBD50F26CF86CC40C0568C502B +C8C4628E1E2D65B0E438BCBC9B469A2FDDD50833FE0ED98C2F8C801A77641CE2 +B2A709826BB47EBFE14124DDEA8356B978218831C78BA723F2BA59C2B3D92F3B +53E4FD457068808134D31F8FBF9D04FEB8EECE1401F862213D9D124A63694291 +DA0FA986ECC002727A4B002C8A90EBEA4CEC3974BEAD6203A80312D363976404 +B58CD663EAC26BFCE72FE032BC4FA3AC4AF351D974F3EFF8B7286EA81AE116DA +3E96C7E45054ECB1FB22D79C65D309B2EE3EE70206419E83603AFB76F83558BF +61FE2F9B4DA032F2D551EAD428757BF268E9DB3788E80F52CF0F825BA5C83F07 +60FDEE9408311DF94B29BBF0FAF661A7558E6A7418EAA50C752BC8141E8115FA +0087DAF9FC6AC97B06E8F7D12A22EFF6DAD989DC5E17E519D1B799E31B1329E5 +7056FBEEDAD4730F3197C886A05539707F9D724556D4322B1BE02148431C7A4A +26EF0A7F47015396ABA58AB4E821F631D38A0EA1F449B6A84375B02444D05524 +A9CB54CDF3A59E6DE32050681CD7AB423F17574F59B733A8333D22697556A412 +8D460EC9A4C9ACF5C3802102A0C7A2225BDBD1DE174C98AA2764FF35BB408671 +633EF1552B6CC7DB997B4E25D498BA38C3F0F7849FE2AB82BB6B43F1F9269C39 +E4295AF84E5E6B837B731DF1827F9FC09ACB35513CBEE410864FFBF82226F5B2 +F50EAE947ED7B0BF43CDE3F61C8B938854ACD2FD676E913586F1D0EF6ADE3936 +206C763B1B4EAA63C024EA693F4AB4BA075ADCDD5BEEC8D5E04AD1B570BBA646 +9BDD719696A73494F47FCBE7703E4C5E2FEACECCA3D59AE4E9378CA42C469512 +371C344EB7051C5EB30E7BBE32510F0367473691F0ECAC4359EA19A528782A53 +71E9158E8434E529B6A182091DCC455387F217E4FF119E1E2A8127EB8E318198 +9F63CBE626419B857E5A0B2B2C2370882694FF2B999CB46D03E8A18169D4C47B +B3FED07CC9B30B90625E5D64914A30D52ABF0CF5C42EEAD026FA61E9627AD3D6 +8678EF44C646B1A8BF4F2C20DFCECB7383DA6D14B87F46EE9C78AA82AF7BB3E8 +BA10105E26F15EBD25635E1C9E00496CA6039B5560ED5F548703618CB954D9C6 +A2B0B1957E510C40A75924FE314F0EAEFC2487BE10FC57EBA25DC6D9799C40AC +B36915009787712776E4294971F66256BF23266D37DC00204B73CC1D335A835D +F88B7DF43714719ADC28A92F28ED29840DE8C42D9234BBAE3CE11A8C0258FBD7 +AB6566D8A02C79DC84EA6993F5C65A6635EAA3D80CA72186320D4257BFBE7525 +75664A76D86C83B2EAF5502047B6CF4A3DB006F47A03220EF92D8F5FA4F5D1DE +F963394FF6219C873606920DE9BA967D78722CE69ACE9D473D257BD843152C02 +9430E334666F1FDCCAE9E1136130F1944F2C21BC47E9CF968AF05874CE4C87CD +3B0AFD3CE793C808645942D4C9F7239E257B2ACA5B3D452A2A948F4B673D729B +DA9AC6B99935D1B25886704C32558CB1F9D4C4C54354FCE18292E53B79183457 +2D1EEA7AD9F94F6589D6A591E1EE07DCB1D69A5C42246117910FCD51DC17E2DD +47E5D970DE447FFAA78CCF456DEABB5D2B8EC3BA7EEB64FB1E7FC328D8B6A67C +C8D38CFF3FF8279DC4E1FCF0DCE272FD6BEE5D1DD330CA126431F84309098DCF +4B594EA46F5130B9056B14619D3598CB61B037BF5916EE0FA7059C289FB4FC10 +665AE6D34C5920BB17292E7038883A99598DD025F7DEF15346F7C478A474A443 +FE7872DFB3E8026CBEDB0156F2550EC45A933ACB54768AE8E54B9D7EC53BC131 +CD1E82612D7F5A4FBCD392083D71BA0458C66937279DA6ED39BD01D4195517A3 +975BB911DCFA1A549007E4C9F989A08D42B6BE1E1AAB8EFCACA21788EAB44ABE +B9AD1B5CDDA5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 55380996 39158280 1000 600 600 (org-ref.dvi) +@start /Fa 242[61 13[{ TeXbbad153fEncoding ReEncodeFont }1 +49.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 +30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 +1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 4[30 1[30 30 +30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }41 +49.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36 +2[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14 +66.4176 /CMTI8 rf /Fd 134[43 43 59 43 45 32 32 34 1[45 +41 45 68 23 43 1[23 45 41 25 37 45 36 45 40 10[61 1[57 +45 61 61 55 61 63 77 49 2[30 63 2[53 1[59 8[23 12[27 +32[45 47 11[{ TeXf7b6d320Encoding ReEncodeFont }41 66.4176 +/CMBX8 rf /Fe 219[71 2[71 32[55{ TeXbbad153fEncoding ReEncodeFont }3 +66.4176 /CMSY8 rf /Ff 203[33 33 33 33 49[{ + TeXf7b6d320Encoding ReEncodeFont }4 58.1154 /CMR7 rf +/Fg 129[35 1[35 1[35 35 35 35 35 35 35 35 35 35 35 35 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 1[35 35 35 +35 35 1[35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 +3[35 1[35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 +35 35 34[{ TeX09fbbfacEncoding ReEncodeFont }85 66.4176 +/CMTT8 rf /Fh 134[60 60 2[64 45 45 47 1[64 57 64 95 32 +60 1[32 1[57 1[53 64 51 64 56 10[87 88 80 64 86 2[86 +90 109 69 2[43 1[90 72 75 88 83 1[87 19[38 45[{ + TeXf7b6d320Encoding ReEncodeFont }36 99.6264 /CMBX10 +rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 +20 37 22 20 39 35 22 31 39 31 39 35 4[35 3[53 72 53 53 +51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54 51 50 +53 6[20 6[35 35 35 1[35 20 24 20 55 35 27 27 20 2[35 +59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont }69 +66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 61 +1[67 14[103 2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 +53 40[{ TeXf7b6d320Encoding ReEncodeFont }19 119.552 +/CMBX10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + @landscape end +%%EndSetup +%%Page: 1 1 +TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45 +b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h +(3.12\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y +Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931 +102 y Ff(1)-150 199 y Fg(\(autoload)38 b('org-mode)g("org")e("Org)h +(mode")g(t\))-150 268 y(\(autoload)h('org-diary)g("org")f("Org)f(mode)h +(diary)f(entries"\))-150 338 y(\(autoload)i('org-agenda)g("org")f +("Agenda)g(from)g(Org)f(files")h(t\))-150 408 y(\(autoload)h +('org-store-link)h("org")e("Store)g(org)f(link")h(t\))-150 +478 y(\(autoload)h('orgtbl-mode)h("org")d("Orgtbl)i(minor)e(mode")h +(t\))-150 547 y(\(autoload)h('turn-on-orgtbl)h("org")e("Orgtbl)g(minor) +g(mode"\))-150 617 y(\(add-to-list)i('auto-mode-alist)h('\("\\\\.org$") +e(.)e(org-mode\)\))-150 699 y(\(define-key)i(global-map)h("\\C-cl")e +('org-store-link\))1504 676 y Ff(2)-150 782 y Fg(\(define-key)h +(global-map)h("\\C-ca")e('org-agenda\))1364 758 y Ff(2)-150 +879 y Fi(F)-6 b(or)23 b(the)i(man)n(y)f(customization)h(options)g(try) +68 b Fg(M-x)36 b(org-customize)-150 948 y Fi(T)-6 b(o)24 +b(read)g(the)g(on-line)g(do)r(cumen)n(tation)i(try)111 +b Fg(M-x)36 b(org-info)-150 1147 y Fh(Visibilit)m(y)h(Cycling)-150 +1297 y Fi(rotate)25 b(curren)n(t)f(subtree)g(b)r(et)n(w)n(een)i(states) +291 b Fg(TAB)-150 1367 y Fi(rotate)25 b(en)n(tire)f(bu\013er)g(b)r(et)n +(w)n(een)h(states)384 b Fg(S-TAB)-150 1436 y Fi(sho)n(w)24 +b(the)g(whole)g(\014le)854 b Fg(C-c)36 b(C-a)-150 1614 +y Fh(Motion)-150 1764 y Fi(next)25 b(heading)1043 b Fg(C-c)36 +b(C-n)-150 1834 y Fi(previous)24 b(heading)921 b Fg(C-c)36 +b(C-p)-150 1904 y Fi(next)25 b(heading,)f(same)g(lev)n(el)685 +b Fg(C-c)36 b(C-f)-150 1973 y Fi(previous)24 b(heading,)g(same)g(lev)n +(el)563 b Fg(C-c)36 b(C-b)-150 2043 y Fi(bac)n(kw)n(ard)25 +b(to)f(higher)g(lev)n(el)f(heading)424 b Fg(C-c)36 b(C-u)-150 +2113 y Fi(jump)23 b(to)i(another)f(place)h(in)e(do)r(cumen)n(t)350 +b Fg(C-c)36 b(C-j)-150 2311 y Fh(Structure)g(Editing)-150 +2462 y Fi(insert)23 b(new)i(heading)f(at)g(same)g(lev)n(el)g(as)g +(curren)n(t)104 b Fg(M-RET)-150 2531 y Fi(insert)23 b(new)i(TODO)e(en)n +(try)700 b Fg(M-S-RET)-150 2628 y Fi(promote)24 b(curren)n(t)h(heading) +f(up)g(one)h(lev)n(el)285 b Fg(M-LEFT)-150 2698 y Fi(demote)25 +b(curren)n(t)f(heading)h(do)n(wn)f(one)g(lev)n(el)233 +b Fg(M-RIGHT)-150 2768 y Fi(promote)24 b(curren)n(t)h(subtree)f(up)g +(one)g(lev)n(el)301 b Fg(M-S-LEFT)-150 2838 y Fi(demote)25 +b(curren)n(t)f(subtree)h(do)n(wn)f(one)g(lev)n(el)248 +b Fg(M-S-RIGHT)-150 2935 y Fi(mo)n(v)n(e)24 b(subtree)h(up)932 +b Fg(M-S-UP)-150 3004 y Fi(mo)n(v)n(e)24 b(subtree)h(do)n(wn)848 +b Fg(M-S-DOWN)-150 3074 y Fi(kill)23 b(subtree)1097 b +Fg(C-c)36 b(C-h)g(C-w)-150 3144 y Fi(cop)n(y)25 b(subtree)1052 +b Fg(C-c)36 b(C-h)g(M-w)-150 3213 y Fi(y)n(ank)25 b(subtree)1046 +b Fg(C-c)36 b(C-h)g(C-y)-150 3310 y Fi(arc)n(hiv)n(e)24 +b(subtree)976 b Fg(C-c)36 b($)-150 3380 y Fi(T)-6 b(o)24 +b(set)g(arc)n(hiv)n(e)g(lo)r(cation)h(for)e(curren)n(t)h(\014le,)f(add) +h(a)g(line)f(lik)n(e)1495 3357 y Ff(3)1533 3380 y Fi(:)-150 +3454 y Fg(#+ARCHIVE:)38 b(archfile::*)h(Archived)e(Tasks)-150 +3631 y Fh(Filtering)g(and)g(Sparse)g(T)-10 b(rees)-150 +3781 y Fi(sho)n(w)24 b(sparse)f(tree)i(for)d(all)h(matc)n(hes)i(of)f(a) +g(regexp)92 b Fg(C-c)36 b(/)-150 3851 y Fi(view)24 b(TODO's)e(in)i +(sparse)f(tree)580 b Fg(C-c)36 b(C-v)-150 3921 y Fi(create)25 +b(sparse)e(tree)i(with)e(all)g(deadlines)i(due)204 b +Fg(C-c)36 b(C-w)-150 3991 y Fi(time)24 b(sorted)g(view)g(of)f(curren)n +(t)h(org)g(\014le)367 b Fg(C-c)36 b(C-r)-150 4060 y Fi(agenda)25 +b(for)e(the)i(w)n(eek)823 b Fg(C-c)36 b(a)p Fi(1)-150 +4130 y(agenda)25 b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 +b(C-o)2046 -364 y Fh(TODO)i(Items)2046 -216 y Fi(rotate)25 +b(the)f(state)h(of)f(the)g(curren)n(t)g(item)354 b Fg(C-c)36 +b(C-t)2046 -147 y Fi(view)24 b(TODO)f(items)g(in)h(a)g(sparse)f(tree) +380 b Fg(C-c)36 b(C-v)2046 -50 y Fi(set)24 b(the)h(priorit)n(y)e(of)g +(the)i(curren)n(t)f(item)369 b Fg(C-c)36 b(,)g([ABC])2046 +19 y Fi(remo)n(v)n(e)24 b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)j +(item)179 b Fg(C-c)36 b(,)g(SPC)2046 100 y Fi(raise)23 +b(priorit)n(y)g(of)g(curren)n(t)i(item)557 b Fg(S-UP)3626 +76 y Ff(4)2046 180 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n(t) +g(item)538 b Fg(S-DOWN)3696 157 y Ff(4)2046 311 y Fi(p)r(er-\014le)23 +b(TODO)g(w)n(ork\015o)n(w)h(states:)33 b(add)24 b(line\(s\))g(lik)n(e) +3505 288 y Ff(3)3542 311 y Fi(:)2046 384 y Fg(#+SEQ_TODO:)38 +b(TODO)f(PROCRASTINATE)i(BLUFF)e(DONE)2046 464 y Fi(p)r(er-\014le)23 +b(TODO)g(k)n(eyw)n(ords:)32 b(add)24 b(line\(s\))g(lik)n(e)3314 +440 y Ff(3)3351 464 y Fi(:)2046 536 y Fg(#+TYP_TODO:)38 +b(Phil)f(home)f(work)h(DONE)2046 723 y Fh(Timestamps)2046 +871 y Fi(prompt)24 b(for)f(date)i(and)f(insert)f(timestamp)266 +b Fg(C-c)36 b(.)2046 940 y Fi(lik)n(e)23 b Fg(C-c)i Fi(.)31 +b(but)24 b(insert)g(date)g(and)h(time)e(format)144 b +Fg(C-u)36 b(C-c)g(.)2046 1010 y Fi(insert)23 b(DEADLINE)h(timestamp)516 +b Fg(C-c)36 b(C-d)2046 1080 y Fi(insert)23 b(SCHEDULED)h(timestamp)451 +b Fg(C-c)36 b(C-s)2046 1150 y Fi(create)25 b(sparse)e(tree)i(with)e +(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)2046 1219 +y Fi(the)25 b(time)e(b)r(et)n(w)n(een)j(2)e(dates)g(in)g(a)f(time)h +(range)172 b Fg(C-c)36 b(C-y)2046 1328 y Fi(c)n(hange)25 +b(timestamp)g(at)f(cursor)f(b)n(y)h Fe(\000)p Fi(1)g(da)n(y)238 +b Fg(S-LEFT)3696 1305 y Ff(4)2046 1409 y Fi(c)n(hange)25 +b(timestamp)g(at)f(cursor)f(b)n(y)h(+1)g(da)n(y)238 b +Fg(S-RIGHT)3731 1385 y Ff(4)2046 1489 y Fi(c)n(hange)25 +b(y)n(ear/mon)n(th/da)n(y)i(at)d(cursor)f(b)n(y)h Fe(\000)p +Fi(1)189 b Fg(S-DOWN)3696 1466 y Ff(4)2046 1573 y Fi(c)n(hange)25 +b(y)n(ear/mon)n(th/da)n(y)i(at)d(cursor)f(b)n(y)h(+1)189 +b Fg(S-UP)3626 1550 y Ff(4)2046 1670 y Fi(access)25 b(the)f(calendar)g +(for)f(the)i(curren)n(t)f(date)221 b Fg(C-c)36 b(>)2046 +1739 y Fi(insert)23 b(timestamp)i(matc)n(hing)g(date)f(in)g(calendar)89 +b Fg(C-c)36 b(<)2046 1809 y Fi(access)25 b(agenda)g(for)e(curren)n(t)h +(date)507 b Fg(C-c)36 b(C-o)2046 1905 y Fi(While)24 b(prompted)g(for)f +(a)h(date:)2046 1975 y(...)30 b(select)25 b(date)f(in)g(calendar)660 +b Fg(mouse-1/RET)2046 2045 y Fi(...)30 b(scroll)23 b(calendar)h(bac)n +(k/forw)n(ard)h(one)f(mon)n(th)121 b Fg(<)36 b(/)f(>)2046 +2115 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 b(one)h(da)n(y)525 +b Fg(S-LEFT/RIGHT)2046 2184 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 +b(one)h(w)n(eek)486 b Fg(S-UP/DOWN)2046 2254 y Fi(...)30 +b(forw)n(ard/bac)n(kw)n(ard)24 b(one)h(mon)n(th)437 b +Fg(M-S-LEFT/RIGT)2046 2451 y Fh(Links)2046 2599 y Fi(globally)24 +b(store)g(link)f(to)h(the)h(curren)n(t)f(lo)r(cation)166 +b Fg(C-c)36 b(l)3662 2575 y Ff(2)2046 2668 y Fi(insert)23 +b(a)h(link)f(\(T)-6 b(AB)24 b(completes)h(stored)f(links\))138 +b Fg(C-c)36 b(C-l)2046 2738 y Fi(insert)23 b(\014le)h(link)f(with)h +(\014le)g(name)g(completion)192 b Fg(C-u)36 b(C-c)g(C-l)2046 +2834 y Fi(op)r(en)25 b(link)e(at)h(p)r(oin)n(t)884 b +Fg(C-c)36 b(C-o)2046 2904 y Fi(op)r(en)25 b(\014le)e(links)g(in)h +(emacs)722 b Fg(C-u)36 b(C-c)g(C-o)2046 2974 y Fi(op)r(en)25 +b(link)e(at)h(p)r(oin)n(t)884 b Fg(mouse-2)2046 3044 +y Fi(op)r(en)25 b(\014le)e(links)g(in)h(emacs)722 b Fg(mouse-3)2046 +3140 y Fd(Link)27 b(t)n(yp)r(es)2046 3236 y Fg(<http://www.astro.uva.n) +q(l/~d)q(omi)q(nik>)247 b Fi(on)24 b(the)h(w)n(eb)2046 +3306 y Fg(<mailto:adent@galaxy.ne)q(t>)564 b Fi(EMail)23 +b(address)2046 3376 y Fg(<news:comp.emacs>)845 b Fi(Usenet)25 +b(group)2046 3446 y Fg(<file:/home/dominik/img)q(/mar)q(s.j)q(pg>)282 +b Fi(\014le,)23 b(absolute)2046 3515 y Fg(<file:papers/last.pdf>)670 +b Fi(\014le,)23 b(relativ)n(e)2046 3585 y Fg(<file:~/code/main.c:255)q +(>)599 b Fi(\014le)19 b(with)g(line)g(nr.)2046 3655 y +Fg(<bbdb:Richard)39 b(Stallman>)631 b Fi(BBDB)23 b(p)r(erson)2046 +3725 y Fg(<shell:ls)38 b(*.org>)877 b Fi(shell)23 b(command)2046 +3794 y Fg(<gnus:group>)1020 b Fi(GNUS)24 b(group)2046 +3864 y Fg(<gnus:group#id>)915 b Fi(GNUS)24 b(message)2046 +3934 y Fg(<vm:folder>)1055 b Fi(VM)23 b(folder)2046 4004 +y Fg(<vm:folder#id>)950 b Fi(VM)23 b(message)2046 4073 +y Fg(<vm://myself@some.where)q(.org)q(/fo)q(lder)q(#id)q(>)105 +b Fi(VM)23 b(remote)2046 4143 y(W)-6 b(anderlust)25 b +Fg(<wl:...>)h Fi(and)e(RMAIL)f Fg(<rmail:...>)k Fi(lik)n(e)c(VM)4242 +-364 y Fh(T)-10 b(ables)4242 -255 y Fd(Creating)25 b(a)i(table)4242 +-168 y Fi(insert)c(a)h(new)g(Org-mo)r(de)g(table)330 +b Fg(M-x)36 b(org-table-create)4242 -98 y Fi(...)30 b(or)23 +b(just)h(start)g(t)n(yping,)g(e.g.)173 b Fg(|Name|Phone|Age)39 +b(RET)d(|-)g(TAB)4242 -28 y Fi(con)n(v)n(ert)25 b(region)f(to)g(table) +741 b Fg(C-c)36 b(C-c)4242 41 y Fi(...)30 b(separator)24 +b(at)h(least)f(3)g(spaces)537 b Fg(C-3)36 b(C-c)g(C-c)4242 +128 y Fd(Commands)26 b(a)n(v)-5 b(ailable)25 b(inside)j(tables)4242 +215 y Fi(The)17 b(follo)n(wing)f(commands)i(w)n(ork)f(when)g(the)h +(cursor)e(is)g Fc(inside)k(a)f(table)p Fi(.)4242 285 +y(Outside)24 b(of)e(tables,)i(the)g(same)f(k)n(eys)h(ma)n(y)f(ha)n(v)n +(e)h(other)g(functionalit)n(y)-6 b(.)4242 371 y Fd(Re-aligning)25 +b(and)i(\014eld)h(motion)4242 458 y Fi(re-align)22 b(the)i(table)g +(without)g(mo)n(ving)g(the)g(cursor)70 b Fg(C-c)36 b(C-c)4242 +528 y Fi(re-align)23 b(the)h(table,)g(mo)n(v)n(e)h(to)f(next)h(\014eld) +311 b Fg(TAB)4242 598 y Fi(mo)n(v)n(e)24 b(to)h(previous)e(\014eld)762 +b Fg(S-TAB)4242 667 y Fi(re-align)23 b(the)h(table,)g(mo)n(v)n(e)h(to)f +(next)h(ro)n(w)328 b Fg(RET)4242 754 y Fd(Ro)n(w)26 b(and)h(column)g +(editing)4242 841 y Fi(mo)n(v)n(e)d(the)h(curren)n(t)f(column)g(left) +544 b Fg(M-LEFT)4242 911 y Fi(mo)n(v)n(e)24 b(the)h(curren)n(t)f +(column)g(righ)n(t)497 b Fg(M-RIGHT)4242 980 y Fi(kill)23 +b(the)h(curren)n(t)g(column)731 b Fg(M-S-LEFT)4242 1050 +y Fi(insert)23 b(new)i(column)f(to)g(left)f(of)h(cursor)f(p)r(osition) +104 b Fg(M-S-RIGHT)4242 1137 y Fi(mo)n(v)n(e)24 b(the)h(curren)n(t)f +(ro)n(w)f(up)678 b Fg(M-UP)4242 1207 y Fi(mo)n(v)n(e)24 +b(the)h(curren)n(t)f(ro)n(w)f(do)n(wn)594 b Fg(M-DOWN)4242 +1276 y Fi(kill)23 b(the)h(curren)n(t)g(ro)n(w)g(or)f(horizon)n(tal)h +(line)291 b Fg(M-S-UP)4242 1346 y Fi(insert)23 b(new)i(ro)n(w)e(ab)r(o) +n(v)n(e)i(the)f(curren)n(t)g(ro)n(w)285 b Fg(M-S-DOWN)4242 +1433 y Fi(insert)23 b(horizon)n(tal)i(line)e(b)r(elo)n(w)h(the)h +(curren)n(t)f(ro)n(w)100 b Fg(C-c)36 b(-)4242 1503 y +Fi(insert)23 b(horizon)n(tal)i(line)e(ab)r(o)n(v)n(e)i(the)g(curren)n +(t)f(ro)n(w)100 b Fg(C-u)36 b(C-c)g(-)4242 1589 y Fd(Regions)4242 +1676 y Fi(cut)25 b(rectangular)f(region)758 b Fg(C-c)36 +b(C-h)g(C-w)4242 1746 y Fi(cop)n(y)25 b(rectangular)f(region)715 +b Fg(C-c)36 b(C-h)g(M-w)4242 1816 y Fi(paste)25 b(rectangular)f(region) +695 b Fg(C-c)36 b(C-h)g(C-y)4242 1885 y Fi(\014ll)23 +b(paragraph)h(across)g(selected)h(cells)399 b Fg(C-c)36 +b(C-q)4242 1972 y Fd(Calculations)4242 2059 y Fi(Except)31 +b(for)e(the)i(summation)f(commands,)h(these)g(need)g(the)g(Emacs)4242 +2129 y(calc)24 b(pac)n(k)l(age)i(installed.)4242 2215 +y(replace)e(curren)n(t)g(\014eld)g(with)g(result)f(of)h(form)n(ula)129 +b Fg(C-c)36 b(=)4242 2285 y Fi(...)30 b(same)24 b(calculation)h(for)e +(rest)g(of)h(column)267 b Fg(C-u)36 b(C-c)g(=)4242 2355 +y Fi(re-apply)23 b(all)g(stored)i(equations)g(to)f(curren)n(t)g(line)96 +b Fg(C-c)36 b(*)4242 2425 y Fi(re-apply)23 b(all)g(stored)i(equations)g +(to)f(en)n(tire)g(table)101 b Fg(C-u)36 b(C-c)g(*)4242 +2511 y(TAB)p Fi(,)30 b Fg(RET)f Fi(and)f Fg(C-c)37 b(C-c)28 +b Fi(trigger)h(automatic)g(recalculation)h(in)d(lines)4242 +2581 y(starting)d(with:)31 b Fg(|)36 b(#)f(|)p Fi(.)4242 +2668 y(rotate)25 b(recalculation)f(mark)g(through)h(#)e(*)h(!)31 +b($)140 b Fg(C-#)4242 2755 y Fi(displa)n(y)24 b(column)g(n)n(um)n(b)r +(er)f(cursor)h(is)f(in)354 b Fg(C-c)36 b(?)4242 2824 +y Fi(sum)23 b(n)n(um)n(b)r(ers)h(in)f(curren)n(t)i(column/rectangle)143 +b Fg(C-c)36 b(+)4242 2908 y Fi(cop)n(y)25 b(do)n(wn)f(with)g(incremen)n +(t)625 b Fg(S-RET)5857 2885 y Ff(4)4242 2995 y Fi(A)27 +b(form)n(ula)g(can)h(also)f(b)r(e)h(t)n(yp)r(ed)g(directly)g(in)n(to)g +(in)n(to)f(a)h(\014eld.)42 b(It)28 b(will)4242 3065 y(b)r(e)c(executed) +i(b)n(y)e Fg(TAB)p Fi(,)g Fg(RET)h Fi(and)f Fg(C-c)36 +b(C-c)p Fi(:)4242 3152 y(Example:)31 b(Add)24 b(Col1)g(and)g(Col2)522 +b Fg(=$1+$2)4242 3221 y Fi(...)30 b(with)24 b(prin)n(tf)f(format)g(sp)r +(eci\014cation)387 b Fg(=$1+$2;\045.2f)4242 3291 y Fi(...)30 +b(with)24 b(constan)n(ts)h(from)e(constan)n(ts.el)352 +b Fg(=$1/$c/$cm)4242 3361 y Fi(Apply)24 b(curren)n(t)g(\(for)f(this)h +(column\))g(form)n(ula)200 b Fg(=)4242 3431 y Fi(Sum)24 +b(all)f(n)n(um)n(b)r(ers)g(ab)r(o)n(v)n(e/left)j(of)d(cursor)292 +b Fg(=sum)36 b(/)g(=sumh)4242 3500 y Fi(Sum)24 b(just)f(the)i(3)f +(\014elds)f(closest)i(to)f(cursor)279 b Fg(=sum3/=sumh3)4242 +3587 y Fd(Miscellaneous)4242 3674 y Fi(toggle)25 b(visibilit)n(y)d(of)i +(v)n(ertical)g(lines)474 b Fg(C-c)36 b(|)4242 3744 y +Fi(exp)r(ort)25 b(as)e(tab-separated)j(\014le)370 b Fg(M-x)36 +b(org-table-export)4242 3813 y Fi(imp)r(ort)23 b(tab-separated)j +(\014le)447 b Fg(M-x)36 b(org-table-import)4242 3900 +y Fd(T)-7 b(ables)27 b(created)f(with)h(the)g Fg(table.el)i +Fd(pac)n(k)-5 b(age)4242 3987 y Fi(insert)23 b(a)h(new)g +Fg(table.el)i Fi(table)582 b Fg(C-c)36 b(~)4242 4057 +y Fi(recognize)25 b(existing)f(table.el)g(table)474 b +Fg(C-c)36 b(C-c)4242 4126 y Fi(con)n(v)n(ert)25 b(table)f(\(Org-mo)r +(de)g Fe($)f Fi(table.el\))312 b Fg(C-c)36 b(~)p eop +end +%%Page: 2 2 +TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45 +b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h +(3.12\))-150 -36 y Fh(Timeline)37 b(and)g(Agenda)-150 +120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 +b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793 +b Fg(C-u)36 b(C-c)g(C-r)-150 288 y Fi(add)24 b(curren)n(t)g(\014le)g +(to)g(y)n(our)g(agenda)483 b Fg(C-c)36 b([)-150 358 y +Fi(remo)n(v)n(e)24 b(curren)n(t)g(\014le)g(from)f(y)n(our)g(agenda)299 +b Fg(C-c)36 b(])-150 438 y Fi(compile)24 b(agenda)h(for)e(the)h(curren) +n(t)g(w)n(eek)320 b Fg(C-c)36 b(a)1466 415 y Ff(2)-150 +508 y Fi(agenda)25 b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 +b(C-o)-150 641 y Fi(T)-6 b(o)24 b(set)g(category)h(for)e(curren)n(t)h +(\014le,)g(add)g(line)1082 617 y Ff(3)1119 641 y Fi(:)-150 +715 y Fg(#+CATEGORY:)38 b(MyCateg)-150 814 y Fd(Commands)26 +b(a)n(v)-5 b(ailable)25 b(in)i(an)g(agenda)g(bu\013er)-150 +912 y Fi(The)g(agenda)h(bu\013er)f(is)f(electric:)38 +b(single)26 b(k)n(ey)i(presses)e(execute)j(com-)-150 +982 y(mands.)-150 1080 y Fd(View)e(org)f(\014le)-150 +1178 y Fi(sho)n(w)e(original)f(lo)r(cation)h(of)g(item)524 +b Fg(SPC)-150 1248 y Fi(...)30 b(also)24 b(a)n(v)l(ailable)g(with)781 +b Fg(mouse-3)-150 1318 y Fi(sho)n(w)24 b(and)g(recen)n(ter)h(windo)n(w) +626 b Fg(l)-150 1388 y Fi(goto)25 b(original)e(lo)r(cation)h(in)g +(other)g(windo)n(w)260 b Fg(TAB)-150 1457 y Fi(...)30 +b(also)24 b(a)n(v)l(ailable)g(with)781 b Fg(mouse-2)-150 +1527 y Fi(goto)25 b(original)e(lo)r(cation,)h(delete)h(other)f(windo)n +(ws)91 b Fg(RET)-150 1597 y Fi(toggle)25 b(follo)n(w-mo)r(de)861 +b Fg(f)-150 1695 y Fd(Change)27 b(displa)n(y)-150 1794 +y Fi(delete)e(other)f(windo)n(ws)791 b Fg(o)-150 1863 +y Fi(switc)n(h)24 b(to)g(w)n(eekly)h(view)767 b Fg(w)-150 +1933 y Fi(switc)n(h)24 b(to)g(daily)g(view)822 b Fg(d)-150 +2003 y Fi(toggle)25 b(inclusion)e(of)h(diary)f(en)n(tries)473 +b Fg(D)-150 2072 y Fi(toggle)25 b(time)f(grid)f(for)g(daily)g(sc)n +(hedule)388 b Fg(g)-150 2142 y Fi(refresh)23 b(agenda)i(bu\013er)f +(with)g(an)n(y)g(c)n(hanges)239 b Fg(r)-150 2212 y Fi(displa)n(y)24 +b(the)g(follo)n(wing)f Fg(org-agenda-ndays)221 b(RIGHT)-150 +2282 y Fi(displa)n(y)24 b(the)g(previous)g Fg(org-agenda-ndays)238 +b(LEFT)-150 2351 y Fi(goto)25 b(to)r(da)n(y)1110 b Fg(.)-150 +2450 y Fd(Remote)27 b(editing)-150 2548 y Fi(digit)d(argumen)n(t)984 +b Fg(0-9)-150 2646 y Fi(c)n(hange)25 b(state)g(of)f(curren)n(t)g(TODO)f +(item)333 b Fg(t)-150 2716 y Fi(set)24 b(priorit)n(y)f(of)g(curren)n(t) +i(item)612 b Fg(p)-150 2798 y Fi(raise)23 b(priorit)n(y)g(of)g(curren)n +(t)i(item)557 b Fg(S-UP)1430 2775 y Ff(4)-150 2879 y +Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n(t)g(item)538 +b Fg(S-DOWN)1500 2855 y Ff(4)-150 2949 y Fi(displa)n(y)24 +b(w)n(eigh)n(ted)h(priorit)n(y)e(of)g(curren)n(t)h(item)189 +b Fg(P)-150 3058 y Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h +(earlier)315 b Fg(S-LEFT)1500 3034 y Ff(4)-150 3138 y +Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h(later)367 +b Fg(S-RIGHT)1535 3115 y Ff(4)-150 3208 y Fi(c)n(hange)25 +b(timestamp)g(to)f(to)r(da)n(y)598 b Fg(>)-150 3306 y +Fi(insert)23 b(new)i(en)n(try)f(in)n(to)g(diary)612 b +Fg(i)-150 3405 y Fd(Calendar)26 b(commands)-150 3503 +y Fi(\014nd)e(agenda)h(cursor)f(date)g(in)g(calendar)350 +b Fg(c)-150 3573 y Fi(compute)25 b(agenda)g(for)e(calendar)i(cursor)e +(date)180 b Fg(c)-150 3642 y Fi(sho)n(w)24 b(phases)g(of)f(the)i(mo)r +(on)669 b Fg(M)-150 3712 y Fi(sho)n(w)24 b(sunrise/sunset)g(times)636 +b Fg(S)-150 3782 y Fi(sho)n(w)24 b(holida)n(ys)1014 b +Fg(H)-150 3852 y Fi(con)n(v)n(ert)25 b(date)g(to)f(other)g(calendars) +478 b Fg(C)-150 3950 y Fd(Quit)27 b(and)g(Exit)-150 4048 +y Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376 +b Fg(q)-150 4118 y Fi(exit)24 b(agenda,)h(remo)n(v)n(e)f(all)f(agenda)i +(bu\013ers)258 b Fg(x)2046 -364 y Fh(Exp)s(orting)2046 +-208 y Fi(Exp)r(orting)32 b(creates)g(\014les)g(with)f(extensions)i +Fc(.txt)k Fi(and)32 b Fc(.html)38 b Fi(in)31 b(the)2046 +-139 y(curren)n(t)24 b(directory)-6 b(.)2046 -40 y(exp)r(ort)25 +b(as)e(ASCI)r(I)i(\014le)820 b Fg(C-c)36 b(C-x)g(a)2046 +29 y Fi(exp)r(ort)25 b(visible)e(text)i(only)e(\(e.g.)32 +b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046 +99 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36 +b(C-x)g(h)2046 169 y Fi(exp)r(ort)25 b(as)e(HTML)g(and)h(op)r(en)h(in)e +(bro)n(wser)266 b Fg(C-c)36 b(C-x)g(C-h)2046 239 y Fi(pre\014x)24 +b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182 +b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 337 y Fi(insert)23 b(template)j(of)d +(exp)r(ort)h(options)423 b Fg(C-c)36 b(C-x)g(t)2046 435 +y Fi(toggle)25 b(\014xed)f(width)g(for)f(line)g(or)h(region)346 +b Fg(C-c)36 b(:)2046 534 y Fd(HTML)27 b(formatting)2046 +632 y Fi(mak)n(e)d(w)n(ords)g Fd(b)r(old)897 b Fg(*bold*)2046 +702 y Fi(mak)n(e)24 b(w)n(ords)g Fc(italic)898 b Fg(/italic/)2046 +771 y Fi(mak)n(e)24 b(w)n(ords)g(underlined)p 2433 784 +326 4 v 728 w Fg(_underlined_)2046 841 y Fi(sub-)f(and)i(sup)r +(erscripts)781 b Fg(x^3,)36 b(J_dust)2046 911 y Fi(T)2085 +925 y(E)2124 911 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37 +b(\\to)2046 981 y Fi(t)n(yp)r(eset)25 b(lines)f(in)f(\014xed)h(width)g +(fon)n(t)460 b Fg(start)37 b(with)f(:)2046 1050 y Fi(tables)24 +b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37 +b(with)f(|)2046 1120 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640 +b Fg(http:...)73 b(etc)2046 1190 y Fi(include)24 b(h)n(tml)g(tags)905 +b Fg(@<b>...@</b>)2046 1288 y Fd(Exp)r(ort)27 b(options)2046 +1386 y Fi(Include)20 b(additional)f(information)g(for)f(exp)r(ort)i(b)n +(y)f(putting)h(these)g(an)n(y-)2046 1456 y(where)g(in)f(the)h(org)g +(\014le.)30 b(Use)19 b Fg(M-TAB)i Fi(completion)f(to)g(mak)n(e)h(sure)e +(to)h(get)2046 1526 y(the)i(righ)n(t)e(k)n(eyw)n(ords.)31 +b Fg(M-TAB)22 b Fi(again)f(just)g(after)g(k)n(eyw)n(ord)g(is)g +(complete)2046 1596 y(inserts)i(examples.)2046 1694 y(the)i(title)f(to) +g(b)r(e)g(sho)n(wn)797 b Fg(#+TITLE:)2046 1764 y Fi(the)25 +b(author)1115 b Fg(#+AUTHOR:)2046 1834 y Fi(authors)24 +b(email)f(address)769 b Fg(#+EMAIL:)2046 1903 y Fi(language)25 +b(co)r(de)g(for)e(h)n(tml)732 b Fg(#+LANGUAGE:)2046 1973 +y Fi(free)23 b(text)i(description)f(of)g(\014le)626 b +Fg(#+TEXT:)2046 2043 y Fi(...)30 b(whic)n(h)24 b(can)g(carry)g(o)n(v)n +(er)g(m)n(ultiple)f(lines)271 b Fg(#+TEXT:)2046 2112 +y Fi(settings)25 b(for)d(the)j(exp)r(ort)f(pro)r(cess)g(-)f(see)h(b)r +(elo)n(w)145 b Fg(#+OPTIONS:)2046 2211 y Fd(Settings)26 +b(for)h(the)g(OPTIONS)i(line)2046 2309 y Fi(set)24 b(n)n(um)n(b)r(er)g +(of)f(headline)i(lev)n(els)e(for)g(exp)r(ort)219 b Fg(H:2)2046 +2379 y Fi(turn)24 b(on/o\013)h(section)f(n)n(um)n(b)r(ers)577 +b Fg(num:t)2046 2449 y Fi(turn)24 b(on/o\013)h(table)f(of)f(con)n(ten)n +(ts)564 b Fg(toc:t)2046 2518 y Fi(turn)24 b(on/o\013)h(linebreak)f +(preserv)l(ation)395 b Fg(\\n:nil)2046 2588 y Fi(turn)24 +b(on/o\013)h(quoted)g(h)n(tml)f(tags)548 b Fg(@:t)2046 +2658 y Fi(turn)24 b(on/o\013)h(\014xed)f(width)g(sections)464 +b Fg(::t)2046 2728 y Fi(turn)24 b(on/o\013)h(tables)893 +b Fg(|:t)2046 2797 y Fi(turn)20 b(on/o\013)h(T)2444 2811 +y(E)2484 2797 y(X)e(syn)n(tax)i(for)f(sub/sup)r(er-scripts)70 +b Fg(^:t)2046 2867 y Fi(turn)24 b(on/o\013)h(emphasised)f(text)578 +b Fg(*:nil)2046 2937 y Fi(turn)24 b(on/o\013)h(T)2452 +2951 y(E)2491 2937 y(X)e(macros)703 b Fg(TeX:t)2046 3035 +y Fd(Commen)n(ts:)35 b(T)-7 b(ext)27 b(not)f(b)r(eing)i(exp)r(orted) +2046 3133 y Fi(T)-6 b(ext)22 b(b)r(efore)f(the)h(\014rst)f(headline)g +(is)f(not)i(considered)g(part)f(of)g(the)h(do)r(c-)2046 +3203 y(umen)n(t)29 b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44 +b(Lines)28 b(starting)g(with)g Fg(#)2046 3273 y Fi(are)j(commen)n(ts)g +(and)h(are)e(not)i(exp)r(orted.)53 b(Subtrees)32 b(whose)f(header)2046 +3343 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)2046 +3441 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285 +b Fg(C-c)36 b(;)2046 3644 y Fh(Completion)2046 3800 y +Fi(In-bu\013er)e(completion)g(completes)h(TODO)d(k)n(eyw)n(ords)i(at)g +(headline)2046 3869 y(start,)26 b(T)-6 b(eX)26 b(macros)f(after)h(\\)p +Fg(\\)p Fi(",)h(option)f(k)n(eyw)n(ords)g(after)g(\\)p +Fg(#-)p Fi(",)h(k)n(ey-)2046 3939 y(w)n(ord)d(form)n(ulas)e(after)i(\\) +p Fg(=)p Fi(",)g(and)g(dictionary)g(w)n(ords)g(elsewhere.)2046 +4037 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702 b Fg(M-TAB)4242 +-364 y Fh(Calendar)36 b(and)h(Diary)i(In)m(tegration)4242 +-208 y Fi(T)-6 b(o)35 b(include)g(en)n(tries)g(from)f(the)i(Emacs)f +(diary)g(in)f(y)n(our)h(Org-mo)r(de)4242 -139 y(agenda:)4242 +-40 y Fg(\(setq)i(org-agenda-include-diary)42 b(t\))4242 +58 y Fi(T)-6 b(o)24 b(include)h(y)n(our)f(Org-mo)r(de)f(agenda)j(in)d +(y)n(our)h(normal)g(diary)-6 b(,)23 b(mak)n(e)4242 128 +y(sure)i(y)n(ou're)g(using)g(the)h(fancy)g(diary)f(displa)n(y)g(and)h +(in)f(y)n(our)g Fg(~/diary)4242 197 y Fi(\014le)f(add)4242 +296 y Fg(&\045\045\(org-diary\))4242 394 y Fi(to)30 b(include)g(all)f +(the)h(\014les)f(listed)h(in)f Fg(org-agenda-files)p +Fi(.)53 b(F)-6 b(or)29 b(more)4242 464 y(selectiv)n(e)c(\014le)e +(inclusion)h(use)g(a)g(line)f(for)g(eac)n(h)i(\014le:)4242 +562 y Fg(&\045\045\(org-diary\))39 b(~/path/to/some/org-fil)q(e.or)q(g) +4242 767 y Fh(Remem)m(b)s(er-mo)s(de)f(In)m(tegration)4242 +923 y Fi(See)32 b(the)g(man)n(ual)g(for)e(ho)n(w)i(to)g(mak)n(e)g +(remem)n(b)r(er.el)f(use)g(Org-mo)r(de)4242 992 y(links)25 +b(and)g(\014les.)36 b(The)25 b(note-\014nishing)h(command)g +Fg(C-c)36 b(C-c)26 b Fi(will)e(\014rst)4242 1062 y(prompt)g(for)f(an)h +(org)f(\014le.)32 b(In)24 b(the)g(\014le,)g(\014nd)g(a)g(lo)r(cation)g +(with:)4242 1160 y(rotate)h(subtree)f(visibilit)n(y)719 +b Fg(TAB)4242 1230 y Fi(next)25 b(heading)1043 b Fg(DOWN)4242 +1300 y Fi(previous)24 b(heading)921 b Fg(UP)4242 1398 +y Fi(Insert)24 b(the)h(note)g(with)e(one)i(of)e(the)i(follo)n(wing:) +4242 1497 y(as)f(sublev)n(el)g(of)f(heading)i(at)f(cursor)468 +b Fg(RET)4242 1566 y Fi(righ)n(t)24 b(here)g(\(cursor)f(not)i(on)f +(heading\))388 b Fg(RET)4242 1636 y Fi(b)r(efore)24 b(curren)n(t)g +(heading)745 b Fg(LEFT)4242 1706 y Fi(after)24 b(curren)n(t)g(heading) +790 b Fg(RIGHT)4242 1776 y Fi(shortcut)20 b(to)f(end)h(of)f(bu\013er)g +(\(cursor)g(at)g(buf-start\))71 b Fg(RET)4242 1845 y +Fi(Ab)r(ort)1256 b Fg(q)4242 2050 y Fh(CUA)38 b(and)f(p)s(c-select)g +(compatibilit)m(y)4242 2206 y Fi(Con\014gure)31 b(the)f(v)l(ariable)g +Fg(org-CUA-compatibility)35 b Fi(to)c(mak)n(e)f(Org-)4242 +2276 y(mo)r(de)38 b(a)n(v)n(oid)g(the)g Fg(S-<cursor>)i +Fi(bindings)d(used)h(b)n(y)g(these)g(mo)r(des.)4242 2345 +y(When)h(set,)j(Org-mo)r(de)c(will)e(c)n(hange)k(the)f(follo)n(wing)e +(k)n(eybindings)4242 2415 y(\(also)25 b(in)f(the)h(agenda)h(bu\013er,)e +(but)h(not)g(during)f(date)i(selection\).)34 b(See)4242 +2499 y(note)25 b(mark)e(four)4705 2476 y Ff(4)4766 2499 +y Fi(throughout)i(the)g(reference)f(card.)4242 2667 y +Fg(S-UP)142 b Fe(!)35 b Fg(M-p)460 b(S-DOWN)72 b Fe(!)35 +b Fg(M-n)4242 2737 y(S-LEFT)72 b Fe(!)35 b Fg(M--)460 +b(S-RIGHT)37 b Fe(!)e Fg(M-+)4242 2807 y(S-RET)107 b +Fe(!)35 b Fg(C-S-RET)4242 2991 y Fh(Notes)4242 3123 y +Ff(1)4307 3146 y Fi(The)28 b(six)f(autoload)i(forms)e(are)h(only)g +(needed)h(if)e(Org-mo)r(de)g(is)g(not)4242 3216 y(part)d(of)f(Emacs,)h +(or)f(an)h(XEmacs)g(pac)n(k)l(age.)4242 3302 y Ff(2)4313 +3325 y Fi(This)34 b(is)f(only)h(a)h(suggestion)g(for)e(a)h(binding)h +(of)e(this)h(command.)4242 3395 y(Cho)r(ose)24 b(y)n(ou)h(o)n(wn)f(k)n +(ey)g(as)g(sho)n(wn)g(under)g(INST)-6 b(ALLA)g(TION.)4242 +3481 y Ff(3)4300 3504 y Fi(After)21 b(c)n(hanging)h(a)f +Fg(#+KEYWORD)j Fi(line,)d(press)f Fg(C-c)37 b(C-c)21 +b Fi(with)g(the)h(cur-)4242 3574 y(sor)h(still)g(in)g(a)h(line)f(to)h +(mak)n(e)h(Org-mo)r(de)e(notice)i(the)f(c)n(hange.)4242 +3659 y Ff(4)4303 3683 y Fi(Keybinding)g(a\013ected)i(b)n(y)e +Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838 +3768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21 +b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826 +y(v3.12)h(for)h(Org-Mo)r(de)e(3.12,)i(2005)4912 3882 +y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3937 y(based)j(on)g(refcard)g +(design)g(and)f(format)i(b)n(y)f(Stephen)f(Gildea)4242 +4022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e +(distribute)f(copies)j(of)f(this)f(card)h(pro-)4242 4077 +y(vided)23 b(the)h(cop)n(yrigh)n(t)h(notice)g(and)f(this)f(p)r +(ermission)h(notice)g(are)h(preserv)n(ed)g(on)4242 4133 +y(all)20 b(copies.)p eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/etc/orgcard.tex b/etc/orgcard.tex new file mode 100644 index 00000000000..6814b4924bd --- /dev/null +++ b/etc/orgcard.tex @@ -0,0 +1,737 @@ +% Reference Card for Org Mode 3.12 +% +%**start of header +\newcount\columnsperpage + +% This file can be printed with 1, 2, or 3 columns per page (see below). +% At the moment this card works quite nicely in 3 column format and +% currently takes most of 2 pages. It is thus suited to producing one +% double-side page when printed. + +% There are a couple of tweaks in the format of this card which make it work +% slightly better on A4 paper. The changes due, I think, to Stephen Eglen, +% are commented below. Revert the changes if you want letter sized paper. + +% Try running something like +% tex org-mode-ref.tex; dvips -t landscape org-mode-ref.dvi +% to print the card + +\columnsperpage=3 + +% Copyright (c) 2005 Free Software Foundation + +% GNU Emacs is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2, or (at your option) +% any later version. + +% GNU Emacs is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. + +% You should have received a copy of the GNU General Public License +% along with GNU Emacs; see the file COPYING. If not, write to +% the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +% Boston, MA 02111-1307, USA. + +% This file is intended to be processed by plain TeX (TeX82). +% +% The final reference card has six columns, three on each side. +% This file can be used to produce it in any of three ways: +% 1 column per page +% produces six separate pages, each of which needs to be reduced to 80%. +% This gives the best resolution. +% 2 columns per page +% produces three already-reduced pages. +% You will still need to cut and paste. +% 3 columns per page +% produces two pages which must be printed sideways to make a +% ready-to-use 8.5 x 11 inch reference card. +% For this you need a dvi device driver that can print sideways. +% Which mode to use is controlled by setting \columnsperpage above. +% +% Author: +% Stephen Gildea +% Internet: gildea@stop.mail-abuse.org +% +% Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik +% for their many good ideas. + +\def\orgversionnumber{3.12} +\def\year{2005} + +\def\shortcopyrightnotice{\vskip 1ex plus 2 fill + \centerline{\small \copyright\ 2004, 2005\ Free Software Foundation, Inc. + Permissions on back. v\orgversionnumber}} + +\def\copyrightnotice{ +\vskip 1ex plus 100 fill\begingroup\small +\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.} +\centerline{v\orgversionnumber{} for Org-Mode \orgversionnumber{}, \year} +\centerline{Author: Philip Rooke} +\centerline{based on refcard design and format by Stephen Gildea} + +Permission is granted to make and distribute copies of +this card provided the copyright notice and this permission notice +are preserved on all copies. + +\endgroup} + +% make \bye not \outer so that the \def\bye in the \else clause below +% can be scanned without complaint. +\def\bye{\par\vfill\supereject\end} + +\newdimen\intercolumnskip %horizontal space between columns +\newbox\columna %boxes to hold columns already built +\newbox\columnb + +\def\ncolumns{\the\columnsperpage} + +\message{[\ncolumns\space + column\if 1\ncolumns\else s\fi\space per page]} + +\def\scaledmag#1{ scaled \magstep #1} + +% This multi-way format was designed by Stephen Gildea October 1986. +% Note that the 1-column format is fontfamily-independent. +\if 1\ncolumns %one-column format uses normal size + \hsize 4in + \vsize 10in + \voffset -.7in + \font\titlefont=\fontname\tenbf \scaledmag3 + \font\headingfont=\fontname\tenbf \scaledmag2 + \font\smallfont=\fontname\sevenrm + \font\smallsy=\fontname\sevensy + + \footline{\hss\folio} + \def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}} +\else %2 or 3 columns uses prereduced size + \hsize 3.2in + +% FIXME - Try to make things more A4 friendly +% \vsize 7.95in + \vsize 7.65in +% \hoffset -.75in + \hoffset -.25in + \voffset -.745in + \font\titlefont=cmbx10 \scaledmag2 + \font\headingfont=cmbx10 \scaledmag1 + \font\smallfont=cmr6 + \font\smallsy=cmsy6 + \font\eightrm=cmr8 + \font\eightbf=cmbx8 + \font\eightit=cmti8 + \font\eighttt=cmtt8 + \font\eightmi=cmmi8 + \font\eightsy=cmsy8 + \textfont0=\eightrm + \textfont1=\eightmi + \textfont2=\eightsy + \def\rm{\eightrm} + \def\bf{\eightbf} + \def\it{\eightit} + \def\tt{\eighttt} + +% FIXME - Try to make things more A4 friendly +% \normalbaselineskip=.8\normalbaselineskip + \normalbaselineskip=.7\normalbaselineskip + \normallineskip=.8\normallineskip + \normallineskiplimit=.8\normallineskiplimit + \normalbaselines\rm %make definitions take effect + + \if 2\ncolumns + \let\maxcolumn=b + \footline{\hss\rm\folio\hss} + \def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}} + \else \if 3\ncolumns + \let\maxcolumn=c + \nopagenumbers + \else + \errhelp{You must set \columnsperpage equal to 1, 2, or 3.} + \errmessage{Illegal number of columns per page} + \fi\fi + + \intercolumnskip=.46in + \def\abc{a} + \output={% %see The TeXbook page 257 + % This next line is useful when designing the layout. + %\immediate\write16{Column \folio\abc\space starts with \firstmark} + \if \maxcolumn\abc \multicolumnformat \global\def\abc{a} + \else\if a\abc + \global\setbox\columna\columnbox \global\def\abc{b} + %% in case we never use \columnb (two-column mode) + \global\setbox\columnb\hbox to -\intercolumnskip{} + \else + \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi} + \def\multicolumnformat{\shipout\vbox{\makeheadline + \hbox{\box\columna\hskip\intercolumnskip + \box\columnb\hskip\intercolumnskip\columnbox} + \makefootline}\advancepageno} + \def\columnbox{\leftline{\pagebody}} + + \def\bye{\par\vfill\supereject + \if a\abc \else\null\vfill\eject\fi + \if a\abc \else\null\vfill\eject\fi + \end} +\fi + +% we won't be using math mode much, so redefine some of the characters +% we might want to talk about +%\catcode`\^=12 +\catcode`\_=12 + +% we also need the tilde, for file names. +\catcode`\~=12 + +\chardef\\=`\\ +\chardef\{=`\{ +\chardef\}=`\} + +\hyphenation{mini-buf-fer} + +\parindent 0pt +\parskip 1ex plus .5ex minus .5ex + +\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip} + +% newcolumn - force a new column. Use sparingly, probably only for +% the first column of a page, which should have a title anyway. +\outer\def\newcolumn{\vfill\eject} + +% title - page title. Argument is title text. +\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex} + +% section - new major section. Argument is section name. +\outer\def\section#1{\par\filbreak + \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}% + \vskip 2ex plus 1ex minus 1.5ex} + +\newdimen\keyindent + +% beginindentedkeys...endindentedkeys - key definitions will be +% indented, but running text, typically used as headings to group +% definitions, will not. +\def\beginindentedkeys{\keyindent=1em} +\def\endindentedkeys{\keyindent=0em} +\endindentedkeys + +% paralign - begin paragraph containing an alignment. +% If an \halign is entered while in vertical mode, a parskip is never +% inserted. Using \paralign instead of \halign solves this problem. +\def\paralign{\vskip\parskip\halign} + +% \<...> - surrounds a variable name in a code example +\def\<#1>{{\it #1\/}} + +% kbd - argument is characters typed literally. Like the Texinfo command. +\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows + +% beginexample...endexample - surrounds literal text, such a code example. +% typeset in a typewriter font with line breaks preserved +\def\beginexample{\par\leavevmode\begingroup + \obeylines\obeyspaces\parskip0pt\tt} +{\obeyspaces\global\let =\ } +\def\endexample{\endgroup} + +% key - definition of a key. +% \key{description of key}{key-name} +% prints the description left-justified, and the key-name in a \kbd +% form near the right margin. +\def\key#1#2{\leavevmode\hbox to \hsize{\vtop + {\hsize=.75\hsize\rightskip=1em + \hskip\keyindent\relax#1}\kbd{#2}\hfil}} + +\newbox\metaxbox +\setbox\metaxbox\hbox{\kbd{M-x }} +\newdimen\metaxwidth +\metaxwidth=\wd\metaxbox + +% metax - definition of a M-x command. +% \metax{description of command}{M-x command-name} +% Tries to justify the beginning of the command name at the same place +% as \key starts the key name. (The "M-x " sticks out to the left.) +\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize + {\hskip\keyindent\relax#1\hfil}% + \hskip -\metaxwidth minus 1fil + \kbd{#2}\hfil}} + +% threecol - like "key" but with two key names. +% for example, one for doing the action backward, and one for forward. +\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\hfil\quad + &\kbd{#3}\hfil\quad\cr} + +%**end of header + + +\title{Org-Mode Reference Card (1/2)} + +\centerline{(for version \orgversionnumber)} + +\section{Getting Started} +% +Put the following in your \kbd{~/.emacs}$^1$ +\vskip -1mm +\beginexample% +(autoload 'org-mode "org" "Org mode" t) +(autoload 'org-diary "org" "Org mode diary entries") +(autoload 'org-agenda "org" "Agenda from Org files" t) +(autoload 'org-store-link "org" "Store org link" t) +(autoload 'orgtbl-mode "org" "Orgtbl minor mode" t) +(autoload 'turn-on-orgtbl "org" "Orgtbl minor mode") +(add-to-list 'auto-mode-alist '("\\\\.org\$" . org-mode)) +(define-key global-map "\\C-cl" 'org-store-link)$^2$ +(define-key global-map "\\C-ca" 'org-agenda)$^2$ +\endexample +% +\metax{For the many customization options try}{M-x org-customize} +\metax{To read the on-line documentation try}{M-x org-info} + +\section{Visibility Cycling} + +\key{rotate current subtree between states}{TAB} +\key{rotate entire buffer between states}{S-TAB} +\key{show the whole file}{C-c C-a} +%\key{show branches}{C-c C-k} + +\section{Motion} + +\key{next heading}{C-c C-n} +\key{previous heading}{C-c C-p} +\key{next heading, same level}{C-c C-f} +\key{previous heading, same level}{C-c C-b} +\key{backward to higher level heading}{C-c C-u} +\key{jump to another place in document}{C-c C-j} + +\section{Structure Editing} + +\key{insert new heading at same level as current}{M-RET} +\key{insert new TODO entry}{M-S-RET} + +\key{promote current heading up one level}{M-LEFT} +\key{demote current heading down one level}{M-RIGHT} +\key{promote current subtree up one level}{M-S-LEFT} +\key{demote current subtree down one level}{M-S-RIGHT} + +\key{move subtree up}{M-S-UP} +\key{move subtree down}{M-S-DOWN} +\key{kill subtree}{C-c C-h C-w} +\key{copy subtree}{C-c C-h M-w} +\key{yank subtree}{C-c C-h C-y} + +\key{archive subtree}{C-c \$} +To set archive location for current file, add a line like$^3$: +\vskip -1mm +\beginexample% +\#+ARCHIVE: archfile::* Archived Tasks +\endexample + +\section{Filtering and Sparse Trees} + +\key{show sparse tree for all matches of a regexp}{C-c /} +\key{view TODO's in sparse tree}{C-c C-v} +\key{create sparse tree with all deadlines due}{C-c C-w} +\key{time sorted view of current org file}{C-c C-r} +\key{agenda for the week}{C-c a$1$} +\key{agenda for date at cursor}{C-c C-o} + +\section{TODO Items} + +\key{rotate the state of the current item}{C-c C-t} +\key{view TODO items in a sparse tree}{C-c C-v} + +\key{set the priority of the current item}{C-c , [ABC]} +\key{remove priority cookie from current item}{C-c , SPC} +\key{raise priority of current item}{S-UP$^4$} +\key{lower priority of current item}{S-DOWN$^4$} + +\vskip 1mm +per-file TODO workflow states: add line(s) like$^3$: +\vskip -1mm +\beginexample% +\#+SEQ_TODO: TODO PROCRASTINATE BLUFF DONE +\endexample +\vskip -1mm +per-file TODO keywords: add line(s) like$^3$: +\vskip -1mm +\beginexample% +\#+TYP_TODO: Phil home work DONE +\endexample + +\section{Timestamps} + +\key{prompt for date and insert timestamp}{C-c .} +\key{like \kbd{C-c} . but insert date and time format}{C-u C-c .} +\key{insert DEADLINE timestamp}{C-c C-d} +\key{insert SCHEDULED timestamp}{C-c C-s} +\key{create sparse tree with all deadlines due}{C-c C-w} +\key{the time between 2 dates in a time range}{C-c C-y} + +\key{change timestamp at cursor by $-1$ day}{S-LEFT$^4$} +\key{change timestamp at cursor by $+1$ day}{S-RIGHT$^4$} +\key{change year/month/day at cursor by $-1$}{S-DOWN$^4$} +\key{change year/month/day at cursor by $+1$}{S-UP$^4$} + +\key{access the calendar for the current date}{C-c >} +\key{insert timestamp matching date in calendar}{C-c <} +\key{access agenda for current date}{C-c C-o} + +\key{While prompted for a date:}{} +\key{... select date in calendar}{mouse-1/RET} +\key{... scroll calendar back/forward one month}{< / >} +\key{... forward/backward one day}{S-LEFT/RIGHT} +\key{... forward/backward one week}{S-UP/DOWN} +\key{... forward/backward one month}{M-S-LEFT/RIGT} + +\section{Links} + +\key{globally store link to the current location}{C-c l$^2$} +\key{insert a link (TAB completes stored links)}{C-c C-l} +\key{insert file link with file name completion}{C-u C-c C-l} + +\key{open link at point}{C-c C-o} +\key{open file links in emacs}{C-u C-c C-o} +\key{open link at point}{mouse-2} +\key{open file links in emacs}{mouse-3} + +{\bf Link types} + +\key{\kbd{<http://www.astro.uva.nl/~dominik>}}{\rm on the web} +\key{\kbd{<mailto:adent@galaxy.net>}}{\rm EMail address} +\key{\kbd{<news:comp.emacs>}}{\rm Usenet group} +\key{\kbd{<file:/home/dominik/img/mars.jpg>}}{\rm file, absolute} +\key{\kbd{<file:papers/last.pdf>}}{\rm file, relative} +\key{\kbd{<file:~/code/main.c:255>}}{\rm file with line nr.} +\key{\kbd{<bbdb:Richard Stallman>}}{\rm BBDB person} +\key{\kbd{<shell:ls *.org>}}{\rm shell command} +\key{\kbd{<gnus:group>}}{\rm GNUS group} +\key{\kbd{<gnus:group\#id>}}{\rm GNUS message} +\key{\kbd{<vm:folder>}}{\rm VM folder} +\key{\kbd{<vm:folder\#id>}}{\rm VM message} +\key{\kbd{<vm://myself@some.where.org/folder\#id>}}{\rm VM remote} +Wanderlust \kbd{<wl:...>} and RMAIL \kbd{<rmail:...>} like VM +%\key{\kbd{<wl:folder>}}{\rm Wanderlust f.} +%\key{\kbd{<wl:folder\#id>}}{\rm Wanderlust m.} +%\key{\kbd{<rmail:folder>}}{\rm RMAIL folder} +%\key{\kbd{<rmail:folder\#id>}}{\rm RMAIL msg} + +\section{Tables} + +%Org-mode has its own built-in intuitive table editor with unique +%capabilities. + +{\bf Creating a table} + +\metax{insert a new Org-mode table}{M-x org-table-create} +\metax{... or just start typing, e.g.}{|Name|Phone|Age RET |- TAB} +\key{convert region to table}{C-c C-c} +\key{... separator at least 3 spaces}{C-3 C-c C-c} +%\key{... prompt for separator regexp}{C-u C-c C-c} + +{\bf Commands available inside tables} + +The following commands work when the cursor is {\it inside a table}. +Outside of tables, the same keys may have other functionality. + +{\bf Re-aligning and field motion} + +\key{re-align the table without moving the cursor}{C-c C-c} +\key{re-align the table, move to next field}{TAB} +\key{move to previous field}{S-TAB} +\key{re-align the table, move to next row}{RET} + +{\bf Row and column editing} + +\key{move the current column left}{M-LEFT} +\key{move the current column right}{M-RIGHT} +\key{kill the current column}{M-S-LEFT} +\key{insert new column to left of cursor position}{M-S-RIGHT} + +\key{move the current row up}{M-UP} +\key{move the current row down}{M-DOWN} +\key{kill the current row or horizontal line}{M-S-UP} +\key{insert new row above the current row}{M-S-DOWN} + +\key{insert horizontal line below the current row}{C-c -} +\key{insert horizontal line above the current row}{C-u C-c -} + +{\bf Regions} + +\key{cut rectangular region}{C-c C-h C-w} +\key{copy rectangular region}{C-c C-h M-w} +\key{paste rectangular region}{C-c C-h C-y} +\key{fill paragraph across selected cells}{C-c C-q} + +{\bf Calculations} + +Except for the summation commands, these need the Emacs calc package +installed. + +\key{replace current field with result of formula}{C-c =} +\key{... same calculation for rest of column}{C-u C-c =} +\key{re-apply all stored equations to current line}{C-c *} +\key{re-apply all stored equations to entire table}{C-u C-c *} + +\kbd{TAB}, \kbd{RET} and \kbd{C-c C-c} trigger automatic recalculation +in lines starting with: {\tt | \# |}. + +\key{rotate recalculation mark through \# * ! \$}{C-\#} + +\key{display column number cursor is in}{C-c ?} +\key{sum numbers in current column/rectangle}{C-c +} +\key{copy down with increment}{S-RET$^4$} + +A formula can also be typed directly into into a field. It will be +executed by \kbd{TAB}, \kbd{RET} and \kbd{C-c C-c}: + +\key{Example: Add Col1 and Col2}{=\$1+\$2} +\key{... with printf format specification}{=\$1+\$2;\%.2f} +\key{... with constants from constants.el}{=\$1/\$c/\$cm} +\key{Apply current (for this column) formula}{=} +\key{Sum all numbers above/left of cursor}{=sum / =sumh} +\key{Sum just the 3 fields closest to cursor}{=sum3/=sumh3} + +{\bf Miscellaneous} + +\key{toggle visibility of vertical lines}{C-c |} +\metax{export as tab-separated file}{M-x org-table-export} +\metax{import tab-separated file}{M-x org-table-import} + +{\bf Tables created with the \kbd{table.el} package} + +\key{insert a new \kbd{table.el} table}{C-c ~} +\key{recognize existing table.el table}{C-c C-c} +\key{convert table (Org-mode $\leftrightarrow$ table.el)}{C-c ~} + +\newcolumn +\title{Org-Mode Reference Card (2/2)} + +\centerline{(for version \orgversionnumber)} + +\section{Timeline and Agenda} + +\key{show timeline of current org file}{C-c C-r} +\key{... include past dates}{C-u C-c C-r} + +\key{add current file to your agenda}{C-c [} +\key{remove current file from your agenda}{C-c ]} +\key{compile agenda for the current week}{C-c a$^2$} +\key{agenda for date at cursor}{C-c C-o} +\vskip 1mm +To set category for current file, add line$^3$: +\vskip -1mm +\beginexample% +\#+CATEGORY: MyCateg +\endexample + +{\bf Commands available in an agenda buffer} + +The agenda buffer is electric: single key presses execute commands. + +{\bf View org file} + +\key{show original location of item}{SPC} +\key{... also available with}{mouse-3} +\key{show and recenter window}{l} +\key{goto original location in other window}{TAB} +\key{... also available with}{mouse-2} +\key{goto original location, delete other windows}{RET} +\key{toggle follow-mode}{f} + +{\bf Change display} + +\key{delete other windows}{o} +\key{switch to weekly view}{w} +\key{switch to daily view}{d} +\key{toggle inclusion of diary entries}{D} +\key{toggle time grid for daily schedule}{g} +\key{refresh agenda buffer with any changes}{r} +\key{display the following \kbd{org-agenda-ndays}}{RIGHT} +\key{display the previous \kbd{org-agenda-ndays}}{LEFT} +\key{goto today}{.} + +{\bf Remote editing} + +\key{digit argument}{0-9} + +\key{change state of current TODO item}{t} +\key{set priority of current item}{p} +\key{raise priority of current item}{S-UP$^4$} +\key{lower priority of current item}{S-DOWN$^4$} +\key{display weighted priority of current item}{P} + +\key{change timestamp to one day earlier}{S-LEFT$^4$} +\key{change timestamp to one day later}{S-RIGHT$^4$} +\key{change timestamp to today}{>} + +\key{insert new entry into diary}{i} + +{\bf Calendar commands} + +\key{find agenda cursor date in calendar}{c} +\key{compute agenda for calendar cursor date}{c} +\key{show phases of the moon}{M} +\key{show sunrise/sunset times}{S} +\key{show holidays}{H} +\key{convert date to other calendars}{C} + +{\bf Quit and Exit} + +\key{quit agenda, remove agenda buffer}{q} +\key{exit agenda, remove all agenda buffers}{x} + +\section{Exporting} + +Exporting creates files with extensions {\it .txt\/} and {\it .html\/} +in the current directory. + +\key{export as ASCII file}{C-c C-x a} +\key{export visible text only (e.g. for printing)}{C-c C-x v} +\key{export as HTML file}{C-c C-x h} +\key{export as HTML and open in browser}{C-c C-x C-h} +\key{prefix arg sets nb. of headline levels, e.g.}{C-3 C-c C-x h} + +\key{insert template of export options}{C-c C-x t} + +\key{toggle fixed width for line or region}{C-c :} + +{\bf HTML formatting} + +\key{make words {\bf bold}}{*bold*} +\key{make words {\it italic}}{/italic/} +\key{make words \underbar{underlined}}{_underlined_} +\key{sub- and superscripts}{x\^{}3, J_dust} +\key{\TeX{}-like macros}{\\alpha, \\to} +\key{typeset lines in fixed width font}{start with :} +\key{tables are exported as HTML tables}{start with |} +\key{links become HTML links}{http:... etc} +\key{include html tags}{@<b>...@</b>} + +{\bf Export options} + +Include additional information for export by putting these anywhere in the +org file. Use {\tt M-TAB} completion to make sure to get the right +keywords. {\tt M-TAB} again just after keyword is complete inserts examples. + +\key{the title to be shown}{\#+TITLE:} +\key{the author}{\#+AUTHOR:} +\key{authors email address}{\#+EMAIL:} +\key{language code for html}{\#+LANGUAGE:} +\key{free text description of file}{\#+TEXT:} +\key{... which can carry over multiple lines}{\#+TEXT:} +\key{settings for the export process - see below}{\#+OPTIONS:} + +{\bf Settings for the OPTIONS line} + +\key{set number of headline levels for export}{H:2} +\key{turn on/off section numbers}{num:t} +\key{turn on/off table of contents}{toc:t} +\key{turn on/off linebreak preservation}{\\n:nil} +\key{turn on/off quoted html tags}{@:t} +\key{turn on/off fixed width sections}{::t} +\key{turn on/off tables}{|:t} +\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t} +\key{turn on/off emphasised text}{*:nil} +\key{turn on/off \TeX\ macros}{TeX:t} + +{\bf Comments: Text not being exported} + +Text before the first headline is not considered part of the document +and is therefore never exported. +Lines starting with \kbd{\#} are comments and are not exported. +Subtrees whose header starts with COMMENT are never exported. + +\key{toggle COMMENT keyword on entry}{C-c ;} + +\section{Completion} + +In-buffer completion completes TODO keywords at headline start, TeX +macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', +keyword formulas after ``{\tt =}'', and dictionary words elsewhere. + +\key{Complete word at point}{M-TAB} + +\newcolumn + +\section{Calendar and Diary Integration} + +To include entries from the Emacs diary in your Org-mode agenda: +\beginexample% +(setq org-agenda-include-diary t) +\endexample + +To include your Org-mode agenda in your normal diary, make sure you're +using the fancy diary display +% +%\beginexample% +%(add-hook 'diary-display-hook 'fancy-diary-display) +%\endexample +% +and in your \kbd{~/diary} file add + +\beginexample% +\&\%\%(org-diary) +\endexample + +to include all the files listed in \kbd{org-agenda-files}. For more +selective file inclusion use a line for each file: + +\beginexample% +\&\%\%(org-diary) ~/path/to/some/org-file.org +\endexample + +\section{Remember-mode Integration} + +See the manual for how to make remember.el use Org-mode links and +files. The note-finishing command \kbd{C-c C-c} will first prompt for +an org file. In the file, find a location with: + +\key{rotate subtree visibility}{TAB} +\key{next heading}{DOWN} +\key{previous heading}{UP} + +Insert the note with one of the following: + +\key{as sublevel of heading at cursor}{RET} +\key{right here (cursor not on heading)}{RET} +\key{before current heading}{LEFT} +\key{after current heading}{RIGHT} +\key{shortcut to end of buffer (cursor at buf-start)}{RET} +\key{Abort}{q} + +\section{CUA and pc-select compatibility} + +Configure the variable {\tt org-CUA-compatibility} to make Org-mode +avoid the \kbd{S-<cursor>} bindings used by these modes. When set, +Org-mode will change the following keybindings (also in the agenda +buffer, but not during date selection). See note mark four$^4$ +throughout the reference card. +%\vskip-mm +\beginexample +S-UP $\to$ M-p S-DOWN $\to$ M-n +S-LEFT $\to$ M-- S-RIGHT $\to$ M-+ +S-RET $\to$ C-S-RET +\endexample + +\section{Notes} +$^1$ The six autoload forms are only needed if Org-mode is not part of +Emacs, or an XEmacs package. + +$^2$ This is only a suggestion for a binding of this command. Choose +you own key as shown under INSTALLATION. + +$^3$ After changing a \kbd{\#+KEYWORD} line, press \kbd{C-c C-c} with +the cursor still in a line to make Org-mode notice the change. + +$^4$ Keybinding affected by {\tt org-CUA-compatibility}. + +\copyrightnotice + +\bye + +% Local variables: +% compile-command: "tex ord-mode-ref" +% TeX-master: t +% End: + +% arch-tag: 139f6750-5cfc-49ca-92b5-237fe5795290 diff --git a/leim/ChangeLog b/leim/ChangeLog index 551d7e1cfda..f3cfd9f7bba 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,8 @@ +2005-06-28 Kenichi Handa <handa@m17n.org> + + * leim-ext.el: Add rules for inserting full-width space for + quail/Punct and quail/Punct-b5. + 2005-06-04 Eli Zaretskii <eliz@gnu.org> * makefile.w32-in (distclean): Fix a typo (colon was after diff --git a/leim/leim-ext.el b/leim/leim-ext.el index ad5d22281d8..c15bfaa09e0 100644 --- a/leim/leim-ext.el +++ b/leim/leim-ext.el @@ -34,6 +34,12 @@ (eval-after-load "quail/PY-b5" '(quail-defrule "ling2" ?$(0!r(B nil t)) +;; Enable inputting full-width space (U+3000). +(eval-after-load "quail/Punct" + '(quail-defrule " " ?$A!!(B nil t)) +(eval-after-load "quail/Punct-b5" + '(quail-defrule " " ?$(0!!(B nil t)) + (autoload 'ucs-input-activate "quail/uni-input" "Activate UCS input method. With arg, activate UCS input method if and only if arg is positive. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d498e15f1d2..a446a343692 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,13 +1,248 @@ +2005-06-29 Juri Linkov <juri@jurta.org> + + * faces.el (default-frame-background-mode): New internal variable. + (frame-set-background-mode): Use it. + + * startup.el (normal-top-level): Set default-frame-background-mode + instead of frame-background-mode. Before setting it, test for its + nil value. Remove tests for frame-background-mode and frame + parameter `reverse'. Add test for "unspecified-fg". + + * term/xterm.el (xterm-rxvt-set-background-mode): + * term/rxvt.el (rxvt-set-background-mode): + Set default-frame-background-mode instead of frame-background-mode. + +2005-06-29 Juanma Barranquero <lekktu@gmail.com> + + * imenu.el (imenu--completion-buffer): + * mouse.el (mouse-buffer-menu-alist): + * msb.el (msb-invisible-buffer-p): + * calendar/diary-lib.el (diary-header-line-format): + * emacs-lisp/pp.el (pp-buffer): + * progmodes/cperl-mode.el (cperl-do-auto-fill): + * textmodes/picture.el (picture-replace-match): + Change space constants followed by a sexp to "?\s ". + + * play/decipher.el (decipher-loop-with-breaks): + * textmodes/texinfo.el (texinfo-insert-@item): Change space + constants "protected" from end of line by a comment to "?\s". + +2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca> + + * font-lock.el (save-buffer-state): Use `declare'. + + * progmodes/cperl-mode.el (cperl-find-pods-heres): Don't gratuitously + reset the syntax-table to cperl-mode-syntax-table. + (cperl-mode): Make _ into word-syntax during font-locking so "print" in + "foo_print_bar" is not matched as a reserved keyword. + +2005-06-29 Carsten Dominik <dominik@science.uva.nl> + + * textmodes/org.el (orgtbl-setup): New function, for delayed + setup for the orgtbl commands. + (org-calc-default-modes): New option. + (orgtbl-make-binding): Use `defun' to get better help display. + (org-diary): Call `org-compile-prefix-format'. + (org-table-formula-substitute-names): New function. + (org-agenda-day-view, org-agenda-week-view): New commands. + (org-agenda-toggle-week-view): Command removed. + (org-tbl-menu): Split off from org-org-menu. + (org-mode): Move removal of outline-mode menus to here. + (org-table-formula-debug): New option. + (org-table-insert-row): Keep first field if just "#" or "*". + (org-mode): Paragraph regexps fixed. + (org-table-recalculate-regexp): New constant. + (org-table-justify-field-maybe): Avoid replace if not necessary. + (org-copy-special, org-cut-special): Use `call-interactively'. + (org-table-copy-region): Take region from `interactive' call. + (org-trim): Return string even if no match. + (org-formula): New face. + (org-set-font-lock-defaults): No longer highlight "FIXME". + But highlight formula-related fields in table. + (org-table-p): Use regexp, not fontification. + (org-table-align): Handle white space at end of line. + (org-table-formula-evaluate-inline): New option. + (org-mode): Auto-wrapping in comment lines turned off. + (org-table-copy-down): Evaluate only in copied field, not in + destination. + (org-table-current-formula): Variable removed. + (org-table-store-formulas, org-table-get-stored-formulas) + (org-table-modify-formulas, org-table-replace-in-formulas) + (org-table-maybe-eval-formula): New functions. + (org-table-get-formula): Modify to use stored formulas. + (org-table-insert-column, org-table-delete-column) + (org-table-move-column): Call `org-table-modify-formulas'. + (org-complete): Add completion for keyword formulas. + (orgtbl-mode): Pull orgtbl-mode-map to start of + minor-mode-map-alist. + +2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/python.el (python-check): Require `compile' before + modifying its variables. + + * newcomment.el (comment-indent-default): Don't get fooled by an early + end of buffer. + +2005-06-28 Vinicius Jose Latorre <viniciusjl@ig.com.br> + + * ps-print.el (ps-print-version): Fix version number. + +2005-06-28 Luc Teirlinck <teirllm@auburn.edu> + + * textmodes/ispell.el (ispell-word): Remove stray parenthesis. + +2005-06-28 Richard M. Stallman <rms@gnu.org> + + * textmodes/flyspell.el (flyspell-use-local-map): Variable deleted. + (flyspell-local-mouse-map): Declaration deleted. + (flyspell-mouse-map): Bind only mouse-2. + (flyspell-mode-map): Don't test flyspell-use-local-map. + (flyspell-overlay-keymap-property-name): Var deleted. + (flyspell-mode-on): Don't make local bindings for + flyspell-mouse-map and flyspell-mode-map. + (make-flyspell-overlay): Unconditionally put on `keymap' text prop. + + * textmodes/ispell.el (ispell-word): Do not ignore short words. + + * progmodes/compile.el (compilation-next-error-function): + Don't switch buffers; operate on the current buffer. + + * facemenu.el (facemenu-add-face): Warn when font-lock is active. + + * comint.el (comint-password-prompt-regexp): Accept ", try again". + + * bindings.el (global-map): Bind insertchar and its variants. + +2005-06-27 Richard M. Stallman <rms@gnu.org> + + * textmodes/artist.el (artist-text-overwrite) + (artist-figlet-get-extra-args, artist-text-see-thru): Use read-string. + +2005-06-27 Vinicius Jose Latorre <viniciusjl@ig.com.br> + + * ps-print.el: It was not working the page selection for printing. + Reported by Sebastian Tennant <sebyte@smolny.plus.com>. + (ps-print-version): New version 6.6.7. + (ps-end-sheet): New fun. + (ps-header-sheet, ps-end-job): Call it. + +2005-06-27 Luc Teirlinck <teirllm@auburn.edu> + + * subr.el (add-to-list, add-to-ordered-list): Doc fixes. + +2005-06-27 Lute Kamstra <lute@gnu.org> + + * facemenu.el (facemenu-unlisted-faces): Add foreground and + background color faces. + (facemenu-get-face): Delete function. + (facemenu-set-face-from-menu): Don't call facemenu-get-face. + (facemenu-add-new-color): Make second argument mandatory. + Create the approprate face and return it. Simplify. + (facemenu-set-foreground, facemenu-set-background): Don't check if + color is defined. Use return value of facemenu-add-new-color. + +2005-06-26 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gud.el (gud-filter): Add missing argument to + with-selected-window. + +2005-06-26 Stefan Monnier <monnier@iro.umontreal.ca> + + * emacs-lisp/easy-mmode.el (define-minor-mode): Don't automatically add + a :require to the defcustom. + + * emacs-lisp/autoload.el (make-autoload): Add the :setter for + defcustoms corresponding to minor modes. + +2005-06-26 David Ponce <david@dponce.com> + + * recentf.el: Require tree-widget instead of wid-edit. + (recentf-filename-handler): Fix widget :type. + (recentf-cancel-dialog, recentf-open-more-files) + (recentf-open-files-action): Doc fix. + (recentf-dialog-goto-first): New function. + (recentf-dialog-mode-map): Set parent keymap first. + (recentf-dialog-mode): Define with define-derived-mode. + Don't display continuation lines in dialogs. + (recentf-edit-list): Rename from recentf-edit-selected-items. + (recentf-edit-list-select): Rename from recentf-edit-list-action. + Simplify. + (recentf-edit-list-validate): New function. + (recentf-edit-list): Update accordingly. + (recentf-open-files-item-shift): Remove. + (recentf-open-files-item): Convert menu elements into tree and + link widgets. Don't create the widgets. + (recentf-open-files): Update accordingly. + (recentf-save-list): Untabify. + +2005-06-25 Luc Teirlinck <teirllm@auburn.edu> + + * replace.el (keep-lines-read-args): Add INTERACTIVE arg. + (keep-lines): Add INTERACTIVE arg. Never delete lines only + partially contained in the active region. Do not take active + region into account when called from Lisp, unless INTERACTIVE arg + is non-nil. Use `forward-line' instead of `beginning-of-line' to + avoid trouble with fields. Make marker point nowhere when no + longer used. Always return nil. Doc fix. + (flush-lines): Add INTERACTIVE arg. Do not take active region + into account when called from Lisp, unless INTERACTIVE arg is + non-nil. Use `forward-line' instead of `beginning-of-line' to + avoid trouble with fields. Make marker point nowhere when no + longer used. Always return nil. Doc fix. + (how-many): Add INTERACTIVE arg. Make RSTART and REND args + interchangeable. Do not take active region into account when + called from Lisp, unless INTERACTIVE arg is non-nil. Do not print + message in echo area when called from Lisp, unless INTERACTIVE arg + is non-nil. Avoid saying "1 occurrences". Do not use markers. + Return the number of matches. Doc fix. + (occur): Doc fix. + (perform-replace): Make comment follow double space convention for + the sake of `outline-minor-mode'. + + * faces.el (facep): Doc fix. + +2005-06-25 Richard M. Stallman <rms@gnu.org> + + * facemenu.el (facemenu-enable-faces-p): New function. + (facemenu-background-menu, facemenu-foreground-menu) + (facemenu-face-menu): Add menu-enable property. + + * jka-compr.el (jka-compr-insert-file-contents): + Special handling if cannot find the uncompression program. + + * cus-face.el (custom-face-attributes): Add autoload. + + * emacs-lisp/lisp-mode.el (lisp-mode-variables): + Bind comment-indent-function locally. + + * window.el (save-selected-window): Use save-current-buffer. + + * subr.el (with-selected-window): Use save-current-buffer. + + * progmodes/gud.el (gud-filter): Simplify using with-selected-window + and with-current-buffer. + +2005-06-24 Richard M. Stallman <rms@gnu.org> + + * simple.el (line-move-1): Fix previous change. + +2005-06-24 Juanma Barranquero <lekktu@gmail.com> + + * replace.el (occur-1): Set `buffer-read-only' and the + buffer-modified flag before running `occur-hook' to protect + against unintentional buffer switches that can lead to data loss. + 2005-06-24 Nick Roberts <nickrob@snap.net.nz> * progmodes/gud.el (gud-tooltip-print-command): Indent properly. (gud-gdb-marker-filter): Use font-lock-warning-face for any initial error. - + * progmodes/gdb-ui.el (gdb-send): Remove warning face from errors after fresh input. (gdb-var-create-handler): Put name of expression in quotes. - + 2005-06-23 Luc Teirlinck <teirllm@auburn.edu> * emacs-lisp/ring.el (ring-elements): Make it return a list of the @@ -19,7 +254,7 @@ (line-move-1): When there are overlays around, use vertical-motion. * faces.el (escape-glyph): Use brown against light background. - (nobreak-space): Renamed from no-break-space. + (nobreak-space): Rename from no-break-space. Fix previous change. * dired-aux.el (dired-do-copy): Fix arg prompt. @@ -73,7 +308,7 @@ * bindings.el (propertized-buffer-identification): Use renamed `Buffer-menu-buffer' face. - * faces.el (vertical-border): Renamed from `vertical-divider'. + * faces.el (vertical-border): Rename from `vertical-divider'. (escape-glyph): Change dark-background color back to `cyan'. 2005-06-21 Juri Linkov <juri@jurta.org> @@ -159,8 +394,7 @@ 2005-06-18 Peter Kleiweg <p.c.j.kleiweg@rug.nl> - * progmodes/ps-mode.el: Update version and maintainer's email - address. + * progmodes/ps-mode.el: Update version and maintainer's email address. 2005-06-18 Steve Youngs <steve@xemacs.org> @@ -248,8 +482,8 @@ New backward-compatibility aliases for renamed faces. (eshell-ls-decorated-name): Use renamed eshell-ls faces. - * progmodes/cc-fonts.el (c-nonbreakable-space-face): Remove - "-face" suffix from face name. + * progmodes/cc-fonts.el (c-nonbreakable-space-face): + Remove "-face" suffix from face name. (c-cpp-matchers): Use the variable `c-nonbreakable-space-face' instead of literal face. @@ -377,8 +611,8 @@ ido-incomplete-regexp. (ido-incomplete-regexp): New face. (ido-completions): Use it. - (ido-complete, ido-exit-minibuffer, ido-completions): Handle - incomplete regexps. + (ido-complete, ido-exit-minibuffer, ido-completions): + Handle incomplete regexps. (ido-completions): Add check for complete match when entering a regexp. 2005-06-15 Stefan Monnier <monnier@iro.umontreal.ca> @@ -407,6 +641,11 @@ * progmodes/cperl-mode.el (cperl-init-faces): Use literal cperl faces instead of (non-existent) variables. +2005-06-14 Stefan Monnier <monnier@iro.umontreal.ca> + + * iswitchb.el (iswitchb-to-end): Replace mapcar with dolist. + (iswitchb-get-matched-buffers): Likewise. Simplify. + 2005-06-14 Miles Bader <miles@gnu.org> * progmodes/ld-script.el (ld-script-location-counter): @@ -532,7 +771,7 @@ * progmodes/gdb-ui.el (menu): Re-order menu items. (gdb-tooltip-print): Respect tooltip-use-echo-area. - + * progmodes/gud.el (tooltip-use-echo-area): Remove alias. Define in tooltip.el. (gud-tooltip-process-output): Respect tooltip-use-echo-area. diff --git a/lisp/bindings.el b/lisp/bindings.el index 2046c101640..ceab70ed6cd 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -775,6 +775,11 @@ language you are using." (define-key global-map [insert] 'overwrite-mode) (define-key global-map [C-insert] 'kill-ring-save) (define-key global-map [S-insert] 'yank) +;; `insertchar' is what term.c produces. Should we change term.c +;; to produce `insert' instead? +(define-key global-map [insertchar] 'overwrite-mode) +(define-key global-map [C-insertchar] 'kill-ring-save) +(define-key global-map [S-insertchar] 'yank) (define-key global-map [undo] 'undo) (define-key global-map [redo] 'repeat-complex-command) (define-key global-map [again] 'repeat-complex-command) ; Sun keyboard @@ -785,7 +790,6 @@ language you are using." ;; (define-key global-map [clearline] 'function-key-error) (define-key global-map [insertline] 'open-line) (define-key global-map [deleteline] 'kill-line) -;; (define-key global-map [insertchar] 'function-key-error) (define-key global-map [deletechar] 'delete-char) ;; (define-key global-map [backtab] 'function-key-error) ;; (define-key global-map [f1] 'function-key-error) diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el index a0e9d1f90b7..851459fe574 100644 --- a/lisp/calendar/diary-lib.el +++ b/lisp/calendar/diary-lib.el @@ -290,7 +290,7 @@ The format of the header is specified by `diary-header-line-format'." "Selective display active - press \"s\" in calendar \ before edit/copy" "Diary")) - ?\ (frame-width))) + ?\s (frame-width))) "*Format of the header line displayed by `simple-diary-display'. Only used if `diary-header-line-flag' is non-nil." :group 'diary diff --git a/lisp/comint.el b/lisp/comint.el index 29208d6379c..20b365e9fe1 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -338,8 +338,8 @@ This variable is buffer-local." "\\(\\([Oo]ld \\|[Nn]ew \\|'s \\|login \\|\ Kerberos \\|CVS \\|UNIX \\| SMB \\|^\\)\ \[Pp]assword\\( (again)\\)?\\|\ -pass phrase\\|\\(Enter\\|Repeat\\) passphrase\\)\ -\\( for [^:]+\\)?:\\s *\\'" +pass phrase\\|\\(Enter\\|Repeat\\|Bad\\) passphrase\\)\ +\\(?:, try again\\)?\\(?: for [^:]+\\)?:\\s *\\'" "*Regexp matching prompts for passwords in the inferior process. This is used by `comint-watch-for-password-prompt'." :type 'regexp diff --git a/lisp/cus-face.el b/lisp/cus-face.el index 33c8c995a4c..054ad9acaa3 100644 --- a/lisp/cus-face.el +++ b/lisp/cus-face.el @@ -59,6 +59,7 @@ ;;; Face attributes. +;;;###autoload (defconst custom-face-attributes '((:family (string :tag "Font Family" diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el index 68d1287d98c..7dbf61c5bf3 100644 --- a/lisp/emacs-lisp/autoload.el +++ b/lisp/emacs-lisp/autoload.el @@ -1,7 +1,7 @@ ;; autoload.el --- maintain autoloads in loaddefs.el -;; Copyright (C) 1991,92,93,94,95,96,97, 2001,02,03,04 -;; Free Software Foundation, Inc. +;; Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2001, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Author: Roland McGrath <roland@gnu.org> ;; Keywords: maint @@ -123,7 +123,17 @@ or macro definition or a defcustom)." ) `(progn (defvar ,varname ,init ,doc) - (custom-autoload ',varname ,file)))) + (custom-autoload ',varname ,file) + ;; The use of :require in a defcustom can be annoying, especially + ;; when defcustoms are moved from one file to another between + ;; releases because the :require arg gets placed in the user's + ;; .emacs. In order for autoloaded minor modes not to need the + ;; use of :require, we arrange to store their :setter. + ,(let ((setter (condition-case nil + (cadr (memq :set form)) + (error nil)))) + (if (equal setter ''custom-set-minor-mode) + `(put ',varname 'custom-set 'custom-set-minor-mode)))))) ;; nil here indicates that this is not a special autoload form. (t nil)))) @@ -566,5 +576,5 @@ Calls `update-directory-autoloads' on the command line arguments." (provide 'autoload) -;;; arch-tag: 00244766-98f4-4767-bf42-8a22103441c6 +;; arch-tag: 00244766-98f4-4767-bf42-8a22103441c6 ;;; autoload.el ends here diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index a342f8a5530..6ee87919d38 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -201,10 +201,7 @@ See the command `%s' for a description of this minor-mode.")) :type 'boolean ,@(cond ((not (and curfile require)) nil) - ((not (eq require t)) `(:require ,require)) - (t `(:require - ',(intern (file-name-nondirectory - (file-name-sans-extension curfile)))))) + ((not (eq require t)) `(:require ,require))) ,@(nreverse extra-keywords)))) ;; The actual function. diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 1ffc33835e9..972fe6bafc8 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -202,6 +202,8 @@ (setq comment-column 40) ;; Don't get confused by `;' in doc strings when paragraph-filling. (set (make-local-variable 'comment-use-global-state) t) + (make-local-variable 'comment-indent-function) + (setq comment-indent-function 'lisp-comment-indent) (make-local-variable 'imenu-generic-expression) (setq imenu-generic-expression lisp-imenu-generic-expression) (make-local-variable 'multibyte-syntax-as-symbol) @@ -714,7 +716,7 @@ which see." (setq debug-on-error new-value)) value))))) - +;; Used for comment-indent-function in Lisp modes. (defun lisp-comment-indent () (if (looking-at "\\s<\\s<\\s<") (current-column) diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el index 93e30fb0f55..d9f3df99bae 100644 --- a/lisp/emacs-lisp/pp.el +++ b/lisp/emacs-lisp/pp.el @@ -67,7 +67,7 @@ to make output that `read' can handle, whenever this is possible." (save-excursion (backward-char 1) (skip-chars-backward "'`#^") - (when (and (not (bobp)) (memq (char-before) '(?\ ?\t ?\n))) + (when (and (not (bobp)) (memq (char-before) '(?\s ?\t ?\n))) (delete-region (point) (progn (skip-chars-backward " \t\n") (point))) diff --git a/lisp/facemenu.el b/lisp/facemenu.el index cd3998520a1..43c275e4a2f 100644 --- a/lisp/facemenu.el +++ b/lisp/facemenu.el @@ -1,6 +1,6 @@ ;;; facemenu.el --- create a face menu for interactively adding fonts to text -;; Copyright (c) 1994, 1995, 1996, 2001, 2002 Free Software Foundation, Inc. +;; Copyright (c) 1994, 1995, 1996, 2001, 2002, 2005 Free Software Foundation, Inc. ;; Author: Boris Goldowsky <boris@gnu.org> ;; Keywords: faces @@ -135,7 +135,8 @@ just before \"Other\" at the end." `(modeline region secondary-selection highlight scratch-face ,(purecopy "^font-lock-") ,(purecopy "^gnus-") ,(purecopy "^message-") ,(purecopy "^ediff-") ,(purecopy "^term-") ,(purecopy "^vc-") - ,(purecopy "^widget-") ,(purecopy "^custom-") ,(purecopy "^vm-")) + ,(purecopy "^widget-") ,(purecopy "^custom-") ,(purecopy "^vm-") + ,(purecopy "^fg:") ,(purecopy "^bg:")) "*List of faces not to include in the Face menu. Each element may be either a symbol, which is the name of a face, or a string, which is a regular expression to be matched against face names. Matching @@ -162,6 +163,7 @@ when they are created." "Menu keymap for faces.") ;;;###autoload (defalias 'facemenu-face-menu facemenu-face-menu) +(put 'facemenu-face-menu 'menu-enable '(facemenu-enable-faces-p)) ;;;###autoload (defvar facemenu-foreground-menu @@ -171,6 +173,7 @@ when they are created." "Menu keymap for foreground colors.") ;;;###autoload (defalias 'facemenu-foreground-menu facemenu-foreground-menu) +(put 'facemenu-foreground-menu 'menu-enable '(facemenu-enable-faces-p)) ;;;###autoload (defvar facemenu-background-menu @@ -180,6 +183,11 @@ when they are created." "Menu keymap for background colors.") ;;;###autoload (defalias 'facemenu-background-menu facemenu-background-menu) +(put 'facemenu-background-menu 'menu-enable '(facemenu-enable-faces-p)) + +;;; Condition for enabling menu items that set faces. +(defun facemenu-enable-faces-p () + (not (and font-lock-mode font-lock-defaults))) ;;;###autoload (defvar facemenu-special-menu @@ -358,10 +366,8 @@ typing a character to insert cancels the specification." (region-beginning)) (if (and mark-active (not current-prefix-arg)) (region-end)))) - (unless (color-defined-p color) - (message "Color `%s' undefined" color)) - (facemenu-add-new-color color 'facemenu-foreground-menu) - (facemenu-add-face (list (list :foreground color)) start end)) + (facemenu-add-face (facemenu-add-new-color color 'facemenu-foreground-menu) + start end)) ;;;###autoload (defun facemenu-set-background (color &optional start end) @@ -382,10 +388,8 @@ typing a character to insert cancels the specification." (region-beginning)) (if (and mark-active (not current-prefix-arg)) (region-end)))) - (unless (color-defined-p color) - (message "Color `%s' undefined" color)) - (facemenu-add-new-color color 'facemenu-background-menu) - (facemenu-add-face (list (list :background color)) start end)) + (facemenu-add-face (facemenu-add-new-color color 'facemenu-background-menu) + start end)) ;;;###autoload (defun facemenu-set-face-from-menu (face start end) @@ -406,7 +410,6 @@ typing a character to insert cancels the specification." (if (and mark-active (not current-prefix-arg)) (region-end)))) (barf-if-buffer-read-only) - (facemenu-get-face face) (if start (facemenu-add-face face start end) (facemenu-add-face face))) @@ -608,7 +611,9 @@ effect. See `facemenu-remove-face-function'." self-insert-face (list self-insert-face))) face) - self-insert-face-command this-command))))) + self-insert-face-command this-command)))) + (unless (facemenu-enable-faces-p) + (message "Font-lock mode will override any faces you set in this buffer"))) (defun facemenu-active-faces (face-list &optional frame) "Return from FACE-LIST those faces that would be used for display. @@ -641,14 +646,6 @@ use the selected frame. If t, then the global, non-frame faces are used." (setq face-list (cdr face-list))) (nreverse active-list))) -(defun facemenu-get-face (symbol) - "Make sure FACE exists. -If not, create it and add it to the appropriate menu. Return the SYMBOL." - (let ((name (symbol-name symbol))) - (cond ((facep symbol)) - (t (make-face symbol)))) - symbol) - (defun facemenu-add-new-face (face) "Add FACE (a face) to the Face menu. @@ -708,47 +705,44 @@ This is called whenever you create a new face." (define-key menu key (cons name function)))))) nil) ; Return nil for facemenu-iterate -(defun facemenu-add-new-color (color &optional menu) +(defun facemenu-add-new-color (color menu) "Add COLOR (a color name string) to the appropriate Face menu. -MENU should be `facemenu-foreground-menu' or -`facemenu-background-menu'. +MENU should be `facemenu-foreground-menu' or `facemenu-background-menu'. +Create the appropriate face and return it. This is called whenever you use a new color." - (let* (name - symbol - docstring - function menu-val key - (color-p (memq menu '(facemenu-foreground-menu - facemenu-background-menu)))) - (unless (stringp color) - (error "%s is not a color" color)) - (setq name color - symbol (intern name)) - + (let (symbol docstring) + (unless (color-defined-p color) + (error "Color `%s' undefined" color)) (cond ((eq menu 'facemenu-foreground-menu) (setq docstring (format "Select foreground color %s for subsequent insertion." - name))) + color) + symbol (intern (concat "fg:" color))) + (set-face-foreground (make-face symbol) color)) ((eq menu 'facemenu-background-menu) (setq docstring (format "Select background color %s for subsequent insertion." - name)))) + color) + symbol (intern (concat "bg:" color))) + (set-face-background (make-face symbol) color)) + (t (error "MENU should be `facemenu-foreground-menu' or `facemenu-background-menu'"))) (cond ((facemenu-iterate ; check if equivalent face is already in the menu (lambda (m) (and (listp m) (symbolp (car m)) (stringp (cadr m)) (string-equal (cadr m) color))) (cdr (symbol-function menu)))) - (t ; No keyboard equivalent. Figure out where to put it: - (setq key (vector symbol) - function 'facemenu-set-face-from-menu - menu-val (symbol-function menu)) - (if (and facemenu-new-faces-at-end - (> (length menu-val) 3)) - (define-key-after menu-val key (cons name function) - (car (nth (- (length menu-val) 3) menu-val))) - (define-key menu key (cons name function)))))) - nil) ; Return nil for facemenu-iterate + (t ; No keyboard equivalent. Figure out where to put it: + (let ((key (vector symbol)) + (function 'facemenu-set-face-from-menu) + (menu-val (symbol-function menu))) + (if (and facemenu-new-faces-at-end + (> (length menu-val) 3)) + (define-key-after menu-val key (cons color function) + (car (nth (- (length menu-val) 3) menu-val))) + (define-key menu key (cons color function)))))) + symbol)) (defun facemenu-complete-face-list (&optional oldlist) "Return list of all faces that look different. diff --git a/lisp/faces.el b/lisp/faces.el index 60e34d3976d..bcdef05e8ec 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -204,7 +204,10 @@ If NAME is already a face, it is simply returned." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun facep (face) - "Return non-nil if FACE is a face name." + "Return non-nil if FACE is a face name or internal face object. +Return nil otherwise. A face name can be a string or a symbol. +An internal face object is a vector of the kind used internally +to record face data." (internal-lisp-face-p face)) @@ -1573,6 +1576,13 @@ this won't have the expected effect." (choice-item light) (choice-item :tag "default" nil))) +(defvar default-frame-background-mode nil + "Internal variable for the default brightness of the background. +Emacs sets it automatically depending on the terminal type. +The value `nil' means `dark'. If Emacs runs in non-windowed +mode from `xterm' or a similar terminal emulator, the value is +`light'. On rxvt terminals, the value depends on the environment +variable COLORFGBG.") (defun frame-set-background-mode (frame) "Set up display-dependent faces on FRAME. @@ -1588,13 +1598,13 @@ according to the `background-mode' and `display-type' frame parameters." (intern (downcase bg-resource))) ((and (null window-system) (null bg-color)) ;; No way to determine this automatically (?). - 'dark) + (or default-frame-background-mode 'dark)) ;; Unspecified frame background color can only happen ;; on tty's. ((member bg-color '(unspecified "unspecified-bg")) - 'dark) + (or default-frame-background-mode 'dark)) ((equal bg-color "unspecified-fg") ; inverted colors - 'light) + (if (eq default-frame-background-mode 'light) 'dark 'light)) ((>= (apply '+ (x-color-values bg-color frame)) ;; Just looking at the screen, colors whose ;; values add up to .6 of the white total diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 6ee541aea88..da838981576 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -620,6 +620,7 @@ Major/minor modes can set this variable if they know which option applies.") ;; We use this to preserve or protect things when modifying text properties. (defmacro save-buffer-state (varlist &rest body) "Bind variables according to VARLIST and eval BODY restoring buffer state." + (declare (indent 1) (debug let)) (let ((modified (make-symbol "modified"))) `(let* ,(append varlist `((,modified (buffer-modified-p)) @@ -634,8 +635,6 @@ Major/minor modes can set this variable if they know which option applies.") ,@body) (unless ,modified (restore-buffer-modified-p nil))))) - (put 'save-buffer-state 'lisp-indent-function 1) - (def-edebug-spec save-buffer-state let) ;; ;; Shut up the byte compiler. (defvar font-lock-face-attributes)) ; Obsolete but respected if set. diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index a1128f214cb..1f305f3adeb 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,18 @@ +2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus-nocem.el (gnus-nocem-verifyer): Default to pgg-verify. + (gnus-nocem-check-article): Fetch the Type header. + (gnus-nocem-message-wanted-p): Fix the way to examine types. + (gnus-nocem-verify-issuer): Use functionp instead of fboundp. + (gnus-nocem-enter-article): Make sure gnus-nocem-hashtb is initialized. + + * pgg.el (pgg-verify): Return the verification result. + +2005-06-24 Juanma Barranquero <lekktu@gmail.com> + + * gnus-art.el (gnus-article-mode): Set `nobreak-char-display', not + `show-nonbreak-escape'. + 2005-06-23 Lute Kamstra <lute@gnu.org> * gnus-art.el (gnus-article-mode): Use kill-all-local-variables. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 56a79951b0c..b92ce8616d5 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -3755,7 +3755,7 @@ commands: (make-local-variable 'gnus-article-charset) (make-local-variable 'gnus-article-ignored-charsets) ;; Prevent recent Emacsen from displaying non-break space as "\ ". - (set (make-local-variable 'show-nonbreak-escape) nil) + (set (make-local-variable 'nobreak-char-display) nil) (gnus-set-default-directory) (buffer-disable-undo) (setq buffer-read-only t) diff --git a/lisp/gnus/gnus-nocem.el b/lisp/gnus/gnus-nocem.el index 5a5f779b732..cd51efcf100 100644 --- a/lisp/gnus/gnus-nocem.el +++ b/lisp/gnus/gnus-nocem.el @@ -1,6 +1,6 @@ ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment -;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2004 +;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2004, 2005 ;; Free Software Foundation, Inc. @@ -74,12 +74,13 @@ issuer registry." :group 'gnus-nocem :type 'integer) -(defcustom gnus-nocem-verifyer 'mc-verify +(defcustom gnus-nocem-verifyer 'pgg-verify "*Function called to verify that the NoCeM message is valid. -One likely value is `mc-verify'. If the function in this variable +One likely value is `pgg-verify'. If the function in this variable isn't bound, the message will be used unconditionally." :group 'gnus-nocem - :type '(radio (function-item mc-verify) + :type '(radio (function-item pgg-verify) + (function-item mc-verify) (function :tag "other"))) (defcustom gnus-nocem-liberal-fetch nil @@ -246,7 +247,7 @@ valid issuer, which is much faster if you are selective about the issuers." ;; We get the name of the issuer. (narrow-to-region b e) (setq issuer (mail-fetch-field "issuer") - type (mail-fetch-field "issuer")) + type (mail-fetch-field "type")) (widen) (if (not (gnus-nocem-message-wanted-p issuer type)) (message "invalid NoCeM issuer: %s" issuer) @@ -267,18 +268,20 @@ valid issuer, which is much faster if you are selective about the issuers." (while (setq condition (pop conditions)) (cond ((stringp condition) - (setq wanted (string-match condition type))) + (when (string-match condition type) + (setq wanted t))) ((and (consp condition) (eq (car condition) 'not) (stringp (cadr condition))) - (setq wanted (not (string-match (cadr condition) type)))) + (when (string-match (cadr condition) type) + (setq wanted nil))) (t (error "Invalid NoCeM condition: %S" condition)))) wanted)))) (defun gnus-nocem-verify-issuer (person) "Verify using PGP that the canceler is who she says she is." - (if (fboundp gnus-nocem-verifyer) + (if (functionp gnus-nocem-verifyer) (ignore-errors (funcall gnus-nocem-verifyer)) ;; If we don't have Mailcrypt, then we use the message anyway. @@ -315,7 +318,10 @@ valid issuer, which is much faster if you are selective about the issuers." (while (eq (char-after) ?\t) (forward-line -1)) (setq id (buffer-substring (point) (1- (search-forward "\t")))) - (unless (gnus-gethash id gnus-nocem-hashtb) + (unless (if gnus-nocem-hashtb + (gnus-gethash id gnus-nocem-hashtb) + (setq gnus-nocem-hashtb (gnus-make-hashtable)) + nil) ;; only store if not already present (gnus-sethash id t gnus-nocem-hashtb) (push id ncm)) diff --git a/lisp/gnus/pgg.el b/lisp/gnus/pgg.el index eff02a1c32a..ca351c90cd2 100644 --- a/lisp/gnus/pgg.el +++ b/lisp/gnus/pgg.el @@ -380,7 +380,8 @@ within the region." (with-output-to-temp-buffer pgg-echo-buffer (set-buffer standard-output) (insert-buffer-substring (if status pgg-output-buffer - pgg-errors-buffer))))))) + pgg-errors-buffer))))) + status)) ;;;###autoload (defun pgg-insert-key () diff --git a/lisp/imenu.el b/lisp/imenu.el index 0ebdbc4b5f3..2248ece3dbd 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -877,7 +877,7 @@ Return one of the entries in index-alist or nil." (if (not imenu-space-replacement) index-alist (mapcar (lambda (item) - (cons (subst-char-in-string ?\ (aref imenu-space-replacement 0) + (cons (subst-char-in-string ?\s (aref imenu-space-replacement 0) (car item)) (cdr item))) index-alist)))) diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el index ca5e158349d..f282957512c 100644 --- a/lisp/jka-compr.el +++ b/lisp/jka-compr.el @@ -474,6 +474,9 @@ There should be no more than seven characters after the final `/'." (delete-region (point) (point-max))) (goto-char start)) (error + ;; If the file we wanted to uncompress does not exist, + ;; handle that according to VISIT as `insert-file-contents' + ;; would, maybe signaling the same error it normally would. (if (and (eq (car error-code) 'file-error) (eq (nth 3 error-code) local-file)) (if visit @@ -481,6 +484,13 @@ There should be no more than seven characters after the final `/'." (signal 'file-error (cons "Opening input file" (nthcdr 2 error-code)))) + ;; If the uncompression program can't be found, + ;; signal that as a non-file error + ;; so that find-file-noselect-1 won't handle it. + (if (and (eq (car error-code) 'file-error) + (equal (cadr error-code) "Searching for program")) + (error "Uncompression program `%s' not found" + (nth 3 error-code))) (signal (car error-code) (cdr error-code)))))) (and diff --git a/lisp/mouse.el b/lisp/mouse.el index 07e593a70c1..03740e780d5 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -1857,7 +1857,7 @@ and selects that window." (string< (buffer-name elt1) (buffer-name elt2)))))) (setq tail buffers) (while tail - (or (eq ?\ (aref (buffer-name (car tail)) 0)) + (or (eq ?\s (aref (buffer-name (car tail)) 0)) (setq maxlen (max maxlen (length (buffer-name (car tail)))))) diff --git a/lisp/msb.el b/lisp/msb.el index 0bcdad314a6..02ab487bc69 100644 --- a/lisp/msb.el +++ b/lisp/msb.el @@ -489,7 +489,7 @@ See the function `mouse-select-buffer' and the variable "Return t if optional BUFFER is an \"invisible\" buffer. If the argument is left out or nil, then the current buffer is considered." (and (> (length (buffer-name buffer)) 0) - (eq ?\ (aref (buffer-name buffer) 0)))) + (eq ?\s (aref (buffer-name buffer) 0)))) (defun msb--strip-dir (dir) "Strip one hierarchy level from the end of DIR." diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 59044da6ef9..590e6ce37ba 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -502,7 +502,7 @@ Point is assumed to be just at the end of a comment." (or (match-end 1) (/= (current-column) (current-indentation)))) 0 (when (or (/= (current-column) (current-indentation)) - (and (> comment-add 0) (looking-at "\\s<\\S<"))) + (and (> comment-add 0) (looking-at "\\s<\\(\\S<\\|\\'\\)"))) comment-column))) ;;;###autoload diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el index 9ef8d0fd01f..86e6a35b646 100644 --- a/lisp/play/decipher.el +++ b/lisp/play/decipher.el @@ -772,7 +772,7 @@ See `decipher-loop-no-breaks' if you do not care about word divisions." (forward-char)) (or (equal decipher-char ?\ ) (progn - (setq decipher-char ?\ ; + (setq decipher-char ?\s decipher--loop-prev-char ?\ ) (funcall func))))))) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 3f3b385c5ed..f8da248535b 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -493,25 +493,60 @@ starting the compilation process.") ;; backward-compatibility alias (put 'compilation-info-face 'face-alias 'compilation-info) +(defface compilation-error-file-name + '((default :inherit font-lock-warning-face) + (((supports :underline t)) :underline t)) + "Face for displaying file names in compilation errors." + :group 'font-lock-highlighting-faces + :version "22.1") + +(defface compilation-warning-file-name + '((default :inherit font-lock-warning-face) + (((supports :underline t)) :underline t)) + "Face for displaying file names in compilation errors." + :group 'font-lock-highlighting-faces + :version "22.1") + +(defface compilation-info-file-name + '((default :inherit compilation-info) + (((supports :underline t)) :underline t)) + "Face for displaying file names in compilation errors." + :group 'font-lock-highlighting-faces + :version "22.1") + +(defface compilation-line-number + '((default :inherit font-lock-variable-name-face) + (((supports :underline t)) :underline t)) + "Face for displaying file names in compilation errors." + :group 'font-lock-highlighting-faces + :version "22.1") + +(defface compilation-column-number + '((default :inherit font-lock-type-face) + (((supports :underline t)) :underline t)) + "Face for displaying file names in compilation errors." + :group 'font-lock-highlighting-faces + :version "22.1") + (defvar compilation-message-face nil "Face name to use for whole messages. Faces `compilation-error-face', `compilation-warning-face', `compilation-info-face', `compilation-line-face' and `compilation-column-face' get prepended to this, when applicable.") -(defvar compilation-error-face 'font-lock-warning-face +(defvar compilation-error-face 'compilation-error-file-name "Face name to use for file name in error messages.") -(defvar compilation-warning-face 'compilation-warning +(defvar compilation-warning-face 'compilation-warning-file-name "Face name to use for file name in warning messages.") -(defvar compilation-info-face 'compilation-info +(defvar compilation-info-face 'compilation-info-file-name "Face name to use for file name in informational messages.") -(defvar compilation-line-face 'font-lock-variable-name-face +(defvar compilation-line-face 'compilation-line-number "Face name to use for line number in message.") -(defvar compilation-column-face 'font-lock-type-face +(defvar compilation-column-face 'compilation-column-number "Face name to use for column number in message.") ;; same faces as dired uses @@ -1342,8 +1377,9 @@ Turning the mode on runs the normal hook `compilation-minor-mode-hook'." (force-mode-line-update) (if (and opoint (< opoint omax)) (goto-char opoint)) - (if compilation-finish-function - (funcall compilation-finish-function (current-buffer) msg)) + (with-no-warnings + (if compilation-finish-function + (funcall compilation-finish-function (current-buffer) msg))) (let ((functions compilation-finish-functions)) (while functions (funcall (car functions) (current-buffer) msg) @@ -1501,8 +1537,9 @@ Use this command in a compilation log buffer. Sets the mark at point there." ;;;###autoload (defun compilation-next-error-function (n &optional reset) + "Advance to the next error message and visit the file where the error was. +This is the value of `next-error-function' in Compilation buffers." (interactive "p") - (set-buffer (compilation-find-buffer)) (when reset (setq compilation-current-error nil)) (let* ((columns compilation-error-screen-columns) ; buffer's local value diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index d95c0294c4d..052df4eedda 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -1516,7 +1516,8 @@ or as help on variables `cperl-tips', `cperl-problems', (t '((cperl-load-font-lock-keywords cperl-load-font-lock-keywords-1 - cperl-load-font-lock-keywords-2))))) + cperl-load-font-lock-keywords-2) + nil nil ((?_ . "w")))))) (make-local-variable 'cperl-syntax-state) (if cperl-use-syntax-table-text-property (progn @@ -3840,7 +3841,11 @@ the sections using `cperl-pod-head-face', `cperl-pod-face', (and (buffer-modified-p) (not modified) (set-buffer-modified-p nil)) - (set-syntax-table cperl-mode-syntax-table)) + ;; I do not understand what this is doing here. It breaks font-locking + ;; because it resets the syntax-table from font-lock-syntax-table to + ;; cperl-mode-syntax-table. + ;; (set-syntax-table cperl-mode-syntax-table) + ) (car err-l))) (defun cperl-backward-to-noncomment (lim) @@ -4350,7 +4355,7 @@ indentation and initial hashes. Behaves usually outside of comment." fill-column) (let ((c (save-excursion (beginning-of-line) (cperl-to-comment-or-eol) (point))) - (s (memq (following-char) '(?\ ?\t))) marker) + (s (memq (following-char) '(?\s ?\t))) marker) (if (>= c (point)) ;; Don't break line inside code: only inside comment. nil @@ -4361,11 +4366,11 @@ indentation and initial hashes. Behaves usually outside of comment." (if (bolp) (progn (re-search-forward "#+[ \t]*") (goto-char (match-end 0)))) ;; Following space could have gone: - (if (or (not s) (memq (following-char) '(?\ ?\t))) nil + (if (or (not s) (memq (following-char) '(?\s ?\t))) nil (insert " ") (backward-char 1)) ;; Previous space could have gone: - (or (memq (preceding-char) '(?\ ?\t)) (insert " ")))))) + (or (memq (preceding-char) '(?\s ?\t)) (insert " ")))))) (defun cperl-imenu-addback (lst &optional isback name) ;; We suppose that the lst is a DAG, unless the first element only diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index c6e85934db4..dc7e64e6e35 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -2534,16 +2534,13 @@ It is saved for when this flag is not set.") ;; This must be outside of the save-excursion ;; in case the source file is our current buffer. (if process-window - (save-selected-window - (select-window process-window) - (gud-display-frame)) + (progn + (with-selected-window process-window + (gud-display-frame))) ;; We have to be in the proper buffer, (process-buffer proc), ;; but not in a save-excursion, because that would restore point. - (let ((old-buf (current-buffer))) - (set-buffer (process-buffer proc)) - (unwind-protect - (gud-display-frame) - (set-buffer old-buf))))) + (with-current-buffer (process-buffer proc) + (gud-display-frame)))) ;; If we deferred text that arrived during this processing, ;; handle it now. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 3f556bdb695..70ea8b4bac6 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -949,6 +949,7 @@ See `python-check-command' for the default." (if name (file-name-nondirectory name)))))))) (setq python-saved-check-command command) + (require 'compile) ;To define compilation-* variables. (save-some-buffers (not compilation-ask-about-save) nil) (let ((compilation-error-regexp-alist (cons '("(\\([^,]+\\), line \\([0-9]+\\))" 1 2) diff --git a/lisp/ps-print.el b/lisp/ps-print.el index 825b035ba52..6252187724a 100644 --- a/lisp/ps-print.el +++ b/lisp/ps-print.el @@ -10,12 +10,12 @@ ;; Maintainer: Kenichi Handa <handa@etl.go.jp> (multi-byte characters) ;; Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Keywords: wp, print, PostScript -;; Time-stamp: <2005/03/19 00:40:12 vinicius> -;; Version: 6.6.6 +;; Time-stamp: <2005/06/27 00:57:22 vinicius> +;; Version: 6.6.7 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ -(defconst ps-print-version "6.6.6" - "ps-print.el, v 6.6.6 <2005/03/19 vinicius> +(defconst ps-print-version "6.6.7" + "ps-print.el, v 6.6.7 <2005/06/27 vinicius> Vinicius's last change version -- this file may have been edited as part of Emacs without changes to the version number. When reporting bugs, please also @@ -5936,10 +5936,14 @@ XSTART YSTART are the relative position for the first page in a sheet.") (ps-begin-page)) +(defun ps-end-sheet () + (and ps-print-page-p (> ps-page-sheet 0) + (ps-output "EndSheet\n"))) + + (defun ps-header-sheet () ;; Print only when a new sheet begins. - (and ps-print-page-p (> ps-page-sheet 0) - (ps-output "EndSheet\n")) + (ps-end-sheet) (setq ps-page-sheet (1+ ps-page-sheet)) (when (ps-print-sheet-p) (setq ps-page-order (1+ ps-page-order)) @@ -6624,8 +6628,7 @@ If FACE is not a valid face name, it is used default face." (defun ps-end-job (needs-begin-file) - (let ((previous-print ps-print-page-p) - (ps-print-page-p t)) + (let ((ps-print-page-p t)) (ps-flush-output) (save-excursion (let ((pages-per-sheet (mod ps-page-printed ps-n-up-printing)) @@ -6652,8 +6655,7 @@ If FACE is not a valid face name, it is used default face." (number-to-string ps-lines-printed) " BeginPage\n") (ps-end-page))) ;; Set end of PostScript file - (and previous-print - (ps-output "EndSheet\n")) + (ps-end-sheet) (ps-output "\n%%Trailer\n%%Pages: " (number-to-string (if (and needs-begin-file diff --git a/lisp/recentf.el b/lisp/recentf.el index 1ea3ae6ecb2..64af3b1da3f 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -28,18 +28,18 @@ ;;; Commentary: ;; This package maintains a menu for visiting files that were operated -;; on recently. When enabled a new "Open Recent" submenu is displayed -;; in the "Files" menu. The recent files list is automatically saved -;; across Emacs sessions. You can customize the number of recent -;; files displayed, the location of the menu and others options (see -;; the source code for details). +;; on recently. When enabled a new "Open Recent" sub menu is +;; displayed in the "Files" menu. The recent files list is +;; automatically saved across Emacs sessions. You can customize the +;; number of recent files displayed, the location of the menu and +;; others options (see the source code for details). ;;; History: ;; ;;; Code: (require 'easymenu) -(require 'wid-edit) +(require 'tree-widget) (require 'timer) ;;; Internal data @@ -259,7 +259,8 @@ If `file-name-history' is not empty, do nothing." It is passed a filename to give a chance to transform it. If it returns nil, the filename is left unchanged." :group 'recentf - :type 'function) + :type '(choice (const :tag "None" nil) + function)) ;;; Utilities ;; @@ -904,30 +905,54 @@ unchanged." ;; (defun recentf-cancel-dialog (&rest ignore) "Cancel the current dialog. -Used internally by recentf dialogs. IGNORE arguments." (interactive) (kill-buffer (current-buffer)) (message "Dialog canceled")) +(defun recentf-dialog-goto-first (widget-type) + "Move the cursor to the first WIDGET-TYPE in current dialog. +Go to the beginning of buffer if not found." + (goto-char (point-min)) + (condition-case nil + (let (done) + (widget-move 1) + (while (not done) + (if (eq widget-type (widget-type (widget-at (point)))) + (setq done t) + (widget-move 1)))) + (goto-char (point-min)))) + (defvar recentf-dialog-mode-map (let ((km (make-sparse-keymap))) + (set-keymap-parent km widget-keymap) (define-key km "q" 'recentf-cancel-dialog) (define-key km [down-mouse-1] 'widget-button-click) - (set-keymap-parent km widget-keymap) km) "Keymap used in recentf dialogs.") -(defun recentf-dialog-mode () +(define-derived-mode recentf-dialog-mode nil "recentf-dialog" "Major mode of recentf dialogs. \\{recentf-dialog-mode-map}" - (interactive) - (kill-all-local-variables) - (setq major-mode 'recentf-dialog-mode) - (setq mode-name "recentf-dialog") - (use-local-map recentf-dialog-mode-map) - (run-mode-hooks 'recentf-dialog-mode-hook)) + :syntax-table nil + :abbrev-table nil + (setq truncate-lines t)) + +(defmacro recentf-dialog (name &rest forms) + "Show a dialog buffer with NAME, setup with FORMS." + (declare (indent 1) (debug t)) + `(with-current-buffer (get-buffer-create ,name) + ;; Cleanup buffer + (let ((inhibit-read-only t) + (ol (overlay-lists))) + (mapc 'delete-overlay (car ol)) + (mapc 'delete-overlay (cdr ol)) + (erase-buffer)) + (recentf-dialog-mode) + ,@forms + (widget-setup) + (switch-to-buffer (current-buffer)))) ;;; Hooks ;; @@ -976,163 +1001,127 @@ That is, remove a non kept file from the recent list." ;;; Commands ;; -(defvar recentf-edit-selected-items nil - "List of files to be deleted from the recent list. -Used internally by `recentf-edit-list'.") -(defun recentf-edit-list-action (widget &rest ignore) - "Checkbox WIDGET action that toogles a file selection. -Used internally by `recentf-edit-list'. +;;; Edit list dialog +;; +(defvar recentf-edit-list nil) + +(defun recentf-edit-list-select (widget &rest ignore) + "Toggle a file selection based on the checkbox WIDGET state. IGNORE other arguments." - (let ((value (widget-get widget ':tag))) - ;; if value is already in the selected items - (if (memq value recentf-edit-selected-items) - ;; then remove it - (progn - (setq recentf-edit-selected-items - (delq value recentf-edit-selected-items)) - (message "%s removed from selection" value)) - ;; else add it - (push value recentf-edit-selected-items) - (message "%s added to selection" value)))) + (let ((value (widget-get widget :tag)) + (check (widget-value widget))) + (if check + (add-to-list 'recentf-edit-list value) + (setq recentf-edit-list (delq value recentf-edit-list))) + (message "%s %sselected" value (if check "" "un")))) + +(defun recentf-edit-list-validate (&rest ignore) + "Process the recent list when the edit list dialog is committed. +IGNORE arguments." + (if recentf-edit-list + (let ((i 0)) + (dolist (e recentf-edit-list) + (setq recentf-list (delq e recentf-list) + i (1+ i))) + (kill-buffer (current-buffer)) + (message "%S file(s) removed from the list" i) + (recentf-clear-data)) + (message "No file selected"))) (defun recentf-edit-list () - "Show a dialog buffer to edit the recent list. -That is to select files to be deleted from the recent list." + "Show a dialog to delete selected files from the recent list." (interactive) - (with-current-buffer - (get-buffer-create (format "*%s - Edit list*" recentf-menu-title)) - (switch-to-buffer (current-buffer)) - ;; Cleanup buffer - (let ((inhibit-read-only t) - (ol (overlay-lists))) - (erase-buffer) - ;; Delete all the overlays. - (mapc 'delete-overlay (car ol)) - (mapc 'delete-overlay (cdr ol))) - (recentf-dialog-mode) - (setq recentf-edit-selected-items nil) - ;; Insert the dialog header + (recentf-dialog (format "*%s - Edit list*" recentf-menu-title) + (set (make-local-variable 'recentf-edit-list) nil) (widget-insert - "\ -Select the files to be deleted from the recent list.\n\n\ -Click on Ok to update the list. \ -Click on Cancel or type \"q\" to quit.\n") + "Click on OK to delete selected files from the recent list. +Click on Cancel or type `q' to cancel.\n") ;; Insert the list of files as checkboxes (dolist (item recentf-list) - (widget-create - 'checkbox - :value nil ; unselected checkbox - :format "\n %[%v%] %t" - :tag item - :notify 'recentf-edit-list-action)) + (widget-create 'checkbox + :value nil ; unselected checkbox + :format "\n %[%v%] %t" + :tag item + :notify 'recentf-edit-list-select)) (widget-insert "\n\n") - ;; Insert the Ok button (widget-create 'push-button - :notify (lambda (&rest ignore) - (if recentf-edit-selected-items - (let ((i 0)) - (kill-buffer (current-buffer)) - (dolist (e recentf-edit-selected-items) - (setq recentf-list (delq e recentf-list) - i (1+ i))) - (message "%S file(s) removed from the list" i) - (recentf-clear-data)) - (message "No file selected"))) - "Ok") + :notify 'recentf-edit-list-validate + :help-echo "Delete selected files from the recent list" + "Ok") (widget-insert " ") - ;; Insert the Cancel button (widget-create 'push-button :notify 'recentf-cancel-dialog "Cancel") - (widget-setup) - (goto-char (point-min)))) + (recentf-dialog-goto-first 'checkbox))) +;;; Open file dialog +;; (defun recentf-open-files-action (widget &rest ignore) - "Button WIDGET action that open a file. -Used internally by `recentf-open-files'. + "Open the file stored in WIDGET's value when notified. IGNORE other arguments." (kill-buffer (current-buffer)) (funcall recentf-menu-action (widget-value widget))) -(defvar recentf-open-files-item-shift "" - "Amount of space to shift right sub-menu items. -Used internally by `recentf-open-files'.") - (defun recentf-open-files-item (menu-element) - "Insert an item widget for MENU-ELEMENT in the current dialog buffer. -Used internally by `recentf-open-files'." - (let ((item (car menu-element)) - (file (cdr menu-element))) - (if (consp file) ; This is a sub-menu - (let* ((shift recentf-open-files-item-shift) - (recentf-open-files-item-shift (concat shift " "))) - (widget-create - 'item - :tag item - :sample-face 'bold - :format (concat shift "%{%t%}:\n")) - (mapc 'recentf-open-files-item file) - (widget-insert "\n")) - (widget-create - 'push-button - :button-face 'default - :tag item - :help-echo (concat "Open " file) - :format (concat recentf-open-files-item-shift "%[%t%]") - :notify 'recentf-open-files-action - file) - (widget-insert "\n")))) + "Return a widget to display MENU-ELEMENT in a dialog buffer." + (if (consp (cdr menu-element)) + ;; Represent a sub-menu with a tree widget + `(tree-widget + :open t + :match ignore + :node (item :tag ,(car menu-element) + :sample-face bold + :format "%{%t%}:\n") + ,@(mapcar 'recentf-open-files-item + (cdr menu-element))) + ;; Represent a single file with a link widget + `(link :tag ,(car menu-element) + :button-prefix "" + :button-suffix "" + :button-face default + :format "%[%t%]\n" + :help-echo ,(concat "Open " (cdr menu-element)) + :action recentf-open-files-action + ,(cdr menu-element)))) (defun recentf-open-files (&optional files buffer-name) - "Show a dialog buffer to open a recent file. -If optional argument FILES is non-nil, it specifies the list of -recently-opened files to choose from. It is the whole recent list -otherwise. -If optional argument BUFFER-NAME is non-nil, it specifies which buffer -name to use for the interaction. It is \"*`recentf-menu-title'*\" by -default." + "Show a dialog to open a recent file. +If optional argument FILES is non-nil, it is a list of recently-opened +files to choose from. It defaults to the whole recent list. +If optional argument BUFFER-NAME is non-nil, it is a buffer name to +use for the dialog. It defaults to \"*`recentf-menu-title'*\"." (interactive) - (unless files - (setq files recentf-list)) - (unless buffer-name - (setq buffer-name (format "*%s*" recentf-menu-title))) - (with-current-buffer (get-buffer-create buffer-name) - (switch-to-buffer (current-buffer)) - ;; Cleanup buffer - (let ((inhibit-read-only t) - (ol (overlay-lists))) - (erase-buffer) - ;; Delete all the overlays. - (mapc 'delete-overlay (car ol)) - (mapc 'delete-overlay (cdr ol))) - (recentf-dialog-mode) - ;; Insert the dialog header - (widget-insert "Click on a file to open it. ") - (widget-insert "Click on Cancel or type \"q\" to quit.\n\n" ) - ;; Insert the list of files as buttons - (let ((recentf-open-files-item-shift "")) - (mapc 'recentf-open-files-item - (recentf-apply-menu-filter - recentf-menu-filter - (mapcar 'recentf-make-default-menu-element files)))) - (widget-insert "\n") - ;; Insert the Cancel button + (recentf-dialog (or buffer-name (format "*%s*" recentf-menu-title)) + (widget-insert "Click on a file to open it. +Click on Cancel or type `q' to cancel.\n" ) + ;; Use a L&F that looks like the recentf menu. + (tree-widget-set-theme "folder") + (apply 'widget-create + `(group + :indent 2 + :format "\n%v\n" + ,@(mapcar 'recentf-open-files-item + (recentf-apply-menu-filter + recentf-menu-filter + (mapcar 'recentf-make-default-menu-element + (or files recentf-list)))))) (widget-create 'push-button :notify 'recentf-cancel-dialog "Cancel") - (widget-setup) - (goto-char (point-min)))) + (recentf-dialog-goto-first 'link))) (defun recentf-open-more-files () - "Show a dialog buffer to open a recent file that is not in the menu." + "Show a dialog to open a recent file that is not in the menu." (interactive) (recentf-open-files (nthcdr recentf-max-menu-items recentf-list) (format "*%s - More*" recentf-menu-title))) +;;; Save/load/cleanup the recent list +;; (defconst recentf-save-file-header ";;; Automatically generated by `recentf' on %s.\n" "Header to be written into the `recentf-save-file'.") @@ -1149,16 +1138,16 @@ Write data into the file specified by `recentf-save-file'." (interactive) (condition-case error (with-temp-buffer - (erase-buffer) - (set-buffer-file-coding-system recentf-save-file-coding-system) - (insert (format recentf-save-file-header (current-time-string))) - (recentf-dump-variable 'recentf-list recentf-max-saved-items) - (recentf-dump-variable 'recentf-filter-changer-state) - (insert "\n\n;;; Local Variables:\n" - (format ";;; coding: %s\n" recentf-save-file-coding-system) - ";;; End:\n") - (write-file (expand-file-name recentf-save-file)) - nil) + (erase-buffer) + (set-buffer-file-coding-system recentf-save-file-coding-system) + (insert (format recentf-save-file-header (current-time-string))) + (recentf-dump-variable 'recentf-list recentf-max-saved-items) + (recentf-dump-variable 'recentf-filter-changer-state) + (insert "\n\n;;; Local Variables:\n" + (format ";;; coding: %s\n" recentf-save-file-coding-system) + ";;; End:\n") + (write-file (expand-file-name recentf-save-file)) + nil) (error (warn "recentf mode: %s" (error-message-string error))))) @@ -1218,5 +1207,5 @@ that were operated on recently." (run-hooks 'recentf-load-hook) -;;; arch-tag: 78f1eec9-0d16-4d19-a4eb-2e4529edb62a +;; arch-tag: 78f1eec9-0d16-4d19-a4eb-2e4529edb62a ;;; recentf.el ends here diff --git a/lisp/replace.el b/lisp/replace.el index d5ccd8723c2..0b19d72178f 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -516,21 +516,32 @@ which will run faster and will not set the mark or print anything." Prompt for a regexp with PROMPT. Value is a list, (REGEXP)." (list (read-from-minibuffer prompt nil nil nil - 'regexp-history nil t))) + 'regexp-history nil t) + nil nil t)) -(defun keep-lines (regexp &optional rstart rend) +(defun keep-lines (regexp &optional rstart rend interactive) "Delete all lines except those containing matches for REGEXP. A match split across lines preserves all the lines it lies in. -Applies to all lines after point. +When called from Lisp (and usually interactively as well, see below) +applies to all lines starting after point. If REGEXP contains upper case characters (excluding those preceded by `\\'), the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. +This command operates on (the accessible part of) all lines whose +accessible part is entirely contained in the region determined by RSTART +and REND. (A newline ending a line counts as part of that line.) Interactively, in Transient Mark mode when the mark is active, operate -on the contents of the region. Otherwise, operate from point to the -end of the buffer." +on all lines whose accessible part is entirely contained in the region. +Otherwise, the command applies to all lines starting after point. +When calling this function from Lisp, you can pretend that it was +called interactively by passing a non-nil INTERACTIVE argument. + +This function starts looking for the next match from the end of +the previous match. Hence, it ignores matches that overlap +a previously found match." (interactive (progn @@ -539,10 +550,20 @@ end of the buffer." (if rstart (progn (goto-char (min rstart rend)) - (setq rend (copy-marker (max rstart rend)))) - (if (and transient-mark-mode mark-active) + (setq rend + (progn + (save-excursion + (goto-char (max rstart rend)) + (unless (or (bolp) (eobp)) + (forward-line 0)) + (point-marker))))) + (if (and interactive transient-mark-mode mark-active) (setq rstart (region-beginning) - rend (copy-marker (region-end))) + rend (progn + (goto-char (region-end)) + (unless (or (bolp) (eobp)) + (forward-line 0)) + (point-marker))) (setq rstart (point) rend (point-max-marker))) (goto-char rstart)) @@ -556,7 +577,7 @@ end of the buffer." (if (not (re-search-forward regexp rend 'move)) (delete-region start rend) (let ((end (save-excursion (goto-char (match-beginning 0)) - (beginning-of-line) + (forward-line 0) (point)))) ;; Now end is first char preserved by the new match. (if (< start end) @@ -566,22 +587,34 @@ end of the buffer." ;; If the match was empty, avoid matching again at same place. (and (< (point) rend) (= (match-beginning 0) (match-end 0)) - (forward-char 1)))))) + (forward-char 1))))) + (set-marker rend nil) + nil) -(defun flush-lines (regexp &optional rstart rend) - "Delete lines containing matches for REGEXP. -If a match is split across lines, all the lines it lies in are deleted. -Applies to lines after point. +(defun flush-lines (regexp &optional rstart rend interactive) + "Delete lines containing matches for REGEXP. +When called from Lisp (and usually when called interactively as +well, see below), applies to the part of the buffer after point. +The line point is in is deleted if and only if it contains a +match for regexp starting after point. If REGEXP contains upper case characters (excluding those preceded by `\\'), the matching is case-sensitive. Second and third arg RSTART and REND specify the region to operate on. +Lines partially contained in this region are deleted if and only if +they contain a match entirely contained in it. Interactively, in Transient Mark mode when the mark is active, operate on the contents of the region. Otherwise, operate from point to the -end of the buffer." +end of (the accessible portion of) the buffer. When calling this function +from Lisp, you can pretend that it was called interactively by passing +a non-nil INTERACTIVE argument. + +If a match is split across lines, all the lines it lies in are deleted. +They are deleted _before_ looking for the next match. Hence, a match +starting on the same line at which another match ended is ignored." (interactive (progn @@ -591,7 +624,7 @@ end of the buffer." (progn (goto-char (min rstart rend)) (setq rend (copy-marker (max rstart rend)))) - (if (and transient-mark-mode mark-active) + (if (and interactive transient-mark-mode mark-active) (setq rstart (region-beginning) rend (copy-marker (region-end))) (setq rstart (point) @@ -603,13 +636,18 @@ end of the buffer." (while (and (< (point) rend) (re-search-forward regexp rend t)) (delete-region (save-excursion (goto-char (match-beginning 0)) - (beginning-of-line) + (forward-line 0) (point)) - (progn (forward-line 1) (point))))))) + (progn (forward-line 1) (point)))))) + (set-marker rend nil) + nil) -(defun how-many (regexp &optional rstart rend) - "Print number of matches for REGEXP following point. +(defun how-many (regexp &optional rstart rend interactive) + "Print and return number of matches for REGEXP following point. +When called from Lisp and INTERACTIVE is omitted or nil, just return +the number, do not print it; if INTERACTIVE is t, the function behaves +in all respects has if it had been called interactively. If REGEXP contains upper case characters (excluding those preceded by `\\'), the matching is case-sensitive. @@ -618,18 +656,24 @@ Second and third arg RSTART and REND specify the region to operate on. Interactively, in Transient Mark mode when the mark is active, operate on the contents of the region. Otherwise, operate from point to the -end of the buffer." +end of (the accessible portion of) the buffer. + +This function starts looking for the next match from the end of +the previous match. Hence, it ignores matches that overlap +a previously found match." (interactive (keep-lines-read-args "How many matches for (regexp): ")) (save-excursion (if rstart - (goto-char (min rstart rend)) - (if (and transient-mark-mode mark-active) + (progn + (goto-char (min rstart rend)) + (setq rend (max rstart rend))) + (if (and interactive transient-mark-mode mark-active) (setq rstart (region-beginning) - rend (copy-marker (region-end))) + rend (region-end)) (setq rstart (point) - rend (point-max-marker))) + rend (point-max))) (goto-char rstart)) (let ((count 0) opoint @@ -641,7 +685,10 @@ end of the buffer." (if (= opoint (point)) (forward-char 1) (setq count (1+ count)))) - (message "%d occurrences" count)))) + (when interactive (message "%d occurrence%s" + count + (if (= count 1) "" "s"))) + count))) (defvar occur-mode-map @@ -892,8 +939,7 @@ buffer for each buffer where you invoke `occur'." (defun occur (regexp &optional nlines) "Show all lines in the current buffer containing a match for REGEXP. - -If a match spreads across multiple lines, all those lines are shown. +This function can not handle matches that span more than one line. Each line is displayed with NLINES lines before and after, or -NLINES before if NLINES is negative. @@ -1001,9 +1047,9 @@ See also `multi-occur'." (display-buffer occur-buf) (setq next-error-last-buffer occur-buf)) (kill-buffer occur-buf))) - (run-hooks 'occur-hook)) - (setq buffer-read-only t) - (set-buffer-modified-p nil)))) + (setq buffer-read-only t) + (set-buffer-modified-p nil) + (run-hooks 'occur-hook))))) (defun occur-engine-add-prefix (lines) (mapcar @@ -1603,15 +1649,15 @@ make, or the user didn't cancel the call." ;; Change markers to numbers in the match data ;; since lots of markers slow down editing. (push (list (point) replaced -;;; If the replacement has already happened, all we need is the -;;; current match start and end. We could get this with a trivial -;;; match like -;;; (save-excursion (goto-char (match-beginning 0)) -;;; (search-forward (match-string 0)) -;;; (match-data t)) -;;; if we really wanted to avoid manually constructing match data. -;;; Adding current-buffer is necessary so that match-data calls can -;;; return markers which are appropriate for editing. +;;; If the replacement has already happened, all we need is the +;;; current match start and end. We could get this with a trivial +;;; match like +;;; (save-excursion (goto-char (match-beginning 0)) +;;; (search-forward (match-string 0)) +;;; (match-data t)) +;;; if we really wanted to avoid manually constructing match data. +;;; Adding current-buffer is necessary so that match-data calls can +;;; return markers which are appropriate for editing. (if replaced (list (match-beginning 0) diff --git a/lisp/simple.el b/lisp/simple.el index 08e87737288..3f9b4788373 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -3442,18 +3442,14 @@ Outline mode sets this." (when (and (not done) (not (integerp selective-display)) (not (line-move-invisible-p (point)))) - ;; We avoid vertical-motion when possible - ;; because that has to fontify. - (forward-line 1) - ;; If there are overlays in and around - ;; the text we moved over, we need to be - ;; sophisticated. (unless (overlays-in (max (1- pos-before) (point-min)) (min (1+ (point)) (point-max))) + ;; We avoid vertical-motion when possible + ;; because that has to fontify. + (forward-line 1) (setq line-done t))) - ;; Otherwise move a more sophisticated way. - ;; (What's the logic behind this code?) (and (not done) (not line-done) + ;; Otherwise move a more sophisticated way. (zerop (vertical-motion 1)) (if (not noerror) (signal 'end-of-buffer nil) @@ -3473,9 +3469,9 @@ Outline mode sets this." (when (and (not done) (not (integerp selective-display)) (not (line-move-invisible-p (1- (point))))) - (forward-line -1) (unless (overlays-in (max (1- (point)) (point-min)) (min (1+ pos-before) (point-max))) + (forward-line -1) (setq line-done t))) (and (not done) (not line-done) (zerop (vertical-motion -1)) diff --git a/lisp/startup.el b/lisp/startup.el index fa18b607b2d..a570581d02b 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -444,24 +444,23 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'." ;; frame-notice-user-settings didn't (such as on a tty). ;; frame-set-background-mode is idempotent, so it won't ;; cause any harm if it's already been done. - (let ((frame-background-mode frame-background-mode) - (frame (selected-frame)) + (let ((frame (selected-frame)) term) (when (and (null window-system) - ;; Don't override a possibly customized value. - (null frame-background-mode) - ;; Don't override user specifications. - (null (frame-parameter frame 'reverse)) + ;; Don't override default set by files in lisp/term. + (null default-frame-background-mode) (let ((bg (frame-parameter frame 'background-color))) (or (null bg) - (member bg '(unspecified "unspecified-bg"))))) + (member bg '(unspecified "unspecified-bg" + "unspecified-fg"))))) + (setq term (getenv "TERM")) ;; Some files in lisp/term do a better job with the ;; background mode, but we leave this here anyway, in ;; case they remove those files. (if (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)" term) - (setq frame-background-mode 'light))) + (setq default-frame-background-mode 'light))) (frame-set-background-mode (selected-frame))))) ;; Now we know the user's default font, so add it to the menu. diff --git a/lisp/subr.el b/lisp/subr.el index 8bcdc42706f..8e871673bbc 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -937,7 +937,7 @@ the hook's buffer-local value rather than its default value." (set hook hook-value)))))) (defun add-to-list (list-var element &optional append) - "Add to the value of LIST-VAR the element ELEMENT if it isn't there yet. + "Add ELEMENT to the value of LIST-VAR if it isn't there yet. The test for presence of ELEMENT is done with `equal'. If ELEMENT is added, it is added at the beginning of the list, unless the optional argument APPEND is non-nil, in which case @@ -959,15 +959,18 @@ other hooks, such as major mode hooks, can do the job." (defun add-to-ordered-list (list-var element &optional order) - "Add to the value of LIST-VAR the element ELEMENT if it isn't there yet. + "Add ELEMENT to the value of LIST-VAR if it isn't there yet. The test for presence of ELEMENT is done with `eq'. The resulting list is reordered so that the elements are in the order given by each element's numeric list order. Elements without a numeric list order are placed at the end of the list. -If the third optional argument ORDER is non-nil, set the -element's list order to the given value. +If the third optional argument ORDER is a number (integer or +float), set the element's list order to the given value. If +ORDER is nil or omitted, do not change the numeric order of +ELEMENT. If ORDER has any other value, remove the numeric order +of ELEMENT if it has one. The list order for each element is stored in LIST-VAR's `list-order' property. @@ -1717,8 +1720,12 @@ See also `with-temp-buffer'." (defmacro with-selected-window (window &rest body) "Execute the forms in BODY with WINDOW as the selected window. The value returned is the value of the last form in BODY. -This does not alter the buffer list ordering. -This function saves and restores the selected window, as well as + +This macro saves and restores the current buffer, since otherwise +its normal operation could potentially make a different +buffer current. It does not alter the buffer list ordering. + +This macro saves and restores the selected window, as well as the selected window in each frame. If the previously selected window of some frame is no longer live at the end of BODY, that frame's selected window is left alone. If the selected window is @@ -1734,15 +1741,16 @@ See also `with-temp-buffer'." (save-selected-window-alist (mapcar (lambda (frame) (list frame (frame-selected-window frame))) (frame-list)))) - (unwind-protect - (progn (select-window ,window 'norecord) - ,@body) - (dolist (elt save-selected-window-alist) - (and (frame-live-p (car elt)) - (window-live-p (cadr elt)) - (set-frame-selected-window (car elt) (cadr elt)))) - (if (window-live-p save-selected-window-window) - (select-window save-selected-window-window 'norecord))))) + (save-current-buffer + (unwind-protect + (progn (select-window ,window 'norecord) + ,@body) + (dolist (elt save-selected-window-alist) + (and (frame-live-p (car elt)) + (window-live-p (cadr elt)) + (set-frame-selected-window (car elt) (cadr elt)))) + (if (window-live-p save-selected-window-window) + (select-window save-selected-window-window 'norecord)))))) (defmacro with-temp-file (file &rest body) "Create a new buffer, evaluate BODY there, and write the buffer to FILE. diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el index 7839ebba95d..a47b6787913 100644 --- a/lisp/term/rxvt.el +++ b/lisp/term/rxvt.el @@ -150,7 +150,7 @@ for the currently selected frame." "Set background mode as appropriate for the default rxvt colors." (let ((fgbg (getenv "COLORFGBG")) bg rgb) - (setq frame-background-mode 'light) ; default + (setq default-frame-background-mode 'light) (when (and fgbg (string-match ".*;\\([0-9][0-9]?\\)\\'" fgbg)) (setq bg (string-to-number (substring fgbg (match-beginning 1)))) @@ -163,7 +163,7 @@ for the currently selected frame." ;; The following line assumes that white is the 15th ;; color in rxvt-standard-colors. (* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6)) - (setq frame-background-mode 'dark))) + (setq default-frame-background-mode 'dark))) (frame-set-background-mode (selected-frame)))) ;; Do it! diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el index b55f18f6883..2a2df2564e4 100644 --- a/lisp/term/xterm.el +++ b/lisp/term/xterm.el @@ -366,7 +366,7 @@ versions of xterm." "Set background mode as appropriate for the default rxvt colors." (let ((fgbg (getenv "COLORFGBG")) bg rgb) - (setq frame-background-mode 'light) ; default + (setq default-frame-background-mode 'light) (when (and fgbg (string-match ".*;\\([0-9][0-9]?\\)\\'" fgbg)) (setq bg (string-to-number (substring fgbg (match-beginning 1)))) @@ -379,7 +379,7 @@ versions of xterm." ;; The following line assumes that white is the 15th ;; color in xterm-standard-colors. (* (apply '+ (car (cddr (nth 15 xterm-standard-colors)))) 0.6)) - (setq frame-background-mode 'dark))) + (setq default-frame-background-mode 'dark))) (frame-set-background-mode (selected-frame)))) ;; Do it! diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 2d40d6da026..1fe3c9dcbfe 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -2875,7 +2875,7 @@ Returns a list of strings." (defun artist-figlet-get-extra-args () "Read any extra arguments for figlet." - (let ((extra-args (read-input "Extra args to figlet: "))) + (let ((extra-args (read-string "Extra args to figlet: "))) (if (string= extra-args "") nil extra-args))) @@ -2916,7 +2916,7 @@ This is done by calling the function specified by `artist-text-renderer', which must return a list of strings, to be inserted in the buffer. Text already in the buffer ``shines thru'' blanks in the rendered text." - (let* ((input-text (read-input "Type text to render: ")) + (let* ((input-text (read-string "Type text to render: ")) (rendered-text (artist-funcall artist-text-renderer input-text))) (artist-text-insert-see-thru x y rendered-text))) @@ -2927,7 +2927,7 @@ This is done by calling the function specified by `artist-text-renderer', which must return a list of strings, to be inserted in the buffer. Blanks in the rendered text overwrites any text in the buffer." - (let* ((input-text (read-input "Type text to render: ")) + (let* ((input-text (read-string "Type text to render: ")) (rendered-text (artist-funcall artist-text-renderer input-text))) (artist-text-insert-overwrite x y rendered-text))) diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 8c2d0937a5a..fc74fc67041 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -66,10 +66,6 @@ 'emacs)) "The type of Emacs we are currently running.") -(defvar flyspell-use-local-map - (or (eq flyspell-emacs 'xemacs) - (not (string< emacs-version "20")))) - ;*---------------------------------------------------------------------*/ ;* User configuration ... */ ;*---------------------------------------------------------------------*/ @@ -403,34 +399,22 @@ property of the major mode name.") ;*---------------------------------------------------------------------*/ ;* The minor mode declaration. */ ;*---------------------------------------------------------------------*/ -(eval-when-compile (defvar flyspell-local-mouse-map)) - (defvar flyspell-mouse-map (let ((map (make-sparse-keymap))) - (if flyspell-use-meta-tab - (define-key map "\M-\t" #'flyspell-auto-correct-word)) (define-key map (if (featurep 'xemacs) [button2] [down-mouse-2]) #'flyspell-correct-word) - (define-key map flyspell-auto-correct-binding 'flyspell-auto-correct-previous-word) - (define-key map [(control \,)] 'flyspell-goto-next-error) - (define-key map [(control \.)] 'flyspell-auto-correct-word) - map)) + map) + "Keymap for Flyspell to put on erroneous words.") (defvar flyspell-mode-map (let ((map (make-sparse-keymap))) - ;; mouse, keyboard bindings and misc definition (if flyspell-use-meta-tab (define-key map "\M-\t" 'flyspell-auto-correct-word)) - (cond - ;; I don't understand this test, so I left it as is. --Stef - ((or (featurep 'xemacs) flyspell-use-local-map) - (define-key map flyspell-auto-correct-binding 'flyspell-auto-correct-previous-word) - (define-key map [(control ?\,)] 'flyspell-goto-next-error) - (define-key map [(control ?\.)] 'flyspell-auto-correct-word))) - map)) - -;; the name of the overlay property that defines the keymap -(defvar flyspell-overlay-keymap-property-name 'keymap) + (define-key map flyspell-auto-correct-binding 'flyspell-auto-correct-previous-word) + (define-key map [(control ?\,)] 'flyspell-goto-next-error) + (define-key map [(control ?\.)] 'flyspell-auto-correct-word) + map) + "Minor mode keymap for Flyspell mode--for the whole buffer.") ;; dash character machinery (defvar flyspell-consider-dash-as-word-delimiter-flag nil @@ -569,22 +553,6 @@ in your .emacs file. (let ((mode-predicate (get major-mode 'flyspell-mode-predicate))) (if mode-predicate (setq flyspell-generic-check-word-p mode-predicate))) - ;; work around the fact that the `local-map' text-property replaces the - ;; buffer's local map rather than shadowing it. - (set (make-local-variable 'flyspell-mouse-map) - (let ((map (copy-keymap flyspell-mouse-map))) - (set-keymap-parent map (current-local-map)) - (if (and (eq flyspell-emacs 'emacs) - (not (string< emacs-version "20"))) - (define-key map '[tool-bar] nil)) - map)) - (set (make-local-variable 'flyspell-mode-map) - (let ((map (copy-keymap flyspell-mode-map))) - (set-keymap-parent map (current-local-map)) - (if (and (eq flyspell-emacs 'emacs) - (not (string< emacs-version "20"))) - (define-key map '[tool-bar] nil)) - map)) ;; the welcome message (if (and flyspell-issue-message-flag flyspell-issue-welcome-flag @@ -1570,10 +1538,7 @@ for the overlay." (overlay-put flyspell-overlay 'flyspell-overlay t) (overlay-put flyspell-overlay 'evaporate t) (overlay-put flyspell-overlay 'help-echo "mouse-2: correct word at point") - (if flyspell-use-local-map - (overlay-put flyspell-overlay - flyspell-overlay-keymap-property-name - flyspell-mouse-map)) + (overlay-put flyspell-overlay 'keymap flyspell-mouse-map) (when (eq face 'flyspell-incorrect) (and (stringp flyspell-before-incorrect-word-string) (overlay-put flyspell-overlay 'before-string diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index 67af240f522..eda2872df68 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1438,80 +1438,79 @@ quit spell session exited." end (car (cdr (cdr word))) word (car word)) - ;; now check spelling of word if it has 3 or more characters. - (cond - ((> (length word) 2) - (or quietly - (message "Checking spelling of %s..." - (funcall ispell-format-word word))) - (ispell-send-string "%\n") ; put in verbose mode - (ispell-send-string (concat "^" word "\n")) - ;; wait until ispell has processed word - (while (progn - (ispell-accept-output) - (not (string= "" (car ispell-filter))))) - ;;(ispell-send-string "!\n") ;back to terse mode. - (setq ispell-filter (cdr ispell-filter)) ; remove extra \n - (if (and ispell-filter (listp ispell-filter)) - (if (> (length ispell-filter) 1) - (error "Ispell and its process have different character maps") - (setq poss (ispell-parse-output (car ispell-filter))))) - (cond ((eq poss t) - (or quietly - (message "%s is correct" - (funcall ispell-format-word word))) - (and (fboundp 'extent-at) - (extent-at start) - (delete-extent (extent-at start)))) - ((stringp poss) - (or quietly - (message "%s is correct because of root %s" - (funcall ispell-format-word word) - (funcall ispell-format-word poss))) - (and (fboundp 'extent-at) - (extent-at start) - (delete-extent (extent-at start)))) - ((null poss) (message "Error in ispell process")) - (ispell-check-only ; called from ispell minor mode. - (if (fboundp 'make-extent) - (let ((ext (make-extent start end))) - (set-extent-property ext 'face ispell-highlight-face) - (set-extent-property ext 'priority 2000)) - (beep) - (message "%s is incorrect"(funcall ispell-format-word word)))) - (t ; prompt for correct word. - (save-window-excursion - (setq replace (ispell-command-loop - (car (cdr (cdr poss))) - (car (cdr (cdr (cdr poss)))) - (car poss) start end))) - (cond ((equal 0 replace) - (ispell-add-per-file-word-list (car poss))) - (replace - (setq new-word (if (atom replace) replace (car replace)) - cursor-location (+ (- (length word) (- end start)) - cursor-location)) - (if (not (equal new-word (car poss))) - (progn - (delete-region start end) - (setq start (point)) - (ispell-insert-word new-word) - (setq end (point)))) - (if (not (atom replace)) ;recheck spelling of replacement - (progn - (if (car (cdr replace)) ; query replace requested - (save-window-excursion - (query-replace word new-word t))) - (goto-char start) - ;; single word could be split into multiple words - (setq ispell-quit (not (ispell-region start end))) - )))) - ;; keep if rechecking word and we keep choices win. - (if (get-buffer ispell-choices-buffer) - (kill-buffer ispell-choices-buffer)))) - (ispell-pdict-save ispell-silently-savep) - ;; NB: Cancels ispell-quit incorrectly if called from ispell-region - (if ispell-quit (setq ispell-quit nil replace 'quit)))) + ;; At this point it used to ignore 2-letter words. + ;; But that is silly; if the user asks for it, we should do it. - rms. + (or quietly + (message "Checking spelling of %s..." + (funcall ispell-format-word word))) + (ispell-send-string "%\n") ; put in verbose mode + (ispell-send-string (concat "^" word "\n")) + ;; wait until ispell has processed word + (while (progn + (ispell-accept-output) + (not (string= "" (car ispell-filter))))) + ;;(ispell-send-string "!\n") ;back to terse mode. + (setq ispell-filter (cdr ispell-filter)) ; remove extra \n + (if (and ispell-filter (listp ispell-filter)) + (if (> (length ispell-filter) 1) + (error "Ispell and its process have different character maps") + (setq poss (ispell-parse-output (car ispell-filter))))) + (cond ((eq poss t) + (or quietly + (message "%s is correct" + (funcall ispell-format-word word))) + (and (fboundp 'extent-at) + (extent-at start) + (delete-extent (extent-at start)))) + ((stringp poss) + (or quietly + (message "%s is correct because of root %s" + (funcall ispell-format-word word) + (funcall ispell-format-word poss))) + (and (fboundp 'extent-at) + (extent-at start) + (delete-extent (extent-at start)))) + ((null poss) (message "Error in ispell process")) + (ispell-check-only ; called from ispell minor mode. + (if (fboundp 'make-extent) + (let ((ext (make-extent start end))) + (set-extent-property ext 'face ispell-highlight-face) + (set-extent-property ext 'priority 2000)) + (beep) + (message "%s is incorrect"(funcall ispell-format-word word)))) + (t ; prompt for correct word. + (save-window-excursion + (setq replace (ispell-command-loop + (car (cdr (cdr poss))) + (car (cdr (cdr (cdr poss)))) + (car poss) start end))) + (cond ((equal 0 replace) + (ispell-add-per-file-word-list (car poss))) + (replace + (setq new-word (if (atom replace) replace (car replace)) + cursor-location (+ (- (length word) (- end start)) + cursor-location)) + (if (not (equal new-word (car poss))) + (progn + (delete-region start end) + (setq start (point)) + (ispell-insert-word new-word) + (setq end (point)))) + (if (not (atom replace)) ;recheck spelling of replacement + (progn + (if (car (cdr replace)) ; query replace requested + (save-window-excursion + (query-replace word new-word t))) + (goto-char start) + ;; single word could be split into multiple words + (setq ispell-quit (not (ispell-region start end))) + )))) + ;; keep if rechecking word and we keep choices win. + (if (get-buffer ispell-choices-buffer) + (kill-buffer ispell-choices-buffer)))) + (ispell-pdict-save ispell-silently-savep) + ;; NB: Cancels ispell-quit incorrectly if called from ispell-region + (if ispell-quit (setq ispell-quit nil replace 'quit)) (goto-char cursor-location) ; return to original location replace))) diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el index 635bb6b5a98..9db111ea7a9 100644 --- a/lisp/textmodes/org.el +++ b/lisp/textmodes/org.el @@ -1,11 +1,11 @@ -;;; org.el --- Outline-based notes management and organizer +;; org.el --- Outline-based notes management and organizer ;; Carstens outline-mode for keeping track of everything. ;; Copyright (c) 2004, 2005 Free Software Foundation ;; ;; Author: Carsten Dominik <dominik at science dot uva dot nl> ;; Keywords: outlines, hypermedia, calendar ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 3.11 +;; Version: 3.12 ;; ;; This file is part of GNU Emacs. ;; @@ -80,10 +80,20 @@ ;; ;; Changes: ;; ------- +;; Version 3.12 +;; - Tables can store formulas (one per column) and compute fields. +;; Not quite like a full spreadsheet, but very powerful. +;; - table.el keybinding is now `C-c ~'. +;; - Numeric argument to org-cycle does `show-subtree' above on level ARG. +;; - Small changes to keys in agenda buffer. Affected keys: +;; [w] weekly view; [d] daily view; [D] toggle diary inclusion. +;; - Bug fixes. +;; ;; Version 3.11 ;; - Links inserted with C-c C-l are now by default enclosed in angle ;; brackets. See the new variable `org-link-format'. ;; - ">" terminates a link, this is a way to have several links in a line. +;; Both "<" and ">" are no longer allowed as characters in a link. ;; - Archiving of finished tasks. ;; - C-<up>/<down> bindings removed, to allow access to paragraph commands. ;; - Compatibility with CUA-mode (see variable `org-CUA-compatible'). @@ -168,7 +178,7 @@ ;;; Customization variables -(defvar org-version "3.11" +(defvar org-version "3.12" "The version number of the file org.el.") (defun org-version () (interactive) @@ -445,7 +455,7 @@ is used instead.") (goto-char (point-min)) (while (re-search-forward re nil t) (setq key (match-string 1) value (match-string 2)) - (cond + (cond ((equal key "CATEGORY") (if (string-match "[ \t]+$" value) (setq value (replace-match "" t t value))) @@ -485,7 +495,7 @@ is used instead.") org-todo-kwd-max-priority (1- (length org-todo-keywords)) org-ds-keyword-length (+ 2 (max (length org-deadline-string) (length org-scheduled-string))) - org-done-string + org-done-string (nth (1- (length org-todo-keywords)) org-todo-keywords) org-todo-regexp (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords @@ -565,7 +575,7 @@ When nil, cursor will remain in the current window." (defcustom org-select-agenda-window t "Non-nil means, after creating an agenda, move cursor into Agenda window. -When nil, cursor will remain in the current window." +When nil, cursor will remain in the current window." :group 'org-agenda :type 'boolean) @@ -601,7 +611,7 @@ When nil, always start on the current day." When nil, date-less entries will only be shown if `org-agenda' is called with a prefix argument. When non-nil, the TODO entries will be listed at the top of the agenda, before -the entries for specific days." +the entries for specific days." :group 'org-agenda :type 'boolean) @@ -646,7 +656,7 @@ priority. Leaving out `category-keep' would mean that items will be sorted across categories by priority." :group 'org-agenda - :type '(repeat + :type '(repeat (choice (const time-up) (const time-down) @@ -722,7 +732,7 @@ the variable `org-agenda-time-grid'." :group 'org-agenda :type 'boolean) -(defcustom org-agenda-time-grid +(defcustom org-agenda-time-grid '((daily today require-timed) "----------------" (800 1000 1200 1400 1600 1800 2000)) @@ -741,7 +751,7 @@ The second item is a string which will be places behing the grid time. The third item is a list of integers, indicating the times that should have a grid line." :group 'org-agenda - :type + :type '(list (set :greedy t :tag "Grid Display Options" (const :tag "Show grid in single day agenda display" daily) @@ -835,7 +845,7 @@ unnecessary clutter." (defcustom org-archive-location "%s_archive::" "The location where subtrees should be archived. -This string consists of two parts, separated by a double-colon. +This string consists of two parts, separated by a double-colon. The first part is a file name - when omitted, archiving happens in the same file. %s will be replaced by the current file name (without directory part). @@ -864,7 +874,7 @@ Here are a few examples: You may set this option on a per-file basis by adding to the buffer a line like - + #+ARCHIVE: basement::** Finished Tasks" :group 'org-structure :type 'string) @@ -1201,9 +1211,70 @@ line will be formatted with <th> tags." :group 'org-table :type 'boolean) + +(defgroup org-table-calculation nil + "Options concerning tables in Org-mode." + :tag "Org Table Calculation" + :group 'org) + (defcustom org-table-copy-increment t "Non-nil means, increment when copying current field with \\[org-table-copy-down]." - :group 'org-table + :group 'org-table-calculation + :type 'boolean) + +(defcustom org-calc-default-modes + '(calc-internal-prec 12 + calc-float-format (float 5) + calc-angle-mode deg + calc-prefer-frac nil + calc-symbolic-mode nil) + "List with Calc mode settings for use in calc-eval for table formulas. +The list must contain alternating symbols (calc modes variables and values. +Don't remove any of the default settings, just change the values. Org-mode +relies on the variables to be present in the list." + :group 'org-table-calculation + :type 'plist) + +(defcustom org-table-formula-evaluate-inline t + "Non-nil means, TAB and RET evaluate a formula in current table field. +If the current field starts with an equal sign, it is assumed to be a formula +which should be evaluated as described in the manual and in the documentation +string of the command `org-table-eval-formula'. This feature requires the +Emacs calc package. +When this variable is nil, formula calculation is only available through +the command \\[org-table-eval-formula]." + :group 'org-table-calculation + :type 'boolean) + + +(defcustom org-table-formula-use-constants t + "Non-nil means, interpret constants in formulas in tables. +A constant looks like `$c' or `$Grav' and will be replaced before evaluation +by the value given in `org-table-formula-constants', or by a value obtained +from the `constants.el' package." + :group 'org-table-calculation + :type 'boolean) + +(defcustom org-table-formula-constants nil + "Alist with constant names and values, for use in table formulas. +The car of each element is a name of a constant, without the `$' before it. +The cdr is the value as a string. For example, if you'd like to use the +speed of light in a formula, you would configure + + (setq org-table-formula-constants '((\"c\" . \"299792458.\"))) + +and then use it in an equation like `$1*$c'." + :group 'org-table-calculation + :type '(repeat + (cons (string :tag "name") + (string :tag "value")))) + +(defcustom org-table-formula-numbers-only nil + "Non-nil means, calculate only with numbers in table formulas. +Then all input fields will be converted to a number, and the result +must also be a number. When nil, calc's full potential is available +in table calculations, including symbolics etc." + :group 'org-table-calculation :type 'boolean) (defcustom org-table-tab-recognizes-table.el t @@ -1432,7 +1503,6 @@ Otherwise, the buffer will just be saved to a file and stay hidden." :group 'org-export :type 'boolean) - (defgroup org-faces nil "Faces for highlighting in Org-mode." :tag "Org Faces" @@ -1556,7 +1626,16 @@ When this is non-nil, the headline after the keyword is set to the "Face for items scheduled previously, and not yet done." :group 'org-faces) -(defface org-link +(defface org-formula + '((((type tty pc) (class color) (background light)) (:foreground "red")) + (((type tty pc) (class color) (background dark)) (:foreground "red1")) + (((class color) (background light)) (:foreground "Firebrick")) + (((class color) (background dark)) (:foreground "chocolate1")) + (t (:bold t :italic t))) + "Face for items scheduled previously, and not yet done." + :group 'org-faces) + +(defface org-link '((((type tty) (class color)) (:foreground "cyan" :weight bold)) (((class color) (background light)) (:foreground "Purple")) (((class color) (background dark)) (:foreground "Cyan")) @@ -1649,6 +1728,7 @@ When this is non-nil, the headline after the keyword is set to the (defvar org-struct-menu) (defvar org-org-menu) +(defvar org-tbl-menu) ;; We use a before-change function to check if a table might need ;; an update. @@ -1656,14 +1736,13 @@ When this is non-nil, the headline after the keyword is set to the "Indicates of a table might need an update. This variable is set by `org-before-change-function'. `org-table-align' sets it back to nil.") - (defvar org-mode-hook nil) (defvar org-inhibit-startup nil) ; Dynamically-scoped param. ;;;###autoload (define-derived-mode org-mode outline-mode "Org" - "Outline-based notes management and organizer, alias + "Outline-based notes management and organizer, alias \"Carstens outline-mode for keeping track of everything.\" Org-mode develops organizational tasks around a NOTES file which @@ -1681,6 +1760,7 @@ The following commands are available: \\{org-mode-map}" (easy-menu-add org-org-menu) + (easy-menu-add org-tbl-menu) (org-install-agenda-files-menu) (setq outline-regexp "\\*+") (if org-startup-truncated (setq truncate-lines t)) @@ -1693,11 +1773,11 @@ The following commands are available: (add-hook 'before-change-functions 'org-before-change-function nil 'local) ;; Paragraph regular expressions - (set (make-local-variable 'paragraph-separate) "\f\\|[ ]*$") + (set (make-local-variable 'paragraph-separate) "\f\\|[ ]*$\\|\\([*\f]+\\)") (set (make-local-variable 'paragraph-start) "\f\\|[ ]*$\\|\\([*\f]+\\)") ;; Inhibit auto-fill for headers, tables and fixed-width lines. (set (make-local-variable 'auto-fill-inhibit-regexp) - (concat "\\*" + (concat "\\*\\|#" (if (or org-enable-table-editor org-enable-fixed-width-editor) (concat "\\|[ \t]*[" @@ -1709,6 +1789,20 @@ The following commands are available: (interactive-p) (= (point-min) (point-max))) (insert " -*- mode: org -*-\n\n")) + + ;; Get rid of Outline menus, they are not needed + ;; Need to do this here because define-derived-mode sets up + ;; the keymap so late. + (if org-xemacs-p + (progn + (delete-menu-item '("Headings")) + (delete-menu-item '("Show")) + (delete-menu-item '("Hide")) + (set-menubar-dirty-flag)) + (define-key org-mode-map [menu-bar headings] 'undefined) + (define-key org-mode-map [menu-bar hide] 'undefined) + (define-key org-mode-map [menu-bar show] 'undefined)) + (unless org-inhibit-startup (if org-startup-with-deadline-check (call-interactively 'org-check-deadlines) @@ -1725,10 +1819,13 @@ The following commands are available: (beginning-of-line 1) (looking-at "\\s-*\\(|\\|\\+-+\\)"))) +(defsubst org-current-line (&optional pos) + (+ (if (bolp) 1 0) (count-lines (point-min) (or pos (point))))) + ;;; Font-Lock stuff (defvar org-mouse-map (make-sparse-keymap)) -(define-key org-mouse-map +(define-key org-mouse-map (if org-xemacs-p [button2] [mouse-2]) 'org-open-at-mouse) (define-key org-mouse-map (if org-xemacs-p [button3] [mouse-3]) 'org-find-file-at-mouse) @@ -1804,11 +1901,10 @@ The following commands are available: (list (concat "\\<" org-scheduled-string) '(0 'org-warning t)) ;; '("\\(\\s-\\|^\\)\\(\\*\\([a-zA-Z]+\\)\\*\\)\\([^a-zA-Z*]\\|$\\)" ;; (3 'bold)) - ;; '("\\(\\s-\\|^\\)\\(/\\([a-zA-Z]+\\)/\\)\\([^a-zA-Z*]\\|$\\)" + ;; '("\\(\\s-\\|^\\)\\(/\\([a-zA-Z]+\\)/\\)\\([^a-zA-Z*]\\|$\\)" ;; (3 'italic)) - ;; '("\\(\\s-\\|^\\)\\(_\\([a-zA-Z]+\\)_\\)\\([^a-zA-Z*]\\|$\\)" + ;; '("\\(\\s-\\|^\\)\\(_\\([a-zA-Z]+\\)_\\)\\([^a-zA-Z*]\\|$\\)" ;; (3 'underline)) - '("\\<FIXME\\>" (0 'org-warning t)) (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") '(1 'org-warning t)) '("^#.*" (0 'font-lock-comment-face t)) @@ -1819,13 +1915,16 @@ The following commands are available: '(1 'org-done t))) '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" (1 'org-table t)) - '("^[ \t]*\\(:.*\\)" (1 'org-table t))))) + '("^[ \t]*\\(:.*\\)" (1 'org-table t)) + '("| *\\(=[^|\n]*\\)" (1 'org-formula t)) + '("^[ \t]*| *\\([#!$*]\\) *|" (1 'org-formula t)) + ))) (set (make-local-variable 'org-font-lock-keywords) (append (if org-noutline-p ; FIXME: I am not sure if eval will work ; on XEmacs if noutline is ever ported '((eval . (list "^\\(\\*+\\).*" - 0 '(nth + 0 '(nth (% (- (match-end 1) (match-beginning 1) 1) org-n-levels) org-level-faces) @@ -1839,7 +1938,7 @@ The following commands are available: (set (make-local-variable 'font-lock-defaults) '(org-font-lock-keywords t nil nil backward-paragraph)) (kill-local-variable 'font-lock-keywords) nil)) - + (defun org-unfontify-region (beg end &optional maybe_loudly) "Remove fontification and activation overlays from links." (font-lock-default-unfontify-region beg end) @@ -1870,8 +1969,9 @@ The following commands are available: zoom in further. 3. SUBTREE: Show the entire subtree, including body text. -- When there is a numeric prefix, go ARG levels up and do a `show-subtree', - keeping cursor position. +- When there is a numeric prefix, go up to a heading with level ARG, do + a `show-subtree' and return to the previous cursor position. If ARG + is negative, go up that many levels. - When point is not at the beginning of a headline, execute `indent-relative', like TAB normally does. See the option @@ -1937,7 +2037,8 @@ The following commands are available: ;; Show-subtree, ARG levels up from here. (save-excursion (org-back-to-heading) - (outline-up-heading arg) + (outline-up-heading (if (< arg 0) (- arg) + (- (outline-level) arg))) (org-show-subtree))) ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) @@ -2273,8 +2374,6 @@ in the region." (save-excursion (setq end (copy-marker end)) (goto-char beg) - ;; (if (fboundp 'deactivate-mark) (deactivate-mark)) - ;; (if (fboundp 'zmacs-deactivate-region) (zmacs-deactivate-region)) (if (and (re-search-forward (concat "^" outline-regexp) nil t) (< (point) end)) (funcall fun)) @@ -2558,7 +2657,7 @@ heading be marked DONE, and the current time will be added." (end-of-line 0)) ;; Make the heading visible, and the following as well (let ((org-show-following-heading t)) (org-show-hierarchy-above)) - (if (re-search-forward + (if (re-search-forward (concat "^" (regexp-quote (make-string level ?*)) "[ \t]") nil t) (progn (goto-char (match-beginning 0)) (insert "\n") @@ -2605,9 +2704,10 @@ At all other locations, this simply calls `ispell-complete-word'." (let* ((end (point)) (beg (save-excursion (if (equal (char-before (point)) ?\ ) (backward-char 1)) - (skip-chars-backward "a-zA-Z0-9_:") + (skip-chars-backward "a-zA-Z0-9_:$") (point))) (texp (equal (char-before beg) ?\\)) + (form (equal (char-before beg) ?=)) (opt (equal (buffer-substring (max (point-at-bol) (- beg 2)) beg) "#+")) @@ -2617,13 +2717,16 @@ At all other locations, this simply calls `ispell-complete-word'." (table (cond (opt (setq type :opt) - (mapcar (lambda (x) + (mapcar (lambda (x) (string-match "^#\\+\\(\\([A-Z_]+:?\\).*\\)" x) (cons (match-string 2 x) (match-string 1 x))) (org-split-string (org-get-current-options) "\n"))) - (texp + (texp (setq type :tex) org-html-entities) + (form + (setq type :form) + '(("sum") ("sumv") ("sumh"))) ((string-match "\\`\\*+[ \t]*\\'" (buffer-substring (point-at-bol) beg)) (setq type :todo) @@ -2631,7 +2734,7 @@ At all other locations, this simply calls `ispell-complete-word'." (t (progn (ispell-complete-word arg) (throw 'exit nil))))) (completion (try-completion pattern table))) (cond ((eq completion t) - (if (equal type :opt) + (if (equal type :opt) (insert (substring (cdr (assoc (upcase pattern) table)) (length pattern))))) ((null completion) @@ -2639,7 +2742,7 @@ At all other locations, this simply calls `ispell-complete-word'." (ding)) ((not (string= pattern completion)) (delete-region beg end) - (if (string-match " +$" completion) + (if (string-match " +$" completion) (setq completion (replace-match "" t t completion))) (insert completion) (if (get-buffer-window "*Completions*") @@ -2876,9 +2979,9 @@ ACTION can be set, up, or down." (save-match-data (if (not (string-match org-priority-regexp s)) (* 1000 (- org-lowest-priority org-default-priority)) - (* 1000 (- org-lowest-priority + (* 1000 (- org-lowest-priority (string-to-char (match-string 2 s))))))) - + ;;; Timestamps (defvar org-last-changed-timestamp nil) @@ -2910,7 +3013,7 @@ at the cursor, it will be modified." (setq time (let ((this-command this-command)) (org-read-date arg 'totime))) (and (org-at-timestamp-p) (replace-match - (setq org-last-changed-timestamp + (setq org-last-changed-timestamp (format-time-string fmt time)) t t)) (message "Timestamp updated")) @@ -2940,8 +3043,8 @@ but this can be configured with the variables `parse-time-months' and While prompting, a calendar is popped up - you can also select the date with the mouse (button 1). The calendar shows a period of three -month. To scroll it to other months, use the keys `>' and `<'. -If you don't like the calendar, turn it off with +month. To scroll it to other months, use the keys `>' and `<'. +If you don't like the calendar, turn it off with \(setq org-popup-calendar-for-date-prompt nil). With optional argument TO-TIME, the date will immediately be converted @@ -2955,7 +3058,7 @@ used to insert the time stamp into the buffer to include the time." ;; Default time is either today, or, when entering a range, ;; the range start. (if (save-excursion - (re-search-backward + (re-search-backward (concat org-ts-regexp "--\\=") (- (point) 20) t)) (apply @@ -3066,7 +3169,7 @@ This is used by `org-read-date' in a temporary keymap for the calendar buffer." (time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date)))) (setq ans1 (format-time-string "%Y-%m-%d" time))) (if (active-minibuffer-window) (exit-minibuffer)))) - + (defun org-check-deadlines (ndays) "Check if there are any deadlines due or past due. A deadline is considered due if it happens within `org-deadline-warning-days' @@ -3358,10 +3461,10 @@ The following commands are available: (add-hook 'post-command-hook 'org-agenda-post-command-hook nil 'local) (add-hook 'pre-command-hook 'org-unhighlight nil 'local) (setq org-agenda-follow-mode nil) - (easy-menu-change + (easy-menu-change '("Agenda") "Agenda Files" (append - (list + (list ["Edit File List" (customize-variable 'org-agenda-files) t] "--") (mapcar 'org-file-menu-entry org-agenda-files))) @@ -3378,7 +3481,8 @@ The following commands are available: (define-key org-agenda-mode-map "l" 'org-agenda-recenter) (define-key org-agenda-mode-map "t" 'org-agenda-todo) (define-key org-agenda-mode-map "." 'org-agenda-goto-today) -(define-key org-agenda-mode-map "w" 'org-agenda-toggle-week-view) +(define-key org-agenda-mode-map "d" 'org-agenda-day-view) +(define-key org-agenda-mode-map "w" 'org-agenda-week-view) (define-key org-agenda-mode-map (org-key 'S-right) 'org-agenda-date-later) (define-key org-agenda-mode-map (org-key 'S-left) 'org-agenda-date-earlier) @@ -3388,7 +3492,7 @@ The following commands are available: (int-to-string (pop l)) 'digit-argument))) (define-key org-agenda-mode-map "f" 'org-agenda-follow-mode) -(define-key org-agenda-mode-map "d" 'org-agenda-toggle-diary) +(define-key org-agenda-mode-map "D" 'org-agenda-toggle-diary) (define-key org-agenda-mode-map "g" 'org-agenda-toggle-time-grid) (define-key org-agenda-mode-map "r" 'org-agenda-redo) (define-key org-agenda-mode-map "q" 'org-agenda-quit) @@ -3422,7 +3526,7 @@ The following commands are available: (defvar org-agenda-keymap (copy-keymap org-agenda-mode-map) "Local keymap for agenda entries from Org-mode.") -(define-key org-agenda-keymap +(define-key org-agenda-keymap (if org-xemacs-p [(button2)] [(mouse-2)]) 'org-agenda-goto-mouse) (define-key org-agenda-keymap (if org-xemacs-p [(button3)] [(mouse-3)]) 'org-agenda-show-mouse) @@ -3434,7 +3538,7 @@ The following commands are available: ["Show" org-agenda-show t] ["Go To (other window)" org-agenda-goto t] ["Go To (one window)" org-agenda-switch-to t] - ["Follow Mode" org-agenda-follow-mode + ["Follow Mode" org-agenda-follow-mode :style toggle :selected org-agenda-follow-mode :active t] "--" ["Cycle TODO" org-agenda-todo t] @@ -3454,8 +3558,11 @@ The following commands are available: ["Next Dates" org-agenda-later (local-variable-p 'starting-day)] ["Previous Dates" org-agenda-earlier (local-variable-p 'starting-day)] "--" - ["Week/Day View" org-agenda-toggle-week-view - (local-variable-p 'starting-day)] + ["Day View" org-agenda-day-view :active (local-variable-p 'starting-day) + :style radio :selected (equal org-agenda-ndays 1)] + ["Week View" org-agenda-week-view :active (local-variable-p 'starting-day) + :style radio :selected (equal org-agenda-ndays 7)] + "--" ["Include Diary" org-agenda-toggle-diary :style toggle :selected org-agenda-include-diary :active t] ["Use Time Grid" org-agenda-toggle-time-grid @@ -3552,7 +3659,7 @@ dates." (org-respect-restriction t) (past t) s e rtn d) - (setq org-agenda-redo-command + (setq org-agenda-redo-command (list 'progn (list 'switch-to-buffer-other-window (current-buffer)) (list 'org-timeline include-all))) @@ -3561,7 +3668,7 @@ dates." (setq day-numbers (delq nil (mapcar (lambda(x) (if (>= x today) x nil)) day-numbers)))) - (switch-to-buffer-other-window + (switch-to-buffer-other-window (get-buffer-create org-agenda-buffer-name)) (setq buffer-read-only nil) (erase-buffer) @@ -3576,7 +3683,7 @@ dates." (setq date (calendar-gregorian-from-absolute d)) (setq s (point)) (if dotodo - (setq rtn (org-agenda-get-day-entries + (setq rtn (org-agenda-get-day-entries entry date :todo :timestamp)) (setq rtn (org-agenda-get-day-entries entry date :timestamp))) (if (or rtn (equal d today)) @@ -3632,7 +3739,7 @@ NDAYS defaults to `org-agenda-ndays'." (day-numbers (list start)) (inhibit-redisplay t) s e rtn rtnall file date d start-pos end-pos todayp nd) - (setq org-agenda-redo-command + (setq org-agenda-redo-command (list 'org-agenda include-all start-day ndays)) ;; Make the list of days (setq ndays (or ndays org-agenda-ndays) @@ -3644,7 +3751,7 @@ NDAYS defaults to `org-agenda-ndays'." (if (not (equal (current-buffer) (get-buffer org-agenda-buffer-name))) (progn (delete-other-windows) - (switch-to-buffer-other-window + (switch-to-buffer-other-window (get-buffer-create org-agenda-buffer-name)))) (setq buffer-read-only nil) (erase-buffer) @@ -3662,7 +3769,7 @@ NDAYS defaults to `org-agenda-ndays'." rtn (org-agenda-get-day-entries file date :todo)) (setq rtnall (append rtnall rtn)))) - (when rtnall + (when rtnall (insert "ALL CURRENTLY OPEN TODO ITEMS:\n") (add-text-properties (point-min) (1- (point)) (list 'face 'org-link)) @@ -3696,12 +3803,12 @@ NDAYS defaults to `org-agenda-ndays'." (extract-calendar-year date))) (put-text-property s (1- (point)) 'face 'org-link) - (if rtnall (insert + (if rtnall (insert (org-finalize-agenda-entries ;; FIXME: condition needed (org-agenda-add-time-grid-maybe rtnall nd todayp)) "\n")) - (put-text-property s (1- (point)) 'day d)))) + (put-text-property s (1- (point)) 'day d)))) (goto-char (point-min)) (setq buffer-read-only t) (if org-fit-agenda-window @@ -3784,19 +3891,29 @@ With prefix ARG, go back that many times `org-agenda-ndays'." (org-agenda (if (boundp 'include-all-loc) include-all-loc nil) (- starting-day (* arg org-agenda-ndays)))) -(defun org-agenda-toggle-week-view () - "Toggle weekly/daily view for aagenda." +(defun org-agenda-week-view () + "Switch to weekly view for agenda." + (interactive) + (unless (boundp 'starting-day) + (error "Not allowed")) + (setq org-agenda-ndays 7) + (org-agenda include-all-loc + (or (get-text-property (point) 'day) + starting-day)) + (org-agenda-set-mode-name) + (message "Switched to week view")) + +(defun org-agenda-day-view () + "Switch to weekly view for agenda." (interactive) (unless (boundp 'starting-day) (error "Not allowed")) - (setq org-agenda-ndays - (if (equal org-agenda-ndays 1) 7 1)) - (org-agenda include-all-loc + (setq org-agenda-ndays 1) + (org-agenda include-all-loc (or (get-text-property (point) 'day) starting-day)) (org-agenda-set-mode-name) - (message "Switched to %s view" - (if (equal org-agenda-ndays 1) "day" "week"))) + (message "Switched to day view")) (defun org-agenda-next-date-line (&optional arg) "Jump to the next line indicating a date in agenda buffer." @@ -3880,7 +3997,7 @@ With prefix ARG, go back that many times `org-agenda-ndays'." "Get the (Emacs Calendar) diary entries for DATE." (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") (diary-display-hook '(fancy-diary-display)) - (list-diary-entries-hook + (list-diary-entries-hook (cons 'org-diary-default-entry list-diary-entries-hook)) entries (org-disable-diary t)) @@ -3904,12 +4021,12 @@ With prefix ARG, go back that many times `org-agenda-ndays'." (kill-buffer fancy-diary-buffer))) (when entries (setq entries (org-split-string entries "\n")) - (setq entries - (mapcar + (setq entries + (mapcar (lambda (x) (setq x (org-format-agenda-item "" x "Diary" 'time)) ;; Extend the text properties to the beginning of the line - (add-text-properties + (add-text-properties 0 (length x) (text-properties-at (1- (length x)) x) x) @@ -3950,7 +4067,7 @@ date. Itt also removes lines that contain only whitespace." 0 (length string) (list 'mouse-face 'highlight 'keymap org-agenda-keymap - 'help-echo + 'help-echo (format "mouse-2 or RET jump to diary file %s" (abbreviate-file-name (buffer-file-name))) @@ -3972,7 +4089,7 @@ Needed to avoid empty dates which mess up holiday display." These are the files which are being checked for agenda entries. Optional argument FILE means, use this file instead of the current. It is possible (but not recommended) to add this function to the -`org-mode-hook'." +`org-mode-hook'." (interactive) (catch 'exit (let* ((file (or file (buffer-file-name) @@ -3987,7 +4104,7 @@ It is possible (but not recommended) to add this function to the org-agenda-files)))) (if (not present) (progn - (setq org-agenda-files + (setq org-agenda-files (cons afile org-agenda-files)) ;; Make sure custom.el does not end up with Org-mode (let ((org-mode-hook nil) (default-major-mode 'fundamental-mode)) @@ -4004,7 +4121,7 @@ Optional argument FILE means, use this file instead of the current." (let* ((file (or file (buffer-file-name))) (true-file (file-truename file)) (afile (abbreviate-file-name file)) - (files (delq nil (mapcar + (files (delq nil (mapcar (lambda (x) (if (equal true-file (file-truename x)) @@ -4051,6 +4168,7 @@ sure that TODAY is included in the list." "Return diary information from org-files. This function can be used in a \"sexp\" diary entry in the Emacs calendar. It accesses org files and extracts information from those files to be + listed in the diary. The function accepts arguments specifying what items should be listed. The following arguments are allowed: @@ -4089,9 +4207,9 @@ also be written as The function expects the lisp variables `entry' and `date' to be provided by the caller, because this is how the calendar works. Don't use this -function from a program - use `org-agenda-get-day-entries' instead." +function from a program - use `org-agenda-get-day-entries' instead." (org-agenda-maybe-reset-markers) - (org-compile-agenda-prefix-format org-agenda-prefix-format) + (org-compile-prefix-format org-agenda-prefix-format) (setq args (or args '(:deadline :scheduled :timestamp))) (let* ((files (if (and entry (stringp entry) (string-match "\\S-" entry)) (list entry) @@ -4131,7 +4249,7 @@ the documentation of `org-diary'." (if (org-region-active-p) ;; Respect a region to restrict search (narrow-to-region (region-beginning) (region-end))) - ;; If we work for the calendar or many files, + ;; If we work for the calendar or many files, ;; get rid of any restriction (widen)) ;; The way we repeatedly append to `results' makes it O(n^2) :-( @@ -4197,7 +4315,7 @@ the documentation of `org-diary'." (goto-char (match-beginning 1)) (setq marker (org-agenda-new-marker (point-at-bol)) txt (org-format-agenda-item "" (match-string 1)) - priority + priority (+ (org-get-priority txt) (if org-todo-kwd-priority-p (- org-todo-kwd-max-priority -2 @@ -4269,7 +4387,7 @@ the documentation of `org-diary'." (if deadlinep (add-text-properties 0 (length txt) - (list 'face + (list 'face (if donep 'org-done 'org-warning) 'undone-face 'org-warning 'done-face 'org-done @@ -4329,8 +4447,8 @@ the documentation of `org-diary'." (setq txt org-agenda-no-heading-message)) (when txt (add-text-properties - 0 (length txt) - (append + 0 (length txt) + (append (list 'org-marker (org-agenda-new-marker pos) 'org-hd-marker (org-agenda-new-marker pos1) 'priority (+ (- 10 diff) (org-get-priority txt)) @@ -4422,7 +4540,7 @@ the documentation of `org-diary'." (setq hdmarker (org-agenda-new-marker (match-end 1))) (goto-char (match-end 1)) (looking-at "\\*+[ \t]*\\([^\r\n]+\\)") - (setq txt (org-format-agenda-item + (setq txt (org-format-agenda-item (format (if (= d1 d2) "" "(%d/%d): ") (1+ (- d0 d1)) (1+ (- d2 d1))) (match-string 1) nil (if (= d0 d1) timestr)))) @@ -4504,7 +4622,7 @@ only the correctly processes TXT should be returned - this is used by (setq s0 (match-string 0 ts) s1 (match-string (if plain 1 2) ts) s2 (match-string (if plain 8 4) ts)) - + ;; If the times are in TXT (not in DOTIMES), and the prefix will list ;; them, we might want to remove them there to avoid duplication. ;; The user can turn this off with a variable. @@ -4517,7 +4635,7 @@ only the correctly processes TXT should be returned - this is used by ;; Normalize the time(s) to 24 hour (if s1 (setq s1 (org-get-time-of-day s1 'string))) (if s2 (setq s2 (org-get-time-of-day s2 'string)))) - + ;; Create the final string (if noprefix (setq rtn txt) @@ -4529,7 +4647,7 @@ only the correctly processes TXT should be returned - this is used by category (if (symbolp category) (symbol-name category) category)) ;; Evaluate the compiled format (setq rtn (concat (eval org-prefix-format-compiled) txt))) - + ;; And finally add the text properties (add-text-properties 0 (length rtn) (list 'category (downcase category) @@ -4560,11 +4678,11 @@ only the correctly processes TXT should be returned - this is used by (while (setq time (pop gridtimes)) (unless (and remove (member time have)) (setq time (int-to-string time)) - (push (org-format-agenda-item + (push (org-format-agenda-item nil string "" ;; FIXME: put a category? (concat (substring time 0 -2) ":" (substring time -2))) new) - (put-text-property + (put-text-property 1 (length (car new)) 'face 'org-time-grid (car new)))) (if (member 'time-up org-agenda-sorting-strategy) (append new list) @@ -4603,7 +4721,7 @@ If not found, return nil. The optional STRING argument forces conversion into a 5 character wide string HH:MM." (save-match-data - (when + (when (or (string-match "\\<\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)\\([AaPp][Mm]\\)?\\> *" s) @@ -4659,7 +4777,7 @@ HH:MM." (category-up (org-cmp-category a b)) (category-down (if category-up (- category-up) nil)) (category-keep (if category-up +1 nil))) ; FIXME +1 or -1? - (cdr (assoc + (cdr (assoc (eval (cons 'or org-agenda-sorting-strategy)) '((-1 . t) (1 . nil) (nil . nil)))))) @@ -4674,7 +4792,7 @@ and by additional input from the age of a schedules or deadline entry." (defun org-agenda-goto (&optional highlight) "Go to the Org-mode file which contains the item at point." (interactive) - (let* ((marker (or (get-text-property (point) 'org-marker) + (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) (pos (marker-position marker))) @@ -4691,7 +4809,7 @@ and by additional input from the age of a schedules or deadline entry." (defun org-agenda-switch-to () "Go to the Org-mode file which contains the item at point." (interactive) - (let* ((marker (or (get-text-property (point) 'org-marker) + (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) (pos (marker-position marker))) @@ -4805,7 +4923,7 @@ the new TODO state." (beginning-of-line 1) (add-text-properties (point-at-bol) (point-at-eol) props) (if fixface - (add-text-properties + (add-text-properties (point-at-bol) (point-at-eol) (list 'face (if org-last-todo-state-is-todo @@ -4902,7 +5020,7 @@ be used to request time specification in the time stamp." All the standard commands work: block, weekly etc" (interactive) (require 'diary-lib) - (let* ((char (progn + (let* ((char (progn (message "Diary entry: [d]ay [w]eekly [m]onthly [y]early [a]nniversary [b]lock [c]yclic") (read-char-exclusive))) (cmd (cdr (assoc char @@ -4932,7 +5050,7 @@ All the standard commands work: block, weekly etc" (progn (fset 'calendar-cursor-to-date (lambda (&optional error) - (calendar-gregorian-from-absolute + (calendar-gregorian-from-absolute (get-text-property point 'day)))) (call-interactively cmd)) (fset 'calendar-cursor-to-date oldf))))) @@ -4955,7 +5073,7 @@ the cursor position." (progn (fset 'calendar-cursor-to-date (lambda (&optional error) - (calendar-gregorian-from-absolute + (calendar-gregorian-from-absolute (get-text-property point 'day)))) (call-interactively cmd)) (fset 'calendar-cursor-to-date oldf)))) @@ -5005,7 +5123,7 @@ This is a command that has to be installed in `calendar-mode-map'." (unless day (error "Don't know which date to convert")) (setq date (calendar-gregorian-from-absolute day)) - (setq s (concat + (setq s (concat "Gregorian: " (calendar-date-string date) "\n" "ISO: " (calendar-iso-date-string date) "\n" "Day of Yr: " (calendar-day-of-year-string date) "\n" @@ -5118,9 +5236,9 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file." ((string= type "shell") (let ((cmd path)) - (while (string-match "@{" cmd) + (while (string-match "@{" cmd) (setq cmd (replace-match "<" t t cmd))) - (while (string-match "@}" cmd) + (while (string-match "@}" cmd) (setq cmd (replace-match ">" t t cmd))) (if (or (not org-confirm-shell-links) (yes-or-no-p (format "Execute \"%s\" in the shell? " cmd))) @@ -5217,7 +5335,7 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file." (widen) (goto-char (point-max)) (if (re-search-backward - (concat "^Message-ID:\\s-+" (regexp-quote + (concat "^Message-ID:\\s-+" (regexp-quote (or article ""))) nil t) (rmail-what-message)))))) @@ -5304,7 +5422,7 @@ For file links, arg negates `org-line-numbers-in-file-links'." (or (bbdb-record-name (bbdb-current-record)) (bbdb-record-company (bbdb-current-record)))) link (org-make-link cpltxt))) - + ((eq major-mode 'calendar-mode) (let ((cd (calendar-cursor-to-date))) (setq link @@ -5330,8 +5448,8 @@ For file links, arg negates `org-line-numbers-in-file-links'." folder) (setq folder (replace-match "" t t folder))) (setq cpltxt (concat author " on: " subject)) - (setq link (concat cpltxt "\n " - (org-make-link + (setq link (concat cpltxt "\n " + (org-make-link "vm:" folder "#" message-id)))))) ((eq major-mode 'wl-summary-mode) @@ -5343,7 +5461,7 @@ For file links, arg negates `org-line-numbers-in-file-links'." (author (wl-summary-line-from)) ; FIXME: how to get author name? (subject "???")) ; FIXME: How to get subject of email? (setq cpltxt (concat author " on: " subject)) - (setq link (concat cpltxt "\n " + (setq link (concat cpltxt "\n " (org-make-link "wl:" wl-summary-buffer-folder-name "#" message-id))))) @@ -5357,7 +5475,7 @@ For file links, arg negates `org-line-numbers-in-file-links'." (author (mail-fetch-field "from")) (subject (mail-fetch-field "subject"))) (setq cpltxt (concat author " on: " subject)) - (setq link (concat cpltxt "\n " + (setq link (concat cpltxt "\n " (org-make-link "rmail:" folder "#" message-id))))))) @@ -5411,7 +5529,7 @@ For file links, arg negates `org-line-numbers-in-file-links'." (if (org-xor org-line-numbers-in-file-links arg) (setq cpltxt (concat cpltxt - ":" (int-to-string + ":" (int-to-string (+ (if (bolp) 1 0) (count-lines (point-min) (point))))))) (setq link (org-make-link cpltxt))) @@ -5581,7 +5699,7 @@ If the variable `org-adapt-indentation' is non-nil, the entire text is also indented so that it starts in the same column as the headline \(i.e. after the stars). -See also the variable `org-reverse-note-order'." +See also the variable `org-reverse-note-order'." (catch 'quit (let* ((txt (buffer-substring (point-min) (point-max))) (fastp current-prefix-arg) @@ -5687,6 +5805,10 @@ See also the variable `org-reverse-note-order'." "Detects an org-type table line.") (defconst org-table-dataline-regexp "^[ \t]*|[^-]" "Detects an org-type table line.") +(defconst org-table-auto-recalculate-regexp "^[ \t]*| *# *\\(|\\|$\\)" + "Detects a table line marked for automatic recalculation.") +(defconst org-table-recalculate-regexp "^[ \t]*| *[#*] *\\(|\\|$\\)" + "Detects a table line marked for automatic recalculation.") (defconst org-table-hline-regexp "^[ \t]*|-" "Detects an org-type table hline.") (defconst org-table1-hline-regexp "^[ \t]*\\+-[-+]" @@ -5843,6 +5965,7 @@ This is being used to correctly align a single field after TAB or RET.") "List of max width of fields in each column. This is being used to correctly align a single field after TAB or RET.") +(defvar org-last-recalc-line nil) (defun org-table-align () "Align the table at point by aligning all vertical bars." @@ -5878,7 +6001,12 @@ This is being used to correctly align a single field after TAB or RET.") (if (string-match "^ *" (car lines)) (setq indent (make-string (- (match-end 0) (match-beginning 0)) ?\ ))) ;; Mark the hlines - (setq lines (mapcar (lambda (l) (if (string-match "^ *|-" l) nil l)) + (setq lines (mapcar (lambda (l) + (if (string-match "^ *|-" l) + nil + (if (string-match "[ \t]+$" l) + (substring l 0 (match-beginning 0)) + l))) lines)) ;; Get the data fields (setq fields (mapcar @@ -5994,15 +6122,17 @@ With argument TABLE-TYPE, go to the end of a table.el-type table." (let* ((pos (point)) s org-table-may-need-update (col (org-table-current-column)) (num (nth (1- col) org-table-last-alignment)) - l f) + l f n o) (when (> col 0) (skip-chars-backward "^|\n") (if (looking-at " *\\([^|\n]*?\\) *|") (progn (setq s (match-string 1) + o (match-string 0) l (max 1 (- (match-end 0) (match-beginning 0) 3))) - (setq f (format (if num " %%%ds |" " %%-%ds |") l)) - (replace-match (format f s t t))) + (setq f (format (if num " %%%ds |" " %%-%ds |") l) + n (format f s t t)) + (or (equal n o) (replace-match n))) (setq org-table-may-need-update t)) (goto-char pos)))))) @@ -6010,6 +6140,8 @@ With argument TABLE-TYPE, go to the end of a table.el-type table." "Go to the next field in the current table. Before doing so, re-align the table if necessary." (interactive) + (org-table-maybe-eval-formula) + (org-table-maybe-recalculate-line) (if (and org-table-automatic-realign org-table-may-need-update) (org-table-align)) @@ -6032,6 +6164,8 @@ Before doing so, re-align the table if necessary." "Go to the previous field in the table. Before doing so, re-align the table if necessary." (interactive) + (org-table-justify-field-maybe) + (org-table-maybe-recalculate-line) (if (and org-table-automatic-realign org-table-may-need-update) (org-table-align)) @@ -6048,6 +6182,8 @@ Before doing so, re-align the table if necessary." "Go to the next row (same column) in the current table. Before doing so, re-align the table if necessary." (interactive) + (org-table-maybe-eval-formula) + (org-table-maybe-recalculate-line) (if (or (looking-at "[ \t]*$") (save-excursion (skip-chars-backward " \t") (bolp))) (newline) @@ -6071,7 +6207,7 @@ If the field at the cursor is empty, copy into it the content of the nearest non-empty field above. With argument N, use the Nth non-empty field. If the current field is not empty, it is copied down to the next row, and the cursor is moved with it. Therefore, repeating this command causes the -column to be filled row-by-row. +column to be filled row-by-row. If the variable `org-table-copy-increment' is non-nil and the field is an integer, it will be incremented while copying." (interactive "p") @@ -6081,23 +6217,29 @@ integer, it will be incremented while copying." (beg (org-table-begin)) txt) (org-table-check-inside-data-field) - (if non-empty (progn (org-table-next-row) (org-table-blank-field))) - (if (save-excursion - (setq txt - (catch 'exit - (while (progn (beginning-of-line 1) - (re-search-backward org-table-dataline-regexp - beg t)) - (org-table-goto-column colpos t) - (if (and (looking-at - "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|") - (= (setq n (1- n)) 0)) - (throw 'exit (match-string 1))))))) + (if non-empty + (progn + (setq txt (org-trim field)) + (org-table-next-row) + (org-table-blank-field)) + (save-excursion + (setq txt + (catch 'exit + (while (progn (beginning-of-line 1) + (re-search-backward org-table-dataline-regexp + beg t)) + (org-table-goto-column colpos t) + (if (and (looking-at + "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|") + (= (setq n (1- n)) 0)) + (throw 'exit (match-string 1)))))))) + (if txt (progn (if (and org-table-copy-increment (string-match "^[0-9]+$" txt)) (setq txt (format "%d" (+ (string-to-int txt) 1)))) (insert txt) + (org-table-maybe-recalculate-line) (org-table-align)) (error "No non-empty field found")))) @@ -6119,10 +6261,10 @@ I.e. not on a hline or before the first or after the last column?" (org-table-check-inside-data-field) (if (and (interactive-p) (org-region-active-p)) (let (org-table-clip) - (org-table-cut-region)) + (org-table-cut-region (region-beginning) (region-end))) (skip-chars-backward "^|") (backward-char 1) - (if (looking-at "|[^|]+") + (if (looking-at "|[^|\n]+") (let* ((pos (match-beginning 0)) (match (match-string 0)) (len (length match))) @@ -6136,15 +6278,16 @@ N defaults to current field. If REPLACE is a string, replace field with this value. The return value is always the old value." (and n (org-table-goto-column n)) - (skip-chars-backward "^|") + (skip-chars-backward "^|\n") (backward-char 1) (if (looking-at "|[^|\r\n]*") (let* ((pos (match-beginning 0)) (val (buffer-substring (1+ pos) (match-end 0)))) (if replace (replace-match (concat "|" replace))) - (goto-char (+ 2 pos)) - val))) + (goto-char (min (point-at-eol) (+ 2 pos))) + val) + (forward-char 1) "")) (defun org-table-current-column () "Find out which column we are in. @@ -6162,7 +6305,7 @@ When called interactively, column is also displayed in echo area." (defun org-table-goto-column (n &optional on-delim force) "Move the cursor to the Nth column in the current table line. With optional argument ON-DELIM, stop with point before the left delimiter -of the field. +of the field. If there are less than N fields, just go to after the last delimiter. However, when FORCE is non-nil, create new columns if necessary." (let ((pos (point-at-eol))) @@ -6173,10 +6316,10 @@ However, when FORCE is non-nil, create new columns if necessary." (and force (progn (end-of-line 1) (skip-chars-backward "^|") - (insert " |") - (backward-char 2) t))))) + (insert " | ")))))) +; (backward-char 2) t))))) (when (and force (not (looking-at ".*|"))) - (save-excursion (end-of-line 1) (insert "|"))) + (save-excursion (end-of-line 1) (insert " | "))) (if on-delim (backward-char 1) (if (looking-at " ") (forward-char 1)))))) @@ -6255,8 +6398,9 @@ If TABLE-TYPE is non-nil, also chack for table.el-type tables." (beginning-of-line 2)) (move-marker end nil) (goto-line linepos) - (org-table-goto-column colpos)) - (org-table-align)) + (org-table-goto-column colpos) + (org-table-align) + (org-table-modify-formulas 'insert col))) (defun org-table-find-dataline () "Find a dataline in the current table, which is needed for column commands." @@ -6300,8 +6444,9 @@ If TABLE-TYPE is non-nil, also chack for table.el-type tables." (beginning-of-line 2)) (move-marker end nil) (goto-line linepos) - (org-table-goto-column colpos)) - (org-table-align)) + (org-table-goto-column colpos) + (org-table-align) + (org-table-modify-formulas 'remove col))) (defun org-table-move-column-right () "Move column to the right." @@ -6340,15 +6485,16 @@ If TABLE-TYPE is non-nil, also chack for table.el-type tables." (beginning-of-line 2)) (move-marker end nil) (goto-line linepos) - (org-table-goto-column colpos)) - (org-table-align)) + (org-table-goto-column colpos) + (org-table-align) + (org-table-modify-formulas 'swap col (if left (1- col) (1+ col))))) (defun org-table-move-row-down () - "Move table row down." + "move table row down." (interactive) (org-table-move-row nil)) (defun org-table-move-row-up () - "Move table row up." + "move table row up." (interactive) (org-table-move-row 'up)) @@ -6380,13 +6526,18 @@ With prefix ARG, insert below the current line." (interactive "P") (if (not (org-at-table-p)) (error "Not at a table")) - (let ((line (buffer-substring-no-properties (point-at-bol) (point-at-eol)))) + (let* ((line (buffer-substring-no-properties (point-at-bol) (point-at-eol))) + new) (if (string-match "^[ \t]*|-" line) - (setq line (mapcar (lambda (x) (if (member x '(?| ?+)) ?| ?\ )) line)) - (setq line (mapcar (lambda (x) (if (equal x ?|) ?| ?\ )) line))) + (setq new (mapcar (lambda (x) (if (member x '(?| ?+)) ?| ?\ )) line)) + (setq new (mapcar (lambda (x) (if (equal x ?|) ?| ?\ )) line))) + ;; Fix the first field if necessary + (setq new (concat new)) + (if (string-match "^[ \t]*| *[#$] *|" line) + (setq new (replace-match (match-string 0 line) t t new))) (beginning-of-line (if arg 2 1)) (let (org-table-may-need-update) - (apply 'insert-before-markers line) + (insert-before-markers new) (insert-before-markers "\n")) (beginning-of-line 0) (re-search-forward "| ?" (point-at-eol) t) @@ -6431,26 +6582,23 @@ With prefix ARG, insert above the current line." (move-to-column col))) -(defun org-table-cut-region () +(defun org-table-cut-region (beg end) "Copy region in table to the clipboard and blank all relevant fields." - (interactive) - (org-table-copy-region 'cut)) + (interactive "r") + (org-table-copy-region beg end 'cut)) -(defun org-table-copy-region (&optional cut) +(defun org-table-copy-region (beg end &optional cut) "Copy rectangular region in table to clipboard. A special clipboard is used which can only be accessed with `org-table-paste-rectangle'" - (interactive "P") - (unless (org-region-active-p) (error "No active region")) - (let* ((beg (region-beginning)) - (end (region-end)) - l01 c01 l02 c02 l1 c1 l2 c2 ic1 ic2 + (interactive "rP") + (let* (l01 c01 l02 c02 l1 c1 l2 c2 ic1 ic2 region cols (rpl (if cut " " nil))) (goto-char beg) (org-table-check-inside-data-field) (setq l01 (count-lines (point-min) (point)) - c01 (org-table-current-column)) + c01 (org-table-current-column)) (goto-char end) (org-table-check-inside-data-field) (setq l02 (count-lines (point-min) (point)) @@ -6470,8 +6618,9 @@ with `org-table-paste-rectangle'" (push (nreverse cols) region) (setq l1 (1+ l1))))) (setq org-table-clip (nreverse region)) - (if cut (org-table-align)))) - + (if cut (org-table-align)) + org-table-clip)) + (defun org-table-paste-rectangle () "Paste a rectangular region into a table. The upper right corner ends up in the current field. All involved fields @@ -6574,7 +6723,7 @@ blank, and the content is appended to the field above." ;; There is a region: fill as a paragraph (let ((beg (region-beginning)) nlines) - (org-table-cut-region) + (org-table-cut-region (region-beginning) (region-end)) (if (> (length (car org-table-clip)) 1) (error "Region must be limited to single column")) (setq nlines (if arg @@ -6582,7 +6731,7 @@ blank, and the content is appended to the field above." (+ (length org-table-clip) arg) arg) (length org-table-clip))) - (setq org-table-clip + (setq org-table-clip (mapcar 'list (org-wrap (mapconcat 'car org-table-clip " ") nil nlines))) (goto-char beg) @@ -6611,7 +6760,8 @@ blank, and the content is appended to the field above." (defun org-trim (s) "Remove whitespace at beginning and end of string." (if (string-match "^[ \t]+" s) (setq s (replace-match "" t t s))) - (if (string-match "[ \t]+$" s) (setq s (replace-match "" t t s)))) + (if (string-match "[ \t]+$" s) (setq s (replace-match "" t t s))) + s) (defun org-wrap (string &optional width lines) "Wrap string to either a number of lines, or a width in characters. @@ -6637,7 +6787,7 @@ The return value is a list of lines, without newlines at the end." (setq ll (org-do-wrap words w))) ll)) (t (error "Cannot wrap this"))))) - + (defun org-do-wrap (words width) "Create lines of maximum width WIDTH (in characters) from word list WORDS." @@ -6734,7 +6884,7 @@ visible when ARG is not positive" (save-excursion (funcall function))) (re-search-forward org-table-any-border-regexp nil 1))))) -(defun org-table-sum () +(defun org-table-sum (&optional beg end nlast) "Sum numbers in region of current table column. The result will be displayed in the echo area, and will be available as kill to be inserted with \\[yank]. @@ -6746,35 +6896,38 @@ column. If at least one number looks like a time HH:MM or HH:MM:SS, all other numbers are assumed to be times as well (in decimal hours) and the -numbers are added as such." +numbers are added as such. + +If NLAST is a number, only the NLAST fields will actually be summed." (interactive) (save-excursion - (let (beg end col (timecnt 0) diff h m s) - (if (org-region-active-p) - (setq beg (region-beginning) end (region-end)) + (let (col (timecnt 0) diff h m s org-table-clip) + (cond + ((and beg end)) ; beg and end given explicitly + ((org-region-active-p) + (setq beg (region-beginning) end (region-end))) + (t (setq col (org-table-current-column)) (goto-char (org-table-begin)) (unless (re-search-forward "^[ \t]*|[^-]" nil t) (error "No table data")) (org-table-goto-column col) - (skip-chars-backward "^|") +;not needed? (skip-chars-backward "^|") (setq beg (point)) (goto-char (org-table-end)) (unless (re-search-backward "^[ \t]*|[^-]" nil t) (error "No table data")) (org-table-goto-column col) - (skip-chars-forward "^|") - (setq end (point))) - (let* ((l1 (progn (goto-char beg) - (+ (if (bolp) 1 0) (count-lines (point-min) (point))))) - (l2 (progn (goto-char end) - (+ (if (bolp) 1 0) (count-lines (point-min) (point))))) - (items (if (= l1 l2) - (split-string (buffer-substring beg end)) - (split-string - (mapconcat 'identity (extract-rectangle beg end) " ")))) +;not needed? (skip-chars-forward "^|") + (setq end (point)))) + (let* ((items (apply 'append (org-table-copy-region beg end))) + (items1 (cond ((not nlast) items) + ((>= nlast (length items)) items) + (t (setq items (reverse items)) + (setcdr (nthcdr (1- nlast) items) nil) + (nreverse items)))) (numbers (delq nil (mapcar 'org-table-get-number-for-summing - items))) + items1))) (res (apply '+ numbers)) (sres (if (= timecnt 0) (format "%g" res) @@ -6784,9 +6937,11 @@ numbers are added as such." s diff) (format "%d:%02d:%02d" h m s)))) (kill-new sres) - (message (substitute-command-keys - (format "Sum of %d items: %-20s (\\[yank] will insert result into buffer)" - (length numbers) sres))))))) + (if (interactive-p) + (message (substitute-command-keys + (format "Sum of %d items: %-20s (\\[yank] will insert result into buffer)" + (length numbers) sres)))) + sres)))) (defun org-table-get-number-for-summing (s) (let (n) @@ -6808,15 +6963,136 @@ numbers are added as such." ((equal n 0) nil) (t n)))) -(defvar org-table-current-formula nil) (defvar org-table-formula-history nil) -(defun org-table-get-formula (current) - (if (and current (not (equal "" org-table-current-formula))) - org-table-current-formula - (setq org-table-current-formula - (read-string - "Formula [last]: " "" 'org-table-formula-history - org-table-current-formula)))) + +(defun org-table-get-formula (&optional equation) + "Read a formula from the minibuffer, offer stored formula as default." + (let* ((col (org-table-current-column)) + (stored-list (org-table-get-stored-formulas)) + (stored (cdr (assoc col stored-list))) + (eq (cond + ((and stored equation (string-match "^ *= *$" equation)) + stored) + ((stringp equation) + equation) + (t (read-string + "Formula: " (or stored "") 'org-table-formula-history + stored))))) + (if (not (string-match "\\S-" eq)) + (error "Empty formula")) + (if (string-match "^ *=?" eq) (setq eq (replace-match "" t t eq))) + (if (string-match " *$" eq) (setq eq (replace-match "" t t eq))) + (if stored + (setcdr (assoc col stored-list) eq) + (setq stored-list (cons (cons col eq) stored-list))) + (if (not (equal stored eq)) + (org-table-store-formulas stored-list)) + eq)) + +(defun org-table-store-formulas (alist) + "Store the list of formulas below the current table." + (setq alist (sort alist (lambda (a b) (< (car a) (car b))))) + (save-excursion + (goto-char (org-table-end)) + (if (looking-at "\\([ \t]*\n\\)*#\\+TBLFM:.*\n?") + (delete-region (point) (match-end 0))) + (insert "#+TBLFM: " + (mapconcat (lambda (x) + (concat "$" (int-to-string (car x)) "=" (cdr x))) + alist "::") + "\n"))) + +(defun org-table-get-stored-formulas () + "Return an alist withh the t=stored formulas directly after current table." + (interactive) + (let (col eq eq-alist strings string) + (save-excursion + (goto-char (org-table-end)) + (when (looking-at "\\([ \t]*\n\\)*#\\+TBLFM: *\\(.*\\)") + (setq strings (org-split-string (match-string 2) " *:: *")) + (while (setq string (pop strings)) + (if (string-match "\\$\\([0-9]+\\) *= *\\(.*[^ \t]\\)" string) + (setq col (string-to-number (match-string 1 string)) + eq (match-string 2 string) + eq-alist (cons (cons col eq) eq-alist)))))) + eq-alist)) + +(defun org-table-modify-formulas (action &rest columns) + "Modify the formulas stored below the current table. +ACTION can be `remove', `insert', `swap'. For `swap', two column numbers are +expected, for the other action only a single column number is needed." + (let ((list (org-table-get-stored-formulas)) + (nmax (length (org-split-string (buffer-substring (point-at-bol) (point-at-eol)) + "|"))) + col col1 col2) + (cond + ((null list)) ; No action needed if there are no stored formulas + ((eq action 'remove) + (setq col (car columns)) + (org-table-replace-in-formulas list col "INVALID") + (if (assoc col list) (setq list (delq (assoc col list) list))) + (loop for i from (1+ col) upto nmax by 1 do + (org-table-replace-in-formulas list i (1- i)) + (if (assoc i list) (setcar (assoc i list) (1- i))))) + ((eq action 'insert) + (setq col (car columns)) + (loop for i from nmax downto col by 1 do + (org-table-replace-in-formulas list i (1+ i)) + (if (assoc i list) (setcar (assoc i list) (1+ i))))) + ((eq action 'swap) + (setq col1 (car columns) col2 (nth 1 columns)) + (org-table-replace-in-formulas list col1 "Z") + (org-table-replace-in-formulas list col2 col1) + (org-table-replace-in-formulas list "Z" col2) + (if (assoc col1 list) (setcar (assoc col1 list) "Z")) + (if (assoc col2 list) (setcar (assoc col2 list) col1)) + (if (assoc "Z" list) (setcar (assoc "Z" list) col2))) + (t (error "Invalid action in `org-table-modify-formulas'"))) + (if list (org-table-store-formulas list)))) + +(defun org-table-replace-in-formulas (list s1 s2) + (let (elt re s) + (setq s1 (concat "$" (if (integerp s1) (int-to-string s1) s1)) + s2 (concat "$" (if (integerp s2) (int-to-string s2) s2)) + re (concat (regexp-quote s1) "\\>")) + (while (setq elt (pop list)) + (setq s (cdr elt)) + (while (string-match re s) + (setq s (replace-match s2 t t s))) + (setcdr elt s)))) + +(defvar org-table-column-names nil + "Alist with column names, derived from the `!' line.") +(defvar org-table-column-name-regexp nil + "Regular expression matching the current column names.") +(defvar org-table-local-parameters nil + "Alist with parameter names, derived from the `$' line.") + +(defun org-table-get-specials () + "Get the column nmaes and local parameters for this table." + (save-excursion + (let ((beg (org-table-begin)) (end (org-table-end)) + names name fields field cnt) + (setq org-table-column-names nil + org-table-local-parameters nil) + (goto-char beg) + (when (re-search-forward "^[ \t]*| *! *\\(|.*\\)" end t) + (setq names (org-split-string (match-string 1) " *| *") + cnt 1) + (while (setq name (pop names)) + (setq cnt (1+ cnt)) + (if (string-match "^[a-zA-Z][a-zA-Z0-9]*$" name) + (push (cons name (int-to-string cnt)) org-table-column-names)))) + (setq org-table-column-names (nreverse org-table-column-names)) + (setq org-table-column-name-regexp + (concat "\\$\\(" (mapconcat 'car org-table-column-names "\\|") "\\)\\>")) + (goto-char beg) + (while (re-search-forward "^[ \t]*| *\\$ *\\(|.*\\)" end t) + (setq fields (org-split-string (match-string 1) " *| *")) + (while (setq field (pop fields)) + (if (string-match "^\\([a-zA-Z][a-zA-Z0-9]*\\) *= *\\(.*\\)" field) + (push (cons (match-string 1 field) (match-string 2 field)) + org-table-local-parameters))))))) (defun org-this-word () ;; Get the current word @@ -6825,24 +7101,157 @@ numbers are added as such." (end (progn (skip-chars-forward "^ \t\n") (point)))) (buffer-substring-no-properties beg end)))) -(defun org-table-eval-formula (&optional ndown) +(defun org-table-maybe-eval-formula () + "Check if the current field starts with \"=\" and evaluate the formula." + ;; We already know we are in a table. Get field will only return a formula + ;; when appropriate. It might return a separator line, but no problem. + (when org-table-formula-evaluate-inline + (let* ((field (org-trim (or (org-table-get-field) ""))) + (dfield (downcase field)) + col bolpos nlast) + (when (equal (string-to-char field) ?=) + (if (string-match "^\\(=sum[vh]?\\)\\([0-9]+\\)$" dfield) + (setq nlast (1+ (string-to-number (match-string 2 dfield))) + dfield (match-string 1 dfield))) + (cond + ((equal dfield "=sumh") + (org-table-get-field + nil (org-table-sum + (save-excursion (org-table-goto-column 1) (point)) + (point) nlast))) + ((member dfield '("=sum" "=sumv")) + (setq col (org-table-current-column) + bolpos (point-at-bol)) + (org-table-get-field + nil (org-table-sum + (save-excursion + (goto-char (org-table-begin)) + (if (re-search-forward org-table-dataline-regexp bolpos t) + (progn + (goto-char (match-beginning 0)) + (org-table-goto-column col) + (point)) + (error "No datalines above current"))) + (point) nlast))) + ((and (string-match "^ *=" field) + (fboundp 'calc-eval)) + (org-table-eval-formula nil field))))))) + +(defvar org-last-recalc-undo-list nil) +(defcustom org-table-allow-line-recalculation t + "FIXME:" + :group 'org-table + :type 'boolean) + +(defvar org-recalc-commands nil + "List of commands triggering the reccalculation of a line. +Will be filled automatically during use.") + +(defvar org-recalc-marks + '((" " . "Unmarked: no special line, no automatic recalculation") + ("#" . "Automatically recalculate this line upon TAB, RET, and C-c C-c in the line") + ("*" . "Recalculate only when entire table is recalculated with `C-u C-c *'") + ("!" . "Column name definition line. Reference in formula as $name.") + ("$" . "Parameter definition line name=value. Reference in formula as $name."))) + +(defun org-table-rotate-recalc-marks (&optional newchar) + "Rotate the recalculation mark in the first column. +If in any row, the first field is not consistent with a mark, +insert a new column for the makers. +When there is an active region, change all the lines in the region, +after prompting for the marking character. +After each change, a message will be displayed indication the meaning +of the new mark." + (interactive) + (unless (org-at-table-p) (error "Not at a table")) + (let* ((marks (append (mapcar 'car org-recalc-marks) '(" "))) + (beg (org-table-begin)) + (end (org-table-end)) + (l (org-current-line)) + (l1 (if (org-region-active-p) (org-current-line (region-beginning)))) + (l2 (if (org-region-active-p) (org-current-line (region-end)))) + (have-col + (save-excursion + (goto-char beg) + (not (re-search-forward "^[ \t]*|[^-|][^|]*[^#!$*| \t][^|]*|" end t)))) + (col (org-table-current-column)) + (forcenew (car (assoc newchar org-recalc-marks))) + epos new) + (if l1 (setq newchar (char-to-string (read-char-exclusive "Change region to what mark? Type # * ! $ or SPC: ")) + forcenew (car (assoc newchar org-recalc-marks)))) + (if (and newchar (not forcenew)) + (error "Invalid NEWCHAR `%s' in `org-table-rotate-recalc-marks'" + newchar)) + (if l1 (goto-line l1)) + (save-excursion + (beginning-of-line 1) + (unless (looking-at org-table-dataline-regexp) + (error "Not at a table data line"))) + (unless have-col + (org-table-goto-column 1) + (org-table-insert-column) + (org-table-goto-column (1+ col))) + (setq epos (point-at-eol)) + (save-excursion + (beginning-of-line 1) + (org-table-get-field + 1 (if (looking-at "^[ \t]*| *\\([#!$* ]\\) *|") + (concat " " + (setq new (or forcenew + (cadr (member (match-string 1) marks)))) + " ") + " # "))) + (if (and l1 l2) + (progn + (goto-line l1) + (while (progn (beginning-of-line 2) (not (= (org-current-line) l2))) + (and (looking-at org-table-dataline-regexp) + (org-table-get-field 1 (concat " " new " ")))) + (goto-line l1))) + (if (not (= epos (point-at-eol))) (org-table-align)) + (goto-line l) + (and (interactive-p) (message (cdr (assoc new org-recalc-marks)))))) + +(defun org-table-maybe-recalculate-line () + "Recompute the current line if marked for it, and if we haven't just done it." + (interactive) + (and org-table-allow-line-recalculation + (not (and (memq last-command org-recalc-commands) + (equal org-last-recalc-line (org-current-line)))) + (save-excursion (beginning-of-line 1) + (looking-at org-table-auto-recalculate-regexp)) + (fboundp 'calc-eval) + (org-table-recalculate) t)) + +(defvar org-table-formula-debug nil + "Non-nil means, debug table formulas. +When nil, simply write \"#ERROR\" in corrupted fields.") + +(defvar modes) +(defsubst org-set-calc-mode (var value) + (setcar (or (cdr (memq var modes)) (cons nil nil)) value)) + +(defun org-table-eval-formula (&optional ndown equation + suppress-align suppress-const + suppress-store) "Replace the table field value at the cursor by the result of a calculation. -This function makes use of Dave Gillespie's calc package, arguably the most -exciting program ever written for GNU Emacs. So you need to have calc +This function makes use of Dave Gillespie's calc package, in my view the +most exciting program ever written for GNU Emacs. So you need to have calc installed in order to use this function. In a table, this command replaces the value in the current field with the result of a formula. While nowhere near the computation options of a -spreadsheet program, this is still very useful. Note that there is no -automatic updating of a calculated field, nor will the field remember the -formula. The command needs to be applied again after changing input -fields. +spreadsheet program, this is still very useful. There is no automatic +updating of a calculated field, but the table will remember the last +formula for each column. The command needs to be applied again after +changing input fields. When called, the command first prompts for a formula, which is read in the -minibuffer. Previously entered formulae are available through the history -list, and the last used formula is the default, reachable by simply -pressing RET. +minibuffer. Previously entered formulas are available through the history +list, and the last used formula for each column is offered as a default. +These stored formulas are adapted correctly when moving, inserting, or +deleting columns with the corresponding commands. The formula can be any algebraic expression understood by the calc package. Before evaluation, variable substitution takes place: \"$\" is replaced by @@ -6852,7 +7261,7 @@ here, so the command supports only horizontal computing. The formula can contain an optional printf format specifier after a semicolon, to reformat the result. -A few examples for formulae: +A few examples for formulas: $1+$2 Sum of first and second field $1+$2;%.2f Same, and format result to two digits after dec.point exp($2)+exp($1) Math functions can be used @@ -6864,38 +7273,101 @@ field, and to the same same column in all following rows, until reaching a horizontal line or the end of the table. When the command is called with a numeric prefix argument (like M-3 or C-7 or \\[universal-argument] 24), the formula is applied to the current row, and to the following n-1 rows (but not beyond a -separator line)." +separator line). + +This function can also be called from Lisp programs and offers two additional +Arguments: EQUATION can be the formula to apply. If this argument is given, +the user will not be prompted. SUPPRESS-ALIGN is used to speed-up +recursive calls by by-passing unnecessary aligns. SUPPRESS-CONST suppresses +the interpretation of constants in the formula. SUPPRESS-STORE means the +formula should not be stored, either because it is already stored, or because +it is a modified equation that should not overwrite the stored one." (interactive "P") (setq ndown (if (equal ndown '(4)) 10000 (prefix-numeric-value ndown))) (require 'calc) (org-table-check-inside-data-field) + (org-table-get-specials) (let* (fields (org-table-automatic-realign nil) + (case-fold-search nil) (down (> ndown 1)) - (formula (org-table-get-formula nil)) + (formula (if (and equation suppress-store) + equation + (org-table-get-formula equation))) (n0 (org-table-current-column)) - n form fmt x ev) + (modes (copy-sequence org-calc-default-modes)) + n form fmt x ev orig c) + ;; Parse the format (if (string-match ";" formula) (let ((tmp (org-split-string formula ";"))) - (setq formula (car tmp) fmt (nth 1 tmp)))) + (setq formula (car tmp) fmt (or (nth 1 tmp) "")) + (while (string-match "[pnfse]\\(-?[0-9]+\\)" fmt) + (setq c (string-to-char (match-string 1 fmt)) + n (string-to-number (or (match-string 1 fmt) ""))) + (if (= c ?p) (org-set-calc-mode 'calc-internal-prec n) + (org-set-calc-mode 'calc-float-format + (list (cdr (assoc c '((?n. float) (?f. fix) + (?s. sci) (?e. eng)))) + n))) + (setq fmt (replace-match "" t t fmt))) + (when (string-match "[DR]" fmt) + (org-set-calc-mode 'calc-angle-mode + (if (equal (match-string 0 fmt) "D") + 'deg 'rad)) + (setq fmt (replace-match "" t t fmt))) + (when (string-match "F" fmt) + (org-set-calc-mode 'calc-prefer-frac t) + (setq fmt (replace-match "" t t fmt))) + (when (string-match "S" fmt) + (org-set-calc-mode 'calc-symbolic-mode t) + (setq fmt (replace-match "" t t fmt))) + (unless (string-match "\\S-" fmt) + (setq fmt nil)))) + (if (and (not suppress-const) org-table-formula-use-constants) + (setq formula (org-table-formula-substitute-names formula))) + (setq orig (or (get-text-property 1 :orig-formula formula) "?")) (while (> ndown 0) (setq fields (org-split-string - (concat " " (buffer-substring - (point-at-bol) (point-at-eol))) "|")) + (buffer-substring + (point-at-bol) (point-at-eol)) " *| *")) + (if org-table-formula-numbers-only + (setq fields (mapcar + (lambda (x) (number-to-string (string-to-number x))) + fields))) (setq ndown (1- ndown)) (setq form (copy-sequence formula)) (while (string-match "\\$\\([0-9]+\\)?" form) (setq n (if (match-beginning 1) (string-to-int (match-string 1 form)) n0) - x (nth n fields)) + x (nth (1- n) fields)) (unless x (error "Invalid field specifier \"%s\"" (match-string 0 form))) - (if (equal (string-to-number x) 0) (setq x "0")) - (setq form (replace-match x t t form))) - (setq ev (calc-eval (list form) 'num)) + (if (equal x "") (setq x "0")) + (setq form (replace-match (concat "(" x ")") t t form))) + (setq ev (calc-eval (cons form modes) + (if org-table-formula-numbers-only 'num))) + + (when org-table-formula-debug + (with-output-to-temp-buffer "*Help*" + (princ (format "Substitution history of formula +Orig: %s +$xyz-> %s +$1-> %s\n" orig formula form)) + (if (listp ev) + (princ (format " %s^\nError: %s" + (make-string (car ev) ?\-) (nth 1 ev))) + (princ (format "Result: %s" ev)))) + (shrink-window-if-larger-than-buffer (get-buffer-window "*Help*")) + (unless (and (interactive-p) (not ndown)) + (unless (let (inhibit-redisplay) + (y-or-n-p "Debugging Formula. Continue to next? ")) + (org-table-align) + (error "Abort")) + (delete-window (get-buffer-window "*Help*")) + (message ""))) (if (listp ev) - (error "Invalid expression: %s (%s at %d)" form (nth 1 ev) (car ev))) + (setq fmt nil ev "#ERROR")) (org-table-blank-field) (if fmt (insert (format fmt (string-to-number ev))) @@ -6903,7 +7375,96 @@ separator line)." (if (and down (> ndown 0) (looking-at ".*\n[ \t]*|[^-]")) (call-interactively 'org-return) (setq ndown 0))) - (org-table-align))) + (or suppress-align (org-table-align)))) + +(defun org-table-recalculate (&optional all noalign) + "Recalculate the current table line by applying all stored formulas." + (interactive "P") + (or (memq this-command org-recalc-commands) + (setq org-recalc-commands (cons this-command org-recalc-commands))) + (unless (org-at-table-p) (error "Not at a table")) + (org-table-get-specials) + (let* ((eqlist (sort (org-table-get-stored-formulas) + (lambda (a b) (< (car a) (car b))))) + (inhibit-redisplay t) + (line-re org-table-dataline-regexp) + (thisline (+ (if (bolp) 1 0) (count-lines (point-min) (point)))) + (thiscol (org-table-current-column)) + beg end entry eql (cnt 0)) + ;; Insert constants in all formulas + (setq eqlist + (mapcar (lambda (x) + (setcdr x (org-table-formula-substitute-names (cdr x))) + x) + eqlist)) + (if all + (progn + (setq end (move-marker (make-marker) (1+ (org-table-end)))) + (goto-char (setq beg (org-table-begin))) + (if (re-search-forward org-table-recalculate-regexp end t) + (setq line-re org-table-recalculate-regexp) + (if (and (re-search-forward org-table-dataline-regexp end t) + (re-search-forward org-table-hline-regexp end t) + (re-search-forward org-table-dataline-regexp end t)) + (setq beg (match-beginning 0)) + nil))) ;; just leave beg where it is + (setq beg (point-at-bol) + end (move-marker (make-marker) (1+ (point-at-eol))))) + (goto-char beg) + (and all (message "Re-applying formulas to full table...")) + (while (re-search-forward line-re end t) + (unless (string-match "^ *[!$] *$" (org-table-get-field 1)) + ;; Unprotected line, recalculate + (and all (message "Re-applying formulas to full table...(line %d)" + (setq cnt (1+ cnt)))) + (setq org-last-recalc-line (org-current-line)) + (setq eql eqlist) + (while (setq entry (pop eql)) + (goto-line org-last-recalc-line) + (org-table-goto-column (car entry) nil 'force) + (org-table-eval-formula nil (cdr entry) 'noalign 'nocst 'nostore)))) + (goto-line thisline) + (org-table-goto-column thiscol) + (or noalign (org-table-align) + (and all (message "Re-applying formulas to %d lines...done" cnt))))) + +(defun org-table-formula-substitute-names (f) + "Replace $const with values in stirng F." + (let ((start 0) a n1 n2 nn1 nn2 s (f1 f)) + ;; First, check for column names + (while (setq start (string-match org-table-column-name-regexp f start)) + (setq start (1+ start)) + (setq a (assoc (match-string 1 f) org-table-column-names)) + (setq f (replace-match (concat "$" (cdr a)) t t f))) + ;; Expand ranges to vectors + (while (string-match "\\$\\([0-9]+\\)\\.\\.\\.?\\$\\([0-9]+\\)" f) + (setq n1 (string-to-number (match-string 1 f)) + n2 (string-to-number (match-string 2 f)) + nn1 (1+ (min n1 n2)) nn2 (max n1 n2) + s (concat "[($" (number-to-string (1- nn1)) ")")) + (loop for i from nn1 upto nn2 do + (setq s (concat s ",($" (int-to-string i) ")"))) + (setq s (concat s "]")) + (if (< n2 n1) (setq s (concat "rev(" s ")"))) + (setq f (replace-match s t t f))) + ;; Parameters and constants + (setq start 0) + (while (setq start (string-match "\\$\\([a-zA-Z][a-zA-Z0-9]*\\)" f start)) + (setq start (1+ start)) + (if (setq a (save-match-data + (org-table-get-constant (match-string 1 f)))) + (setq f (replace-match (concat "(" a ")") t t f)))) + (if org-table-formula-debug + (put-text-property 0 (length f) :orig-formula f1 f)) + f)) + +(defun org-table-get-constant (const) + "Find the value for a parameter or constant in a formula. +Parameters get priority." + (or (cdr (assoc const org-table-local-parameters)) + (cdr (assoc const org-table-formula-constants)) + (and (fboundp 'constants-get) (constants-get const)) + "#UNDEFINED_NAME")) ;;; The orgtbl minor mode @@ -6962,7 +7523,7 @@ table editor in arbitrary modes.") ;;;###autoload (defun orgtbl-mode (&optional arg) - "The `org-mode' table editor as a minor mode for use in other modes." + "The `org-mode' table editor as a minor mode for use in other modes." (interactive) (if (eq major-mode 'org-mode) ;; Exit without error, in case some hook functions calls this @@ -6972,6 +7533,11 @@ table editor in arbitrary modes.") (if arg (> (prefix-numeric-value arg) 0) (not orgtbl-mode))) (if orgtbl-mode (progn + (and (orgtbl-setup) (defun orgtbl-setup () nil)) + ;; Make sure we are first in minor-mode-map-alist + (let ((c (assq 'orgtbl-mode minor-mode-map-alist))) + (and c (setq minor-mode-map-alist + (cons c (delq c minor-mode-map-alist))))) (set (make-local-variable (quote org-table-may-need-update)) t) (make-local-hook (quote before-change-functions)) (add-hook 'before-change-functions 'org-before-change-function @@ -6979,7 +7545,7 @@ table editor in arbitrary modes.") (set (make-local-variable 'org-old-auto-fill-inhibit-regexp) auto-fill-inhibit-regexp) (set (make-local-variable 'auto-fill-inhibit-regexp) - (if auto-fill-inhibit-regexp + (if auto-fill-inhibit-regexp (concat "\\([ \t]*|\\|" auto-fill-inhibit-regexp) "[ \t]*|")) (easy-menu-add orgtbl-mode-menu) @@ -6994,81 +7560,134 @@ table editor in arbitrary modes.") (put 'orgtbl-mode :menu-tag "Org Table Mode") (add-minor-mode 'orgtbl-mode " OrgTbl" orgtbl-mode-map) -(defun orgtbl-make-binding (fun &rest keys) - "Create a function for binding in the table minor mode." - (list 'lambda '(arg) - (concat "Run `" (symbol-name fun) "' or the default binding.") - '(interactive "p") - (list 'if - '(org-at-table-p) - (list 'call-interactively (list 'quote fun)) - (list 'let '(orgtbl-mode) - (list 'call-interactively - (append '(or) - (mapcar (lambda (k) - (list 'key-binding k)) - keys) - '('orgtbl-error))))))) +(defun orgtbl-make-binding (fun n &rest keys) + "Create a function for binding in the table minor mode. +FUN is the command to call inside a table. N is used to create a unique +command name. KEYS are keys that should be checked in for a command +to execute outside of tables." + (eval + (list 'defun + (intern (concat "orgtbl-hijacker-command-" (int-to-string n))) + '(arg) + (concat "In tables, run `" (symbol-name fun) "'.\n" + "Outside of tables, run the binding of `" + (mapconcat (lambda (x) (format "%s" x)) keys "' or `") + "'.") + '(interactive "p") + (list 'if + '(org-at-table-p) + (list 'call-interactively (list 'quote fun)) + (list 'let '(orgtbl-mode) + (list 'call-interactively + (append '(or) + (mapcar (lambda (k) + (list 'key-binding k)) + keys) + '('orgtbl-error)))))))) (defun orgtbl-error () "Error when there is no default binding for a table key." (interactive) (error "This key is has no function outside tables")) -;; Keybindings for the minor mode -(let ((bindings - (list - '([(meta shift left)] org-table-delete-column) - '([(meta left)] org-table-move-column-left) - '([(meta right)] org-table-move-column-right) - '([(meta shift right)] org-table-insert-column) - '([(meta shift up)] org-table-kill-row) - '([(meta shift down)] org-table-insert-row) - '([(meta up)] org-table-move-row-up) - '([(meta down)] org-table-move-row-down) - '("\C-c\C-w" org-table-cut-region) - '("\C-c\M-w" org-table-copy-region) - '("\C-c\C-y" org-table-paste-rectangle) - '("\C-c-" org-table-insert-hline) - '([(shift tab)] org-table-previous-field) - '("\C-c\C-c" org-table-align) - '("\C-m" org-table-next-row) - (list (org-key 'S-return) 'org-table-copy-down) - '([(meta return)] org-table-wrap-region) - '("\C-c\C-q" org-table-wrap-region) - '("\C-c?" org-table-current-column) - '("\C-c " org-table-blank-field) - '("\C-c+" org-table-sum) - '("\C-c|" org-table-toggle-vline-visibility) - '("\C-c=" org-table-eval-formula))) - elt key fun cmd) - (while (setq elt (pop bindings)) - (setq key (car elt) - fun (nth 1 elt) - cmd (orgtbl-make-binding fun key)) - (define-key orgtbl-mode-map key cmd))) - -;; Special treatment needed for TAB and RET - -(define-key orgtbl-mode-map [(return)] - (orgtbl-make-binding 'orgtbl-ret [(return)] "\C-m")) -(define-key orgtbl-mode-map "\C-m" - (orgtbl-make-binding 'orgtbl-ret "\C-m" [(return)])) -(define-key orgtbl-mode-map [(tab)] - (orgtbl-make-binding 'orgtbl-tab [(tab)] "\C-i")) -(define-key orgtbl-mode-map "\C-i" - (orgtbl-make-binding 'orgtbl-tab "\C-i" [(tab)])) - -(when orgtbl-optimized - ;; If the user wants maximum table support, we need to hijack - ;; some standard editing functions - (substitute-key-definition 'self-insert-command 'orgtbl-self-insert-command - orgtbl-mode-map global-map) - (substitute-key-definition 'delete-char 'orgtbl-delete-char - orgtbl-mode-map global-map) - (substitute-key-definition 'delete-backward-char 'orgtbl-delete-backward-char - orgtbl-mode-map global-map) - (define-key org-mode-map "|" 'self-insert-command)) +(defun orgtbl-setup () + "Setup orgtbl keymaps." + (let ((nfunc 0) + (bindings + (list + '([(meta shift left)] org-table-delete-column) + '([(meta left)] org-table-move-column-left) + '([(meta right)] org-table-move-column-right) + '([(meta shift right)] org-table-insert-column) + '([(meta shift up)] org-table-kill-row) + '([(meta shift down)] org-table-insert-row) + '([(meta up)] org-table-move-row-up) + '([(meta down)] org-table-move-row-down) + '("\C-c\C-w" org-table-cut-region) + '("\C-c\M-w" org-table-copy-region) + '("\C-c\C-y" org-table-paste-rectangle) + '("\C-c-" org-table-insert-hline) + '([(shift tab)] org-table-previous-field) + '("\C-c\C-c" org-ctrl-c-ctrl-c) + '("\C-m" org-table-next-row) + (list (org-key 'S-return) 'org-table-copy-down) + '([(meta return)] org-table-wrap-region) + '("\C-c\C-q" org-table-wrap-region) + '("\C-c?" org-table-current-column) + '("\C-c " org-table-blank-field) + '("\C-c+" org-table-sum) + '("\C-c|" org-table-toggle-vline-visibility) + '("\C-c=" org-table-eval-formula) + '("\C-c*" org-table-recalculate) + '([(control ?#)] org-table-rotate-recalc-marks))) + elt key fun cmd) + (while (setq elt (pop bindings)) + (setq nfunc (1+ nfunc)) + (setq key (car elt) + fun (nth 1 elt) + cmd (orgtbl-make-binding fun nfunc key)) + (define-key orgtbl-mode-map key cmd)) + ;; Special treatment needed for TAB and RET + (define-key orgtbl-mode-map [(return)] + (orgtbl-make-binding 'orgtbl-ret 100 [(return)] "\C-m")) + (define-key orgtbl-mode-map "\C-m" + (orgtbl-make-binding 'orgtbl-ret 101 "\C-m" [(return)])) + (define-key orgtbl-mode-map [(tab)] + (orgtbl-make-binding 'orgtbl-tab 102 [(tab)] "\C-i")) + (define-key orgtbl-mode-map "\C-i" + (orgtbl-make-binding 'orgtbl-tab 103 "\C-i" [(tab)]))) + (when orgtbl-optimized + ;; If the user wants maximum table support, we need to hijack + ;; some standard editing functions + (substitute-key-definition 'self-insert-command 'orgtbl-self-insert-command + orgtbl-mode-map global-map) + (substitute-key-definition 'delete-char 'orgtbl-delete-char + orgtbl-mode-map global-map) + (substitute-key-definition 'delete-backward-char 'orgtbl-delete-backward-char + orgtbl-mode-map global-map) + (define-key org-mode-map "|" 'self-insert-command)) + (easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu" + '("OrgTbl" + ["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"] + ["Next Field" org-cycle :active (org-at-table-p) :keys "TAB"] + ["Previous Field" org-shifttab :active (org-at-table-p) :keys "S-TAB"] + ["Next Row" org-return :active (org-at-table-p) :keys "RET"] + "--" + ["Blank Field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] + ["Copy Field from Above" + org-table-copy-down :active (org-at-table-p) :keys "S-RET"] + "--" + ("Column" + ["Move Column Left" org-metaleft :active (org-at-table-p) :keys "M-<left>"] + ["Move Column Right" org-metaright :active (org-at-table-p) :keys "M-<right>"] + ["Delete Column" org-shiftmetaleft :active (org-at-table-p) :keys "M-S-<left>"] + ["Insert Column" org-shiftmetaright :active (org-at-table-p) :keys "M-S-<right>"]) + ("Row" + ["Move Row Up" org-metaup :active (org-at-table-p) :keys "M-<up>"] + ["Move Row Down" org-metadown :active (org-at-table-p) :keys "M-<down>"] + ["Delete Row" org-shiftmetaup :active (org-at-table-p) :keys "M-S-<up>"] + ["Insert Row" org-shiftmetadown :active (org-at-table-p) :keys "M-S-<down>"] + "--" + ["Insert Hline" org-table-insert-hline :active (org-at-table-p) :keys "C-c -"]) + ("Rectangle" + ["Copy Rectangle" org-copy-special :active (org-at-table-p) :keys "C-c M-w"] + ["Cut Rectangle" org-cut-special :active (org-at-table-p) :keys "C-c C-w"] + ["Paste Rectangle" org-paste-special :active (org-at-table-p) :keys "C-c C-y"] + ["Fill Rectangle" org-table-wrap-region :active (org-at-table-p) :keys "C-c C-q"]) + "--" + ["Eval Formula" org-table-eval-formula :active (org-at-table-p) :keys "C-c ="] + ["Eval Formula Down " (org-table-eval-formula '(4)) :active (org-at-table-p) :keys "C-u C-c ="] + ["Recalculate line" org-table-recalculate :active (org-at-table-p) :keys "C-c *"] + ["Recalculate all" (org-table-recalculate '(4)) :active (org-at-table-p) :keys "C-u C-c *"] + ["Toggle Recalculate Mark" org-table-rotate-recalc-marks :active (org-at-table-p) :keys "C-c #"] + ["Sum Column/Rectangle" org-table-sum + :active (or (org-at-table-p) (org-region-active-p)) :keys "C-c +"] + ["Which Column?" org-table-current-column :active (org-at-table-p) :keys "C-c ?"] + ["Debug Formulas" + (setq org-table-formula-debug (not org-table-formula-debug)) + :style toggle :selected org-table-formula-debug] + )) + t) (defun orgtbl-tab () "Justification and field motion for `orgtbl-mode'." @@ -7108,13 +7727,13 @@ reduced column width." (interactive "p") (if (and (org-at-table-p) (eq N 1) + (string-match "|" (buffer-substring (point-at-bol) (point))) (looking-at ".*?|")) (let ((pos (point))) (backward-delete-char N) (skip-chars-forward "^|") (insert " ") (goto-char (1- pos))) - (message "%s" last-input-event) (sit-for 1) (delete-backward-char N))) (defun orgtbl-delete-char (N) @@ -7125,6 +7744,8 @@ will still be marked for re-alignment, because a narrow field may lead to a reduced column width." (interactive "p") (if (and (org-at-table-p) + (not (bolp)) + (not (= (char-after) ?|)) (eq N 1)) (if (looking-at ".*?|") (let ((pos (point))) @@ -7134,41 +7755,6 @@ a reduced column width." (goto-char pos))) (delete-char N))) -(easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu" - '("Tbl" - ["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"] - ["Next Field" org-cycle :active (org-at-table-p) :keys "TAB"] - ["Previous Field" org-shifttab :active (org-at-table-p) :keys "S-TAB"] - ["Next Row" org-return :active (org-at-table-p) :keys "RET"] - "--" - ["Blank Field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] - ["Copy Field from Above" - org-table-copy-down :active (org-at-table-p) :keys "S-RET"] - "--" - ("Column" - ["Move Column Left" org-metaleft :active (org-at-table-p) :keys "M-<left>"] - ["Move Column Right" org-metaright :active (org-at-table-p) :keys "M-<right>"] - ["Delete Column" org-shiftmetaleft :active (org-at-table-p) :keys "M-S-<left>"] - ["Insert Column" org-shiftmetaright :active (org-at-table-p) :keys "M-S-<right>"]) - ("Row" - ["Move Row Up" org-metaup :active (org-at-table-p) :keys "M-<up>"] - ["Move Row Down" org-metadown :active (org-at-table-p) :keys "M-<down>"] - ["Delete Row" org-shiftmetaup :active (org-at-table-p) :keys "M-S-<up>"] - ["Insert Row" org-shiftmetadown :active (org-at-table-p) :keys "M-S-<down>"] - "--" - ["Insert Hline" org-table-insert-hline :active (org-at-table-p) :keys "C-c -"]) - ("Rectangle" - ["Copy Rectangle" org-copy-special :active (org-at-table-p) :keys "C-c M-w"] - ["Cut Rectangle" org-cut-special :active (org-at-table-p) :keys "C-c C-w"] - ["Paste Rectangle" org-paste-special :active (org-at-table-p) :keys "C-c C-y"] - ["Fill Rectangle" org-table-wrap-region :active (org-at-table-p) :keys "C-c C-q"]) - "--" - ["Which Column?" org-table-current-column :active (org-at-table-p) :keys "C-c ?"] - ["Sum Column/Rectangle" org-table-sum - :active (or (org-at-table-p) (org-region-active-p)) :keys "C-c +"] - ["Eval Formula" org-table-eval-formula :active (org-at-table-p) :keys "C-c ="] - )) - ;;; Exporting (defconst org-level-max 20) @@ -7503,7 +8089,7 @@ Entries can be like (\"ent\"), in which case \"\\ent\" will be translated to In that case, \"\\ent\" will be translated to \"&other;\". The list contains HTML entities for Latin-1, Greek and other symbols. It is supplemented by a number of commonly used TeX macros with appropriate -translations.") +translations. There is currently no way for users to extend this.") (defvar org-last-level nil) ; dynamically scoped variable @@ -7676,7 +8262,7 @@ and all options lines." (let* ((filename (concat (file-name-sans-extension (buffer-file-name)) ".txt")) (buffer (find-file-noselect filename)) - (ore (concat + (ore (concat (org-make-options-regexp '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP" "ARCHIVE" @@ -7908,7 +8494,7 @@ headlines. The default is 3. Lower levels will become bulleted lists." ;; This is a headline (progn (setq level (- (match-end 1) (match-beginning 1)) - txt (save-match-data + txt (save-match-data (org-html-expand (match-string 3 line))) todo @@ -8413,10 +8999,10 @@ When LEVEL is non-nil, increase section numbers on that level." ;; - Bindings in Org-mode map are currently ;; 0123456789abcdefghijklmnopqrstuvwxyz!?@#$%^&-+*/=()_{}[]:;"|,.<>~`'\t the alphabet -;; abcd fgh j lmnopqrstuvwxyz ? # -+ /= [] ; |,.<> \t necessary bindings +;; abcd fgh j lmnopqrstuvwxyz ? #$ -+*/= [] ; |,.<>~ \t necessary bindings ;; e (?) useful from outline-mode ;; i k @ expendable from outline-mode -;; 0123456789 ! $%^& * ()_{} " ~`' free +;; 0123456789 ! %^& ()_{} " `' free (define-key org-mode-map "\C-i" 'org-cycle) (define-key org-mode-map [(meta tab)] 'org-complete) @@ -8476,7 +9062,9 @@ When LEVEL is non-nil, increase section numbers on that level." (define-key org-mode-map "\C-c+" 'org-table-sum) (define-key org-mode-map "\C-c|" 'org-table-toggle-vline-visibility) (define-key org-mode-map "\C-c=" 'org-table-eval-formula) -(define-key org-mode-map "\C-c#" 'org-table-create-with-table.el) +(define-key org-mode-map "\C-c*" 'org-table-recalculate) +(define-key org-mode-map [(control ?#)] 'org-table-rotate-recalc-marks) +(define-key org-mode-map "\C-c~" 'org-table-create-with-table.el) (define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) (define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) @@ -8489,12 +9077,7 @@ When LEVEL is non-nil, increase section numbers on that level." (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) (define-key org-mode-map "\C-c\C-x\C-h" 'org-export-as-html-and-open) -(defsubst org-table-p () - (if (and (eq major-mode 'org-mode) font-lock-mode) - (eq (get-text-property (point) 'face) 'org-table) - ;; (save-match-data (org-at-table-p)))) ; FIXME: OK to not use this? - (org-at-table-p))) - +(defsubst org-table-p () (org-at-table-p)) (defun org-self-insert-command (N) "Like `self-insert-command', use overwrite-mode for whitespace in tables. @@ -8525,7 +9108,8 @@ reduced column width." (interactive "p") (if (and (org-table-p) (eq N 1) - (looking-at ".*?|")) + (string-match "|" (buffer-substring (point-at-bol) (point))) + (looking-at ".*?|")) (let ((pos (point))) (backward-delete-char N) (skip-chars-forward "^|") @@ -8541,6 +9125,8 @@ will still be marked for re-alignment, because a narrow field may lead to a reduced column width." (interactive "p") (if (and (org-table-p) + (not (bolp)) + (not (= (char-after) ?|)) (eq N 1)) (if (looking-at ".*?|") (let ((pos (point))) @@ -8655,16 +9241,14 @@ a reduced column width." (defun org-copy-special () "Call either `org-table-copy' or `org-copy-subtree'." (interactive) - (if (org-at-table-p) - (org-table-copy-region) - (org-copy-subtree))) + (call-interactively + (if (org-at-table-p) 'org-table-copy-region 'org-copy-subtree))) (defun org-cut-special () "Call either `org-table-copy' or `org-cut-subtree'." (interactive) - (if (org-at-table-p) - (org-table-cut-region) - (org-cut-subtree))) + (call-interactively + (if (org-at-table-p) 'org-table-cut-region 'org-cut-subtree))) (defun org-paste-special (arg) "Call either `org-table-paste-rectangle' or `org-paste-subtree'." @@ -8674,23 +9258,37 @@ a reduced column width." (org-paste-subtree arg))) (defun org-ctrl-c-ctrl-c (&optional arg) - "Call realign table, or recognize a table.el table. + "Call realign table, or recognize a table.el table, or update keywords. When the cursor is inside a table created by the table.el package, activate that table. Otherwise, if the cursor is at a normal table created with org.el, re-align that table. This command works even if -the automatic table editor has been turned off." +the automatic table editor has been turned off. +If the cursor is in one of the special #+KEYWORD lines, this triggers +scanning the buffer for these lines and updating the information." (interactive "P") (let ((org-enable-table-editor t)) (cond ((org-at-table.el-p) (require 'table) (beginning-of-line 1) - (re-search-forward "|" (save-excursion (end-of-line 2) (point))) ;FIXME: line-end-position? + (re-search-forward "|" (save-excursion (end-of-line 2) (point))) (table-recognize-table)) ((org-at-table-p) + (org-table-maybe-eval-formula) + (if arg + (org-table-recalculate t) + (org-table-maybe-recalculate-line)) (org-table-align)) - ((save-excursion (beginning-of-line 1) (looking-at "#\\+[A-Z]+")) - (let ((org-inhibit-startup t)) (org-mode))) + ((save-excursion (beginning-of-line 1) (looking-at "#\\+\\([A-Z]+\\)")) + (cond + ((equal (match-string 1) "TBLFM") + ;; Recalculate the table before this line + (save-excursion + (beginning-of-line 1) + (skip-chars-backward " \r\n\t") + (if (org-at-table-p) (org-table-recalculate t)))) + (t + (let ((org-inhibit-startup t)) (org-mode))))) ((org-region-active-p) (org-table-convert-region (region-beginning) (region-end) arg)) ((and (region-beginning) (region-end)) @@ -8718,18 +9316,59 @@ the automatic table editor has been turned off." ;;; Menu entries -;; First, remove the outline menus. Org-mode does not neede these commands. -(if org-xemacs-p - (add-hook 'org-mode-hook - (lambda () - (delete-menu-item '("Headings")) - (delete-menu-item '("Show")) - (delete-menu-item '("Hide")) - (set-menubar-dirty-flag))) - (setq org-mode-map (delq (assoc 'menu-bar (cdr org-mode-map)) - org-mode-map))) - ;; Define the Org-mode menus +(easy-menu-define org-tbl-menu org-mode-map "Tbl menu" + '("Tbl" + ["Align" org-ctrl-c-ctrl-c (org-at-table-p)] + ["Next Field" org-cycle (org-at-table-p)] + ["Previous Field" org-shifttab (org-at-table-p)] + ["Next Row" org-return (org-at-table-p)] + "--" + ["Blank Field" org-table-blank-field (org-at-table-p)] + ["Copy Field from Above" org-table-copy-down (org-at-table-p)] + "--" + ("Column" + ["Move Column Left" org-metaleft (org-at-table-p)] + ["Move Column Right" org-metaright (org-at-table-p)] + ["Delete Column" org-shiftmetaleft (org-at-table-p)] + ["Insert Column" org-shiftmetaright (org-at-table-p)]) + ("Row" + ["Move Row Up" org-metaup (org-at-table-p)] + ["Move Row Down" org-metadown (org-at-table-p)] + ["Delete Row" org-shiftmetaup (org-at-table-p)] + ["Insert Row" org-shiftmetadown (org-at-table-p)] + "--" + ["Insert Hline" org-table-insert-hline (org-at-table-p)]) + ("Rectangle" + ["Copy Rectangle" org-copy-special (org-at-table-p)] + ["Cut Rectangle" org-cut-special (org-at-table-p)] + ["Paste Rectangle" org-paste-special (org-at-table-p)] + ["Fill Rectangle" org-table-wrap-region (org-at-table-p)]) + "--" + ("Calculate" + ["Eval Formula" org-table-eval-formula (org-at-table-p)] + ["Eval Formula Down" (org-table-eval-formula '(4)) :active (org-at-table-p) :keys "C-u C-c ="] + ["Recalculate line" org-table-recalculate (org-at-table-p)] + ["Recalculate all" (lambda () (interactive) (org-table-recalculate '(4))) :active (org-at-table-p) :keys "C-u C-c *"] + ["Toggle Recalculate Mark" org-table-rotate-recalc-marks (org-at-table-p)] + ["Sum Column/Rectangle" org-table-sum + (or (org-at-table-p) (org-region-active-p))] + ["Which Column?" org-table-current-column (org-at-table-p)]) + ["Debug Formulas" + (setq org-table-formula-debug (not org-table-formula-debug)) + :style toggle :selected org-table-formula-debug] + "--" + ["Invisible Vlines" org-table-toggle-vline-visibility + :style toggle :selected (org-in-invisibility-spec-p '(org-table))] + "--" + ["Create" org-table-create (and (not (org-at-table-p)) + org-enable-table-editor)] + ["Convert Region" org-ctrl-c-ctrl-c (not (org-at-table-p 'any))] + ["Import from File" org-table-import (not (org-at-table-p))] + ["Export to File" org-table-export (org-at-table-p)] + "--" + ["Create/Convert from/to table.el" org-table-create-with-table.el t])) + (easy-menu-define org-org-menu org-mode-map "Org menu" '("Org" ["Cycle Visibility" org-cycle (or (bobp) (outline-on-heading-p))] @@ -8794,49 +9433,6 @@ the automatic table editor has been turned off." ["Insert Link" org-insert-link t] ["Follow Link" org-open-at-point t]) "--" - ("Table" - ["Align" org-ctrl-c-ctrl-c (org-at-table-p)] - ["Next Field" org-cycle (org-at-table-p)] - ["Previous Field" org-shifttab (org-at-table-p)] - ["Next Row" org-return (org-at-table-p)] - "--" - ["Blank Field" org-table-blank-field (org-at-table-p)] - ["Copy Field from Above" org-table-copy-down (org-at-table-p)] - "--" - ("Column" - ["Move Column Left" org-metaleft (org-at-table-p)] - ["Move Column Right" org-metaright (org-at-table-p)] - ["Delete Column" org-shiftmetaleft (org-at-table-p)] - ["Insert Column" org-shiftmetaright (org-at-table-p)]) - ("Row" - ["Move Row Up" org-metaup (org-at-table-p)] - ["Move Row Down" org-metadown (org-at-table-p)] - ["Delete Row" org-shiftmetaup (org-at-table-p)] - ["Insert Row" org-shiftmetadown (org-at-table-p)] - "--" - ["Insert Hline" org-table-insert-hline (org-at-table-p)]) - ("Rectangle" - ["Copy Rectangle" org-copy-special (org-at-table-p)] - ["Cut Rectangle" org-cut-special (org-at-table-p)] - ["Paste Rectangle" org-paste-special (org-at-table-p)] - ["Fill Rectangle" org-table-wrap-region (org-at-table-p)]) - "--" - ["Which Column?" org-table-current-column (org-at-table-p)] - ["Sum Column/Rectangle" org-table-sum - (or (org-at-table-p) (org-region-active-p))] - ["Eval Formula" org-table-eval-formula (org-at-table-p)] - "--" - ["Invisible Vlines" org-table-toggle-vline-visibility - :style toggle :selected (org-in-invisibility-spec-p '(org-table))] - "--" - ["Create" org-table-create (and (not (org-at-table-p)) - org-enable-table-editor)] - ["Convert Region" org-ctrl-c-ctrl-c (not (org-at-table-p 'any))] - ["Import from File" org-table-import (not (org-at-table-p))] - ["Export to File" org-table-export (org-at-table-p)] - "--" - ["Create/Convert from/to table.el" org-table-create-with-table.el t]) - "--" ("Export" ["ASCII" org-export-as-ascii t] ["Extract Visible Text" org-export-copy-visible t] @@ -8865,10 +9461,10 @@ With optional NODE, go directly to that node." (Info-goto-node (format "(org)%s" (or node "")))) (defun org-install-agenda-files-menu () - (easy-menu-change + (easy-menu-change '("Org") "File List for Agenda" (append - (list + (list ["Edit File List" (customize-variable 'org-agenda-files) t] ["Add Current File to List" org-add-file t] ["Remove Current File from List" org-remove-file t] @@ -8983,7 +9579,7 @@ that can be added." ;; Functions needed for compatibility with old outline.el ;; The following functions capture almost the entire compatibility code -;; between the different versions of outline-mode. The only other place +;; between the different versions of outline-mode. The only other place ;; where this is important are the font-lock-keywords. Search for ;; `org-noutline-p' to find it. @@ -9048,7 +9644,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too." This function considers both visible and invisible heading lines. With argument, move up ARG levels." (if org-noutline-p - (if (fboundp 'outline-up-heading-all) + (if (fboundp 'outline-up-heading-all) (outline-up-heading-all arg) ; emacs 21 version of outline.el (outline-up-heading arg t)) ; emacs 22 version of outline.el (org-back-to-heading t) @@ -9104,8 +9700,8 @@ When ENTRY is non-nil, show the entire entry." (defun org-show-subtree () "Show everything after this heading at deeper levels." - (outline-flag-region - (point) + (outline-flag-region + (point) (save-excursion (outline-end-of-subtree) (outline-next-heading) (point)) (if org-noutline-p nil ?\n))) @@ -9116,7 +9712,7 @@ Show the heading too, if it is currently invisible." (interactive) (save-excursion (org-back-to-heading t) - (outline-flag-region + (outline-flag-region (1- (point)) (save-excursion (re-search-forward (concat "[\r\n]\\(" outline-regexp "\\)") nil 'move) diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index b3c69ca657f..34b661afcc4 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -359,7 +359,7 @@ With positive argument insert that many lines." (point)))) (replace-match newtext fixedcase literal) (if (< change 0) - (insert-char ?\ (- change))))) + (insert-char ?\s (- change))))) ;; Picture Tabs diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index 2be01d630f9..aac70dd1e23 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el @@ -816,7 +816,7 @@ Otherwise, follow with a newline." (texinfo-last-unended-begin) (match-string 1))) "table") - ? ;space + ?\s ?\n))) (defun texinfo-insert-@kbd (&optional arg) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 4da3d22584a..4148d62c263 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,25 @@ +2005-06-28 Klaus Straubinger <KSNetz@Arcor.DE> (tiny change) + + * url-http.el (url-http-create-request): Call url-recreate-url + in proxy case. + +2005-06-27 Klaus Straubinger <KSNetz@Arcor.DE> (tiny change) + + * url-http.el (url-http-create-request): When computing real-fname, + call url-filename in both cases. + +2005-06-27 Richard M. Stallman <rms@gnu.org> + + * url-cookie.el (url-cookie-store): Rename arg PATH to LOCALPART. + (url-cookie-retrieve): Likewise. + (url-cookie-generate-header-lines): Likewise. + (url-cookie-handle-set-cookie): Likewise. + (url-cookie-create): Expect :localpart instead of :path. + (url-cookie-localpart): Renamed from url-cookie-path. + (url-cookie-set-localpart): Renamed from url-cookie-set-path. + (url-cookie-file): Doc fix. + (url-cookie-p): Add doc string. + 2005-06-23 Richard M. Stallman <rms@gnu.org> * url-cookie.el (url-cookie-generate-header-lines): Fix autoload cookie. diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el index db50f289521..42c74080ec8 100644 --- a/lisp/url/url-cookie.el +++ b/lisp/url/url-cookie.el @@ -34,35 +34,48 @@ ;; 'open standard' defining this crap. ;; ;; A cookie is stored internally as a vector of 7 slots -;; [ 'cookie name value expires path domain secure ] +;; [ cookie NAME VALUE EXPIRES LOCALPART DOMAIN SECURE ] (defsubst url-cookie-name (cookie) (aref cookie 1)) (defsubst url-cookie-value (cookie) (aref cookie 2)) (defsubst url-cookie-expires (cookie) (aref cookie 3)) -(defsubst url-cookie-path (cookie) (aref cookie 4)) +(defsubst url-cookie-localpart (cookie) (aref cookie 4)) (defsubst url-cookie-domain (cookie) (aref cookie 5)) (defsubst url-cookie-secure (cookie) (aref cookie 6)) (defsubst url-cookie-set-name (cookie val) (aset cookie 1 val)) (defsubst url-cookie-set-value (cookie val) (aset cookie 2 val)) (defsubst url-cookie-set-expires (cookie val) (aset cookie 3 val)) -(defsubst url-cookie-set-path (cookie val) (aset cookie 4 val)) +(defsubst url-cookie-set-localpart (cookie val) (aset cookie 4 val)) (defsubst url-cookie-set-domain (cookie val) (aset cookie 5 val)) (defsubst url-cookie-set-secure (cookie val) (aset cookie 6 val)) (defsubst url-cookie-retrieve-arg (key args) (nth 1 (memq key args))) (defsubst url-cookie-create (&rest args) + "Create a cookie vector object from keyword-value pairs ARGS. +The keywords allowed are + :name NAME + :value VALUE + :expires TIME + :localpart LOCALPAR + :domain DOMAIN + :secure ??? +Could someone fill in more information?" (let ((retval (make-vector 7 nil))) (aset retval 0 'cookie) (url-cookie-set-name retval (url-cookie-retrieve-arg :name args)) (url-cookie-set-value retval (url-cookie-retrieve-arg :value args)) (url-cookie-set-expires retval (url-cookie-retrieve-arg :expires args)) - (url-cookie-set-path retval (url-cookie-retrieve-arg :path args)) + (url-cookie-set-localpart retval (url-cookie-retrieve-arg :localpart args)) (url-cookie-set-domain retval (url-cookie-retrieve-arg :domain args)) (url-cookie-set-secure retval (url-cookie-retrieve-arg :secure args)) retval)) (defun url-cookie-p (obj) + "Return non-nil if OBJ is a cookie vector object. +These objects represent cookies in the URL package. +A cookie vector object is a vector of 7 slots: + [cookie NAME VALUE EXPIRES LOCALPART DOMAIN SECURE]." (and (vectorp obj) (= (length obj) 7) (eq (aref obj 0) 'cookie))) (defgroup url-cookie nil @@ -73,7 +86,8 @@ (defvar url-cookie-storage nil "Where cookies are stored.") (defvar url-cookie-secure-storage nil "Where secure cookies are stored.") -(defcustom url-cookie-file nil "*Where cookies are stored on disk." +(defcustom url-cookie-file nil + "*File where cookies are stored on disk." :type '(choice (const :tag "Default" :value nil) file) :group 'url-file :group 'url-cookie) @@ -154,7 +168,7 @@ telling Microsoft that." (write-file fname) (kill-buffer (current-buffer)))))) -(defun url-cookie-store (name value &optional expires domain path secure) +(defun url-cookie-store (name value &optional expires domain localpart secure) "Store a netscape-style cookie." (let* ((storage (if secure url-cookie-secure-storage url-cookie-storage)) (tmp storage) @@ -173,7 +187,7 @@ telling Microsoft that." (while storage (setq cur (car storage) storage (cdr storage)) - (if (and (equal path (url-cookie-path cur)) + (if (and (equal localpart (url-cookie-localpart cur)) (equal name (url-cookie-name cur))) (progn (url-cookie-set-expires cur expires) @@ -186,7 +200,7 @@ telling Microsoft that." :value value :expires expires :domain domain - :path path + :localpart localpart :secure secure) (cdr found-domain))))) ;; Need to add a new top-level domain @@ -194,7 +208,7 @@ telling Microsoft that." :value value :expires expires :domain domain - :path path + :localpart localpart :secure secure)) (cond (storage @@ -235,8 +249,8 @@ telling Microsoft that." (> (- cur-norm exp-norm) 1)))))) ;;;###autoload -(defun url-cookie-retrieve (host path &optional secure) - "Retrieve all the netscape-style cookies for a specified HOST and PATH." +(defun url-cookie-retrieve (host localpart &optional secure) + "Retrieve all the netscape-style cookies for a specified HOST and LOCALPART." (let ((storage (if secure (append url-cookie-secure-storage url-cookie-storage) url-cookie-storage)) @@ -244,7 +258,7 @@ telling Microsoft that." (cookies nil) (cur nil) (retval nil) - (path-regexp nil)) + (localpart-regexp nil)) (while storage (setq cur (car storage) storage (cdr storage) @@ -255,26 +269,26 @@ telling Microsoft that." (while cookies (setq cur (car cookies) cookies (cdr cookies) - path-regexp (concat "^" (regexp-quote - (url-cookie-path cur)))) - (if (and (string-match path-regexp path) + localpart-regexp (concat "^" (regexp-quote + (url-cookie-localpart cur)))) + (if (and (string-match localpart-regexp localpart) (not (url-cookie-expired-p cur))) (setq retval (cons cur retval)))))) retval)) ;;;###autoload -(defun url-cookie-generate-header-lines (host path secure) - (let* ((cookies (url-cookie-retrieve host path secure)) - (retval nil) - (cur nil) - (chunk nil)) +(defun url-cookie-generate-header-lines (host localpart secure) + (let* ((cookies (url-cookie-retrieve host localpart secure)) + (retval nil) + (cur nil) + (chunk nil)) ;; Have to sort this for sending most specific cookies first (setq cookies (and cookies (sort cookies (function (lambda (x y) - (> (length (url-cookie-path x)) - (length (url-cookie-path y)))))))) + (> (length (url-cookie-localpart x)) + (length (url-cookie-localpart y)))))))) (while cookies (setq cur (car cookies) cookies (cdr cookies) @@ -340,9 +354,9 @@ telling Microsoft that." (trusted url-cookie-trusted-urls) (untrusted url-cookie-untrusted-urls) (expires (cdr-safe (assoc-string "expires" args t))) - (path (or (cdr-safe (assoc-string "path" args t)) - (file-name-directory - (url-filename url-current-object)))) + (localpart (or (cdr-safe (assoc-string "path" args t)) + (file-name-directory + (url-filename url-current-object)))) (rest nil)) (while args (if (not (member (downcase (car (car args))) @@ -422,7 +436,7 @@ telling Microsoft that." (while rest (setq cur (pop rest)) (url-cookie-store (car cur) (cdr cur) - expires domain path secure)))) + expires domain localpart secure)))) (t (message "%s tried to set a cookie for domain %s - rejected." (url-host url-current-object) domain))))) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index f5bbf4a7bf4..0b7e2cef8a1 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -156,8 +156,7 @@ request. (let ((url-basic-auth-storage 'url-http-proxy-basic-auth-storage)) (url-get-authentication url nil 'any nil)))) - (real-fname (if proxy-obj (url-recreate-url proxy-obj) - (url-filename url))) + (real-fname (url-filename (or proxy-obj url))) (host (url-host (or proxy-obj url))) (auth (if (cdr-safe (assoc "Authorization" url-request-extra-headers)) nil @@ -200,7 +199,9 @@ request. (setq request (concat ;; The request - (or url-request-method "GET") " " real-fname " HTTP/" url-http-version "\r\n" + (or url-request-method "GET") " " + (if proxy-obj (url-recreate-url proxy-obj) real-fname) + " HTTP/" url-http-version "\r\n" ;; Version of MIME we speak "MIME-Version: 1.0\r\n" ;; (maybe) Try to keep the connection open diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 6cfb03f2ac6..b5fd9f80def 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -967,28 +967,28 @@ Recommended as a parent keymap for modes using widgets.") (recenter)) ) - (let ((up t) command) - ;; Mouse click not on a widget button. Find the global - ;; command to run, and check whether it is bound to an - ;; up event. - (mouse-set-point event) - (if (memq (event-basic-type event) '(mouse-1 down-mouse-1)) - (cond ((setq command ;down event - (lookup-key widget-global-map [down-mouse-1])) - (setq up nil)) - ((setq command ;up event - (lookup-key widget-global-map [mouse-1])))) + (let ((up t) command) + ;; Mouse click not on a widget button. Find the global + ;; command to run, and check whether it is bound to an + ;; up event. + (mouse-set-point event) + (if (memq (event-basic-type event) '(mouse-1 down-mouse-1)) (cond ((setq command ;down event - (lookup-key widget-global-map [down-mouse-2])) + (lookup-key widget-global-map [down-mouse-1])) (setq up nil)) ((setq command ;up event - (lookup-key widget-global-map [mouse-2]))))) - (when up - ;; Don't execute up events twice. - (while (not (widget-button-release-event-p event)) - (setq event (read-event)))) - (when command - (call-interactively command))))) + (lookup-key widget-global-map [mouse-1])))) + (cond ((setq command ;down event + (lookup-key widget-global-map [down-mouse-2])) + (setq up nil)) + ((setq command ;up event + (lookup-key widget-global-map [mouse-2]))))) + (when up + ;; Don't execute up events twice. + (while (not (widget-button-release-event-p event)) + (setq event (read-event)))) + (when command + (call-interactively command))))) (message "You clicked somewhere weird."))) (defun widget-button-press (pos &optional event) diff --git a/lisp/window.el b/lisp/window.el index 09fac6c520f..75052f9a5f1 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -40,11 +40,18 @@ unless you explicitly change the size, or Emacs has no other choice.") (defmacro save-selected-window (&rest body) "Execute BODY, then select the window that was selected before BODY. -Also restore the selected window of each frame as it was at the start -of this construct. -However, if a window has become dead, don't get an error, -just refrain from reselecting it. -Return the value of the last form in BODY." +The value returned is the value of the last form in BODY. + +This macro saves and restores the current buffer, since otherwise +its normal operation could potentially make a different +buffer current. It does not alter the buffer list ordering. + +This macro saves and restores the selected window, as well as +the selected window in each frame. If the previously selected +window of some frame is no longer live at the end of BODY, that +frame's selected window is left alone. If the selected window is +no longer live, then whatever window is selected at the end of +BODY remains selected." `(let ((save-selected-window-window (selected-window)) ;; It is necessary to save all of these, because calling ;; select-window changes frame-selected-window for whatever @@ -52,14 +59,15 @@ Return the value of the last form in BODY." (save-selected-window-alist (mapcar (lambda (frame) (list frame (frame-selected-window frame))) (frame-list)))) - (unwind-protect - (progn ,@body) - (dolist (elt save-selected-window-alist) - (and (frame-live-p (car elt)) - (window-live-p (cadr elt)) - (set-frame-selected-window (car elt) (cadr elt)))) - (if (window-live-p save-selected-window-window) - (select-window save-selected-window-window))))) + (save-current-buffer + (unwind-protect + (progn ,@body) + (dolist (elt save-selected-window-alist) + (and (frame-live-p (car elt)) + (window-live-p (cadr elt)) + (set-frame-selected-window (car elt) (cadr elt)))) + (if (window-live-p save-selected-window-window) + (select-window save-selected-window-window)))))) (defun window-body-height (&optional window) "Return number of lines in window WINDOW for actual buffer text. diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 77d2d961905..ddaac114590 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,43 @@ +2005-06-29 Juanma Barranquero <lekktu@gmail.com> + + * variables.texi (Defining Variables): `user-variable-p' returns t + for aliases of user options, nil for alias loops. + +2005-06-28 Richard M. Stallman <rms@gnu.org> + + * keymaps.texi (Creating Keymaps): Put make-sparse-keymap before + make-keymap. + +2005-06-27 Luc Teirlinck <teirllm@auburn.edu> + + * variables.texi (Setting Variables): Correct and clarify + description of `add-to-ordered-list'. + +2005-06-26 Richard M. Stallman <rms@gnu.org> + + * display.texi (Faces): Minor cleanup. + +2005-06-25 Luc Teirlinck <teirllm@auburn.edu> + + * display.texi (Faces): `facep' returns t for strings that are + face names. + +2005-06-25 Richard M. Stallman <rms@gnu.org> + + * objects.texi (Equality Predicates): Clarify meaning of equal. + + * windows.texi (Selecting Windows): save-selected-window + and with-selected-window save and restore the current buffer. + +2005-06-24 Richard M. Stallman <rms@gnu.org> + + * numbers.texi (Float Basics): Explain how to test for NaN, + and printing the sign of NaNs. + +2005-06-24 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (MAKEINFO): Use --force. + 2005-06-23 Richard M. Stallman <rms@gnu.org> * display.texi (Face Functions): Correct Texinfo usage. diff --git a/lispref/display.texi b/lispref/display.texi index aa3284ad0e4..4b7e0558b01 100644 --- a/lispref/display.texi +++ b/lispref/display.texi @@ -1628,12 +1628,12 @@ particular parts of the text or the frame. @cindex face id Each face has its own @dfn{face number}, which distinguishes faces at low levels within Emacs. However, for most purposes, you refer to -faces in Lisp programs by their names. +faces in Lisp programs by the symbols that name them. @defun facep object -This function returns @code{t} if @var{object} is a face name symbol (or -if it is a vector of the kind used internally to record face data). It -returns @code{nil} otherwise. +This function returns @code{t} if @var{object} is a face name string +or symbol (or if it is a vector of the kind used internally to record +face data). It returns @code{nil} otherwise. @end defun Each face name is meaningful for all frames, and by default it has the @@ -1795,7 +1795,7 @@ end of a line. The way to define a new face is with @code{defface}. This creates a kind of customization item (@pxref{Customization}) which the user can customize using the Customization buffer (@pxref{Easy Customization,,, -emacs, The GNU Emacs Manual}). +emacs, The GNU Emacs Manual}). @defmac defface face spec doc [keyword value]... This declares @var{face} as a customizable face that defaults diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi index 79cbe478ea2..519f9bc1fbf 100644 --- a/lispref/keymaps.texi +++ b/lispref/keymaps.texi @@ -257,18 +257,16 @@ satisfies @code{keymapp}. Here we describe the functions for creating keymaps. -@c ??? This should come after make-sparse-keymap -@defun make-keymap &optional prompt -This function creates and returns a new full keymap. That keymap -contains a char-table (@pxref{Char-Tables}) with slots for all -characters without modifiers. The new keymap initially binds all -these characters to @code{nil}, and does not bind any other kind of -event. +@defun make-sparse-keymap &optional prompt +This function creates and returns a new sparse keymap with no entries. +(A sparse keymap is the kind of keymap you usually want.) The new +keymap does not contain a char-table, unlike @code{make-keymap}, and +does not bind any events. @example @group -(make-keymap) - @result{} (keymap #^[t nil nil nil @dots{} nil nil keymap]) +(make-sparse-keymap) + @result{} (keymap) @end group @end example @@ -277,18 +275,23 @@ the keymap. The prompt string should be provided for menu keymaps (@pxref{Defining Menus}). @end defun -@defun make-sparse-keymap &optional prompt -This function creates and returns a new sparse keymap with no entries. -The new keymap does not contain a char-table, unlike @code{make-keymap}, -and does not bind any events. The argument @var{prompt} specifies a -prompt string, as in @code{make-keymap}. +@defun make-keymap &optional prompt +This function creates and returns a new full keymap. That keymap +contains a char-table (@pxref{Char-Tables}) with slots for all +characters without modifiers. The new keymap initially binds all +these characters to @code{nil}, and does not bind any other kind of +event. The argument @var{prompt} specifies a +prompt string, as in @code{make-sparse-keymap}. @example @group -(make-sparse-keymap) - @result{} (keymap) +(make-keymap) + @result{} (keymap #^[t nil nil nil @dots{} nil nil keymap]) @end group @end example + +A full keymap is more efficient than a sparse keymap when it holds +lots of bindings; for just a few, the sparse keymap is better. @end defun @defun copy-keymap keymap diff --git a/lispref/makefile.w32-in b/lispref/makefile.w32-in index 248330167b2..0865aa8df58 100644 --- a/lispref/makefile.w32-in +++ b/lispref/makefile.w32-in @@ -29,7 +29,7 @@ infodir = $(srcdir)/../info # TEX=platex TEX=tex INSTALL_INFO = install-info -MAKEINFO = makeinfo +MAKEINFO = makeinfo --force # The environment variable and its value to add $(srcdir) to the path # searched for TeX input files. diff --git a/lispref/numbers.texi b/lispref/numbers.texi index 776251e4933..f7f88248ff1 100644 --- a/lispref/numbers.texi +++ b/lispref/numbers.texi @@ -183,21 +183,26 @@ there is no correct answer. For example, @code{(/ 0.0 0.0)} returns a NaN. For practical purposes, there's no significant difference between different NaN values in Emacs Lisp, and there's no rule for precisely which NaN value should be used in a particular case, so Emacs Lisp -doesn't try to distinguish them. Here are the read syntaxes for -these special floating point values: +doesn't try to distinguish them (but it does report the sign, if you +print it). Here are the read syntaxes for these special floating +point values: @table @asis @item positive infinity @samp{1.0e+INF} @item negative infinity @samp{-1.0e+INF} -@item Not-a-number -@samp{0.0e+NaN}. +@item Not-a-number +@samp{0.0e+NaN} or @samp{-0.0e+NaN}. @end table - In addition, the value @code{-0.0} is distinguishable from ordinary -zero in @acronym{IEEE} floating point (although @code{equal} and -@code{=} consider them equal values). + To test whether a floating point value is a NaN, compare it with +itself using @code{=}. That returns @code{nil} for a NaN, and +@code{t} for any other floating point value. + + The value @code{-0.0} is distinguishable from ordinary zero in +@acronym{IEEE} floating point, but Emacs Lisp @code{equal} and +@code{=} consider them equal values. You can use @code{logb} to extract the binary exponent of a floating point number (or estimate the logarithm of an integer): diff --git a/lispref/objects.texi b/lispref/objects.texi index 93d7c51b08d..4a693f186d6 100644 --- a/lispref/objects.texi +++ b/lispref/objects.texi @@ -1820,8 +1820,7 @@ describing the data type. @defun eq object1 object2 This function returns @code{t} if @var{object1} and @var{object2} are -the same object, @code{nil} otherwise. The ``same object'' means that a -change in one will be reflected by the same change in the other. +the same object, @code{nil} otherwise. @code{eq} returns @code{t} if @var{object1} and @var{object2} are integers with the same value. Also, since symbol names are normally @@ -1829,7 +1828,8 @@ unique, if the arguments are symbols with the same name, they are @code{eq}. For other types (e.g., lists, vectors, strings), two arguments with the same contents or elements are not necessarily @code{eq} to each other: they are @code{eq} only if they are the same -object. +object, meaning that a change in the contents of one will be reflected +by the same change in the contents of the other. @example @group diff --git a/lispref/variables.texi b/lispref/variables.texi index 31e42b59c79..38fb929c16d 100644 --- a/lispref/variables.texi +++ b/lispref/variables.texi @@ -569,7 +569,7 @@ though being declared using @code{defcustom}@footnote{They may also be declared equivalently in @file{cus-start.el}.} or by the first character of their @code{variable-documentation} property. If the property exists and is a string, and its first character is @samp{*}, then the variable -is a user option. +is a user option. Aliases of user options are also user options. @end defun @kindex variable-interactive @@ -909,18 +909,25 @@ This function sets the variable @var{symbol} by inserting position specified by @var{order}. If @var{element} is already a member of the list, its position in the list is adjusted according to @var{order}. Membership is tested using @code{eq}. -The valued returned is the resulting list, whether updated or not. +This function returns the resulting list, whether updated or not. -The @var{order} is a number, and the elements on list are sorted in -increasing numerical order. Elements without a numeric list order are -placed at the end of @var{symbol}. +The @var{order} is typically a number (integer or float), and the +elements of the list are sorted in non-decreasing numerical order. + +@var{order} may also be omitted or @code{nil}. Then the numeric order +of @var{element} stays unchanged if it already has one; otherwise, +@var{element} has no numeric order. Elements without a numeric list +order are placed at the end of the list, in no particular order. + +Any other value for @var{order} removes the numeric order of @var{element} +if it already has one; otherwise, it is equivalent to @code{nil}. The argument @var{symbol} is not implicitly quoted; @code{add-to-ordered-list} is an ordinary function, like @code{set} and unlike @code{setq}. Quote the argument yourself if that is what you want. -The ordering information is stored in an alist on @var{symbol}'s +The ordering information is stored in a hash table on @var{symbol}'s @code{list-order} property. @end defun @@ -945,11 +952,11 @@ Here's a scenario showing how to use @code{add-to-ordered-list}: (add-to-ordered-list 'foo 'd) ;; @r{Append @code{d}.} @result{} (a c b d) -(add-to-ordered-list 'foo 'b 2) ;; @r{Move @code{b}.} - @result{} (a b c d) +(add-to-ordered-list 'foo 'e) ;; @r{Add @code{e}}. + @result{} (a c b e d) foo ;; @r{@code{foo} was changed.} - @result{} (a b c d) + @result{} (a c b e d) @end example @node Variable Scoping diff --git a/lispref/windows.texi b/lispref/windows.texi index d9ecf5db7eb..5a58c31f39a 100644 --- a/lispref/windows.texi +++ b/lispref/windows.texi @@ -463,8 +463,8 @@ The return value is @var{window}. @defmac save-selected-window forms@dots{} This macro records the selected frame, as well as the selected window of each frame, executes @var{forms} in sequence, then restores the -earlier selected frame and windows It returns the value of the last -form in @var{forms}. +earlier selected frame and windows. It also saves and restores the +current buffer. It returns the value of the last form in @var{forms}. This macro does not save or restore anything about the sizes, arrangement or contents of windows; therefore, if the @var{forms} @@ -478,9 +478,9 @@ the end of @var{forms} remains selected. @defmac with-selected-window window forms@dots{} This macro selects @var{window} (without changing the buffer list), executes @var{forms} in sequence, then restores the previously -selected window (unless that window is no longer alive). It is similar -to @code{save-selected-window} except that it explicitly selects -@var{window}, without altering the buffer list sequence. +selected window and current buffer. It is just like +@code{save-selected-window}, except that it explicitly selects +@var{window}, also without altering the buffer list sequence. @end defmac @cindex finding windows diff --git a/man/ChangeLog b/man/ChangeLog index 6bcbe6dc9e9..3d75467e2bf 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,23 @@ +2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NoCeM): gnus-nocem-verifyer defaults to pgg-verify. + +2005-06-29 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: Version 3.12 + +2005-06-24 Richard M. Stallman <rms@gnu.org> + + * display.texi (Text Display): Change index entries. + +2005-06-24 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (MAKEINFO): Use --force. + (INFO_TARGETS, DVI_TARGETS): Make identical to the lists in + Makefile.in. + (gnus.dvi): Use "..." to quote Sed args, so that it works with + more shells. + 2005-06-23 Richard M. Stallman <rms@gnu.org> * anti.texi (Antinews): Renamed show-nonbreak-escape to diff --git a/man/display.texi b/man/display.texi index 7bdd1d5fb59..02854b3d6db 100644 --- a/man/display.texi +++ b/man/display.texi @@ -946,8 +946,9 @@ them), otherwise as escape sequences. @xref{Single-Byte Character Support}. @vindex nobreak-char-display -@cindex nobreak space, display -@cindex nobreak hyphen, display +@cindex no-break space, display +@cindex no-break hyphen, display +@cindex soft hyphen, display Some character sets define ``no-break'' versions of the space and hyphen characters, which are used where a line should not be broken. Emacs normally displays these characters with special faces diff --git a/man/gnus.texi b/man/gnus.texi index f386297e925..b1d5be22651 100644 --- a/man/gnus.texi +++ b/man/gnus.texi @@ -21750,27 +21750,18 @@ The specs are applied left-to-right. @item gnus-nocem-verifyer @vindex gnus-nocem-verifyer -@findex mc-verify +@findex pgg-verify This should be a function for verifying that the NoCeM issuer is who she -says she is. The default is @code{mc-verify}, which is a Mailcrypt -function. If this is too slow and you don't care for verification -(which may be dangerous), you can set this variable to @code{nil}. - -If you want signed NoCeM messages to be verified and unsigned messages -not to be verified (but used anyway), you could do something like: - -@lisp -(setq gnus-nocem-verifyer 'my-gnus-mc-verify) - -(defun my-gnus-mc-verify () - (not (eq 'forged - (ignore-errors - (if (mc-verify) - t - 'forged))))) -@end lisp - -This might be dangerous, though. +says she is. The default is @code{pgg-verify}, which returns +non-@code{nil} if the verification is successful, otherwise (including +the case the NoCeM message was not signed) returns @code{nil}. If this +is too slow and you don't care for verification (which may be dangerous), +you can set this variable to @code{nil}. + +Formerly the default was @code{mc-verify}, which is a Mailcrypt +function. While you can still use it, you can change it into +@code{pgg-verify} running with GnuPG if you are willing to add the +@acronym{PGP} public keys to GnuPG's keyring. @item gnus-nocem-directory @vindex gnus-nocem-directory diff --git a/man/makefile.w32-in b/man/makefile.w32-in index d89c77ab5d9..9771be8ef06 100644 --- a/man/makefile.w32-in +++ b/man/makefile.w32-in @@ -29,33 +29,28 @@ srcdir=. infodir = $(srcdir)/../info # The makeinfo program is part of the Texinfo distribution. -MAKEINFO = makeinfo +MAKEINFO = makeinfo --force MULTI_INSTALL_INFO = $(srcdir)\..\nt\multi-install-info.bat -INFO_TARGETS = $(infodir)/emacs $(infodir)/ccmode \ - $(infodir)/cl $(infodir)/dired-x \ - $(infodir)/ediff $(infodir)/forms \ - $(infodir)/gnus $(infodir)/info \ - $(infodir)/message $(infodir)/mh-e \ - $(infodir)/reftex $(infodir)/sc \ - $(infodir)/vip $(infodir)/viper \ - $(infodir)/widget $(infodir)/efaq \ - $(infodir)/ada-mode $(infodir)/autotype \ - $(infodir)/calc $(infodir)/idlwave \ - $(infodir)/eudc $(infodir)/ebrowse \ - $(infodir)/pcl-cvs $(infodir)/woman \ - $(infodir)/emacs-mime $(infodir)/eshell \ - $(infodir)/speedbar $(infodir)/tramp \ - $(infodir)/ses $(infodir)/smtpmail \ - $(infodir)/flymake $(infodir)/emacs-xtra \ - $(infodir)/org $(infodir)/url \ - $(infodir)/pgg $(infodir)/sieve +INFO_TARGETS = $(infodir)/emacs $(infodir)/emacs-xtra $(infodir)/ccmode \ + $(infodir)/cl $(infodir)/dired-x $(infodir)/ediff \ + $(infodir)/forms $(infodir)/gnus $(infodir)/message \ + $(infodir)/sieve $(infodir)/pgg $(infodir)/emacs-mime \ + $(infodir)/info $(infodir)/mh-e $(infodir)/reftex \ + $(infodir)/sc $(infodir)/vip $(infodir)/viper \ + $(infodir)/widget $(infodir)/efaq $(infodir)/ada-mode \ + $(infodir)/autotype $(infodir)/calc $(infodir)/idlwave \ + $(infodir)/eudc $(infodir)/ebrowse $(infodir)/pcl-cvs \ + $(infodir)/woman $(infodir)/eshell $(infodir)/org \ + $(infodir)/url $(infodir)/speedbar $(infodir)/tramp \ + $(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake DVI_TARGETS = emacs.dvi calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \ - ediff.dvi forms.dvi gnus.dvi message.dvi mh-e.dvi \ + ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ + gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \ reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ - org.dvi pcl-cvs.dvi woman.dvi emacs-mime.dvi eshell.dvi \ + pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \ speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \ - emacs-xtra.dvi pgg.dvi sieve.dvi url.dvi + emacs-xtra.dvi INFOSOURCES = info.texi # The following rule does not work with all versions of `make'. @@ -197,7 +192,7 @@ forms.dvi: forms.texi $(infodir)/gnus: gnus.texi $(MAKEINFO) gnus.texi gnus.dvi: gnus.texi - sed -e '/@iflatex/,/@end iflatex/d' $(srcdir)/gnus.texi > gnustmp.texi + sed -e "/@iflatex/,/@end iflatex/d" $(srcdir)/gnus.texi > gnustmp.texi $(ENVADD) $(TEXI2DVI) gnustmp.texi cp gnustmp.dvi $*.dvi rm gnustmp.* diff --git a/man/org.texi b/man/org.texi index e3d35cf19fa..b6d43bc50a7 100644 --- a/man/org.texi +++ b/man/org.texi @@ -4,7 +4,7 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.11 +@set VERSION 3.12 @set DATE June 2005 @dircategory Emacs @@ -109,8 +109,16 @@ Document Structure Tables * Built-in table editor:: Simple tables -* table.el:: Complex tables +* Table calculations:: Compute a field from other fields * orgtbl-mode:: The table editor as minor mode +* table.el:: Complex tables + +Calculations in tables + +* Formula syntax:: How to write a formula +* Applying a formula:: How to get a formula executed +* Recalculation:: Re-applying all formulas in a table +* Summing:: Summing columns and rows Hyperlinks @@ -203,6 +211,7 @@ different levels and in different ways, for example @example @r{@bullet{} as an outline extension with visibility cycling and structure editing} @r{@bullet{} as an ASCII system and table editor to take structured notes} +@r{@bullet{} as an ASCII table editor with some spreadsheet-like capabilities} @r{@bullet{} as a simple hypertext system, with HTML export} @r{@bullet{} as a TODO list editor} @r{@bullet{} as a full agenda and planner with deadlines and work scheduling} @@ -384,7 +393,7 @@ Note that inside tables, @kbd{S-@key{TAB}} jumps to the previous field. Show all. @end table -When Emacs firsts visits a Org-mode file, the global state is set to +When Emacs first visits an Org-mode file, the global state is set to OVERVIEW, i.e. only the top level headlines are visible. This can be configured through the variable @code{org-startup-folded}, or on a per-file basis by adding one of the following lines anywhere in the @@ -435,9 +444,9 @@ visible. @cindex promotion, of subtrees @cindex demotion, of subtrees @cindex subtree, cut and paste -@cindex pasting, subtrees -@cindex cutting, subtrees -@cindex copying, subtrees +@cindex pasting, of subtrees +@cindex cutting, of subtrees +@cindex copying, of subtrees @table @kbd @kindex M-@key{RET} @@ -493,11 +502,11 @@ functionality. @section Archiving @cindex archiving -When an project represented by a (sub)tree is finished, you may want -to move the tree to an Archive place, either in the same file under a +When a project represented by a (sub)tree is finished, you may want +to move the tree to an archive place, either in the same file under a special top-level heading, or even to a different file. @table @kbd -@kindex @kbd{C-c $} +@kindex C-c $ @item @kbd{C-c $} Archive the subtree starting at the cursor position to the location given by @code{org-archive-location}. @@ -524,7 +533,7 @@ An important feature of Org-mode is the ability to construct sparse tree means that the entire document is folded as much as possible, but the selected information is made visible along with the headline structure above it@footnote{See also the variable -@code{org-show-following-heading}}. Just try it out and you will see +@code{org-show-following-heading}.}. Just try it out and you will see immediately how it works. Org-mode contains several commands creating such trees. The most @@ -549,7 +558,7 @@ C-v} creates a sparse TODO tree (@pxref{TODO basics}). @cindex visible text, printing To print a sparse tree, you can use the Emacs command @code{ps-print-buffer-with-faces} which does not print invisible parts -of the document @footnote{this does not work under XEmacs, because +of the document @footnote{This does not work under XEmacs, because XEmacs uses selective display for outlining, not text properties}. Or you can use the command @kbd{C-c C-x v} to copy the visible part of the document to another file (extension @file{.txt}) which then can be @@ -559,18 +568,18 @@ printed in any desired way. @chapter Tables @cindex tables -For taking notes, tables are an essential tool because they allow -immediate and clear structuring of data. Org-mode has a very fast and -intuitive table editor built-in. More complex tables can be created -with the Emacs table.el package. +Org-mode has a very fast and intuitive table editor built-in. +Spreadsheet-like calculations are supported in connection with the +Emacs @file{calc} package. @menu * Built-in table editor:: Simple tables -* table.el:: Complex tables +* Table calculations:: Compute a field from other fields * orgtbl-mode:: The table editor as minor mode +* table.el:: Complex tables @end menu -@node Built-in table editor, table.el, Tables, Tables +@node Built-in table editor, Table calculations, Tables, Tables @section The built-in table editor @cindex table editor, builtin @@ -587,13 +596,13 @@ like this: @end example A table is re-aligned automatically each time you press @key{TAB} or -@key{RET} inside the table. @key{TAB} also moves to the next field -(@key{RET} to the next row) and creates new table rows at the end of the -table or before horizontal lines. The indentation of the table is set -by the first line. Any line starting with @samp{|-} is considered as a -horizontal separator line and will be expanded on the next re-align to -span the whole table width. So, to create the above table, you would -only type +@key{RET} or @kbd{C-c C-c} inside the table. @key{TAB} also moves to +the next field (@key{RET} to the next row) and creates new table rows +at the end of the table or before horizontal lines. The indentation +of the table is set by the first line. Any line starting with +@samp{|-} is considered as a horizontal separator line and will be +expanded on the next re-align to span the whole table width. So, to +create the above table, you would only type @example |Name|Phone|Age @@ -605,10 +614,9 @@ fields. @table @kbd @tsubheading{Creation and conversion} -@kindex C-c C-c -@item C-c C-c -Recognize @file{table.el} table. Works when the cursor is in a -table.el table +@item M-x org-table-create +Creates an empty Org-mode table. However, it is much easier to just +start typing, like @kbd{|Name|Phone|Age @key{RET} |- @key{TAB}} @kindex C-c C-c @item C-c C-c @@ -619,10 +627,6 @@ separated. If not, lines are split at whitespace into fields. You can use a prefix argument to indicate how many consecutive spaces are at least required to indicate a field separator (default: just one). -@item M-x org-table-create -Creates an empty Org-mode table. However, it is much easier to just -start typing, like @kbd{|Name|Phone|Age @key{RET} |- @key{TAB}} - @tsubheading{Re-aligning and field motion} @kindex C-c C-c @item C-c C-c @@ -635,7 +639,7 @@ necessary. @kindex S-@key{TAB} @item S-@key{TAB} -Move to previous field. +Re-align, move to previous field. @kindex @key{RET} @item @key{RET} @@ -674,19 +678,19 @@ Insert a new row above (with arg: below) the current row. @kindex C-c - @item C-c - -Insert a horizontal line below current row. With prefix arg, line is -created above the current line. +Insert a horizontal line below current row. With prefix arg, the line +is created above the current line. @tsubheading{Regions} @kindex C-c C-h M-w @item C-c C-h M-w -Copy an rectangular region from a table to a special clipboard. Point +Copy a rectangular region from a table to a special clipboard. Point and mark determine edge fields of the rectangle. The process ignores horizontal separator lines. @kindex C-c C-h C-w @item C-c C-h C-w -Copy an rectangular region from a table to a special clipboard, and -blank all fields in the rectangle. +Copy a rectangular region from a table to a special clipboard, and +blank all fields in the rectangle. So this is the ``cut'' operation. @kindex C-c C-h C-y @item C-c C-h C-y Paste a rectangular region into a table. @@ -707,6 +711,29 @@ current field gets blank, and the content is appended to the field above. @tsubheading{Calculations} +@cindex formula, in tables +@cindex calculations, in tables +@kindex C-c = +@item C-c = +Replace current field with the result of a formula. When called with a +@kbd{C-u} prefix, apply the equation in the current field and down +through the current column to a horizonal separator line or the end of +the table. For details, see @ref{Table calculations}. + +@kindex C-c * +@item C-c * +Recalculate the current row by applying the stored formulas from left +to right. When called with a @kbd{C-u} prefix, recalculate the +entire table, starting with the first non-header line (i.e. below the +first horizontal separator line). For details, see @ref{Table calculations}. + +@kindex C-# +@item C-# +Rotate the recalculation mark in first column through the states +@samp{}, @samp{#}, @samp{*}, @samp{!}, @samp{$}. For the meaning of +these marks see @ref{Table calculations}. When there is an active +region, change all marks in the region. + @kindex C-c ? @item C-c ? Which table column is the cursor in? Displays number >0 in echo @@ -718,7 +745,7 @@ area. @kindex C-c + @item C-c + Sum the numbers in the current column, or in the rectangle defined by -the active region. The result is displayed in the echo area and can +the active region. The result is shown in the echo area and can be inserted with @kbd{C-y}. @kindex S-@key{RET} @@ -730,23 +757,12 @@ along with it. Depending on the variable incremented during copy. This key is also used by CUA-mode (@pxref{Interaction}). -@cindex formula, in tables -@cindex calculations, in tables -@kindex C-c = -@item C-c = -Replace current field with the result of a formula. Requires the -Emacs calc package. The formula can access the current field with -@samp{$}, and the other fields in the current row -with @samp{$1}, @samp{$2},... For details see the documentation of the -command @command{org-table-eval-formula}. - @tsubheading{Miscellaneous} @kindex C-c | @item C-c | Toggle the visibility of vertical lines in tables. The lines are still there, only made invisible with a text property. Any @samp{|} added by hand will become invisible on the next align. -Typographically it is good style to have no vertical lines in tables. @item M-x org-table-import Import a file as a table. The table should be TAB- or whitespace @@ -771,23 +787,231 @@ it off with @noindent The only table command which then still works is @kbd{C-c C-c} to do a manual re-align. -@node table.el, orgtbl-mode, Built-in table editor, Tables +@node Table calculations, orgtbl-mode, Built-in table editor, Tables +@section Calculations in tables +@cindex calculations, in tables + +While the Org-mode table editor misses many features of a full +spreadsheet, it nevertheless has very useful capabilities to compute +fields. In horizontal direction, it can use complex expressions to +compute a field from other fields @emph{in the same row}, using named +columns, constants and parameters. The Emacs @file{calc} package is +required for this feature to work. In vertical direction, only +summing is supported. + +@menu +* Formula syntax:: How to write a formula +* Applying a formula:: How to get a formula executed +* Recalculation:: Re-applying all formulas in a table +* Summing:: Summing columns and rows +@end menu + +@node Formula syntax, Applying a formula, Table calculations, Table calculations +@subsection Formula syntax + +A formula for horizontal computations can be any algebraic expression +understood by the Emacs @file{calc} package. Before evaluation, +variable substitution takes place: @samp{$} is replaced by the field +the cursor is currently in, and $1..$n reference the fields in the +current row. @samp{$name} is interpreted as the name of a column, +parameter or constant. Constants are defined globally through the +variable @code{org-table-formula-constants}. If you have the +@file{constants.el} package, it will also be used to resolve +constants, including natural constants like @samp{$k} for Plancks +constant, units like @samp{$km} for kilometers. Column names and +parameters can be specified in special table lines. These are +described below, see @ref{Recalculation}. + +A formula can contain an optional mode string after a semicolon. This +string consists of flags to influence calc's modes@footnote{By +default, Org-mode uses the standard calc modes (precision 12, angular +units degrees, fraction and symbolic modes off). However, the display +format which has been changed to @code{(float 5)} to keep tables +compact. The default settings can be configured using the variable +@code{org-calc-default-modes}.} during execution, e.g. @samp{p20} to +switch the internal precision to 20 digits, @samp{n3}, @samp{s3}, +@samp{e2} or @samp{f4} to switch to normal, scientific, engineering, +or fix display format, respectively, and @samp{D}, @samp{R}, @samp{F}, +and @samp{S} to turn on degrees, radians, fraction and symbolic modes, +respectively. In addition, you may provide a @code{printf} specifier +to reformat the final result. A few examples: +@example + $1+$2 @r{Sum of first and second field} + $1+$2;%.2f @r{Same, format result to two decimals} + exp($2)+exp($1) @r{Math functions can be used} + $;%.1f @r{Reformat current cell to 1 decimal} + ($3-32)*5/9 @r{degrees F -> C conversion} + $c/$1/$cm @r{Hz -> cm conversion, using @file{constants.el}} + tan($1);Dp3s1 @r{compute in degrees, precision 3, display SCI 1} + vmean($2..$7) @r{compute column range mean, using vector function} + taylor($3,x=7,2) @r{taylor series of $3, at x=7, second degree} +@end example + +@node Applying a formula, Recalculation, Formula syntax, Table calculations +@subsection Applying a formula + +To apply a formula to a field, type it directly into the field, +preceded by an equal sign, like @samp{=$1+$2}. When you press +@key{TAB} or @key{RET} or @kbd{C-c C-c} with the cursor still in the +field, the formula will be evaluated and replaced with the result. If +the field contains only @samp{=}, the formula most recently applied +anywhere in the @emph{same column} will be used. + +For each column, Org-mode will remember the most recently used +formula. The information is stored in a special line directly below +the table. When adding/deleting/moving columns with the appropriate +commands, the stored equations will be modified accordingly. When a +column used in a calculation is removed, references to this column +become invalid and will cause an error upon applying the equation. + +Instead of typing an equation into the field, you may also use the +command @kbd{C-c =}. It prompts for a formula (with default taken +from the @samp{#+TBLFM:} line) and applies it to the current field. +If you use a prefix argument (i.e. @kbd{C-u C-c =}), the formula will +be applied to the current field and down to the next separator line +or the end of the table. A numerical prefix will apply it to that +many fields in the current column. + +When the evaluation of a formula leads to an error, the field content +becomes the string @samp{#ERROR}. If you would like see what is going +on during variable substitution and calculation in order to find a +bug, turn on formula debugging in the menu and repeat the calculation +by pressing, for example by pressing @kbd{C-c = @key{RET}} in a field. +Detailed information will be displayed. + +@node Recalculation, Summing, Applying a formula, Table calculations +@subsection Recalculation + +To recompute all the fields in a line, use the command @kbd{C-c *}. +It re-applies all stored equations to the current row, from left to +right. With a @kbd{C-u} prefix, this will be done to every line in +the table, so use this command it you want to make sure the entire +table is up-to-date. A more automatic way of recalculating the +current line requires marking the line: If the first column of a row +contains only @samp{#}, the row will be re-computed with every +@key{TAB}, @key{RET}, and @kbd{C-c C-c} in this row. Here is an +example of a table that collects exam results of students, with some +rows activated for semi-automatic computations. + +@example +@group +|---+---------+--------+--------+--------+-------+------| +| | Student | Prob 1 | Prob 2 | Prob 3 | Total | Note | +|---+---------+--------+--------+--------+-------+------| +| ! | | P1 | P2 | P3 | Tot | | +| # | Maximum | 10 | 15 | 25 | 50 | 10.0 | +|---+---------+--------+--------+--------+-------+------| +| # | Peter | 10 | 8 | 23 | 41 | 8.2 | +| # | Sara | 7 | 14 | 19 | 40 | 8.0 | +| # | Sam | 2 | 4 | 3 | 9 | 1.8 | +|---+---------+--------+--------+--------+-------+------| +| $ | max=50 | | | | | | +|---+---------+--------+--------+--------+-------+------| +#+TBLFM: $6=vsum($P1..$P3)::$7=10*$Tot/$max;%.1f +@end group +@end example +@noindent +The example also demonstrates a number of convenience features: +@enumerate +@item +If the first field of a row contains only @samp{!}, this row defines +@emph{names} for the different columns so that you can write +@samp{$Tot} instead of @samp{$6} --- useful in larger tables, +when counting columns becomes error prone. +@item +If the first field of a row contains only @samp{$}, fields in this row +can define @emph{parameters} for formulas. For example, if a field in +a @samp{$} row contains @samp{max=50}, then formulas in this table can +refer to the value 50 using @samp{$max}. Parameters work exactly like +constants, only that they can be defined on a per-table basis. +Changing a parameter and then recalculating the table can be useful +and fun. +@item +A column range @samp{$P1..$P3} is expanded to a vector, so that calc's +vector functions (in this case @samp{vsum}, but there are many more) +can be applied to ranges. For a range, columns may be referenced by +name or number, in either sequence. +@end enumerate + +@noindent If a table contains any line with @samp{#} as the +first field, @kbd{C-u C-c *} will only change the marked lines and +leave all unmarked lines alone. You can also mark a line with +@samp{*}. These lines will also be recalculated with @kbd{C-u C-c *}, +but not upon @key{TAB} and @key{RET}. Use this for lines which are +slow to calculate. + +Just to wet your appetite on what can be done with the fantastic +@file{calc} package, here is a table that computes the Taylor series +for a couple of functions (homework: try that with Excel :-) + +@example +@group +|---+-------------+---+-----+--------------------------------------| +| | Func | n | x | Result | +|---+-------------+---+-----+--------------------------------------| +| # | exp(x) | 1 | x | 1 + x | +| # | exp(x) | 2 | x | 1 + x + x^2 / 2 | +| # | exp(x) | 3 | x | 1 + x + x^2 / 2 + x^3 / 6 | +| # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 | +| # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2 | +| * | tan(x) | 3 | x | 0.0175 x + 1.77e-6 x^3 | +|---+-------------+---+-----+--------------------------------------| +#+TBLFM: $5=taylor($2,$4,$3);n3 +@end group +@end example + +@node Summing, , Recalculation, Table calculations +@subsection Summing + +Finally, when typing a formula into a field, a number of special +keywords execute predefined sums over the current row or column and +enter the result into the current field. These calculations are +one-off, the formula is not stored, and you will neet to re-enter it +in order to compute again. + +@example += @r{Execute the stored formula valid in this column.} +=sum @r{Sum all fields above the current (alias @code{=sumv}).} +=sumh @r{Sum all fields to the left of the current field.} +=sum3 @r{Same as @samp{=sum}, but use just 3 fields above current.} +@end example + +@node orgtbl-mode, table.el, Table calculations, Tables +@section The Orgtbl minor mode +@cindex orgtbl-mode +@cindex minor mode for tables + +If you like the intuitive way the Org-mode table editor works, you +might want to use it also in other modes like text-mode or mail-mode. +The minor mode Orgtbl-mode makes this possible. You can always toggle +the mode with @kbd{M-x orgtbl-mode}. To turn it on by default, for +example in mail mode, use +@lisp +(add-hook 'mail-mode-hook 'turn-on-orgtbl) +@end lisp + +@node table.el, , orgtbl-mode, Tables @section The @file{table.el} package @kindex C-c C-c -@cindex table editor, table.el +@cindex table editor, @file{table.el} @cindex @file{table.el} -More complex ASCII tables (with automatic line wrapping, column- and -row-spanning, and alignment) can be created using the Emacs table +Complex ASCII tables with automatic line wrapping, column- and +row-spanning, and alignment can be created using the Emacs table package by Takaaki Ota (@uref{http://sourceforge.net/projects/table}). When @key{TAB} or @kbd{C-c C-c} is pressed in such a table, Org-mode will call @command{table-recognize-table} and move the cursor into the table. Inside a table, the keymap of Org-mode is inactive. In order -to execute org-related commands, leave the table. +to execute Org-mode-related commands, leave the table. @table @kbd -@kindex C-c # -@item C-c # +@kindex C-c C-c +@item C-c C-c +Recognize @file{table.el} table. Works when the cursor is in a +table.el table. + +@kindex C-c ~ +@item C-c ~ Insert a table.el table. If there is already a table at point, this command converts it between the table.el format and the Org-mode format. See the documentation string of the command @@ -795,20 +1019,6 @@ format. See the documentation string of the command possible. @end table -@node orgtbl-mode, , table.el, Tables -@section The Orgtbl minor mode -@cindex orgtbl-mode -@cindex Minor mode for tables - -If you like the intuitive way the Org-mode table editor works, you -might want to use it also in other modes like text-mode or mail-mode. -The minor mode Orgtbl-mode makes this possible. You can always toggle -the mode with @kbd{M-x orgtbl-mode}. To turn it on by default, for -example in mail mode, use -@lisp -(add-hook 'mail-mode-hook 'turn-on-orgtbl) -@end lisp - @node Hyperlinks, TODO items, Tables, Top @chapter Hyperlinks @cindex hyperlinks @@ -826,6 +1036,8 @@ articles, emails and much more. @cindex links @cindex GNUS links @cindex BBDB links +@cindex URL links +@cindex file links @cindex VM links @cindex RMAIL links @cindex WANDERLUST links @@ -877,6 +1089,8 @@ The key binding @kbd{C-c l} is only a suggestion - see @ref{Installation and Activation}. @kindex C-c C-l +@cindex completion, of links +@cindex completion, of file names @item C-c C-l Insert a link. This prompts for a link to be inserted into the buffer. You can just type a link, using one of the link type prefixes @@ -969,8 +1183,8 @@ Before inserting the text into a tree, the function ensures that the text has a headline, i.e. a first line that starts with a @samp{*}. If not, a headline is constructed from the current date and some additional data. If the variable @code{org-adapt-indentation} is -non-@code{nil}, the entire text is also indented so that it starts in -the same column as the headline (after the asterisks). +non-nil, the entire text is also indented so that it starts in the +same column as the headline (after the asterisks). @node TODO items, Timestamps, Hyperlinks, Top @chapter TODO items @@ -1057,6 +1271,7 @@ of working on an item, for example org-todo-interpretation 'sequence) @end lisp +@cindex completion, of TODO keywords With this setup, the command @kbd{C-c C-t} will cycle an entry from TODO to FEEDBACK, then to VERIFY, and finally too DONE. You may also use a prefix argument to quickly select a specific state. For example @@ -1084,9 +1299,9 @@ would be set up like this: In this case, different keywords do not indicate a sequence, but rather different types. So it is normally not useful to change from -one type to another. Therefore, in this case the the behavior of the +one type to another. Therefore, in this case the behavior of the command @kbd{C-c C-t} is changed slightly@footnote{This is also true -for the @kbd{t} command in the timeline and agenda buffers}. When +for the @kbd{t} command in the timeline and agenda buffers.}. When used several times in succession, it will still cycle through all names. But when when you return to the item after some time and execute @kbd{C-c C-t} again, it will switch from each name directly to @@ -1111,7 +1326,7 @@ anywhere in the file: #+TYP_TODO: Fred Sara Lucy Mike DONE @end example -@cindex Completing option keywords +@cindex Completion, of option keywords @kindex M-@key{TAB} @noindent To make sure you are using the correct keyword, type @samp{#+} into the buffer and then use @kbd{M-@key{TAB}} completion. @@ -1171,7 +1386,7 @@ agenda buffer with the @kbd{,} command (@pxref{Agenda commands}). @itemx S-@key{down} Increase/decrease priority of current item. Note that these keys are also used to modify time stamps (@pxref{Creating timestamps}). -Furthermore, these keys is also used by CUA-mode +Furthermore, these keys are also used by CUA-mode (@pxref{Interaction}). @end table @@ -1221,27 +1436,27 @@ example: @end example @item DEADLINE -@cindex deadline +@cindex DEADLINE keyword If a time stamp is preceded by the word @samp{DEADLINE:}, the task (most likely a TODO item) is supposed to be finished on that date, and -it will be listed then. In addition, the compilation for the -@emph{current day} will carry a warning about the approaching or -missed deadline, starting @code{org-deadline-warning-days} before the -due date, and continuing until the entry is marked DONE. An example: +it will be listed then. In addition, the compilation for @emph{today} +will carry a warning about the approaching or missed deadline, +starting @code{org-deadline-warning-days} before the due date, and +continuing until the entry is marked DONE. An example: @example *** TODO write article about the Earth for the Guide - The editor in charge is bbdb:Ford Prefect + The editor in charge is <bbdb:Ford Prefect> DEADLINE: <2004-02-29 Sun> @end example @item SCHEDULED -@cindex scheduled +@cindex DEADLINE keyword If a time stamp is preceded by the word @samp{SCHEDULED:}, it means you are planning to start working on that task on the given date. The headline will be listed under the given date. In addition, a reminder that the scheduled date has passed will be present in the compilation -for the @emph{current day}, until the entry is marked DONE. I.e., the +for the @emph{today}, until the entry is marked DONE. I.e., the task will automatically be forwarded. @end table @@ -1310,7 +1525,7 @@ CUA-mode (@pxref{Interaction}). Change the item under the cursor in a timestamp. The cursor can be on a year, month, day, hour or minute. Note that if the cursor is not at a time stamp, these same keys modify the priority of an item. -(@pxref{Priorities}). These key bindings conflict with CUA-mode +(@pxref{Priorities}). The key bindings also conflict with CUA-mode (@pxref{Interaction}). @@ -1325,9 +1540,9 @@ into the following column). @cindex date, reading in minibuffer @cindex time, reading in minibuffer @cindex calendar, for selecting date -When org prompts for a date/time, the function reading your input will -replace anything you choose not to specify with the current date and -time. For details, see the documentation string of +When Org-mode prompts for a date/time, the function reading your input +will replace anything you choose not to specify with the current date +and time. For details, see the documentation string of @command{org-read-date}. Also, a calender will pop up to allow selecting a date. The calendar can be fully controlled from the minibuffer, and a date can be selected with the following commands: @@ -1487,12 +1702,12 @@ Emacs. The display in the agenda buffer looks best if the category is not longer than 10 characters. -@subsection Time Specifications +@subsection Time-of-Day Specifications -Org-mode checks each agenda item for a time specification. The time -can be part of the time stamp that triggered inclusion into the agenda, -for example as in @w{@samp{<2005-05-10 Tue 19:00>}}. Time ranges can -be specified with two time stamps, like +Org-mode checks each agenda item for a timeof-day specification. The +time can be part of the time stamp that triggered inclusion into the +agenda, for example as in @w{@samp{<2005-05-10 Tue 19:00>}}. Time +ranges can be specified with two time stamps, like @c @w{@samp{<2005-05-10 Tue 20:30>--<2005-05-10 Tue 22:15>}}. @@ -1608,10 +1823,14 @@ Delete other windows. @kindex w @item w -Toggle between weekly and daily view. +Switch to weekly view (7 days displayed together) @kindex d @item d +Switch to daily view (just one day displayed) + +@kindex D +@item D Toggle the inclusion of diary entries. See @ref{Calendar/Diary integration}. @kindex g @@ -1663,7 +1882,7 @@ Display weighted priority of current item. @kindex + @kindex S-@key{up} @item + -@item S-@key{up} +@itemx S-@key{up} Increase the priority of the current item. The priority is changed in the original buffer, but the agenda is not resorted. Use the @kbd{r} key for this. @@ -1671,7 +1890,7 @@ key for this. @kindex - @kindex S-@key{down} @item - -@item S-@key{down} +@itemx S-@key{down} Decrease the priority of the current item. @kindex S-@key{right} @@ -1782,12 +2001,12 @@ agenda, you only need to customize the variable entries including holidays, anniversaries etc will be included in the agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and @key{RET} can be used from the agenda buffer to jump to the diary -file, in order to edit existing diary entries. Also the @kbd{i} -command to insert new entries for the current date works in the agenda -buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to -display Sunrise/Sunset times, show lunar phases and to convert to -other calendars, respectively. @kbd{c} can be used to switch back and -forth between calendar and agenda. +file, in order to edit existing diary entries. The @kbd{i} command to +insert new entries for the current date works in the agenda buffer, as +well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to display +Sunrise/Sunset times, show lunar phases and to convert to other +calendars, respectively. @kbd{c} can be used to switch back and forth +between calendar and agenda. @node Agenda to diary, , Diary to agenda, Calendar/Diary integration @subsection Including the agenda into the diary @@ -1827,9 +2046,8 @@ also the documentation of the @command{org-diary} function. @node Exporting, Miscellaneous, Timeline and Agenda, Top @chapter Exporting @cindex exporting -@cindex ASCII file -@cindex HTML - +@cindex ASCII export +@cindex HTML export @cindex headline levels, for exporting For printing and sharing of notes, an Org-mode document can be @@ -1896,6 +2114,7 @@ You can make words @b{*bold*}, @i{/italic/}, and _underlined_ @item Simple @TeX{}-like math constructs are interpreted: +@cindex completion, of @TeX{} symbols @itemize @minus @item @samp{10^22} and @samp{J_n} are super- and subscripts. You can quote @@ -1931,6 +2150,7 @@ they can all be turned off with corresponding variables. @section Export options @cindex options, for export +@cindex completion, of option keywords The exporter recognizes special lines in the buffer which provide additional information. These lines may be put anywhere in the file. The whole set of lines can be inserted into the buffer with @kbd{C-c @@ -1953,7 +2173,7 @@ you can @cindex headline levels @cindex section-numbers @cindex table of contents -@cindex linebreak-preservation +@cindex linebreak preservation @cindex quoted html tags @cindex fixed-width sections @cindex tables @@ -2003,10 +2223,11 @@ Toggle the COMMENT keyword at the beginning of an entry. @node Completion, Customization, Miscellaneous, Miscellaneous @section Completion -@cindex complete @TeX{} symbols -@cindex complete TODO keywords -@cindex complete dictionary words -@cindex complete option keywords +@cindex completion, of @TeX{} symbols +@cindex completion, of TODO keywords +@cindex completion, of dictionary words +@cindex completion, of option keywords +@cindex completion, of keyword formulas Org-mode supports in-buffer completion. This type of completion does not make use of the minibuffer. You simply type a few letters into @@ -2027,6 +2248,8 @@ After @samp{#+}, complete the special keywords like @samp{TYP_TODO} or option keyword is already complete, pressing @kbd{M-@key{TAB}} again will insert example settings for this keyword. @item +After @samp{=}, complete keyword formulas for tables. +@item Elsewhere, complete dictionary words using ispell. @end itemize @end table @@ -2047,7 +2270,7 @@ Group} from the @code{Org->Customization} menu. @section Frequently asked questions @enumerate -@item @b{Org-mode seems to be useful default mode for the various +@item @b{Org-mode seems to be auseful default mode for the various @file{README} files I have scattered through my directories. How do I turn it on for all @file{README} files?} @example @@ -2065,8 +2288,8 @@ possible because of the different outline implementation. @item @b{Is there an easy way to insert links to web locations?}@* @cindex URL, paste into buffer -Sure, just paste them into the buffer. A plain-text URL-like string -is directly interpreted as a link. +Sure, just type or paste them into the buffer. A plain-text URL-like +string is directly interpreted as a link. @item @b{When I export my TODO list, every TODO item becomes a separate section. How do I enforce these items to be exported as an @@ -2107,6 +2330,13 @@ To insert an empty table template, just type @samp{|-} and use @code{org-table-default-size}. However, just starting to type the first line is usually much easier. +@item @b{One of my table columns has started to fill up with +@samp{#ERROR}. What is going on?}@* +Org-mode tried to compute the column from other fields using a +formula stored in the @samp{#+TBLFMT:} line just below the table, and +the evaluation of the formula fails. Fix the fields used in the +formula, or fix the formula, or remove it! + @item @b{When I am in the last column of a table and just above a horizontal line in the table, pressing TAB creates a new table line @i{before} the horizontal line. How can I quickly move to the line @@ -2125,34 +2355,42 @@ indentation of the first line and realign with @key{TAB}. @node Interaction, Bugs, FAQ, Miscellaneous @section Interaction with other packages @cindex packages, interaction with other -@cindex @file{planner.el} -@cindex @file{remember.el} -@cindex @file{table.el} -@file{Org.el} can cooperate with the following packages: +Org-mode can cooperate with the following packages: @table @asis -@cindex @file{remember.el} -@item @file{remember.el} by John Wiegley -Org mode cooperates with remember, see @ref{Remember}. -@cindex @file{plannner.el} -@item @file{planner.el} by John Wiegley -Planner is another tool to plan work and keep track of tasks. Planner -uses a multi-file approach with project pages and day pages. Is based -on Emacs-Wiki. It can be useful to display the agenda entries -resulting from org files in day-pages of the planner. This can be -done through the diary of the calendar: Integrate org files into the -diary as described above, and then turn on the diary support of -planner. @cindex @file{table.el} @item @file{table.el} by Takaaki Ota Org mode cooperates with table.el, see @ref{table.el}. +@cindex @file{calc.el} +@item @file{calc.el} by Dave Gillespie +Org-mode uses the calc package for implementing spreadsheet +functionality in its tables (@pxref{Table calculations}). Org-modes +checks for the availability of calc by looking for the function +@code{calc-eval} which should be autoloaded in your setup if calc has +been installed properly. As of Emacs 22, calc is part of the Emacs +distribution. Another possibility for interaction between the two +packages is using calc for embedded calculations. @xref{Embedded Mode, +, Embedded Mode, calc, The calc maanual}. +@cindex @file{constants.el} +@item @file{constants.el} by Carsten Dominik +In a table formula (@pxref{Table calculations}), it is possible to use +names for natural constants or units. Instead of defining you own +constants in the variable @code{org-table-formula-constants}, install +the @file{constants} package which defines a large number of constants +and units, and lets you use unit prefixes like @samp{M} for +@samp{Mega} etc. You will need version 2.0 of this package, available +at @url{http://www.astro.uva.nl/~dominik/Tools}. Org-mode checks for +the function @code{constants-get}, which has to be autoloaded in your +setup. See the installation instructions in the file +@file{constants.el}. +@cindex @file{remember.el} @cindex @file{CUA.el} @item @file{CUA.el} by Kim. F. Storm Keybindings in Org-mode conflict with the @kbd{S-<cursor>} keys used by CUA-mode (as well as pc-select-mode and s-region-mode) to select and extend the region. If you want to use one of these packages along with Org-mode, configure the variable -@code{org-CUA-compatible}. When set, Org-mode will move the folowing +@code{org-CUA-compatible}. When set, Org-mode will move the following keybindings in org-mode files, and in the agenda buffer (but not during date selection). @example @@ -2163,7 +2401,17 @@ S-RET -> C-S-RET Yes, these are unfortunately more difficult to remember. If you want to have other replacement keys, look at the variable @code{org-disputed-keys}. - +@item @file{remember.el} by John Wiegley +Org mode cooperates with remember, see @ref{Remember}. +@cindex @file{planner.el} +@item @file{planner.el} by John Wiegley +Planner is another tool to plan work and keep track of tasks. Planner +uses a multi-file approach with project pages and day pages. Is based +on Emacs-Wiki. If Planner is your primary tool, it can be useful to +display the agenda entries resulting from org files in day-pages of +the planner. This can be done through the diary of the calendar: +Integrate org files into the diary as described above, and then turn +on the diary support of planner. @end table @node Bugs, Acknowledgments, Interaction, Miscellaneous @@ -2177,7 +2425,7 @@ have found too hard to fix. @item If you call @code{fill-paragraph} (bound to @kbd{M-q}) in a table, the filling is correctly disabled. However, if some text directly -(without an empty line in between) preceeds or follws a table, calling +(without an empty line in between) preceeds or follows a table, calling @code{fill-paragraph} in that text will also fill the table like normal text. Also, @code{fill-region} does bypass the @code{fill-paragraph} code and will fill tables like normal text. @@ -2186,6 +2434,10 @@ When the application called by @kbd{C-c C-o} to open a file link fails (for example because the application does not exits or refuses to open the file), it does so silently. No error message is displayed. @item +Recalculating a table line applies the formulas from left to right. +If a formula calculated fields further doen the row, multiple +recalculation may be needed to get all fields consistent. +@item Under XEmacs, if Org-mode entries are included into the diary, it is not possible to jump back from the diary to the org file. Apparently, the text properties are lost when the fancy-diary-display is used. @@ -2214,8 +2466,8 @@ suggestions and patches. @itemize @bullet @item -Matthias Rempe (Oelde) provided ideas and suggestions, a patch -introducing Windows NT/2000 support, and quality control. +Matthias Rempe (Oelde) provided ideas, a patch introducing Windows +NT/2000 support, and quality control. @item Kevin Rogers contributed code to access VM files on remote hosts. @item @@ -2229,7 +2481,8 @@ his ideas have found their way into the agenda. Philip Rooke created the Org-mode reference card. He also helped with beta testing and contributed a number of very useful ideas. @item -Christian Schlauer proposed angular brackets around links, and some +Christian Schlauer proposed angular brackets around links, among other +things. other useful stuff. @item David Wainberg suggested to implement an archiving mechanism. diff --git a/src/ChangeLog b/src/ChangeLog index 94cfec41a62..2d312756daf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,11 +1,80 @@ +2005-06-29 Juanma Barranquero <lekktu@gmail.com> + + * eval.c (user_variable_p_eh): New function. + (Fuser_variable_p): Use it. Clarify docstring. + Return t for aliases of user options, nil for alias loops. + +2005-06-27 Richard M. Stallman <rms@gnu.org> + + * eval.c (Fdefvar): Improve error message. + +2005-06-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Fix last + change. + +2005-06-27 Juanma Barranquero <lekktu@gmail.com> + + * eval.c (Fdefvar): Don't try to set constant symbols. + +2005-06-25 Richard M. Stallman <rms@gnu.org> + + * macfns.c (Fx_show_tip): Pass new arg to try_window. + + * w32fns.c (Fx_show_tip): Pass new arg to try_window. + + * xfns.c (Fx_show_tip): Pass new arg to try_window. + + * xdisp.c (try_window): New arg CHECK_MARGINS. Calls changed. + (redisplay_window): Handle try_window reporting point in scroll margin. + + * dispextern.h (try_window): Declare new arg. + + * fileio.c (Fcopy_file): New arg PRESERVE_UID_GID. + Use fchmod to copy the file modes. + (Frename_file): Don't copy UID and GID here; + instead, specify t for PRESERVE_UID_GID when calling Fcopy_file. + + * eval.c (call_debugger): Take full care of extending stack limits + to make space for the debugger, and restore the change afterward. + Bind debug-on-error to nil. + (restore_stack_limits): New subroutine. + (Fsignal): Extend specpdl bound along with eval depth bound, + for calling edebug. Don't do either one, for calling debugger. + (find_handler_clause): Don't bind debug-on-error here. + Don't unbind anything either. + Temporarily advance max_specpdl_size for calling + internal_with_output_to_temp_buffer. + (grow_specpdl): Don't alter max_specpdl_size before signaling + an error. + (syms_of_eval) <max-specpdl-size>: Doc fix. + + * lread.c (read1): 0.0e+NaN should make a "positive" NaN. + +2005-06-24 Eli Zaretskii <eliz@gnu.org> + + * fileio.c (Frename_file): Undo last change: no need to ifdef away + chown on DOS_NT platforms. + + * w32.c (sys_chown): New function. + + * s/ms-w32.h (chown): New; define to sys_chown. + +2005-06-24 Juanma Barranquero <lekktu@gmail.com> + + * xdisp.c (syms_of_xdisp) <nobreak-char-display>: Doc fix. + (syms_of_xdisp) <void-text-area-pointer>: Doc fix. + + * fileio.c (Frename_file)[!DOS_NT]: Don't call chown on MSDOS/Windows. + 2005-06-23 Richard M. Stallman <rms@gnu.org> * xdisp.c (get_next_display_element): Finish reversing the tests of Vnobreak_char_display. - * xdisp.c (Vnobreak_char_display): Renamed from Vshow_nonbreak_escape. + * xdisp.c (Vnobreak_char_display): Rename from Vshow_nonbreak_escape. All uses changed. - (Qnobreak_space): Renamed from Qno_break_space. All uses changed. + (Qnobreak_space): Rename from Qno_break_space. All uses changed. (syms_of_xdisp): Define nobreak-char-display and nobreak-space. * fileio.c (Frename_file): Preserve owner and group, if possible, @@ -301,8 +370,7 @@ 2005-06-06 Eli Zaretskii <eliz@gnu.org> - * w32heap.h (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_PTR): - Remove macros. + * w32heap.h (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_PTR): Remove macros. * unexw32.c (RVA_TO_PTR): Move here from w32heap.h. diff --git a/src/dispextern.h b/src/dispextern.h index cd8488830f0..c049b17ce56 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2589,7 +2589,7 @@ int line_bottom_y P_ ((struct it *)); int display_prop_intangible_p P_ ((Lisp_Object)); void resize_echo_area_exactly P_ ((void)); int resize_mini_window P_ ((struct window *, int)); -int try_window P_ ((Lisp_Object, struct text_pos)); +int try_window P_ ((Lisp_Object, struct text_pos, int)); void window_box P_ ((struct window *, int, int *, int *, int *, int *)); int window_box_height P_ ((struct window *)); int window_text_bottom_y P_ ((struct window *)); diff --git a/src/eval.c b/src/eval.c index 8ad289fd51f..17e9f7f4360 100644 --- a/src/eval.c +++ b/src/eval.c @@ -227,6 +227,18 @@ init_eval () when_entered_debugger = -1; } +/* unwind-protect function used by call_debugger. */ + +static Lisp_Object +restore_stack_limits (data) + Lisp_Object data; +{ + max_specpdl_size = XINT (XCAR (data)); + max_lisp_eval_depth = XINT (XCDR (data)); +} + +/* Call the Lisp debugger, giving it argument ARG. */ + Lisp_Object call_debugger (arg) Lisp_Object arg; @@ -234,12 +246,22 @@ call_debugger (arg) int debug_while_redisplaying; int count = SPECPDL_INDEX (); Lisp_Object val; + int old_max = max_specpdl_size; + + /* Temporarily bump up the stack limits, + so the debugger won't run out of stack. */ + + max_specpdl_size += 1; + record_unwind_protect (restore_stack_limits, + Fcons (make_number (old_max), + make_number (max_lisp_eval_depth))); + max_specpdl_size = old_max; - if (lisp_eval_depth + 20 > max_lisp_eval_depth) - max_lisp_eval_depth = lisp_eval_depth + 20; + if (lisp_eval_depth + 40 > max_lisp_eval_depth) + max_lisp_eval_depth = lisp_eval_depth + 40; - if (specpdl_size + 40 > max_specpdl_size) - max_specpdl_size = specpdl_size + 40; + if (SPECPDL_INDEX () + 100 > max_specpdl_size) + max_specpdl_size = SPECPDL_INDEX () + 100; #ifdef HAVE_X_WINDOWS if (display_hourglass_p) @@ -256,6 +278,7 @@ call_debugger (arg) specbind (intern ("debugger-may-continue"), debug_while_redisplaying ? Qnil : Qt); specbind (Qinhibit_redisplay, Qnil); + specbind (Qdebug_on_error, Qnil); #if 0 /* Binding this prevents execution of Lisp code during redisplay, which necessarily leads to display problems. */ @@ -783,6 +806,10 @@ usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */) register Lisp_Object sym, tem, tail; sym = Fcar (args); + if (SYMBOL_CONSTANT_P (sym)) + error ("Constant symbol `%s' specified in defvar", + SDATA (SYMBOL_NAME (sym))); + tail = Fcdr (args); if (!NILP (Fcdr (Fcdr (tail)))) error ("Too many arguments"); @@ -862,12 +889,24 @@ usage: (defconst SYMBOL INITVALUE [DOCSTRING]) */) return sym; } +/* Error handler used in Fuser_variable_p. */ +static Lisp_Object +user_variable_p_eh (ignore) + Lisp_Object ignore; +{ + return Qnil; +} + DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0, - doc: /* Returns t if VARIABLE is intended to be set and modified by users. + doc: /* Return t if VARIABLE is intended to be set and modified by users. \(The alternative is a variable used internally in a Lisp program.) -Determined by whether the first character of the documentation -for the variable is `*' or if the variable is customizable (has a non-nil -value of `standard-value' or of `custom-autoload' on its property list). */) +A variable is a user variable if +\(1) the first character of its documentation is `*', or +\(2) it is customizable (its property list contains a non-nil value + of `standard-value' or `custom-autoload'), or +\(3) it is an alias for another user variable. +Return nil if VARIABLE is an alias and there is a loop in the +chain of symbols. */) (variable) Lisp_Object variable; { @@ -876,23 +915,37 @@ value of `standard-value' or of `custom-autoload' on its property list). */) if (!SYMBOLP (variable)) return Qnil; - documentation = Fget (variable, Qvariable_documentation); - if (INTEGERP (documentation) && XINT (documentation) < 0) - return Qt; - if (STRINGP (documentation) - && ((unsigned char) SREF (documentation, 0) == '*')) - return Qt; - /* If it is (STRING . INTEGER), a negative integer means a user variable. */ - if (CONSP (documentation) - && STRINGP (XCAR (documentation)) - && INTEGERP (XCDR (documentation)) - && XINT (XCDR (documentation)) < 0) - return Qt; - /* Customizable? See `custom-variable-p'. */ - if ((!NILP (Fget (variable, intern ("standard-value")))) - || (!NILP (Fget (variable, intern ("custom-autoload"))))) - return Qt; - return Qnil; + /* If indirect and there's an alias loop, don't check anything else. */ + if (XSYMBOL (variable)->indirect_variable + && NILP (internal_condition_case_1 (indirect_variable, variable, + Qt, user_variable_p_eh))) + return Qnil; + + while (1) + { + documentation = Fget (variable, Qvariable_documentation); + if (INTEGERP (documentation) && XINT (documentation) < 0) + return Qt; + if (STRINGP (documentation) + && ((unsigned char) SREF (documentation, 0) == '*')) + return Qt; + /* If it is (STRING . INTEGER), a negative integer means a user variable. */ + if (CONSP (documentation) + && STRINGP (XCAR (documentation)) + && INTEGERP (XCDR (documentation)) + && XINT (XCDR (documentation)) < 0) + return Qt; + /* Customizable? See `custom-variable-p'. */ + if ((!NILP (Fget (variable, intern ("standard-value")))) + || (!NILP (Fget (variable, intern ("custom-autoload"))))) + return Qt; + + if (!XSYMBOL (variable)->indirect_variable) + return Qnil; + + /* An indirect variable? Let's follow the chain. */ + variable = XSYMBOL (variable)->value; + } } DEFUN ("let*", FletX, SletX, 1, UNEVALLED, 0, @@ -1533,7 +1586,16 @@ See also the function `condition-case'. */) /* This hook is used by edebug. */ if (! NILP (Vsignal_hook_function) && ! NILP (error_symbol)) - call2 (Vsignal_hook_function, error_symbol, data); + { + /* Edebug takes care of restoring these variables when it exits. */ + if (lisp_eval_depth + 20 > max_lisp_eval_depth) + max_lisp_eval_depth = lisp_eval_depth + 20; + + if (SPECPDL_INDEX () + 40 > max_specpdl_size) + max_specpdl_size = SPECPDL_INDEX () + 40; + + call2 (Vsignal_hook_function, error_symbol, data); + } conditions = Fget (real_error_symbol, Qerror_conditions); @@ -1555,12 +1617,6 @@ See also the function `condition-case'. */) { register Lisp_Object clause; - if (lisp_eval_depth + 20 > max_lisp_eval_depth) - max_lisp_eval_depth = lisp_eval_depth + 20; - - if (specpdl_size + 40 > max_specpdl_size) - max_specpdl_size = specpdl_size + 40; - clause = find_handler_clause (handlerlist->handler, conditions, error_symbol, data, &debugger_value); @@ -1673,7 +1729,11 @@ skip_debugger (conditions, data) = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA). This is for memory-full errors only. - Store value returned from debugger into *DEBUGGER_VALUE_PTR. */ + Store value returned from debugger into *DEBUGGER_VALUE_PTR. + + We need to increase max_specpdl_size temporarily around + anything we do that can push on the specpdl, so as not to get + a second error here in case we're handling specpdl overflow. */ static Lisp_Object find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) @@ -1691,7 +1751,6 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) || !NILP (Vdebug_on_signal)) /* This says call debugger even if there is a handler. */ { - int count = SPECPDL_INDEX (); int debugger_called = 0; Lisp_Object sig_symbol, combined_data; /* This is set to 1 if we are handling a memory-full error, @@ -1713,6 +1772,7 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) if (wants_debugger (Vstack_trace_on_error, conditions)) { + max_specpdl_size++; #ifdef PROTOTYPES internal_with_output_to_temp_buffer ("*Backtrace*", (Lisp_Object (*) (Lisp_Object)) Fbacktrace, @@ -1721,6 +1781,7 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) internal_with_output_to_temp_buffer ("*Backtrace*", Fbacktrace, Qnil); #endif + max_specpdl_size--; } if (! no_debugger && (EQ (sig_symbol, Qquit) @@ -1729,7 +1790,6 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) && ! skip_debugger (conditions, combined_data) && when_entered_debugger < num_nonmacro_input_events) { - specbind (Qdebug_on_error, Qnil); *debugger_value_ptr = call_debugger (Fcons (Qerror, Fcons (combined_data, Qnil))); @@ -1739,7 +1799,7 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr) if (EQ (handlers, Qerror)) { if (debugger_called) - return unbind_to (count, Qlambda); + return Qlambda; return Qt; } } @@ -3019,13 +3079,8 @@ grow_specpdl () if (max_specpdl_size < 400) max_specpdl_size = 400; if (specpdl_size >= max_specpdl_size) - { - if (!NILP (Vdebug_on_error)) - /* Leave room for some specpdl in the debugger. */ - max_specpdl_size = specpdl_size + 100; - Fsignal (Qerror, - Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil)); - } + Fsignal (Qerror, + Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil)); } specpdl_size *= 2; if (specpdl_size > max_specpdl_size) @@ -3333,7 +3388,7 @@ syms_of_eval () { DEFVAR_INT ("max-specpdl-size", &max_specpdl_size, doc: /* *Limit on number of Lisp variable bindings & unwind-protects. -If Lisp code tries to make more than this many at once, +If Lisp code tries to increase the total number past this amount, an error is signaled. You can safely use a value considerably larger than the default value, if that proves inconveniently small. However, if you increase it too far, diff --git a/src/fileio.c b/src/fileio.c index 3dab52c47f0..112c879c1c5 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2411,7 +2411,7 @@ barf_or_query_if_file_exists (absname, querystring, interactive, statptr, quick) return; } -DEFUN ("copy-file", Fcopy_file, Scopy_file, 2, 5, +DEFUN ("copy-file", Fcopy_file, Scopy_file, 2, 6, "fCopy file: \nGCopy %s to file: \np\nP", doc: /* Copy FILE to NEWNAME. Both args must be strings. If NEWNAME names a directory, copy FILE there. @@ -2431,9 +2431,13 @@ for an existing file with the same name. If MUSTBENEW is `excl', that means to get an error if the file already exists; never overwrite. If MUSTBENEW is neither nil nor `excl', that means ask for confirmation before overwriting, but do go ahead and overwrite the file -if the user confirms. */) - (file, newname, ok_if_already_exists, keep_time, mustbenew) +if the user confirms. + +If PRESERVE-UID-GID is non-nil, we try to transfer the +uid and gid of FILE to NEWNAME. */) + (file, newname, ok_if_already_exists, keep_time, mustbenew, preserve_uid_gid) Lisp_Object file, newname, ok_if_already_exists, keep_time, mustbenew; + Lisp_Object preserve_uid_gid; { int ifd, ofd, n; char buf[16 * 1024]; @@ -2575,6 +2579,26 @@ if the user confirms. */) report_file_error ("I/O error", Fcons (newname, Qnil)); immediate_quit = 0; + /* Preserve the owner and group, if requested. */ + if (input_file_statable_p && ! NILP (preserve_uid_gid)) + fchown (ofd, st.st_uid, st.st_gid); + + if (input_file_statable_p) + { +#ifndef MSDOS + fchmod (ofd, st.st_mode & 07777); +#else /* MSDOS */ +#if defined (__DJGPP__) && __DJGPP__ > 1 + /* In DJGPP v2.0 and later, fstat usually returns true file mode bits, + and if it can't, it tells so. Otherwise, under MSDOS we usually + get only the READ bit, which will make the copied file read-only, + so it's better not to chmod at all. */ + if ((_djstat_flags & _STFAIL_WRITEBIT) == 0) + chmod (SDATA (encoded_newname), st.st_mode & 07777); +#endif /* DJGPP version 2 or newer */ +#endif /* MSDOS */ + } + /* Closing the output clobbers the file times on some systems. */ if (emacs_close (ofd) < 0) report_file_error ("I/O error", Fcons (newname, Qnil)); @@ -2592,18 +2616,6 @@ if the user confirms. */) Fcons (build_string ("Cannot set file date"), Fcons (newname, Qnil))); } -#ifndef MSDOS - chmod (SDATA (encoded_newname), st.st_mode & 07777); -#else /* MSDOS */ -#if defined (__DJGPP__) && __DJGPP__ > 1 - /* In DJGPP v2.0 and later, fstat usually returns true file mode bits, - and if it can't, it tells so. Otherwise, under MSDOS we usually - get only the READ bit, which will make the copied file read-only, - so it's better not to chmod at all. */ - if ((_djstat_flags & _STFAIL_WRITEBIT) == 0) - chmod (SDATA (encoded_newname), st.st_mode & 07777); -#endif /* DJGPP version 2 or newer */ -#endif /* MSDOS */ } emacs_close (ifd); @@ -2780,7 +2792,6 @@ This is what happens in interactive use with M-x. */) { if (errno == EXDEV) { - struct stat data; #ifdef S_IFLNK symlink_target = Ffile_symlink_p (file); if (! NILP (symlink_target)) @@ -2788,15 +2799,11 @@ This is what happens in interactive use with M-x. */) NILP (ok_if_already_exists) ? Qnil : Qt); else #endif - Fcopy_file (file, newname, - /* We have already prompted if it was an integer, - so don't have copy-file prompt again. */ - NILP (ok_if_already_exists) ? Qnil : Qt, - Qt, Qnil); - - /* Preserve owner and group, if possible (if we are root). */ - if (stat (SDATA (encoded_file), &data) >= 0) - chown (SDATA (encoded_file), data.st_uid, data.st_gid); + Fcopy_file (file, newname, + /* We have already prompted if it was an integer, + so don't have copy-file prompt again. */ + NILP (ok_if_already_exists) ? Qnil : Qt, + Qt, Qnil, Qt); Fdelete_file (file); } diff --git a/src/lread.c b/src/lread.c index d180836ada3..389bc04ddaa 100644 --- a/src/lread.c +++ b/src/lread.c @@ -2715,6 +2715,23 @@ read1 (readcharfun, pch, first_in_list) break; case 'N': value = zero / zero; + + /* If that made a "negative" NaN, negate it. */ + + { + int i; + union { double d; char c[sizeof (double)]; } u_data, u_minus_zero; + + u_data.d = value; + u_minus_zero.d = - 0.0; + for (i = 0; i < sizeof (double); i++) + if (u_data.c[i] & u_minus_zero.c[i]) + { + value = - value; + break; + } + } + /* Now VALUE is a positive NaN. */ break; default: value = atof (read_buffer + negative); diff --git a/src/macfns.c b/src/macfns.c index 346ee1e2bde..f6ce7c42a67 100644 --- a/src/macfns.c +++ b/src/macfns.c @@ -4088,7 +4088,7 @@ Text larger than the specified size is clipped. */) clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); SET_TEXT_POS (pos, BEGV, BEGV_BYTE); - try_window (FRAME_ROOT_WINDOW (f), pos); + try_window (FRAME_ROOT_WINDOW (f), pos, 0); /* Compute width and height of the tooltip. */ width = height = 0; diff --git a/src/macterm.c b/src/macterm.c index cef213024fa..16d8452c87c 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -7666,6 +7666,7 @@ static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec) default: break; } + break; case kEventClassKeyboard: switch (GetEventKind (eventRef)) @@ -7688,6 +7689,7 @@ static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec) default: break; } + break; default: break; diff --git a/src/s/ms-w32.h b/src/s/ms-w32.h index 998c1f7cf05..10e3bfe3a5a 100644 --- a/src/s/ms-w32.h +++ b/src/s/ms-w32.h @@ -311,6 +311,7 @@ Boston, MA 02111-1307, USA. */ #define chdir sys_chdir #undef chmod #define chmod sys_chmod +#define chown sys_chown #undef close #define close sys_close #undef creat diff --git a/src/w32.c b/src/w32.c index 1bb4a91ff03..1585b3eaf1e 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1898,6 +1898,14 @@ sys_chmod (const char * path, int mode) } int +sys_chown (const char *path, uid_t owner, gid_t group) +{ + if (sys_chmod (path, _S_IREAD) == -1) /* check if file exists */ + return -1; + return 0; +} + +int sys_creat (const char * path, int mode) { return _creat (map_w32_filename (path, NULL), mode); diff --git a/src/w32fns.c b/src/w32fns.c index 3913349d8bd..5d92cb03d00 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -7648,7 +7648,7 @@ Text larger than the specified size is clipped. */) clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); SET_TEXT_POS (pos, BEGV, BEGV_BYTE); - try_window (FRAME_ROOT_WINDOW (f), pos); + try_window (FRAME_ROOT_WINDOW (f), pos, 0); /* Compute width and height of the tooltip. */ width = height = 0; diff --git a/src/xdisp.c b/src/xdisp.c index b5f69a93810..0a2a02b4628 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -7697,7 +7697,7 @@ display_echo_area_1 (a1, a2, a3, a4) clear_glyph_matrix (w->desired_matrix); XSETWINDOW (window, w); SET_TEXT_POS (start, BEG, BEG_BYTE); - try_window (window, start); + try_window (window, start, 0); return window_height_changed_p; } @@ -11665,7 +11665,7 @@ try_scrolling (window, just_this_one_p, scroll_conservatively, /* Display the window. Give up if new fonts are loaded, or if point doesn't appear. */ - if (!try_window (window, startp)) + if (!try_window (window, startp, 0)) rc = SCROLLING_NEED_LARGER_MATRICES; else if (w->cursor.vpos < 0) { @@ -12268,6 +12268,7 @@ redisplay_window (window, just_this_one_p) { /* We set this later on if we have to adjust point. */ int new_vpos = -1; + int val; w->force_start = Qnil; w->vscroll = 0; @@ -12301,12 +12302,16 @@ redisplay_window (window, just_this_one_p) /* Redisplay, then check if cursor has been set during the redisplay. Give up if new fonts were loaded. */ - if (!try_window (window, startp)) + val = try_window (window, startp, 1); + if (!val) { w->force_start = Qt; clear_glyph_matrix (w->desired_matrix); goto need_larger_matrices; } + /* Point was outside the scroll margins. */ + if (val < 0) + new_vpos = window_box_height (w) / 2; if (w->cursor.vpos < 0 && !w->frozen_window_start_p) { @@ -12349,7 +12354,7 @@ redisplay_window (window, just_this_one_p) && !NILP (current_buffer->mark_active)) { clear_glyph_matrix (w->desired_matrix); - if (!try_window (window, startp)) + if (!try_window (window, startp, 0)) goto need_larger_matrices; } } @@ -12439,7 +12444,11 @@ redisplay_window (window, just_this_one_p) = try_window_reusing_current_matrix (w))) { IF_DEBUG (debug_method_add (w, "1")); - try_window (window, startp); + if (try_window (window, startp, 1) < 0) + /* -1 means we need to scroll. + 0 means we need new matrices, but fonts_changed_p + is set in that case, so we will detect it below. */ + goto try_to_scroll; } if (fonts_changed_p) @@ -12569,7 +12578,7 @@ redisplay_window (window, just_this_one_p) || MINI_WINDOW_P (w) || !(used_current_matrix_p = try_window_reusing_current_matrix (w))) - try_window (window, startp); + try_window (window, startp, 0); /* If new fonts have been loaded (due to fontsets), give up. We have to start a new redisplay since we need to re-adjust glyph @@ -12589,13 +12598,13 @@ redisplay_window (window, just_this_one_p) { clear_glyph_matrix (w->desired_matrix); move_it_by_lines (&it, 1, 0); - try_window (window, it.current.pos); + try_window (window, it.current.pos, 0); } else if (PT < IT_CHARPOS (it)) { clear_glyph_matrix (w->desired_matrix); move_it_by_lines (&it, -1, 0); - try_window (window, it.current.pos); + try_window (window, it.current.pos, 0); } else { @@ -12778,14 +12787,18 @@ redisplay_window (window, just_this_one_p) /* Build the complete desired matrix of WINDOW with a window start - buffer position POS. Value is non-zero if successful. It is zero - if fonts were loaded during redisplay which makes re-adjusting - glyph matrices necessary. */ + buffer position POS. + + Value is 1 if successful. It is zero if fonts were loaded during + redisplay which makes re-adjusting glyph matrices necessary, and -1 + if point would appear in the scroll margins. + (We check that only if CHECK_MARGINS is nonzero. */ int -try_window (window, pos) +try_window (window, pos, check_margins) Lisp_Object window; struct text_pos pos; + int check_margins; { struct window *w = XWINDOW (window); struct it it; @@ -12810,6 +12823,30 @@ try_window (window, pos) return 0; } + /* Don't let the cursor end in the scroll margins. */ + if (check_margins) + { + int this_scroll_margin, cursor_height; + + this_scroll_margin = max (0, scroll_margin); + this_scroll_margin = min (this_scroll_margin, WINDOW_TOTAL_LINES (w) / 4); + this_scroll_margin *= FRAME_LINE_HEIGHT (it.f); + cursor_height = MATRIX_ROW (w->desired_matrix, w->cursor.vpos)->height; + + if ((w->cursor.y < this_scroll_margin + && CHARPOS (pos) > BEGV) + /* Old redisplay didn't take scroll margin into account at the bottom, + but then global-hl-line-mode doesn't scroll. KFS 2004-06-14 */ + || (w->cursor.y + (make_cursor_line_fully_visible_p + ? cursor_height + this_scroll_margin + : 1)) > it.last_visible_y) + { + w->cursor.vpos = -1; + clear_glyph_matrix (w->desired_matrix); + return -1; + } + } + /* If bottom moved off end of frame, change mode line percentage. */ if (XFASTINT (w->window_end_pos) <= 0 && Z != IT_CHARPOS (it)) @@ -21801,7 +21838,7 @@ note_mouse_highlight (f, x, y) /* If we were displaying active text in another window, clear that. Also clear if we move out of text area in same window. */ if (! EQ (window, dpyinfo->mouse_face_window) - || (part != ON_TEXT && part != ON_MODE_LINE && part != ON_HEADER_LINE + || (part != ON_TEXT && part != ON_MODE_LINE && part != ON_HEADER_LINE && !NILP (dpyinfo->mouse_face_window))) clear_mouse_face (dpyinfo); @@ -23026,17 +23063,17 @@ The face used for trailing whitespace is `trailing-whitespace'. */); DEFVAR_LISP ("nobreak-char-display", &Vnobreak_char_display, doc: /* *Control highlighting of nobreak space and soft hyphen. -t means highlight the character itself (for nobreak space, -use face `nobreak-space'. -nil means no highlighting. -other values mean display the escape glyph followed by an ordinary +A value of t means highlight the character itself (for nobreak space, +use face `nobreak-space'). +A value of nil means no highlighting. +Other values mean display the escape glyph followed by an ordinary space or ordinary hyphen. */); Vnobreak_char_display = Qt; DEFVAR_LISP ("void-text-area-pointer", &Vvoid_text_area_pointer, doc: /* *The pointer shape to show in void text areas. -Nil means to show the text pointer. Other options are `arrow', `text', -`hand', `vdrag', `hdrag', `modeline', and `hourglass'. */); +A value of nil means to show the text pointer. Other options are `arrow', +`text', `hand', `vdrag', `hdrag', `modeline', and `hourglass'. */); Vvoid_text_area_pointer = Qarrow; DEFVAR_LISP ("inhibit-redisplay", &Vinhibit_redisplay, diff --git a/src/xfns.c b/src/xfns.c index e5efec27b7d..1de6fc71d1a 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5070,7 +5070,7 @@ Text larger than the specified size is clipped. */) clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); SET_TEXT_POS (pos, BEGV, BEGV_BYTE); - try_window (FRAME_ROOT_WINDOW (f), pos); + try_window (FRAME_ROOT_WINDOW (f), pos, 0); /* Compute width and height of the tooltip. */ width = height = 0; |