Mercurial > emacs
changeset 83405:1955a4462bf9
Merged from miles@gnu.org--gnu-2005 (patch 659-663)
Patches applied:
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-659
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-660
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-661
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-662
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-663
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-445
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sat, 03 Dec 2005 14:25:50 +0000 |
parents | 69e184bbba16 (current diff) f8729e3300dc (diff) |
children | 8e25aa911e3e |
files | ChangeLog admin/FOR-RELEASE etc/TODO lisp/ChangeLog lisp/cus-face.el lisp/files.el lisp/font-lock.el lisp/help-fns.el lisp/isearch.el lisp/loadup.el lisp/progmodes/gdb-ui.el lisp/recentf.el lisp/simple.el lisp/term/mac-win.el lisp/xt-mouse.el lispref/ChangeLog man/ChangeLog nt/icons/emacs.ico src/alloc.c src/buffer.c src/emacs.c src/macterm.c src/macterm.h src/minibuf.c src/window.c src/xfaces.c |
diffstat | 91 files changed, 3762 insertions(+), 2515 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,7 @@ +2005-11-22 Romain Francoise <romain@orebokech.com> + + * make-dist: Add etc/images/icons. + 2005-11-03 Andreas Schwab <schwab@suse.de> * configure.in: Use GZIP_PROG instead of GZIP.
--- a/admin/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/admin/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,7 @@ +2005-11-28 Chong Yidong <cyd@stupidchicken.com> + + * FOR-RELEASE: Icons installed. Partial completion bug fixed. + 2005-11-11 Kim F. Storm <storm@cua.dk> * FOR-RELEASE (FATAL ERRORS): Fix infinite loop in redisplay
--- a/admin/FOR-RELEASE Wed Nov 23 01:35:21 2005 +0000 +++ b/admin/FOR-RELEASE Sat Dec 03 14:25:50 2005 +0000 @@ -38,8 +38,6 @@ a bitmap appearence. [Assigned to KFS] -** Install Zhilin's icons. - * FATAL ERRORS ** Investigate reported crashes in compact_small_strings. @@ -53,8 +51,6 @@ C-x 2, C-x 3, C-x 2. Now try to move the bottom of the second window to the left. -** Fix completion highlighting bug in partial completion mode. - ** TCP server processes do not work on Windows. TCP/IP server processes created with `make-network-process' consume
--- a/etc/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,13 @@ +2005-11-28 Thien-Thi Nguyen <ttn@gnu.org> + + * MORE.STUFF: Add entry: "Go in a buffer: Go Text Protocol client". + +2005-11-18 Chong Yidong <cyd@stupidchicken.com> + + * images/icons/emacs_16.png, images/icons/emacs_24.png + * images/icons/emacs_32.png, images/icons/emacs_48.png: + New Emacs icons. + 2005-11-18 Carsten Dominik <dominik@science.uva.nl> * orgcard.tex: Version 3.20
--- a/etc/MORE.STUFF Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/MORE.STUFF Sat Dec 03 14:25:50 2005 +0000 @@ -174,6 +174,11 @@ Enhanced emacsclient/emacsserver. Also available from this Web page: eiffel-mode.el. + * Go in a buffer: Go Text Protocol client: + <URL:http://www.glug.org/people/ttn/software/personal-elisp/standalone/> + A modified version is also bundled with GNU Go: + <URL:http://www.gnu.org/software/gnugo/gnugo.html> + * hm--html-menus: <URL:ftp://ftp.tnt.uni-hannover.de/pub/editors/xemacs/contrib> HTML-specific editing. Can work with PSGML.
--- a/etc/NEWS Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/NEWS Sat Dec 03 14:25:50 2005 +0000 @@ -3317,6 +3317,9 @@ ** The variable `mac-keyboard-text-encoding' and the constants `kTextEncodingMacRoman', `kTextEncodingISOLatin1', and `kTextEncodingISOLatin2' are obsolete. + +** The variable `mac-command-key-is-meta' is obsolete. Use +`mac-command-modifier' and `mac-option-modifier' instead. * Incompatible Lisp Changes in Emacs 22.1 @@ -4460,6 +4463,10 @@ dedicated windows. +++ +*** The new function `adjust-window-trailing-edge' moves the right +or bottom edge of a window. It does not move other window edges. + ++++ ** Customizable fringe bitmaps *** New function `define-fringe-bitmap' can now be used to create new
--- a/etc/TODO Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/TODO Sat Dec 03 14:25:50 2005 +0000 @@ -9,6 +9,8 @@ * Small but important fixes needed in existing features: +** revert-buffer should eliminate overlays and the mark. + ** Make occur correctly handle matches that span more than one line, as well as overlapping matches. @@ -73,6 +75,8 @@ ** Internationalize Emacs's messages. +** Install mmc@maruska.dyndns.org's no-flicker change. + ** Add a "current vertical pixel level" value that goes with point, so that motion commands can also move through tall images. This value would be to point as window-vscroll is to window-start. @@ -101,6 +105,10 @@ ** Maybe reinterpret `parse-error' as a category of errors and put some other errors under it. +** A function to tell you the argument pattern of functions. + +** Make byte-compile warn when a doc string is too wide. + ** A function to check for customizable options that have been set but not saved, and ask the user whether to save them. This could go in kill-emacs-query-functions, to remind people
--- a/etc/calccard.tex Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/calccard.tex Sat Dec 03 14:25:50 2005 +0000 @@ -254,7 +254,7 @@ \def\S#1{$S_{\scriptscriptstyle #1}$} \def\swap{$\leftrightarrow$} -\def\mhash{M-\#\ } +\def\calcprefix{C-x *\ } \def\,{{\rm ,\hskip.55em}\ignorespaces} \def\lesssectionskip{\vskip-1.5ex} @@ -277,14 +277,14 @@ \section{Starting and Stopping} -\wkey{start/stop standard Calc}{\mhash c} -\wkey{start/stop X keypad Calc}{\mhash k} -\wkey{\quad start/stop either: \kbd{\mhash \#} or \kbd{\mhash \mhash}}{} +\wkey{start/stop standard Calc}{\calcprefix c} +\wkey{start/stop X keypad Calc}{\calcprefix k} +\wkey{\quad start/stop either: \kbd{\calcprefix *}}{} \wkey{stop standard Calc}{q} -\wkey{Calc tutorial}{\mhash t} -\wkey{run Calc in other window}{\mhash o} -\wkey{quick calculation in minibuffer}{\mhash q} +\wkey{Calc tutorial}{\calcprefix t} +\wkey{run Calc in other window}{\calcprefix o} +\wkey{quick calculation in minibuffer}{\calcprefix q} \section{Getting Help} @@ -295,8 +295,8 @@ \key{describe key briefly}{h c} \key{describe key fully}{h k} \key{describe function or command}{h f} -\key{read on-line manual}{h i{\rm\enskip or\enskip}\mhash i} -\key{read full Calc summary}{h s{\rm\enskip or\enskip}\mhash s} +\key{read on-line manual}{h i{\rm\enskip or\enskip}\calcprefix i} +\key{read full Calc summary}{h s{\rm\enskip or\enskip}\calcprefix s} \section{Error Recovery} @@ -306,16 +306,16 @@ \key{redo last operation}{D} \key{recall last arguments}{M-RET} \key{edit top of stack}{`} -\wkey{reset Calc to initial state}{\mhash 0 {\rm (zero)}} +\wkey{reset Calc to initial state}{\calcprefix 0 {\rm (zero)}} \section{Transferring Data} -\wkey{grab region from a buffer}{\mhash g} -\wkey{grab rectangle from a buffer}{\mhash r} -\wkey{grab rectangle, summing columns}{\mhash :} -\wkey{grab rectangle, summing rows}{\mhash \_} +\wkey{grab region from a buffer}{\calcprefix g} +\wkey{grab rectangle from a buffer}{\calcprefix r} +\wkey{grab rectangle, summing columns}{\calcprefix :} +\wkey{grab rectangle, summing rows}{\calcprefix \_} -\wkey{yank data to a buffer}{\mhash y} +\wkey{yank data to a buffer}{\calcprefix y} Also, try \kbd{C-k}/\kbd{C-y} or X cut and paste. @@ -645,7 +645,7 @@ \key{begin, end recording a macro}{C-x (\, C-x )} \key{replay keyboard macro}{X} -\wkey{read region as written-out macro}{\mhash m} +\wkey{read region as written-out macro}{\calcprefix m} \key{if, else, endif}{Z [\, Z :\, Z ]} \key{equal to, less than, member of}{a =\, a <\, a \{} \key{repeat {\it n} times, break from loop}{Z <\, Z >\, Z /}
--- a/etc/orgcard.ps Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/orgcard.ps Sat Dec 03 14:25:50 2005 +0000 @@ -10,7 +10,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -t landscape -o orgcard.ps orgcard.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2005.10.21:0749 +%DVIPSSource: TeX output 2005.11.24:1542 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -352,216 +352,210 @@ CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43 0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F 08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E -588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C3 -975289D47E7F35898FD87E0BE88100E53DDB356245666E7F724C208CF200B76D -6E86BB756E083DC34DE1DCF484CD664C826962DC9CD5DB207262A43EDB8A18BC -7D3F35237299AE378AD68A89E97D65CB05503E2C2D951E3AD2A544DABB19973C -2B9AC59428D1FBCD89C058532357D2F4D53F35D49FCDC303475E1B41B3A2E18C -657AA0AE4D04BFBEEE2A24D462249CDB73EB96B6702C174BDF87642C3CB6F3C0 -86B02C65EE7D5ED2F636F15F50E5D1894F48AE024E1CEB56AEAA3967DCF5ED5A -63C9DD1DAEB9C8A353C2C90BFAA6B66B9E0B13BA0CE464A3C8CB2C5AE94AAB37 -72C62E70CEFD0558E483789630CB0FDF76E9EF75D8012E5F7FF85253C480F841 -CAA7F9FC1E4AD4576BFAD1825C989D197024F8ADB77B7DF5D341E2B68BD7FF5E -414852120B733078E1B703AC4845E63CB624BFBC2B575CFF29AFB89BC5957A1C -D3838B3FEE6252CDDEABBA24259E50B48741EC36BCCC888E09B9A0BDDE044D9B -0551B31409E7FE2922D73B7E52B08C32481A2F29E81F2B1573D085997BF65B06 -12E062C2ADDB75A199AE7785015967917D9FFF94DCC8CD8CA79B95560EE9C09B -04441CC622B2374030B08089E51AA9E9566AEAA9F81411C638F547B15793F884 -E04DAA850CD17CF5093F73DEA68AD40C288EA0C25CFD9FEB596DBC7F86C9E13A -2F2E43BE780B66A03B4154191383951FF535D8866735B6879C5D4C51147C7553 -A012AB7FC667F7DF259690D47B1F2DE226FE539DAE8EE6FFEBDF3186E6ECDEE8 -8B3E2CBC6006456AA69276CD025F387ACD73F0CEE35CC1ED6771107E3A1B866F -19C5C17A18552EA2DBA65EB75D493D05DA9D1247D77F65968CE5BCF68D56E249 -3D41AA3360275F993A8C0C7A33D6317AED8C6426C374E7833241E88DB88862FB -411E711280F84C46E1A18D0F520A2474E7AF7455709AD19CCFA00463033FD0B8 -61D2CEB925BA10D19FC97AF1953C8F0EEC15254F2C4C56E9FFEF66D00E8E0BF7 -97B60CBB7F8B56B82B2F846A53E2E36CB5D27ED3881206B27DA02F35B6D32962 -54D89A03F67E672D019F2DD19195E80C0D0DECD8FCFD259907FCA25D5C407882 -CA7E54D31995F1F14376D72BF33D1AF534A05FF3D323CBBD48003F2A44369C55 -80BAF975090EF0D6CF0347C0DB4C6CE743447C7A48981E50BD1667B08CEF2A06 -0B85DFC727BD8BBC505ABE8AED6B7C08C675B50ED7B4FB9FCD0777DED4D7A3DB -528D20414E05BE3DF1F7A76DEFA35135E27230C4CF8069081FDBDA5CAB51061A -E12CD06BD02AB38CBA57492EFEB4A12AE7B58548623D7F862515AA3EC1B4F84A -7C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED -45974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0 -801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2 -415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E14A21FEF -41EC3005C351D229B3D1186D118B72EE4143CB89492E211F7490D664ACDAD2D9 -70F1FDD65D3A6D84370B8AC3F5FCCF497D067D5A98CC0319404B6825FDB73587 -51D7066CDD0EB40033BFA664BA84E58540F849C0D7987B8F9A7569879351F681 -AC379AA1CDEADCDAF6910C3BCC38E053F6530D9674D6E5E8352DFE3B4F9D74A8 -7F1E76E795110F46E7C5548B85426CEC3E9977B97EFC5DCBA8891784CEEF8917 -39BC430CC40DC166C51C1984F1734AD604002716FD4488FADC935CF801AB0DD7 -6C865C611509DA17DFBE1A230D6A3F7D21826AEDA368C7EB0DFC740698D2A196 -C637BACEA9501C7D421EA39C6B49327913ED5CA51990AE2D3E5AA63732907DC2 -F5A64A50D2E20A1881F9B1BAA746F639EA45158DEEF3D84C08AAD15D0FA0FCAF -F0C5195372E83862031BD25044DA8B5DA9A9DFB248B001D0F8E957E8810BFE7F -6507B8B1D8D3E81F33D615F899EC881E671E421D66BAEFB992F15E481EA42330 -9B880E308BED0527EDBBB718761A8488B218135211541F65096AE8D70F8A8D31 -6F6D498318D7C59D355F95650C05C489BBC03779570A4F8FEBC0FF26716243FB -15D4D03E6E8A8FC09F3F06EB19DBA15E5CF724243C0CE942EFC0771E267C15DC -30CC67D47504E7CD7FB549D03EDBC6D655EC9BD66160085A2AE4797BE3E87933 -B77CCD6DCF1026E598CB760903ECC82CAE5F6139EFB2B980B7C72552D0A8291F -F3CCA05628B50DECD30786F7DC9ECC532AE8AC212562F7F691D8CE393E02FF78 -971E6D5A607F3394A57FF995BF0AFB94E16A619C89A3BE5F49F0AC96A65C76AA -305C15CD82BC540D42BA924BC728948A6EEABF03A7D2E5448226D6AA94729DE9 -8CCA2D5832408F1685761DF7376EAE3BA2C1E5D1CC394D93E681B3931DE59B1A -E69218C1108EB831FDACDFCEFE511E471665D8124E795F675E10814006F950EC -33CC631392FB4C0A49D99E01EC3559A9D761F0C877982865FD2F61B97BCC3C4D -67392977694F889E3C5DD8DACC55498FC38586BE2AA0F754B618EC820C7C80C7 -58145708C6B98C5163D2B1EBFF47116E4D38A046A1E4FD901110F1A1045CE82E -C2020AFC6AAAEDFA12028E2142B2B3C743907C4E8D1090D29C105BE00D870796 -D76E5D390490E7DE28C0A8A0AB39A6E9247EF7C5B20B01F55ECCB14F875BEA2E -CE4397FF9523E58FE23AF03EC2289D401C1048BAECB98394EC222615811D06F0 -D162CF83F6F4C7A87A4DACD987AD4B64428F992AF4EC203DEEDCCEC70C3368A7 -9570872B3AAAAE34A6E7168005DE1E5F6AF4C469205E19739271735BB60127B9 -50153CE55340595903F815841594ECE6B84AAF2E83725C4C8995D39EF436EB0D -AA7C9BA7BA7A4BC876D5C554FFE4A055CF8815650B5D6B7048744AB7EB39560C -09FE285561A0A04190B35170F3306CCBBE6A37ED07BECF11E890BD890FED9B80 -330AC0D1288C028E7B1E8753C32F1C03E01C694D69561524E930583B8F98B82F -EA5832D1283F330D4ABDF1B941386CF90028C8D4F33B453B9AD6137D69F0FCDF -53E0BB814947DC58E45DC165478E74E07AAF3B5EF3F79A90F24A18B7F9CB8057 -A94085D4C2B2FF62ECED65D8C47BB939AE969AEFBAE94F6B230F965D21BC9C2D -7C22B7F8CAC5FB01891A63EC9FC9900AEAC00AB0743D201DCD68AFEC5F877F4E -3EA013E883AB0FF98AD3A4D85ADA45C5F51CB33061EA7129C1FB68D146450014 -E98BAD39D0CC6A58E0F1D6E3AD6BD0F0FDDB9E3123843FBBFBC7C6C5A4854AF9 -1F6E260D6E09CD14B764276F5F33E6539FAB56C3ABB3AB24ACDD7D1937B6A459 -9D846E6AF2138B361A827CA9C5D8AE11CDD8714EAB13BE223C81FBCCE0FFF57A -779FF50E761E533AFE08A5AFADB1FBF2DA3CBB35E7003C76D205040BCF2C1815 -0FCB1609829AC06A1D2CFF13ADA1C23BD25EDE48815255E0C0CC62901D210EA2 -2F5A1F8330AC0677DFB0F2CD0E8922570584A21C0278941EE54F9CC993BE5BDB -6DA0EF7ACA47555152AA2EDF27F5CFB2E3D0512795F464D30FD2C1F71241EC90 -2EF44228E348D3E696BDCEB802354583BBFB408879320D23D735E7C06A0A513A -E053521E2365A4430F131612CB06FACC0F436B9F36E927F5AB4142F9E18BE935 -892C440CE0D23939723F9C9680130AF7BC1FAEC6381EF863E9824A4E619646B1 -2FC51140B5AD7A1DA320E3BFB961A5C807B919DB572898ABBDF7AA831641426B -8F743177E98D22574D0F0EB55673533D3105E4C708697B61ACD89C5C5F6E46AA -9D5EB05B7E5ED1B663AA74D84EE8BC451A44459DA6399FD72992DED97BF05AF2 -59139D6470F50EA8D263F645D9C0EBFA5BA30E8CD7D4F489E0EB18B5C07BCE4C -CACD432ED5316356DE895C256C5FB47EBA7AABC06A92E6A360BC9174ED0F5754 -08F4539D8ADD26D7B27FD753572667649F8A2EDAB9A7D312FD5C26503384980F -345E11F3722283EF2DB9EE15A4F04CB6797B15AE0970BC2747A7F9A229275638 -7BCDD3B7BF28FF5A143999CCF53AF3E02D8AE4B9AE572D7C2B77350509A91044 -89F3725CB95A0F124F3E9D7504127684617509ABF65DF8821B6A168365CA625B -139CBF549F604FB8319B3C62770FB61114B5EA4FB1F992AA99F32543BB4464C3 -C86C5D85FCA3E7E1285A51167D5C17608A6C0CAEF95952461A93B1FC9CFFBC50 -602F25835D3A566300DAF0FCA7046930CBCA09155621BD65518ECD5B698A6FA3 -A391E92872397BA95E7B5EA69A0EE6F9C74ECB5AA83C2FAF2B031D17E0B6FBBD -CA02AA882F8925967CA744D3837890DC7D1ACBBD1F0BDA8E61B88A230F4B8291 -73D37F471AF6AB22BB3434F00F3A35A330B69459F40DC5EE430AD2F9710580B5 -E93F75AC1E6B516138D92BC9EE6D3085ED02616EA1474848DFEFF3A7DD443DF0 -3B421295AF2BC090C869E92C2A774FC327D15C6AB3EE92E2B16C401740E9B1B9 -B22B4663C9348DD5F24264352C56D872CE93DA420AA8922E572F587600346B8E -4194D11B37433D0874BBD33A8B2E67F36D7A55298664F9E96DDA20846F9E9746 -657A4F0A63D14437AC61F22DAAB23095BBD7FF8C1EB24D43DFB6A2C62B574A96 -CAB867CF40194ED7CD9EB634AD076B42337636CFE681137A96F393CD73DE2FAA -904D9F703D141D344272DD9DE9F18C74929E8DFF9CD108E69E5540A8C8D10B9D -3D715CBCA486ABB3E010BA1F20F728ED2C1855B85AAE3E9AA00ACCC7DB968CD4 -3A03EB9270B8BF51C74881BFDABD1B25E51B3E91FF7137FBBDD7D8077E3EA554 -3125D1E104B26596D96EAB6B19D148A037CCAAA3469AD06B424DE6521795668A -5D8AB2F65264CC20B20BD7C5D0DDF2AE0932F99D8400DC31F81030AACEA27251 -78278C3FACBCCDC668DCECDA033F23D408BFB7E2A787D77433E23D8A36452FA9 -7339E1A9036034A6C1D10162BC409D6B8F899CD0448C64DA643E5A38A70470CE -8C8F251D7916D7786F91BD21A15FCCA149A035DD219B523F23C1CA6B07C04678 -EE2ED5DECE5C1B4DD835FDFB1A50D4BC57491203E521E85B8BD5635F2BCDCD00 -A3CF1125C8B29191E5192A22A725E0A0A26E4A6F4E19EC36E506B78EB090FA14 -C3F5C4476665D6BD48BE1990D3B53E9BF58D70253490E9D2BB274A16F8BCB411 -B9B1133ECA1723C52328CBF108DD84B55F8CFAA7C642824357A76A2FA12D8BBF -392474CD645BC9AB430E6031BE0220F603DC75498A4189CCB239E4F3B27B4076 -C3793944F26B44330FB42973EF70E86F740C684F123F121BDE3758C551EEFC49 -69A082AD4F3FFA89509A7B8922CFB8C971C072D498712A1A5F6BF254C9A4CBA4 -AA3652A56675C7359DE901E292A9826D3BC140843A7799A05D20C56AE586F178 -090E9E55876958C665923401901D4825DD5C9B7AB686AE1B38314CDFB6DAAC1B -FCF2CFB4C404E173988FB1CC35297B3DC7A32F45DB7C1971973F9BA501982760 -E353B8DE47C6065C128680E51C080D5D3A0C9BE09C25D85E4D1E6087C9CF4F51 -13AB80E75EC442CE2F2E0B6F7D13733E939A3F983BA540FA236A6AADAB9C7734 -510C858581725CFEB2A46BAECDCAFF7E726D140F50C2A0109ECA4C1ADAAFF17C -3269DD90145A9007639A54DFACDAD0FE945E97A370DAF3F0B4D66F847E0CBC17 -F8D6E5D5E124BC85379C1FB15E82280F157ABDEB2CB67CC25DD0C4DF157B5177 -60A7EA491389E573905653A694F31DAD0052BFE5A252C902B3976F5522526DB0 -CB9423C892CC9348C40DD844BF5F87BCE0D8C7E42AAABB2DAFA3001976360946 -8DD8EEEB4D2F1A5CE8139AF70FFE8C72E8CD4F891C679D93D7BAF53B850CE9B3 -7672AD44717E88EB64C9EBB80727A6CDE2E07A14E686B5A452CC456FFE933F75 -F323DFB14573F37D26F04CDFF33F6560BDFE530B4E3352F44608EB26D49EEC8C -E1BDFF8ECE3823670BDDF72C4FF89327ABA853713667E4EC04D8981644D0AA5F -5D872283F02F1B108533B833A33BAAE41CE4C4097242DDCA81896EC33E38F88D -0ECD5F240C274A5949BEE7EDA1511A2636028161A8612EF580116BD6C212821A -B0C917365705937924B58BCA415E2B3C6E3191E80921F0A49F2D3AC371DEA089 -78FCFAA20EB6325FF3D9E57717F0A75135401322746EDE63970B7EBB07728CFA -641B345A2C00B9C526191AE25B66EB97AB3A32A41D57D9B2501BBD4765137BD1 -04993E60EBC3DE43523B24BE3B4BA26F493C38168DA4899251AE82541118B28D -C653F14878DC30A9CADB3C8833968F135FCD7BFB1D2FE028C74636491D9FC892 -81553B1775FF95FF9CAF675A2E7208CA84610F9C39F37474E18569C0209EBDCC -EAAF9D06A63499C6EFC91AA8FDB9F159A6FAB1F62DFE56FA0E37BD5BDA0F17E4 -FAE3E27A36F95629EC2064D6A411108E721FD1091D6E9AAA5B0C0B3D41833C62 -4733535A726EB6AB936498812D50200AB915F8CAEA47C036F1542AFBE2E53067 -6366E355003FE82F28A456E79E921853B15964E911D08176F607E695FCF541A7 -C20A3CE2A2835093F8CD0FDE40DBF10B8E96D06EFBD2D7CABAF21D411B105044 -431A1E87CF0CCEB10D9A9D09E84307DD362E885160EA24DC0A06D0308347E3FD -E8FD32456AD30269D2DC5D0E34379382B637493ECF9F143F44022A1B045BB3F3 -6E99BF86A1AD87FEF11786DCD4443459C7F5BB2B4F3914E162DA2FD998E46067 -07E10461AF5E065685A43BA4F1A843001D412550BC868DE93A91740B62F08026 -3B37B93D95448DBAEFF1089726A975FCB9BD5375457173AD766C8F99DCC54952 -4AC00377464E80A168669A183FD69A2E31BC22989E4F34F4ACF043424598BBA5 -63A6EE2FF886BB0DD160FD91860CAC052E47A55BD334A5F97F8DE2ED3675D3FA -B838CA438EBA043D638793F04477EA8201C718124597CF1693BB99A627AFAB1D -5345D2F17CC96A4387BD5822186B3E488DCB0A1531F931424D9E75D19685CD15 -09A5014BE0FD6CDE63FF735D1BA182D015877DF843368FD7A8AC312D53A951B5 -FA02B36337098B97B1B4FA84133BD030F7E8647B8D32697DF9E9B15D08B43187 -BBF609E074F0DA9CDEE2A959D46410B33E1C91A3BD703BE0B7E9698CF942BD9A -564C9B7F806FF1ECF1FF29C95F8733AE1BC08A607108A09E3B4B2919523164CF -ACB794B5D3438B55F72700257BC5BC00735E5BDE3DF55202841314593C815857 -428574BBD6DF0DF89D69B7246F212E81F88320B21D4E9B1BFE85329AA1794FE9 -C8F7FA2B8A3668A2E4129350B330074831072AF3E48E672AF033D89C1C56A830 -5D358A92F340D0D5AF454DF9D8731215747F30990B10C18BAD25DBA0883C080D -8098362B9A9A0ADD65EAEFEE0DA098BDD1D351B262F18562164300DA97EC921B -E290B5B3C68B8695C4BFA1081CCC558E17D64A42B8769F217747D850813D66BF -5A399CD0E8B145D7C09527F6F9CEE142BD62B7F050C4B34D2001BA539633D9AC -E02A1A4FE6225931E56289151500BDAB61556F7D599C8EC2FCC90B4DA68AF3AC -370EC9FB3ED88649561481D299B57B7800CC76B3E8094F6C46832625AFF88D98 -99F49FD3A089606A43DB6FB466118E44BC51397CA38E6251E6C8B100AF453754 -6922D3E1F1F197DABF2B07B98B77B9451F62F4CC6543B4C27ACEECBC0640930F -30336891857317B46FC98DD069AED6944CD0B527C961BDA2232ED479D72C7C54 -C44D4EF3AD0B1F9F96A9F5A1D35D91EE77BAE7C77326BD0DDBD396BC3C78FAF5 -DFEEEB59B05F0B1FE8E1347F26D09DC5534B3F1BB47B897154515E893795D4A9 -897D7BCEA2D54AB60EB39F67399FF8777FACC4B706FC2A6137DA53A343BDC1DD -C0EBF311507475F6D00FD877EA29C8DAC798BFB33D9B1506AD583A2C508D231F -0EDF3ACBD0B48DCD12F4789AFE4B2B18390ACACB86E1333AC38DA0C1D0158061 -9CDEDB47CBC1CD43D191C47DC214C61EF98CD5065F63D203696B384EF1FDE092 -78F5DECDA175900094D90AAE4CC26A7AE779B4393DC49DBCAFAA7F319421F54F -7A3AFC61D68CC5F74668C7028666B95DC14E522F11200155893EDDAD0B06F60F -33D2CDC6F75FF167606FBE426B627FB8661AB7B9ED104AB11ECAA5EED3717D5A -B491E48C5A6E778274EB5B854135DF8FF07CFE9795CC8C69079CACA09FFE5C08 -FC73A41C878B439E706F6C33093D4AE7E13B17EF32E115B684E9A27DB490CC35 -DBCA03AFF0ACA4825176AB8071299BFE1F1FBB225E6915F0D52C6A5AEBD603D2 -151C5441BEA1EE87D9F4010C4642CF89B2776351C30153B226A1A5C4654BB683 -4AA2107029F120A491BD4103D186F800B9B785C953150094080848B6AF8969F6 -2FE34B3631F4E50DC0EA5FE4C0826CEDA30D3F3E2983FCEC4EC872420A6ED8AF -EC8B02888837927D0A7574031B2853921132DE3C564F24E909FBC63690B02033 -0D3069D8DDA63DE8DA7667D07810FDD5D4C877DDC1C180F667D6361B77E666D0 -29AC20B15BDDE9E42ACA7802A4B74D31E91CE3FCF105A7F65B543172C8DF6248 -256541684153DA1EC7550E86B55DA0E87B70DF90D88358C9AC8FECA82AABCB39 -552DC96D1EC3310264EA111713839C45F469D16CE5510807897D58C3B2154429 -A2A01B2F8956B7FABF2764E131A7A819772BE63983E017737286CF2CA8C42A90 -2ACFAA2AADA5EE0B125415518D1F19BAE94E3EF1419A2CF9A954C37E078CE895 -C582992082BFF6E7A6C93C322A76A7AB7D96532B0D91603461C0903C9464D2F5 -7F93383EB60120E8246DE8FB13A8C5253591A4FEA03E20BCDB972851572174F6 -DEC5F8D863641E7868FFA14D5087F98A13B7142769E04447FD93EC724D3B34CF -39CE00821D0E9FA5DC4255AF09F985174AE10C86FB18BE347A0E228723D00B0B -968644728D65B7F3B726B287DA8419536F7BD24E7F64BA8FFCF260373183DFEF -36FD6696ED0DA7F01D48551C51B07276C39A3F4E2771E36DCE6A01EBA288868C -8FD6E7CFB42318DF9350BF110A57BC4E3DAA29D922A39EFAF2A307912B1123EB -4E0AC2F8006FCDE4D27E66E0494E52938403C0D06E7898DE0C9A550081FAE7A1 -0998F8AC69B3FBD7903293C3DF14DD1FBEEDCC3A3ACA963137A768025CE3FB50 -939B0571F1A89237FABD6ED4AEC9D14428FC1C77FA5405B8FD3DFA363072C841 -D0A118CCE8484C9BE169BF1CA9BB822F5248AD79D18821236DCF4B4615E3CC9F -FA968FAC447C718C3178C0EB5C7560B1E858ABDB3E2F0476D10CF52DF8CF62B0 -7B6FF34D91D63901C1B35D58585449C903198846DB9DB58787F2AAFF1E392807 -F0FABADA9576D36CCFEC151C64CBA1E91CDDC9B96D59A9743072C8D45C2CCB2F -14BE3125DE785EF47E874C4BAAA3A487DF75B8C6F680664176C9097B1C3176DD -DBAD73CC453120BE2B47F5247C215E790B79BACA9C817CCE7F8DA2D8F791F5E3 -C1B9F32A34AE5B452CCD75FC55C1785AB8AB43029D6663ED0A6855FCC56B5443 -2379BDA7EF132F +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 @@ -1943,363 +1937,357 @@ 23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413 19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42 1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39 -8BF32EFC8C0D1CC0C1622ABA0B6CE939036B2D9CAFA2A3B0C4B5DD9AE5B2D798 -CC856CB41F82D3B5FCBBF70D07E05369713730081901FEDE318F9DA81D39F84C -45D0996AC0E8FD780FD2E5E6BD013D98463E0A51034735243F2B3695371E8451 -6A6EC4236E47A282AD2966E06BF3FB59C6222C15A34F1E910E637D805741BC1D -CD426BF31361147DA45BDA2884880D90AEE92DF02AE5C4772537FEEA157A6D50 -3BBB910A80A2EF41D18213631584B343ECFBD6BA006AD6BCAC63E9CD9430DF59 -98091BE32FE17FCA7B32DCA95052F5BACF73FEAFCE5EA47B740FDC972C2FAB94 -E1FE42F8536DE4DD0DBFC4CCF3A96DC1140F736344D4DC796756948ABEE0433B -BFFD9F1A343259444D248598844888F046800D6BFC7BFE3F63900767727A8742 -10C756EC6380274290F84F7B2055C2390BF04B466B5D4437C0D6AC55C90792CE -8A8BB5602BC96118B07FDB8692006E91585273AEFF55D71967011A1658205ECB -A0B0C1CE1F7C5167A5868D5DA81EE5CC3A41983425663776391EA37525FF1357 -2CBD0C9B4644850880C5115C7F0677A605C1009D018A9D6BF4F94A6DD019CA26 -FA7D748D55D441CE1111EFE5254381E1F916912E1B446CC7803DEB5C9B1AF811 -3938473A2FDD49E5A0360F4020CAF9E85E056E59430B18AD352BA929C9A3DA10 -D7C524D92AEA6F4DCC13E2B59DBC0B8C0CD90B1E4E82BCEE516928BC9E1BB67A -060EFD856CC9F1CFFEF90C421DBB3CAFD1959B332EADE93C9CCB31006248BD6A -5D79AA8E049C5EA70DAB46F5D3E73984814E9F3E15A0383EFCD157240D43BF23 -F84372FB3915791E581FA0E4CD457289FACCC08C0D37CEC1FC45DE3751445A9F -824A6B006B5E672AAABEC2B8D5DB7B0745C1D01C52657B7DF4FFB9803FD9655F -B7D34C6048E8BF44A0235DFA9791770CB3E451E01ED7A578512DCA397F24F71D -B2784D0778C02BCD5A88FB1671F8019523D8ECD0F42D273A72F2140D3C14F40F -7BC451BE2FD39FA297D9857745B4B8F8531CA0DFD9E72E8EE0E7FBCDA811C8D4 -167DA0037F9F1F181115209C22FA250C8234695C1085931C3D92585563366C74 -826D4E5F9A61F39E3F8CEB8701591C4A5FC62940C2729A2D9FFAB09F833D47C8 -1B184163D87FB4E5EC4BD91B81C325FDA8ECC31EAC76FAB333A9EE090C202EFA -FB2BF753A5AB8D147F8949C6FCA5922E1B2C6231ED86BBB953166DE2C08A3DC2 -433C76CAA7260AC901C3B4E2E78C8A6064F0ABBA1F4D16BACAC5288F199A0929 -25F1DC8ECA38DA299A229D86E105C29CCD0FD59585467BAB46AECA7A76905CEB -1CE91EFB79E3B4EE3CDE096E2CF63DFF71544E639567BC8F12263B2F596CB4F1 -FEECEB69763A7EE15B0E59A2529A116E6E3BD067BFB3690021068ECBF18F6D9C -3F3F07D8C7E2A7793FDEE84EAB71613A6EA8F6AC665A7C0376A6406171EAF3F3 -4E466A08318F942F2830757721CE2B193F3A7404D51375DF34495AE48356DD78 -E4AB3A71C2BE2094D5196BBBEBF056029805A302F6AE5F4A9BDB25461E81617E -A634959D343DAC10BD072CE16D7C51C120F9B6A1D75EBC4D03DF60048B8CE15A -94FD31DAE86A4BF525C979C7E96BC1DE88069A342C9E07C0340AA83DCF381134 -0C13C315D1B690B5E858A20362441C9F61A20B70392F87078E5C3F8B4AF23D99 -B051B170140D0069DC6E2D4FFAC6E45EE56221264A894AE68FABF04994EF9D87 -EF92B498493E3F0B2F003C47C861320E714FE36F9B4669226E40753B2FA90731 -CE281E469DB371C975B186E2910879681485763CD9316CD4017C5D9ACE43DCA0 -38397FE463F2A3D6B72209FBEA175E75793163F0FE4A2CAE3C7E5061D1A7C31E -1F8FD3082D2743CEEA008B0F0AB55C2BBA23918A1BE4200DC628662775AC2D66 -FB16BB7C06C295357A1BD655CFF3E0C49046C2CFC70FDB87E62C2EA187A0914D -2B55FDECDD9309FC215AF8882D65174ECEC01F38158C4D96FF9EF1B17AF32EB4 -E7C2B4770F5CE67E2B26BA0ABA9116BB3F89944E308A0127C99B1A145F730B50 -28473FD0DE250D63A7116DA1ECCE93B02F3CED8C894E6B090F5A01A26822503C -EA68C5A7BC8734C35E40D3A56449F6AC36406A0818C666F0EFB88BF02AC4C296 -201B0D0848450A54B3FE1A75F641D1592D265CA639D29DD99C47AC8DCAA2FE5F -0216CD31751A42FB48F53200053979FD87DEBBF427363CE1748FAADFA0C6E2C7 -9B407F5D041D9383385891A86F33AC51F0C7F4902580D9446D8118D8EF2BB177 -5C2A39867EF485A454C07CD835350997F5C18EC1C3A83E57F57D8A0813EF784D -19B088E03344EEB3EE8AF03D18B2A4EB5A57E1DE60CFFC487FF1C2DCCDC88C40 -1B7B1B16A0DB3AA16474F6CF5F92C7490CA1F3D94B33B18DAAAED531D2740961 -53F662902417A01C2B33489862A446A5D7BC27B87ED382CC41175114C7B0D42E -6DEED8A64B3034F764BDAFAA477191564F3EF1339976051C0BFF59E56FA20C7D -C5954E0A805A4A8431B40401E8A188D2409A16013427152F64CD8CD502C5EC4E -B2F5AFFBF1F4D5BBD636109F2AF10BF4737DC0F722E11649EA017EBB2F4F531C -9D08E88CCC7D3345E4B2A96F14C9CF8E211B90F8A2CE2EF57A68BDA5997271C1 -93A69D91A285B2198A12F8B3C23FCA396CBF176473CC5A4C4E24ED72990BDF14 -162EDFE244272250864246D493134DBC29C5CF2C8A5B5E27FCCFC7C577C014FE -FD8F723CFC46F2D9700738788930F22656B5F1AD5A34C4EA6C96EF45C8E68138 -CE87FEA609914E3936624E1E6B167A60237A34C04FF1500C52E7258FDF3DE58E -FFED1699614DE43622D1057F172E54AEE1257FCC853C0D1828B072F7F4477309 -4E3E42B5C00413307335285F8404FE1229D1B2006D482993E7F96D8C9BB7C41E -CB0A9B91F02CAAA3B8A05143ED6330BE0ADC9549D1AE8A46B2BB68E3002F3589 -0D5AFDA53BF17BC6E069E5B1CB3CD24362C702BF44F7823E005F0700AD2E150C -CC5E486F4AE4103A5D0C7396F31C42843ECA1EAF0632AB3EA191C0701EFA0C42 -452C72B6ECD57240A505F49CDC390DE48C5251F9232F837CE604CA7C6AC0F742 -6742EE1BA48956E6CAB43F05485A4457F44BFF2E75846BFB56F9C34B17CBF84E -4133424ADA7942199449554E493E2CBF5A4EAD39A22C166F02E5332197F32C88 -542CDD0D5018D322396F3BF767CAEB823ECD801D22E536D6201747DE4D2CFEFC -30CF112F6DA37736C836CE44A458B170B974F2BC9B7EE06AB478F2EB94774A5A -F18E82473C5016AE0FA8AE9DFA174F17945A5F3526C73A24D348E2A2FD14899E -5D33177E01B7D101A571E196405CA95FE795CBD73F7185DE01F99C1122B2C050 -A4D54AC01881582AE55E34FCFB39189C4482230FE1C01F7BAF31F97B59DA6823 -606D7E318EDA739F6C18B7A3F011E76EEA67C696EE9EEBFEBC8F1F95CB450D0A -FDCA2740E7CF611F427FD44ECD90CEA692377130C239B3A0AF9F492F377C55F6 -0C2910E3FBC614DE8F8F917FF5ED25702A5500D9477B5A09B0A12C9DAAB966C3 -AF6B4F5C16BC519B8D147E414C1334F009730E52C0C1242685F40530A32E236C -2143B0053A7FBF6DE9CC6DA142DEE3A61E338B0E9ECE657C046F2540CA50BC49 -55062DBDC0CC1295991242EA7C749000E114EF1795ADF45A4CE8B33DB1815CB5 -CA3B4D8703CA72082B63700BD8ED24610FF157C3BB2A704FE41AFB1FAF4774F1 -A208ED52A9684A802003AAD6D9FCD5A3CF635FCC938931CB94C751212CCCDA6E -202FEB609EB5232D1CC78DC78F60A00441965117AB45E898BEEE41B9A21D4B17 -64F5DD48296352202F5BB49BD6D7C8A031AE5E9667E077ADB2AE7D92D61EFF47 -3599436C302EA12D0C1713FDC98CFBEF052D7F06666FA15DF8571D712A3A77E1 -370D07F557A30CB110CBAF7AEFC425F9C9A4BD06F54608B44AA3B796F560711F -6EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B -2E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3 -42EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189 -98B28CF2783D9BCBCF089F9E4BA80AE4FE0C21376BC144EB419F3C346A540126 -8DF517CB30F5C2CE09D7A269D6A02229EF415D7D9412198AABE493F3B7344688 -72145D60CD95F113A968F7C0C8FD1A4550EEB73BFB9231FE6C942BF859FDD93A -E4D428B7E16F01633448536CBDED367E9F725417992A4C7297DF9048760E2E64 -FAD313DF07F86486996EC840E235EB5B661F915092A6A80D0CC932FC4FFBC7C1 -B1B9A1E7E71936CAE5B0729BF1D8B8BF42D0520FB7591D868D18DC4692B21881 -AB73A3FFB3A0C6DAC4C9C6757EA9F17955336AA938DF2380AF0EEBD694CFE55A -D8BE01F9991D94DE9980879E94FB1959CA21EA09BFF8D335D24C6B1DBEA913E2 -9757D5110C7018A959C9C20873440610C113BCF278CF74EE3EB1B2BEA6BCA663 -C451D157CF420C4CDCD949309FD52FDF4189DA36ECC22CEEC43A43337F6BB755 -BF613B711D1970B4F5D1C120064169F70BCA3A784B06B2542EFFB32FB5A0A534 -4C560825DD4CE51941AC685E0CC87AF48AACDF6CFB9720CAB78588A05910431F -096A2CE6059506C9496EBCF1737F801C66E96CB8093C650A49DC7D1AC6B81FFB -C20DC5BA3AC25C709A2FB2C848F203CC862BFECF195115FDB3BE0EB82FA85B0B -6E83A4093122A7F459AA330606E6B6CF32C5C46656DA827AD81A86D162C7EE6C -0A3C0D61FACEACA53E633519D7FA77DA807D0035C88C86FAE3167C8BDCF24481 -0387070337F0388FDDB757C2A5CFAD9C2883F7F2FBB71CCD3043B35684F4ACF9 -BC0A50F9C33ECD20084082D97A71E9680E90A560B6C1760408F7CC1C18347AD2 -391C7D660D50126E5B26EB49384B95BAF472769097F8FD4566D03C776F18AC7C -C68934D967A97840034FE6966A4C44384283D25549B89163A50C27CA0E9D130F -E01B62AB10A8461CAF49567BF6C5A37442AF6EFAFDF352B5BDCE9301D1C0EEA4 -3CCBCF70A8AF88C6C8A2EFA29541ACA6E8DA7254E4FA8B1768BED363E885C639 -256E15CE6AB3F8D5F5F19828041A25E0B5F21AE224C8CB7F51333ACFE8C820CF -67ECD12BCE156DEB74737FF42B3A2684679EA97ACE6E24A1A9ECD7DAC0F00248 -BE2A74F13F7808F8B6D001882951DBA633E4D21C47E326270AD50E91F1717F28 -1A183A3F7603CE9F9DD8D798C5CF6D94144F1E2CB378726523E7B2080B753CFE -D7D53773219CB1EFE995DC623A1EFFE70215F3DC17CC0695DBBAD0DEF043D57E -226BE50D8F31C5DB8401636BA1FFAE520EBCF2AC99C4390E4D878028DF493B45 -93CC8971CBED42848099D1CAF836A594802973FCA3BC632CF8DFEDAACD30F3B8 -23933ACB3833F98296207ECC26336902EE4E61AC47F838CCA4BA4343F37337FF -BC2F5D2C17B7496D794BDC9FCADF1F68710EF935BEBCA4F766D1C463D36BA87A -77634687592D7570EFD3218A155AF4F799D425EBAECDD6D53FF4BAE6AC83413B -819D0EBC3BE6F5B0503D39629FADA6A2210B7EED0D23EE9536948C36D1BCE955 -978E6F5A5D5150913C1C9675FB4CC807136796691E186405E6188F536730D89F -87987272EFE130166003DB3A723063C331688174788EB915C09C6D73037E0721 -B43F4365D9974F1786CDCA4DE9F2EF193DD46149B5A24098FD0106045E309809 -C88067CB5C35DB60F64DFFDF774BB30035F9C4509534F34A07E50A04BFAF6747 -31D3A2A56AB7F755BDF243345811E8AAB524A920B0F17EE914D3015EFBDD74A9 -868823DB2338532AA4094051E3CD43B29B18EB3B9AAD4C4EF5D755AA3D323D11 -9440B1A2C01A0375BCF13162A3962224F04A28FC15D5000B796E39F80016F858 -989E64B8B9B43289FDF3CCE2D020AD995A3D7736C4A7BCCD31440EAC5518B970 -043E2AF5D3B5618FD9D5C5716403B43D2773D94CEE751CB545AE7C8AF1431FF1 -C9C8B77065FC01530E2BDCB91308510BFFB756432885FFE7E51B8F5D078D2ED1 -1D894839E7AAD86FC90850472B81CE2B9F67BCF8AF334B1CCD1E4C3AAB470867 -591E32CC9EDDFE53FACDC1F10AB7D5200B79C5F52D0278D47E6A5D1487018879 -528FA32BE86D7CA2C7D74A4C83DC5403EE7B5ECD0265AC43381C55C9A2A7D0B0 -100D59724CEBF79065CF467722D098AEEA112DE97D3A63B5DA728AD9649EEE38 -0FC7E3C2DF87FC75FC71FE7A1FB29CE0412A292E7D0AA49C6EB3169726CA4D35 -4B346F90F80759A98A4FACCD4BD3443C5D495209D5B8371CD9F609B2F31D0089 -53BE78E3031A481353B21AC539D1D0DB15D125C5A215B85C967330877CCB8E4E -FFA3B31297E1FF68B1F037146EE0CF72442E5D97231D60A780EFAEBD557BDF25 -2841E68C8D9DD235D19D7949A847BA813AFDC78C45A3ADC0C594DDE1502632AC -C9DDF7F22C37569C4B6721F5D4E0DC02AD038A293C751E4270D83CCE38E33C0D -935A016C2E48A3B0B302EBC153592938C504B6E2F534DF5905DF530889A46DE2 -EF823D01C77EC705A38576040991BE498E2ABB8AF0EDF14F762E43FAD1F77BFA -526507E86F108E6BC293E737B1CEF52CE5F4601AB761B18761351C8865F6C1D4 -662420E1E761ECD0D3ADD8DDA3B4B8DFB78BC27F33BFE6CC5A2A60B31CEB007E -9B6D571226EFD67FAD3EABFFEE981225FEDE1627645BB5E881907B0F30E66158 -251F0FFE3FA1C010C937B6C8DC8C4A8649156947B204563B30167D4D480EA6D5 -E74571126EC1F19961983A135064DE001B9F0F2FD8D63D1D9A9992964239056F -1983B84C152AAEC909E8B27FA29D309EC0FAC516F297438DF16F5DC70E3CCFA2 -CA7ACC09A83BC9B7912CDD58E0B367BF41F581162C100F3633A8DF70BFA80565 -6EAA455575E8433805C923ACCD1DA4FD9A08B5A344329C61F897749DBAC3644E -F76DEA49E774150D58B868B341B40EF1ED951DD2E8EFB95C2B71C0F9FE556CAC -AA0B805105F924AD53DF8A8792293A7C6EC634BBF784534EC60AFDDDE7A5ECFD -7DD6399B84BED1B6603DB2807E0021CBEA0C2AB014EBDC670D082AFAB26B3151 -101B9111E538CC9508786CD5B4322F6D8BE43455BC8D585663C2494F2A941AF9 -5DF7A512F936105B6C0B71E4A29C189CB175F1B4ADCFEF1EE300551A573ECDEE -BCD73740A44D6FCA66E22AF39A236E27C4BACDB41D616039AB10B308C0671129 -4DF112BCC3F0709D96E00C54FC5D335632C107058AAD26366DE0A1E8D2448845 -99DB48A0F053672ACF7208F8EC728FAD0950599396813185862034E128C29EB2 -5D0EA2C06F8B067F2199455E44998E7B523FF19A1F7CDAB6BA06E166E471090C -C3C7C2005CC0757F5A07CB3B1C6D050D1BDB00BE0DCD9EBB1A7CFF6E4BCF162E -FC95B6895F5E6E90C10D6D8F17CAC2B271105BAB3EA0605C8561E3DDD996DBA3 -5DCF762D40B38DFA30086967C407F20618613CC7E2A854FF0F25CEED4DAA58FD -4EF8C4DA724D2B21D0DBE3F53D2D9D26FD15DAFAF81DFB2809B05BBE5B2A79B6 -6BE13F46F5A94F43763AAF260231DD3C2774A165FE4D2E7C8788F23609E36249 -622A714A19B91ECEAC16D64CF55F761A801815A384506B6A3342EADB2671B107 -7E2099F4480AB218B8FE2CA0F6696851F6431DC6758E7C4E551ED27BAF6E28DB -83AD73C80504F0ABE98095A525EFF2667E1F23380D5E9B5406830B8EE04A82D6 -0C016ECA5D0E0D22253CD23E5D4F758A919833AD851EAE0AB007BB05E6234D86 -FB4070BC98506C718BD3FDEB8F98CDEC8F628F1BEF4727630C09987EE93A05A3 -E27FDD103ED344DCF579D4E47AA29EAC5E0415C64319AB8121EE933F2DEF6C65 -92D3067DAC8D228F566265AE3F51C5B5B63847066C8E15766E9C17212D17BFF3 -3EDE7E9380DC748E30D7A441020650E6244E0A0F10B9CCB08D9D184F31557E86 -728D0D17E69D02F9139F114BE9365B5789ECD22D525B0B3F4F77BAE59FD5EEB3 -9D04F26B3EEE5107BE27FF59AE320732610814C77CC42C6A2CFBBDAC95B1692E -CB3AB1E0663590BD79F72322ED01417F7839CDCDD86E16A3FF7486D1BBBFBEA7 -CC9A15F1D85E99982E657D5E6CCEC362878C63C70776B7F3129A81E71FAC756C -3B9D5BC099F11271EE45E8912DD6E519BE47540FA7E6CDEF4E0AE2FA78EC9909 -A3BA4AA0498A42D363EF9BD3EA3F44DD192054D99E2BA96AE79D58F1FBF4FEF0 -1C0BE069B0D181A6BA16E7856A55A1252CB6E1CAE718F061B0D69A697F30212D -ABAF64B49495CE8C2C3A021F1B63EFBECAEB14FF0F933679D4825ABA027BFD16 -8FEEDA3BEDB9333856DD7DC8DEE7C6F1A6E571996CA3850C3EC6F7AB56217F89 -BD0E5D306E9D173050124427C0639C9CB1093BC5DFAA4975639E844BD57128FD -8565FAB45473C77772EF4B5AF7AD6BBA291A06952A9FE634909480CDCA5D2924 -AAC8A378DE44DEC27FB92F3EB49C2CEFBE1C9C8FF1ABEAD47EBE178369E562CD -83863901139FB4CD2C62B5813AC5FA42972CD918E866C218F88F0F358066E169 -AEAB4A6706F7B863BB95ED3F75F0B8C358511167E30277CA4B7D9C3829A6C4AE -382314835A27CF8DB04BD2E399315430B41AE224403FB3DC5A6E6E703CBD290F -0C186179130FD6D362480F725AF7DA8FC53C3A74DFC8358BA617299FF5FB80EE -3F50D30ED2ACA85ED86802C32FF46B6EEA7C574A0571A73B11E5260F8DCB7C3A -8664F92A46775E19F1EE687862A4DF83C32B055EDE4FE626C6227B0B2CCC8C42 -065FCFE0EBA1778CA4AF232E795337F1F581B7904EACBE02B7C331F1089F2021 -2E14F5B5F0D0F20A157BDB8CF35DBCE84930A8B594FC8D49B86DDFC8D7698F59 -552900CA17022719DA2DE504CB3EF99369FEAEE2B8B692F0A63A5380D4E3ADC2 -B8A1A4C3D4B521F6A96AD5F04FAD50D4365038A650FF9B78CFB879B546006A42 -468D77BEAA748544C863C4CCA988E13C4FEC9D4516A4056A79B8162198B0B0ED -598F9A702420A7A466628922632F3EAA31D81063D23706D2BABE7072FD3F1869 -59256BCDABE36BFA51C205ABB4FE86E0818930A18BEF080E680AD529E3C53B69 -640C131261131FABD462CBDCDCFB35AD7EE87A9B651394CCB46E992BDF79C47F -7044848CDBCF7260DB57EC13AFF48F65FAC15FBB95A84DB9B5AA65CD2A44A5A4 -BBD2598F7C46E0F55FBD3CD60D8D26B384367F3680FB23A431C4F9E4013B5FEF -79674CC608B23BA474CEE87C7C1C89505F95AF66DADA954C08B90DF6EA5C3D35 -2B6B28A4E65078A4644625C6B5748CD9F0C8E6CD8DAFCC6768448C0E1844B067 -B8FE4642141CFD6AF18BE1D8D0C42ADF8EA56B2DECB0E105102329E01A326D2B -185371ED000FF8F10B2642191C1C8896C287CC5B02F7D0D2961311E9FDE97967 -125F17AF2BC1C0D9E81082A0F2CAAFA85586E83DCF821169F643E378ED0C06AB -F0107C05B6C20E8C219B1EA372AFE14556BB26E265DDB35EC1A29E698ADDDC82 -B3DB2749CC168E27B40ED391851B5D9265D59BAFC8ED28A3317D56BED94EE667 -C829329BACB09D1B1F7A416F23BCE70366C60E5CB4F058F00A490C2FCAF90255 -EDD033037A2DD77F576CDF4B793FD62E5EF1DA9CA07EF7196356FC92141F0786 -7E55CA7D70BD6C095106F365D80C5E56DA0A2EFF8BD6F4274138ED558DC888C1 -1795AED007DE68040372974BAF475526BD0833CEFB3D115467DBA008921D3B7B -20213B1FEFAC68B2F8881274841562A098631B4DF3055E4F993C8E3668431C87 -363304114F12F7A6741E63B57EFFAD0451125284641B7B63A155786F0F30AAA6 -B4AA243909838427881299D4A812037868176E78080B58D71BD4DB349F5FC40B -93E93AB792213570A54812E4289E434C7C41EC8EB1D725071DF30C07955B8354 -142DED8CC2746850ABEBFC9FB474A8A4B4C955E2C4B1B95C20FB7D7785D6B2C2 -27C53F46B5650208C05D672AC1591BE11F4EE6C139315C57010445E788312C39 -A20F2316933C10C67BAC33DAF32442A0321E4C9372C2B4D80414454E518C65DD -B0D18FECA4B9D7A86A11E9B3F2E56119450551092CB2E7B4DDD3858FA8BC80E5 -6C883015EA7B770A8B51D56AD6A14D22DAF80229DF1026A723C1BA653915123F -A1D57F518B44F0613521CDD32EB9A1E4E986FF5093B81985A00E0CFF355C61C0 -A8D01874FB5C462A3B3A317E027AF79D5820B473A61CE2D6F759CB48B441341C -C98393C31626FB7459EDE4953D114D2A3C3266EB03F4A4545BB737E6C3BF0B5B -4186E06CD1EEBB1DC515A1727CBECC5770212BD638BD04D1A4F2662E8DEA0713 -B3580AEFA6AA79AA7DDFEF04F877B1C7C763B553FC4DB31E7E73FAD239C8B871 -208FE433C3902A84A0580CC2F7EF3BE276175F6A6197FBEE6E039A1AC985D478 -58C86EDCE81805640D4A87D5AE7155DF9F2092966CA7A1ACF9B04AD4ADFE7EFF -4FF711FC4D9E9CF66C395A26F25309BE09019E61F5B70C50BEF2EE54CCEDB425 -B9A0A84E2E142E4B388D3DD88062AA6FFD55B671AA4442011FD17EA9FA0B67E2 -D4A2BF06F00F5B90EB8B4318F026B9F3D7862266615E87A226A0BACB505E0FD3 -2340134D25DA26A26EB4569D95B57DFFD5BCFE6CB99AD2CCE1B98C250A621F70 -A5B45601163E7CBBC9FB212E7FC224C6C9B8B3AD91D68B5244428AE7309CE55C -1213620A6E7AEB379F5C2374A10948A21E307EB064D46BB725F6CCFD4F0BEDBF -13F46A187209D019FEB51E0743A145821281A3FD631CC2A4B1A26BD2A1260756 -3B54198F049B25A82FC4A40E3253B0A9B96E9E5A8E6FA072BC0C4D4957F4FF35 -1C57C6511C9DF81D02BEEA475A63108A5C89DDFCEF769227899948AA28D761F3 -233CB498C5178B8EF70CA1AE12602B5BB28D113B77E275D952EEFCA9111F921B -C8AC69D314A324B93B03C97DE285958FB13FCF5D4B2F9E855CE45345ED0D8E39 -5615922765C0CAA288969E056D81CAF8012E4DF8FC543DC0FD54E1B32529C054 -862911D2061DAE5AC576AF98809CACF6A86405B0A83DBBE664917625AD60143D -A22DDD3FC2419A51285E8774E5BE1632EC12E29B6805E54B168B1C003385A74D -385865C5A46F79692553AF2792C11DBB6911E3FDB8CF3DD6F55D31E6C1F86D3B -19B86B8EAC47837594EF0EEB73D8EE06BB39B77A40E5C47752A314FD837F09BA -5A84A5C73111B6AFD932B5B4A4E680428F4840AD627379E9E812730577AADE4F -C96F1D16FB6D0BFA89779AA11708F81C9A5EEA31D608B2FA8898235219D82F81 -1162F1DB9E2A85F397653B8A57D9E36380A70543A1492D217323D69E42278594 -B7F54368880E22CD2E2F3BF701DA9CC29DE0C62AB31BCDAE82A2F695C98FEE90 -EECA21BA77D17298F7E2DE6F74544B53CB85638E239EF670172951CC203F37DD -51471D4727E6FA2098076D9177EB995C676E21AC27AD84B90DF5620FD9952A6B -637EA0337053F39A8101938A30F6B8E37D94D7FE31C980560519B6517155DED0 -A419B6D36CBEB64AF00518300C4AC1B9AD4336C7B099651AFC70D68C624DFB3B -5A944675EA3ED1AE5FA7ADB63E5E0763F6BC4D4E83F8B1D1F355ACCB0F4869A0 -C29000EE68B8D3284D782874761908D83E461D247798A35BA1B4356C4869AAB2 -0263D440DFF69BF5ABE9362B1BFB8C5B6E6D8973AFDC4E76277104B8326EFE02 -B08A5D00A6FBF10413C2B8B3E2C1BFF9F235772014C39D48821097390F760062 -03B12B90A7C766E19E6BA87211D33F2AF5F921F7387E42246E71EBE0470C0A61 -2FBE7DC210AA55310FF8CAED5D089801DD513F6995F84D87CCCEC287B1A2E98C -958C180C6434CAC5514B8E0BDB98FD47ECB991F7687EA48BC5348C48C6231793 -D6A6AF77ADD045C90876876BCDDA1CD33A64CC745FA39E924D6CB69A26501BAD -34DFD096F155ADE23EDE1D17394F19D4DA037740556124BE10A1CF66EBFC7CD9 -093891E8C4C084B16B589A627B7807E2216E0E9E9E76E28AB4EB52E8121AB21B -68EECA8901ACBAC21610C80BD3039902AB708A0C393EA723B8C0A42626C99BA9 -F7B4E369F4DF12F9D8F5747BED03ABF2292FBA592F614468CEBE74BC3BA016AA -75CBD88BA886C0FCACACB6BB14B57CB27189B6716F58DADBA7F0D94D06CC3AB4 -41B9A6761B4F473624EB06346D2DD8C2F011BD9BD3BB17F9400E53083C924FAC -38B5457E6E2653DADF8AE603A45761A198B0E1C03CFAB17CC01C38F3FA36B17F -64720594133B6994483BAC49C252F44AB1A80729ADD3C4D7A8E866694B1549BC -CE77C1F1B8287F515DED9B124AABF35EEA5761C8D86289882D9D77AFA73B4EA1 -1BD12F4AF1416F83F99F9F70FE1B43210ACE9E76C0E0137F2018B2E89543F1ED -B2C35DDCA5D68EF1641463D7B8378D195BABC1880DC6592FA2429A4FBC4DEB7C -67F1EAE1F0FCB79AD109EEF143B57C30CC105F65FDE1C80BAEA04282132BDA3C -B48050A7267DEF7F3F48C2A83308B16320E15564171171F46EF2CDDB10AB209C -4E7624373F4C6A49C566CE0B053667D12EFF5A434DDE23B32D0D3090318029CF -BA8A095C50BCF1F6B0504DFCFB70752A9C68ECDD82FF949C2A17822C8E3DD91F -15CF16B6CC6C8EF09178CC9111B5FA9D36278B47AA95D22D6959F7882B101F69 -435085BA043D7465E896C536867A71DD95B07486B0DD43061FE0D4AE86C3A476 -C37DDA978A549D60F17212C0F0BFD0E5EE4881686280AD90FC6090C0207FCED9 -C7D395F9BFC34591D1E73A55E7257753D2603D51B0861C11810A6B2129349511 -B5AA65AA3F1191066CF75BA36421A46844BD99861F9F9F241C67979D51676C57 -6D5F9C816AFAEFD24650564D8E2553A8535A2D4CC4C4C5C6D6108A9DA0D5AD91 -EDA473D9BA0AA3313D850C749B3CB733FBB7B09670C6716B9856B9773D2EC073 -036471AA470AA02DEFC681ED77568508AB6A3BACB821B77E90A94CAC3CFF436A -C554E78721F7D5B16D70D131ABE62B6AB3CC687B1483A7A63A9563F4675295EA -78D3B2E73D08AC9056FAB8478A6F41E24E8904CD0C65C420C1808ED22BD4A42F -F86A163D8F8C4FA298AE20293367796E5793A8F129676795ADDA26C3BAAEA0AF -2A4A2525B889D45ACEA22616BFEC7FCDF17927C5233FBD73C3C58005C843D5BF -7AEE8D1E6B17FE8ABC9BC16A7FACCD47D6B6CEC06016D29AFC9F9706C3109225 -FE7DD2CB5B7262A2D209B3AC7AE7B5999E5143D1ADE6F9FF55848878F5F1ED01 -879C62BC67853FC360480DEEB73694A6AE25C6B2B3DE9456D6FA372DF603352C -EF498A11D4DF3C441A685AE00CBAEACF603B40527A7BC5102F082B508A869498 -EE2741017999C5FD551668615F32AECF6008B8FFED14BA461B081C290C3E6C2C -9D11342D1F4FAC2037FAA555BC213857242D72D971081B89ADFCF15B26E6229A -A753773EB8F05BD2C47A53B6B98D6017848D115FF490F1270ED226A588E5A714 -96E737DC61DF729881023D566D428DC4F534F2619326C2C2489D492E6483A322 -4F93FD9A2582CFF04CB92BB84012A1217049A8EE353FEA7F6560A7EA329A0E16 -52A6687FC795F57D0C9A1C54522D18B9A18BBF8A62CC93FAE2B98820149956BF -C8D0069F84CDDBF10D87E2459E0FA6DF4475AEB659F0C89DD652F25ACC69F19E -9095CE72CE55263AB14F075FB439D5FBF36BF5088312DEE7556E12C4852ADB07 -FB99279C9465BF097FBAFAB6A381002ED4DE4797C61478E5A002C97E89BA81BA -2B9A50EA5A1FEE07DC11DB4611A1A7D24F97004E2867A807C508F17FCDD11E9B -91C9B72B563D938B38F392827AC23D05E414A3A1FE24199FE833CBF776E19E3C -9408C38FE23BC89E8310D49F866F0B6034564BB21238733744ACC21D6FEECCD7 -E4AA08F377CFC6CBF44CAC348CABB8FE34A6C51F5AF753F0C67B1A18F524681F -5E8053D13E460F59DEDC7EEF52CBB402C9E6A7988D07FA1928B1383D350E8A1E -E06C576D198E12BB84C1CBCE4F47A93B569DF88BDC595E5A182E65418CAE4399 -E2B76AD0A8A073BAFAB2DEA554065E5A3191809390E23FD16842391B03DEC4B1 -3FC005A829DDEE375728DC73B3E2DB901F97491B827D688B949A07F78B10535F -662143A7D1772FA1DBCDACBE5F3527424DC787D6B404CE9714179DC10BBFBD9F -C3E3DB0771D2C47D54473C15587342E8FE9190A6FB55CC0EDA521C73ED249D2C -927DD0BB776BF83492CD40DFA5514BA3986629B3B7B50BAC7351408A958CBBF3 -8999CB05A73F244C1230391D6F89AF2A7ECC1755DA94C389305916CEBD43B233 -88CBAFEFBFEDD7D54D00A9B88E1A391AAB951283F1BCD9E3AAED990F53BFA5BF -054DEBA1607F632C1F3D7AF66881600F84EC835F86663C12F02F084D419C8E1D -AA77E6B3B627BC87A41A4B42B1744F410AD59846D246592AA804212BA2F38867 -A63E5EC0F71239113A3BB841435B80CAECA592F499755906A5F4D8255F003C9B -7E6CE9A6AD93B41203C0912D4603B39A9071F7473A5265958BEE4CBD6BA5870E -DE6307F6F32DE57998276F2D24D335305C3297C7B7CC3079845DF71FE32D093C -545FAA90BE7119E3AB68E116EF3814521FEBD30724A1A3BE3217367D4221C1A6 -3A042C0475116EC08951E0D413148A91B123166C569E22BCA891EBF87D6A2F5D -C1E36AE701F0F5D78E7428AA902F84EE66A142D8B39A5F7EA6A85E1A000DD273 -86A48E2E0A836679744003B9825DC3F511512954C01A877F540C02B775B2D692 -174EA54BF7C32F0DC93CC6E85EE8AAD0CD80B0D634B60B49DC1D0E55334C3470 -54907964F269EA9840FC8F3D8A72DCD773ECC2EA26CD64D42693FCD2AD8EEDA5 -7814FB8BF232E547D6783DAA15880758BC4ECD8C339C5C9E7A5847605C01B417 -5B378E0F1263B72D03AD49EE0D2893ECAD56F672B33E1652A664E87C4771B4CB -D3555B66D9E8B85B118881EAE0F13DD82A2F7F7A74CF71D23A7D26A6FA19C2BB -36D0B4E38237CA9D6268C55D9CCA670CF3AC1B045B30E500EB34D7406EA82B0E -0E876235556505BFAFDE2808C85978A2D04F50BF7FDF608670AA846A4434E80B -7960737EB91FAA6BA784E34FC21AE584696A87250DE7D95B315D57FF73E15FB4 -D124CBFFFD7A44764687B44F0470162CBCBD649F92C1FB7038D0A298CF33FECF -8F9554259983FE727592E644CCD32C3D821C1994D924813AA9AB08BC233BE5B4 -50DC095DAC33090D55B8B7D7C0D2261D45A923366E0595F57AA2B7D7D8DC22CE -F7557E20252030E3C6D3980EE05700A59B8D620CF89083D6FF2E3E78E118B144 -C92E2A6CDF33613CB1F74B59A6EA27E60C0156E287D05C5FA5EFCE3D4E864C39 -CD87D636EE736F32A091F019B8E22429F50DCCA8B563A128F52C4157019DDC9B -415524A99224287848685E353D92BE01BA661CE857F2C6172C81F5674044AE90 -5ECDA6944F31B45F77434DCB074658847C1AE424418E9E05611D016416891078 -2225718C42E8CCC730F90CACC6B97116BF183800AF69F01922856FF6B9B280C5 -110DA3BA79447ABFE1B341AF90FDD05DC5FEBE1F2E7130A3D50AC68502C433DB -534ADD5562E501CE0A212E855F1AC4FC1FF8D5379C9701F8DB718194CD20462D -155A814F7AE8F20892C88B0587EB52455276439C728B8AFB4ED2A51F1DB7F9B9 -D35663433BE337AD1714E0B1488B062CF24D1763CB9AEE6E6C393ADDE0EDDD91 -17EE00E06C4935F05F29CB4461DF3CEDEDCDC6434823CAD2B26FD43C24F6885B -37D6A22717992E0807E48E7876DA766F1B1CF264C70D0A3369B1F88D8E22023E -D1E58747EBE1AE3C32120E87FE87B76F7CED4053270A7E89AEDED4B6F24A5E8D -4F0801E430D2104D6700AC07A211CBBC57A43AB300C631564453D826C5E97BDC -3ED112A498A8398051492FE1B7A227AC36B18BDE5124A6650DFCE5846717DC0C -2C388CC394AB0C398CEA7FC7FD2D7CA461D238AA6A0E22E1E507220225057BF5 -C76EE2E2B58C865B229EF8C8A89F18355678937A3720C6A4C150CA3C124CEA6B -AA1862B18FA26E7F9E082D5F620B17FE5E5E1F85303D1719AAE1C3CA1B9AD700 -05DBE2CBB952C6E97BFC43FE8AE9EEFD5B6CDF601C65761526A0AEEAB5CA3A91 -FF7C201BCE050030628D6933DDE2F17C7A9D3D8C0E985004A1E21EEBDF785E8E -68EA0444A0C05DEEE046BB18A79C7ECFCBF5702B834459B78787D2A3513A0A39 -6CA03C25E2623919FA2B +8BF32D2E5635B6583D04BC0AA187D10FE773067ACF3B528CD412ED96902B0056 +567103E3FD911A099ADDB9EAEB3C08F1B36A918FE865B7DAE1C49F21650E65F0 +C6845C15740631BCB7618A3266D83E54976BCDC707883E531F3F833AD0DE88A0 +CDB84D8384602B992263C3C223D1B5393DC98C75EFF9AD8D98A764228C70A303 +28D87B1A5510A579D01088C26D9667DB86F72FA302A3A8EEF7E05DD1835E72C0 +66A0728CB0DD8C34BA1D772886333BC78C79374026347FAC9CED39B7FBA84DEC +E70EABA29B80B4E813C0E6D5ECA5E9ECDF0413AF7556EA458C3C3B49A4B14A05 +3034C04E1F8665532D053F810683C957050FCF44C5D4040CF09893DBF641D68C +0969D67BEBBA6DA451D446DCF87B8243365E7158D89332FB33CA28F0A83A7A63 +D22A0948A46F0AB9B2CDECECDA40FA75B046CED41C017FF79FBD7380CF33D726 +B03304BF8EE1EE450C065BC8B83643AA74F8D45924181D1D0C52CE78C36DFE66 +99CFBD08406AB9FDCC61242472612AF009F8625C966AC9A7228B85912CA77A9C +832F9D14190A1DC798D4E99B5D067A020FAD7E13E2E5A155A94E46853CB93619 +39183DAAB590F1BE12C3C4B0209A93CB015E58EEA72C0F71E68EDF1CAD4CA776 +9320076D70BD2874A166F2CF735BD5154F9FBB219C868A568A7C176060F78092 +1E3661E66B7E0A8DCF294E09D487AD7F7D1ABEF83E7E0E5BDC60D672A4D8F5A2 +4C33479DB4FB7105158E19C62FB0E1B9749E6A9D4BFDF7884B1922C4C48265FB +7851C1116696C02337B64F1A0445396102B541EE1CA10D8311F79CC58F2106D0 +12FF6B1D274B810AF318BEF04467B5066889896BBF019F63DD5DAC53EDB1CD7F +AD10D90B2D3CE615546860B11AFD0D6B705DAC7545579DDD3ED867F31615CF4E +F3E4BBD8527C9C3CB4DEBE71F1AC965A69A1C6E244BD5A49FC81135A587EA904 +A863FF7D421C407EDE08825D78924635E6968CAC4399D231C785C9048FD8C916 +0B2676DB4D91487B862B25F68DBBD03B604BD875420565855CCBEF9AF0793964 +4FD45E490EFE697A470FA3C60192E660C45083E27B9E569DD1DBE07706975B9C +9AF2851279A7630999C92E9867F55D56CBBA0CA13A0F041CD0F3ADB318A0D298 +ED48F8288691BB2CE08B6A73E9FA89DAF661F201947BD64C1EB769EA3A0C6FC0 +3DC343AEF2379881E46627AD2F653B4C6BC37E8D8452C3A7E399C0B6B3D93671 +F51A92EEA7712A872D0BEBEBB071C83D9254A24C8799CCB5D2FF4DB31075483F +3743AE4BD1CEECE6B9432BB89399FE62B87DAB3B19FA924FCC1F6C3DCA1B0049 +51024011B8670DCE537387069A8732AC4ADDD77B2A0D5D97105810854595C4E8 +0663FD917B5B587B8ADA22351D79F5E5AD494FADE90336AFC27FF9FE8BC770D6 +0A8D6FBE6E45B3D4DB20E91A53D84C8B100813CEB9A81B03E142748475EEE77A +892B3458A3AAD744A20ACD28C7AA6C5A996C9A9900F2D6B3C1169DF3BF2B1A9A +56EF83195431EE89A89CCA5A0EB6A59D7D89179B6C127BA0981FE0122E4184A8 +FA9094D9C3D54BB7CBA31FD03C7048A09AE67C956A5363F5D51ABB19CA264D9D +5D515F61DBD9C35D259950530A95350A313CFA8CF06413ABEF844771BF99590E +F9A2F28975AFD00D700E83A59A3F0B7238CC74A8C1C9DB059C84DD91F1E07580 +C4C1311FF1C4AF2AFAA07CDCE72B0928663109CB31DE1548C72EA321F0EAFE9A +ACE0E0BBD840254E30D9A46162DACC79A07F21BA056BD90AD312A2D728CB94F5 +FDD65516843523741D2430C5338FDB4274162B8C0409ABF94581C1A3D8636BCB +78A98069466C0C869BA08047E9C154DC6FF00A1DDCC2C4AF4D5DA5437BD02616 +C0139731CAA7817984BE614D6D41E9C21AEA1CBC9E56C783F68364023CB95387 +C71A72D9DCD59222964D04650181988D140295091175DD985F5B53B070D20B89 +5E4B621C848C9370E0687B45EB1070A688A94BE949D242AA6266ED2D64C2518C +4A5E75442F030E137D2E3BD654C4E4EDAFF7B46EEDCC9090D537B6CE01DD6D0F +1872A47A04ECDED2421B511118B0628148D2289B74B79B3A68CA7A2547D644B5 +2ABB83CBBFFE319957FD2189E272DA2C2E35DACA8EE229F37EB4C94C920A65C7 +165A2ACFF7B92CE4338F3030E157CC75281E1F33AF00386FBE6003C4C8CDB57C +4EA70A31E2CD15FE6732F98BE47354C2F92AF632B5BA1C7ACCA3633ED13919BA +106E6ABCBDC11006BA4560AFB17C7091BC1A632E7870B65717656A89EE550576 +B5D3BD5DD829886BA59D186770871C3D293EBED70D66EE3AEA926F2AE6AC6CEE +30CE46B99DCEA2D15384C53D08C6F1A083A24C025D92832E16E816B893B3F2F6 +68BDF430788D1167B14633E0AD0FD74951C5826BE0F4B8CDD23CFAA88907C43D +1678FB2C4053E0E2056BC4B33F36A896D1BC212B0262B6CB59AB3A5ADCC027C9 +EA6A2C0F1EA2DC6B88517BF08AF54C9B1A4A7B0A4BB9A66ABECB539BB6BA1F9F +313F2A5619949D0FEF977DFB87ABB8B8DD420F3097B2B8BEC00EA5A3E8C207CF +508C7CA5133CA63B98A14E11FB57BB7C461D7C8C767DB10E68BCEA1D5A4B7F29 +7AE639BFD660B1CFC78DEF00CD1278833E48A65BE281C9438976BBB475AC6818 +C533FB4D2F4D3727B68F533D03554393D66FEFDAD1A3BE79FCEF05B98A5D9EF3 +71F4D16E531408B2D866286CB89B50DAAE9978B96C8BEA869F9E90B780F0C98C +1618C4F6FDDA21820BBA795B0AF3D00F96635FC5062544317A62A37060F965CF +3BF8A9C7B5C3D74914E0AF04AFFDA0FB1D1E644E2FB8125E94C480B4ED41FF6B +DE326A771B82A9C44B4DAA194D3C2A8855CA293787D7D5F466A2587860B64408 +6F14F78C085F63E6B63AC41FE7574E5E22C723202B7D42A1BE0D14A299231F75 +66FB900C2A030D0E09EF5107F9905A5C66E6A5648FBA2B8E80217160EB797496 +FE3D4904C8E3B6FDE528D1B931C369AE5115114B3701CD40B57457341D735576 +ABE1907500771C3EC5F562B63DCA85FAF5769ABF0F8F74A678E508A59802F1E1 +B11545E6C8697D1A7FBD4ED7A5DE57778DF66E04AD354E5A45E199615C6CBFC7 +7F6C232D710E8CD5F9953DDFE922B2CF50F02F65A96E1BEF0C1FE6B5C52415B9 +052B9C062B532A6B83260D13AB6D3B2A48D780E03B4519F4A2152B82D1A90359 +7CC62EBC5F26608232CDB89D2CD44F0E889AF80B1A9F8C0B9DE0EED9787D70AA +AFE3DEF464503D9E56674C9BCD0BC65876F2F455C83412E8FCAC08ADE7F8E2AE +CDA7A57425C7ACEF0D58CC85F71D8512B32D9C06AC001382A4095FEA02E2BF2B +A7EB6C298B10CD398780A7120CE9A31DE391C349AA273C890F620172CC434C23 +33265359372A5451C4DACF0C859BA6D37AAAADD08D2F85DCDA2399D894840D7D +AD9870DD307B9D602661D7ACA2F84FAFDFFABF5A89AFA9973161DC1CF3A3943D +CB84A9C241C8B6D6CBAFD2DDC75166C3C2D5994DF4D2C60739F34E7805582A15 +76191F4150309E55FA04EF8A59C4DF8EF1C95E57F0C255B63C82A7775D4CF3BD +A3C56600BB869D411A5ABE7EC6C67437B328DFF2F2BD6267A43D69B6788802B9 +249DAE42336C2A3DE75816951644C742C36C51F120943DE8B75052EE4405A346 +E157546DCB7D845D81AEB84E70B857B9152C3FA6D5F3BAEC8611C14F67B54DAC +F58BBDBAD4C473C0DA872330902A46610865EB0EF8F97078841AF74758F0E6E6 +3DBA2B1659FB937AADD1C8A612C61F0C1A9636F0624E64D6D92966D892F44F09 +48A4BDFC9A83C267ACEF143585C51ED45F59126AF7EBCEC2B9584B0FC6C1E670 +FC382E476B6C33071A9FD3FC2D0F943DBE055BAEDAD6702DC0F474F9B2DAFFFB +C0AF48B326EC447E31210586B7DCD517FB61F4D4870A5E467492F40CCEAA4F2D +B06BF4FD8B31D9650D032A0A28E1D413162C649352784A0414C474A82DC471FF +1FFBDAE7795DDB8BF3DF22C393E939F5634C540DFE2590D71BC1444BBD79A9D9 +7261CAC5207814AAA58D8B135A52A3D3174110FAE364257A6F79AB3B73B52A0A +EF08DC05593BD0327BEA4697339E45996E5D6812D166165790D8E4543C130DC5 +34725E44BB037555803390CAF9F94FD6BC08AFC3ACE747B9728D8CF0128D5B4E +1275C4BD7E50AB5F980DB3C3281E3FC4A500FC6DD0038D35F4F5589679647238 +FD7EE68BFA9AE20EB140B7277073E6F26C7EF556FD311D510C92E89B70762F42 +410ED318AFD46F66F605E98D1EF12F00727B3B3F21F695241B4B5863FB1C27E9 +6BBD4365B9AEEFE8A18AFE350731AAA0ED817498539433027D50C8D38284E888 +1E6A1E6CD54F851B264E2FC4597A6A4FE03C7CFFF7D1F75CEF43E97B22096A1B +D8BE2DC4A899E64492359B346D9C0051361B6AE9DF079BDF21FBD274597B3C02 +4D0FB1C66B8AE0AAFCE0C1CAC54BEFE069C0BE9505EB0B1AE60869B63C396698 +EF594E1C8E5995AD22DAD027BDBA4BF2FA9B570E8F0FA3CAEECEF6DB8C4819E4 +AEBD7165A655F1B7828527DCA9D01324FBFEEDD6797C8E3E9E17B760C70D7AF8 +8EC0AEBBB2C448DFDA6B6B4BEB43291772174F1C369DBD1C4183C8E00A4DB46F +208C324163E0BDE572A84B85393892545249DB26457AF5FB311CD5EAA11D7F9C +3E491B0D49C77898AD873381077DF84EF4498C012D7752B22F0660810B6EC0F8 +B66D447775AD659C51D3893CD2B4509E8B9D1413A99527F720571784E7B9302B +92175F1FCA726E8AD6D82B9B7E853FFA5739D0DE0A02BB115DABF83B1E4DE706 +C23532EE82BD57109F9A7A4E6A87DB4FF5C698B04003312F1BA23AEEE22162EF +F22F7D338554AB08625B26D74F7D23772532A371AEDA9CC2962B0B665393FF04 +0B032502628AC491E593D0D450757AB016B2C74C6AD44594E0FEC2F880B578CB +5C4D6A409FD6B64B9F1BD7CD8B69676814D169609D2ADB2F1E98F6C8F1A16D90 +63FEB3C8FC663DE0CCA1C5CFF03828FD1DF28678492DA710EA61B9096A173CA5 +FA8A85DCE00EA42ACCA03EF856F3F17FA32A69DF9F73C46944705C5DC20A7535 +34CCC3878E878A0BAC55B7D56CE2C43C102D0AB841BD4A3C5EA0379D321413C8 +6C2DF639D4EEA521E0A1C68D8B60319EB999707001795562E8AED4ABFAA486FD +C11D4F12ED45A04DC72264A882C97510C91F2DD77E3D5685DB2CE52C4746F613 +AD98EF16AA9773CB00735151B7D4B9315441BC3B8BDDA5ACF619F49B6052AFAB +0F19D9ACFC8D6E0CA79A25A8360F9749EF39FB60404E318BB1A98EEAD98FA0E8 +40DFD76BC3A84404F7D3904BFB2EE3597D8364EA556E4F7D18F32F1D86D10287 +8AE46984461ED91AE22B6EFE0CE5511921B539122DA3EB48707B8ABFCCF2E6F3 +9408D626EBD0C2A1A87827ABAAF02873B675AB54BC6CB5B40E697471320BB686 +9D845AD686DCA663AB31B4C2A1915C55A814FBA82E77736F7F258C1AE7B42449 +FD341CE08D65E648A3FB4DE280353F79FD70578A0C38C963461BE98100EE4084 +CC1DEF4E35B10BB81C632FF1AB4511B80C881A729EAB34C9E9D217E3A57EFC52 +6B73AAB4911830A00BA599013AD3BB83BD3DBC7445C316172B3B8A22B8148ADC +FF33379CBA195094D2C2CCAE0E260D8DFEC35153BB3533BE014F456A108C9D62 +5C21C1BCD3CB9D7AA0DB74AE571A88AF6BEDDB6DE3DAF92AE60187819E8EB8A6 +7CC1CCBB5F23E63A107EC8143F0F69B62CFC95605231FE605A989407218AE464 +C2B566EB86E1075B0D8FF788B726FDA5F5F2D8743C39224C2231A46426F3B6AC +747E69C46AC322733DC052641526E775F10924F0AF404C37BD47369986746AEE +ECC7CAAC1B2CF6E5D86A46F4F6AAA2BB7707BA4D89F1B46DA3024A84228E1A5C +BA5EDB68205AE6971A255381FC06BC03644D67B082FD503F502B28141D437C84 +E809F5C78BA5FBD5B8D51C012C3EFCA915505897C8099F0938EC15464FF4EAAD +2012A1239E0251BB126F4E400C170BD1C47656CC010235236733633CE22A43D6 +3E043B687B32BAC9EDB90DEA0D0B0015E8C1DE4EE0B0E0C10F2F50F4E35B31BC +915A1D984614AC0B10AF2FF1B28FC135D07072C0530C50FB6ABEBC1592CAB0C7 +2FF36245ECB609DD787852E5509AA57B3EC5F6186B16A4EF52ADF58D7ECD1D34 +B2BDC2BA556F7915F5293A8CB3F44E707A57F6CDBD91E90F9146874311F25B80 +A7348FA90D09459843F842FCCECFE4025D12B2BF2B61CA32E6F72B8618390560 +0157F80C82BC6A54B9F0289215D94C662CCFA55EFD0650B0ED761D98C65BD47C +F7CD595FEF1C7DA57F3B79FD55ABBCE8D30B1D0DE32994D52F8885A87F0C109B +D90052BCEF87DE36DB4A852E910C792C094D0D0228C53D20ADA83280C79E9100 +8AF8888CAB9835D6CE65D7FE36B18F365C4F6324DD5670157B37AF55B205F460 +D10A0D16CDCDA78539CF166ACECEF425A1740B7C8F02D13F2A86070416AD9AF7 +BD30314C6DC920E3CB78117564ABB1195397CD66FC92F54B5F1535C15E02F763 +C92A2F3F4CD1FEAD965306DF3614D0362B0191492905777B75D8D1C6F5064A1F +111B7EFE43756B4F0996030C00503EFC5351D388C150BEC0FDA5AB0E218423E5 +78F87F1B7684AFA6DC450EF115ACF8AC2C8DFF33AD39FEA1008A46EA9D6BABBF +B5F220B209770EF010154C87A4BC067315192ACEECE255BC6A5896C2F4963170 +576E250C3F8520E1E413A30A1C17F50F6E8D2DD87EC02320176F355709D75320 +D1747ABB9EA215793CAF3BDAC8F5C0812A630FE85D7FFC3AD199E5D83B068C44 +B757C8A127C3993C01E25FD94725415298FCFA762ED456DD7DBEDDA2F7AB71E6 +A289E0F59FAF62E3A2CB6A0995CC06838C8F9A6E19226B0E0953E2BA3764BBDC +257212FA3143D2B67D308AD49A0B245F0A97B09919C307B326D575F1F865ADBC +E292206795305174C193A4CABB0044936E51BF95D0B13E81F2C64248F1D9749E +CEC22448489B2AC1D766933B570E3471B4917ECB1D66E0A4779B084B1D22074D +108867FEC1329F5B30FA344C19FABB7C09A50F49A5B0A1C42413B3ED9FC39B36 +500AD32B07AEE4A5C0DFE29DAC2C6FEC431842A473EB710293F23774FB448E51 +3EB6B4A27D98078B2A4DF3A5F0F41308374765C86C0A879641FAD025EB77D7BC +9328E717E2EE4AEF31A3FD23573DDB8E81F20F6499FC2BB4C94D3F1054785E0E +6F3B8D6176EDA6E386FCBB034F6E82F6FE43CB83AA1147B05D51BBB03C477F54 +38FC98086DE0E04722C5F0CBF9270E0DFB928EC7387710118513A3C97C0D6A9C +D67BBC5AA5DA3A33BB0F534096582355E0B3BFF7E6536FBF496FE4E05F006F88 +C7C28672CC58838790821AA48534FCFB8DFD4EBA9C94E4F50E0B9E046651F779 +E11B8915503682E7FDD90F05DFFCC5A009CE64FBBD223E2634DC95803805F4D1 +C27B4D543FA3EF2B222DAAACF40C526B2A1563C0968E7F2FB22489810A530519 +100FB442B5F972F960FF6BD86A19A1F297F93DDFF83CE2347EA3F861596B961D +4FEDC423B8262ED0F0352DA19F07ED09117CA72EFF0CA7B666EA45493D1E1317 +559D4B5D278F107042D276C9AFA6A093ED696867BC1041E5F25B11C1687C8C1A +72DB2FCD4B632FC212D774785F2D3579BC0DBDDBC8CCFBCF7B686ED3BD92D4F5 +378CDE86406399B059198B66E88BB9EF7E572C6460C36B0F2FA3E19AC56F93EE +60F1F7BCE76F0AF284C3F41C8BB69F7D34B4644AECA4E9324CE2EE4E4044F4EE +7B9C28E8B454D894445AB47B05F7B4B94529808A007A5E3A7D323F661F9D9C0B +B5BF1C24FAE9D951AF26493C3C9302C4C040A33E94E6596246511185628C7A02 +15D33184493337E2543B1D82FD5ABF4F47E894E809C51DE0ABE163D378910FF1 +717FA82AD420E076611F5559AA027F1F82433B4B103CC1541D342330D9BE4592 +9B9112E1FAACB0FFD59326ABB3A352C54D097E0B79A91A0CB39B77AABC40D191 +C895ECDE7E9439DD2098E2D81E56F13F178CB8DFDCA5759C4580BF1DCF7AA3AE +83F2D998FF3B9789DDD4B2A3E1F5CEEEAB48CB410F5C07DD3FBB4C362BE0D32B +5BEA9A428692EC6585A20F11A5C73FA22D023131B1B416AC0B2F4A4C801863BB +D43B180F82391830064FBCC5A233E3ABC5B30C1FF8155C61E589604EC6C16E48 +F3C676C95C57B8E9D4305C1B1C7ECD75B3A5C7F8B8849AA1B46FDDD928D92B21 +D0B6FFBAD0B71D101EC153669E32324C497CD26093D0D2E4AA197F9D5E459C50 +709C64D20552A3B9DA9475D3658C302B5E7EAE0DAD3F9270A327A6644AF5C3FB +8338C062F33478E38E82C09510F27C2FD1FB2D304355F28B35C9EDFA0AAED925 +F2D1493BECA291483EB47FF0442C3692D29D10FA92ADF3C9AD85D5AC09D35949 +166DBEBAF7D425DBDF179F8BCF21912C5A2123E869DE9A9CEB4803F2C04414BE +45DF573DB40F5B9E42406F49862C7B23826CCCB05E76BA23BAA5A17CDA93D4EB +59569951158FC068E32ABDD8930D6C4C58A7DE1D39030E3B818E3382938F466E +47E8189A6B902AEE4798286CF0C032E0F2AD018380C904C2F4EC61ED98CCDF25 +9E2C691BE9812FD5E0CE01F2C94134C9F0C05F4B7F1260DEC20B9907E1B5D372 +8677FB4F0485ED87A3F6EA1A647072D635F7E2838649CFE37A4FF8182882BF7E +9474583F4E9D3548795E0A63D4859BD27B662D156DD893B3799371DB1BC75A38 +0F454EBF825D683CF2CBC8B308AEE9D8FF8EBB8A7DEA067AEFE8CC77331156CB +20210ADE2B5DD0A9F77BB6E98F3630800BF33915E73E515B34E58516D1AD87B5 +00A8969EE2595D2365AD69FA4F67CCAA7D243B8D03FB39CA136DC1E5FD434750 +8A329F7D11DC4D33F6A0BEC9A23E5EE1A18FD5C3640E3F30FC2D8CCE5630E618 +A273CACED00DA6F094148C5D6751DD983A2823418223E715DBE8ED167B2D1999 +650D0FD8685884BCF1D6147C162BDBBB6597DCEAED3B5CAA75F301D46F2F770A +CA1C8997E99D16CC0A58572FE1D68383D87335A38AF8C27556FF19CC421B8BE1 +8AF89CDBB98273BF4E43025A710B4ACB5D7F2C77249CF1756282B74CE43F037B +F62DEC52EA41330A2783B5E64F72392EE25FCE9A7E872F4A9AA7BB41E5368888 +6DC531A2E602696EDA1CD3DCF808F62176E9198AAE9CA8925038D41E17570FD2 +E976F627F7213AC8EE1B2BC240871B7CC1C61B81BAA031B8396536AA62A67DE7 +63FBDFCFD363DB5CE786230B302B786A859C48BBA8CC27EADB1FBC84F1059FA1 +3A02148B4CEF5DA6D90664E72DC6F3EA267E4102102F18D79FFBE4E2A642E94E +F3D9376838236476B1030A0C47D28F4E7EF6358D213AC0A95391659FE736010D +355826A83F7FBEDF3164FF177C16C41789E84F375C6FEFEA767DF654B0533E98 +A1430FEE50F41D39D41DC2ED6EA7EE1FCAB31FCE526D5556E89D36F3B402C5E1 +C0CCEAFA157772B77556AAC8F874A019EAE0A797BCF85655A7834D4DC32D388F +F3E48C0F7B338BBA1C9E949C5C0BC1A727A77FEBE57E1421FF81FE4AA81869FE +86EF313CAD75613726AB3F7508BC904A7E55F092A16D605802D36509525EE2E0 +18B8CE25A0BEC74D167F9E766E30C4EB0D7914F4DA044FD895F3A9C196E23256 +9033CF1E352E82193458B6CFD32238CC93CCBB0E05E8E6AED8CB27157BB148C5 +C644977C16D7F4FC50DA22A28CF8F945B5E0209C8D715E8E7D9D80F32FEACD13 +E6928F4BB60E9684C0F865C9D0C2EEA5EDB0A355FB16426A2405D124F3A01977 +1DE108F66E30EE01ECAA74FE0DEC9A6D485B084FA8A38EC3A59B23FD35B72F87 +ABC6B7D73EDA44DEAC4AA7285D15339EAC0B54B52FEC5B7EA723622704A3DE1C +AAD548509991E18B3AD4CAC7FCBA320ED3989A185CAFA4E22A42E1B5C209F774 +F5FDE4CF0FD23978F3C37BC3EB97A0AA9B9CBC66538FF705F8F7E2C3CD58A359 +40958DC811EBBD7F16902417BC1C97C3D409E4039E0569C6826D22923806BBCA +E601CFEB9B249597BF69BB74FA9607EA9CAC2DE0C8B958574B715D64D5E2AE19 +DF262825913DE26CB598B36E6F8168F7641A58018B9ADBF73237113B9FBB958F +1A3CF592672A51EE2463CD7F22F058597DB9C7316CCD49EFAEFB6A20646E0DDF +794C0A9DFB62A42FC95483D7F578BA3163317AEB14561F49F6E2A909B7C92370 +2592FF0614A1AAB9AC39E93A2DE2D38330AA56BD51D1FD225D0DDA8E91B94267 +127CADEC25E9769512EE28557E051F516329445C31D75E19711CEFDF77224F25 +8B590ABB3BCACF4C3620142B0401F7218BA00C67A748A2DA5F784EF53521F536 +7110D64B659B7BCD26E03F6D35A6EA3452A8F33B4A4E580AEDBC83E7D882BF65 +AACBDB77189BD88AD8A0CAB62EA74CD673A9B37AD1C40065C309BB399045594D +7BCACB882630E12489BD5E049F217C8498287D768B4D0BF904BF0BE1C6340D18 +C14229DE0AC87C1FB28EAF752A2C88FB5B80A4EA1066F11DD918A2FB2E18DBD8 +384E38D2B645EB843A019723C71FEA7C4D02621308D92FD72A10522EFB409D8B +9A5E51F4AA9D768ED428750A6F34FBFEF6FDBF163B13F6FF96450BC2DE22D65D +F7F0F5223CFD29524C61D0070228ED1113C58F48FA3154E53E67567B46F7040F +B03DAD476D4B4A2705ED9521BD22F48AE00AD101CD53BD79B7172ADBB6D4C4CD +951D9CB787F957A1177A7F967A3B867D48A74A0EFF9ACB491BAAB6C997896895 +2F3A1DCFFDC2D71659F916C1630ECE089BF7318201DAEE72972A8AFD0C69D5BE +B5DBBF85ACF39AEEEB8CD634A58D4AD84A49E75E39A5799D53DDAACB7CC08310 +23D44AEEC34D256B1C6C208CF20E986B5F52A866FBE4221FF02A77459AA91933 +4DDA62FD7070BBA306D113FFE2F96090AD748C09470FEB4FFD0CF8C72EA68FB9 +3F00F3F93A56DE5659A40ECAFEDF5E3CF327CBF8DAC7DF31F0F02EC416863D12 +2787C56399B9BE4AB5DEF7D7E185FF02521844F75C48D1ADEA4C0D8436B3A780 +8A55EB846C5CFFFC5D207B0F269DB3DAA7E06FFFAD34ED5A49BFFE73CAA09B6D +AF0C693F71CE69B77FC1378A3C4790CBE8B5546FFF134AE8CB103DD6376EF16E +03501532E3F725E58F36089E3718C635EF95FE9921EEDB08F0CFAEDDFBFB3336 +517AE8ECA540F6918563EAB9D1B5E5BFFAAADC83D0867125E2050A05EF871ED8 +CD0AAACE7D95D37065EA0C92E46115A732F468AA43FF12337839C206157A96BF +A8DFD01BFDF8E2D76E4D46C5B9AEF23193156FE4B535C6155F79149384737DB6 +BAFDB4DC69A64056EEE87A1186B137B6D9D394EB8811AADAE996D67EC403083A +86771A4CDF9AC65678A65DCF46CD1EA9CBE4C1D839CD7F166BA2CA8521F698FD +4CDEF798D360867ADC4C8FD100DC3AB3B62C5BF2527A688D3DB498AB5F407879 +970F2EF1EEBDBC4521CFCBC3E621F992F3EAD3E9737976CDB56596E661129545 +2EBE036A72F668E809D454DACA709F2C0531CCB26910652CCBF94EFC3A4B3852 +B144EB820877E7A55B33B3E9B2B1786729B0643517AD956A7A4779334D0A342A +3DD38F70100854C0B3032397BCDA640CD12C985BB2B5835AA83D442166613350 +BACB4CA9F706141A9E9EB3DFF314B1A82113CA28B74B6603D67AA2D15A36972B +1D8B0057D3D8EB92A1809023EB95762577BD753193DCAF7021366943AFF53A8B +A9ECCB74BF27EE70B1D0B73078CA5CB5AACC1BEE0A61A75981F8A0A3253035FA +1D5D6A1D47DF111693DD9A1D35D9B865C06BD05A688B0D9BC285C0EBB1DF7B2F +2CEA26CFF7583EFED470D4BF02CAE6E4CCFE5347F61F669BF8E82ECD2112E672 +86D10C529DDB600B5237C11BEE28BC3120A0E212E2ED4F52BDF6980675D7DE7C +89FBE11E19865B1C163EE5F4D410F95A434056202DB1BDD10B3A75FA3C091D5B +E3E2F888A6509E1755BFB39F9EE35AEACEDE970EAF42BBFB0D441BED621A8E20 +F504AAB0F511661754B03BFBDEE9E5D704B1FFC70E429E97B8C5651C90044269 +58BB39683838446D49507DCB70AB0DEDEFB73F05E621BC7371D21465AC659AA8 +90786F8CF2A0B0ECA4B40774D7143F92F2B0A95417C475DA5308B5BDCEC67A74 +A425CD76801FF2E115FA3A95818D088392C84FCBC00D3B3C7D683253414D4C5D +74446BBFD130AC89A0C9B68BB1CD772A1BFE8776D0772ED8C00C13C8D0412D7B +526A73A0E38885B79551DAC3E1060537C0EE8FFE574C4B9E8155E2CD83FD85BE +191BDD6ACAEE898A02717A9725196FA59E41FB45D2733CE77289FD178AF07D7A +FEF8D6BABC7DA5425A45AB8EF3C2E369432252E497B172A6FFD4D3DD957C0E26 +0D3D402EAD21FB3E404DB8082DF2ED2C300A0AEC0DA12B7FB571F415017D44E2 +57509A41CFC2284455635F50F06937D23699B43084728FCA9DD25A7264B9D1F4 +2E086976B56237887470653AC62DE323911A64507B40DBF281BB060AE635F37D +BB4F9EF7456EF62EAACAB52F0606DFA777D2965BF03D7CDA312AE654EBFA92C7 +580B7C2A2E604389152704BDF3008ED2F58200D825D0F60C7BF39AF14816B2DA +5738DE7338132B7E7E92424B7FDFB15D8E1EC176CBB7E15F3FA064CF04E357DC +72FDD1E8AF8079B1134EAE3E5CB6A7262994C71714691E8BD7CFF2676EA4D0C2 +A5FCD6C622B3B34469E3B2FCD810AE0252B2814EB02C544B0458CF12DAACAC5F +4A2E078844AC2AC74543F4763CDC6FC081073CD60E276AA6E7F1D948EFA02C23 +2FC1567CD952C837AA1ABD3E3077F5AA7F9986F01B0A9EE91C0EEA3895260CB6 +3B4EA5F58F8C8C23D42C81764E72399D2EDF40C8F18EFAF113AD16E753263943 +55EEC4F01AA885DCBCDB7C9E251210AB2B9382EE45050CC1184F592BBD65D6FD +44D9EA6BC7583CA725A1DCD28EA77A085B0A47CFCF5A847C5D29C4F64F2A17DB +BEAD7B3BA43BAF8548B65DFB4814135A2A789E7E76C978DEAE0138AF8A0AE4BD +B4D22A02C169BB0DA5215B2B91A10ED3A2A9797E5C5FBD11BB295B02C7498B13 +6D90D8CD79D4606007D408E8D336D75D42519BACFB7164C2797F0E9FCD98F178 +D82372F263BAF8B2D1F185E549BA63428E2B8DBCCDD243AD605DD10666F367C2 +3EB98C9157E068FCAB8D91AF9683EEE87A1158A562C911574136CFC172D50C4F +70BC388C728E821395579A081CC946F528CE6F3471B7615F67623F9138DF8FD0 +CAADC4E42AEBF892B36AC169C716DDA724300E9378B809DC6739929C3108A812 +F9C116118E9AE1B066E1928A4A442CE02B2D3BFE18D406AAAC1603E754224AEE +1B802E92CCDCDEF94BAA8955F389B7565AB67D73CED601FA7BFF438717EAD65B +449941F0C87F048B9186C9C78A3D43A3D4C372B5F8DA74DAE6DD2A2816E44303 +790F04C13F08E0815B43FCD837A67BF4A2A86FECB6ED6FFA56018961A0C528FB +472971A8E4C47C974DE12133616F3CBBFA20CE57B572F751649D9AE64A61F271 +0DDE783CF2509DFC2ED2CE7467574AAF79101D56D3D2664DDA30FC7DD5B5C6B7 +0BD084CA516A72E6D3F8B7FEDF0F11EF9CA594C2318EEA3CC266A2F4C2F2AC2C +AB1ABDC5F7419F46308865F1FA63CF2AF4AEBB8319372B3305AA052477ACD838 +7A35218A6CD4A7C0ADE0C3F8B005D6E30C8A208A3518C1134DC34D0E64F804A4 +258A995097F17642E97FE9CC38A34C250B8828B4FBA1840EECBD06D427FE7E10 +4EFAFEBBC934AA295E12F25D6FA3D277C7C88DA60D818A8A303364BD6B2C0288 +6E94BD8E474F28BFB951BE4ABC493AB0EA6EFF110193105DF8E9CEAE1CE549D0 +A907F7A7CF1AD20E121FA6547F93CC10D7957B36ACAF213EE436C92A00AB1A24 +540E535440938E748DAA6401133235D1CC74EC8FF80F9E297FB6C56C12B4E0A4 +D53AB28F11618F2C793F6EACB593E56B8370ED5CFF467B5FFF04AD11BC5A3AF0 +A6EF110B540CD2C87070FFCA3AA0776FF070C384BCDACB0FBD4921C06E24C8F0 +CE590D788FB8C1BCF9E083B4778818F92269C274B0CC6565E2D70FFFA2480381 +040C5CA012341D51427A59C3FC9B5121956B4323872E67BA499876052131B266 +C21F0B8B37902C7C3156FAEB668AE6A7851BC7AA62FE60D792B35B6A38183B23 +E5FB11DBBAF1E60B0D9DF0E84B9EA6F1EA6C37B84736FE657F4A29E92F7DD89D +3473C81FD7F595770BA69C91DAA3154425278D323C3E50A14FF72A02BF3820D6 +6621B91A96A1D2F76710143D41C8305E02810780D868D822DC6056DFA4690F24 +90BE5BB4F14902B97F5FB4CF31A6C8B346A76B95D82EEF610AAFF9F6B88E782C +F0E46DD18BD1CD53C92075AFEA0C1F0870DA52455847B22A638DABEA04C90ACF +0D89E8345F118E5E26A3934AC0C0C9F1269946E17F1AF5759123CE2359B60ED6 +3FB22A23380A34DF818CDA8570B36B92C4634A80AA4ABEFFFE36865AFB384DA8 +70E5CB4829052F8BEB962841C2030BBBF874EDEFE149EB8A38DE0ED59903FCBC +25788EFBB825265AFD7FF2F8D5F9A947EA94A368C52986E8640A6D6A11B14DFD +CF435B2F1F7C168D1E9C7B84B2C2D9E235DC59799B99971FE9E6D9780EAC653C +981FBDF083B949310FF20F7B383BD10737136E88B9D294677C7C63CC50A41AC1 +B4649631134034DB9FF76E0B19799396A232809A5BE397B63B528A0E860D38AD +A90BF0D4246F012E19CEABC74F21E2BD46FACF96D5F033B6023A98DA51653D59 +C306875AA02EDC3DB78060D72B0A00596BE36367A1681ECFEEFA447DB8DE6879 +18962C974B55038A8F67AA553ECD27C6C72D46CEADA75D68D7DACB40B063F9F7 +464401B0AE4CC61A1F55A7E40FBD0FEB890DD2FE36D9641E40BD2F6D20C54353 +C3B282E7F46D61EF3A41F8BCB31FA38EE2B99B671841DA2FAD644C11AE20B6F8 +C7D5D99806643412273F874273FBD04C65F048D76086EA1156F07A47CA0FE349 +391E906747C833320E84E18781C61DEA8FACB8D9DDF08D29E5983F2E1FDC8C72 +C200B63415529A45978010EA5C150BA9D70CF4F5799DA551A1CF7041A17DD5F4 +153A868BD4B81A25551784E2A6EE42996F4D6CFAED97725C940C0FE9FFE0AA31 +FB2A32941E6C555FCF33B4B8E802C40B423599C8E88C6DF1AEEC28938FCF3BAB +B6846C20D7EC7278A909073BD15BA75F470F82237BBFF6E7287A3771378A944C +8CA6215F95437DCC9EA67F7A8721FA63614CA7BC5054EF5E5716FD4B7DEFDE48 +FA8D2AF9F0B3BD92BF5F48A0DCC8406B0A940FBB5D35B56A49B7D4605A00F82D +495AEBF2B413F19FE37AECED8060D5C32E9FE0EE9C0FB14045AE87D04B92A734 +0A35DBFFE12CB1ED64C924E4ADEE0AD635BFC70CCEC92FB07B1DE13E3D14B09C +94590CE5F2F4B7D0C697F6F30E217ED09B35917714712B1182D687302770C205 +C3D17944AC1CC6AE2A023707E13DC1299256DB1211650F76A969D74F940CA580 +6B499C40B76BA77D12688A8CF75E90A19AA3E368D6C99FCF8163450CAD6EA028 +84D4E9A5279013354D9C8D7FB8BCF3FD31433C822F0A412A3115B0E5E71079F6 +60C6BBE10380872D5D75F1BE9BB6DE755103E4B376458B97E0B50BF8932940AE +F95D4002737966FF15A0B67C5B717AFF0E95B9F8F3498D7CCB538FF133A977EF +3471FCE3B83D5395F282D1982B2A6CDBD1C0DE44B3CA286E7E3F3E82B3561635 +6E462A4ABFAE8DE9331FEABA97AE7E7C93F0A30F4E3FDF4DFD66E5CBE234ADD8 +0AEFB354B80ADBDC128EAE328AF10FFDEF587B462A88F62F463D640C4F8898D4 +1AAECA8EAE36639F6CC17B68BC1F1202F462BF7CB20CBD42FF2DEC420B4A7001 +90A1F1499D49731DBC0C5DD4AADC4C32A7349219F25150117D733A0D51A7E51D +88712AF2AC91D73A906CCFFAEA98C68DB967D96DA69E38A0406F2DD149B3E771 +68D65EF65F99A4AD33BB5B15672E57433BC84C9023BA77997E82473C557D18A9 +60F7064934EDDA12E614186A092930690D2DF97E1955FA75CA3CA077EC39A561 +27FC8DCBF13DC183774AF61C2B1B65E5E4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2314,8 +2302,8 @@ @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 1[30 2[30 1[30 -30 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42 +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 @@ -2338,10 +2326,10 @@ 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 2[35 1[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 1[35 4[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 } -71 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 +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 }70 +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 @@ -2354,7 +2342,7 @@ %%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.18\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y +(3.21\))-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 @@ -2391,10 +2379,10 @@ 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-x)g(C-w)-150 3144 y Fi(cop)n(y)25 b(subtree)1052 +b Fg(M-S-RIGHT)-150 2935 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e(up) +642 b Fg(M-S-UP)-150 3004 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e +(do)n(wn)558 b Fg(M-S-DOWN)-150 3074 y Fi(kill)23 b(subtree)1097 +b Fg(C-c)36 b(C-x)g(C-w)-150 3144 y Fi(cop)n(y)25 b(subtree)1052 b Fg(C-c)36 b(C-x)g(M-w)-150 3213 y Fi(y)n(ank)25 b(subtree)1046 b Fg(C-c)36 b(C-x)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 @@ -2408,7 +2396,7 @@ 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 +b(for)e(the)i(w)n(eek)823 b Fg(C-c)36 b(a)p Fi(2)-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 -215 y Fi(rotate)25 b(the)f(state)h(of)f(the)g(curren)n(t)g(item)354 b Fg(C-c)36 @@ -2484,82 +2472,82 @@ 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 -265 y Fd(Creating)25 b(a)i(table)4242 --181 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 -111 y Fi(...)30 +-364 y Fh(T)-10 b(ables)4242 -263 y Fd(Creating)25 b(a)i(table)4242 +-178 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 -108 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 -41 y Fi(con)n(v)n(ert)25 b(region)f(to)g(table) -741 b Fg(C-c)36 b(C-c)4242 28 y Fi(...)30 b(separator)24 +b(RET)d(|-)g(TAB)4242 -39 y Fi(con)n(v)n(ert)25 b(region)f(to)g(table) +741 b Fg(C-c)36 b(C-c)4242 31 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 -113 y Fd(Commands)26 b(a)n(v)-5 b(ailable)25 b(inside)j(tables)4242 -197 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 266 +116 y Fd(Commands)26 b(a)n(v)-5 b(ailable)25 b(inside)j(tables)4242 +201 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 270 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 351 y Fd(Re-aligning)25 -b(and)i(\014eld)h(motion)4242 435 y Fi(re-align)22 b(the)i(table)g +(e)h(other)g(functionalit)n(y)-6 b(.)4242 355 y Fd(Re-aligning)25 +b(and)i(\014eld)h(motion)4242 440 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 -505 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 574 y Fi(mo)n(v)n(e)24 b(to)h(previous)e(\014eld)762 -b Fg(S-TAB)4242 644 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 728 y Fd(Ro)n(w)26 b(and)h(column)g -(editing)4242 812 y Fi(mo)n(v)n(e)d(the)h(curren)n(t)f(column)g(left) -544 b Fg(M-LEFT)4242 882 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 952 y Fi(kill)23 -b(the)h(curren)n(t)g(column)731 b Fg(M-S-LEFT)4242 1022 +510 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 579 y Fi(mo)n(v)n(e)24 b(to)h(previous)e(\014eld)762 +b Fg(S-TAB)4242 649 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 734 y Fd(Ro)n(w)26 b(and)h(column)g +(editing)4242 819 y Fi(mo)n(v)n(e)d(the)h(curren)n(t)f(column)g(left) +544 b Fg(M-LEFT)4242 888 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 958 y Fi(kill)23 +b(the)h(curren)n(t)g(column)731 b Fg(M-S-LEFT)4242 1028 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 1106 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 1176 y Fi(mo)n(v)n(e)24 +104 b Fg(M-S-RIGHT)4242 1112 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 1182 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 -1245 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 1315 y Fi(insert)23 b(new)i(ro)n(w)e(ab)r(o) +1252 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 1322 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 -1399 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 1469 y +1391 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 1461 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 1553 y Fd(Regions)4242 -1637 y Fi(cut)25 b(rectangular)f(region)758 b Fg(C-c)36 -b(C-x)g(C-w)4242 1707 y Fi(cop)n(y)25 b(rectangular)f(region)715 -b Fg(C-c)36 b(C-x)g(M-w)4242 1777 y Fi(paste)25 b(rectangular)f(region) -695 b Fg(C-c)36 b(C-x)g(C-y)4242 1847 y Fi(\014ll)23 -b(paragraph)h(across)g(selected)h(cells)399 b Fg(C-c)36 -b(C-q)4242 1931 y Fd(Calculations)4242 2015 y Fi(Except)31 -b(for)e(the)i(summation)f(commands,)h(these)g(need)g(the)g(Emacs)4242 -2085 y(calc)24 b(pac)n(k)l(age)i(installed.)4242 2169 -y(set)e(and)g(ev)l(al)g(column)g(form)n(ula)567 b Fg(C-c)36 -b(=)4242 2239 y Fi(set)24 b(and)g(ev)l(al)g(named-\014eld)h(form)n(ula) -433 b Fg(C-u)36 b(C-c)g(=)4242 2308 y Fi(edit)24 b(form)n(ulas)f(in)g -(separate)i(bu\013er)473 b Fg(C-c)36 b(')4242 2378 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 2448 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 -2532 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 -2602 y(starting)d(with:)31 b Fg(|)36 b(#)f(|)p Fi(.)4242 -2686 y(rotate)25 b(calculation)g(mark)e(through)i(#)e(*)h(!)31 -b(^)p 5487 2686 22 4 v 49 w($)115 b Fg(C-#)4242 2770 -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 2840 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 2924 -y Fi(cop)n(y)25 b(do)n(wn)f(with)g(incremen)n(t)625 b -Fg(S-RET)5857 2900 y Ff(4)4242 3008 y Fi(A)25 b(form)n(ula)f(can)i +(t)f(ro)n(w)100 b Fg(C-u)36 b(C-c)g(-)4242 1531 y Fi(sort)24 +b(lines)f(in)g(region)867 b Fg(C-c)36 b(^)4242 1616 y +Fd(Regions)4242 1700 y Fi(cut)25 b(rectangular)f(region)758 +b Fg(C-c)36 b(C-x)g(C-w)4242 1770 y Fi(cop)n(y)25 b(rectangular)f +(region)715 b Fg(C-c)36 b(C-x)g(M-w)4242 1840 y Fi(paste)25 +b(rectangular)f(region)695 b Fg(C-c)36 b(C-x)g(C-y)4242 +1910 y Fi(\014ll)23 b(paragraph)h(across)g(selected)h(cells)399 +b Fg(C-c)36 b(C-q)4242 1994 y Fd(Calculations)4242 2079 +y Fi(These)24 b(need)h(the)f(Emacs)g(calc)g(pac)n(k)l(age)i(installed.) +4242 2164 y(set)e(and)g(ev)l(al)g(column)g(form)n(ula)567 +b Fg(C-c)36 b(=)4242 2234 y Fi(set)24 b(and)g(ev)l(al)g(named-\014eld)h +(form)n(ula)433 b Fg(C-u)36 b(C-c)g(=)4242 2303 y Fi(edit)24 +b(form)n(ulas)f(in)g(separate)i(bu\013er)473 b Fg(C-c)36 +b(')4242 2373 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 2443 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 2527 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 2597 y(starting)d(with:)31 b Fg(|)36 +b(#)f(|)p Fi(.)4242 2682 y(rotate)25 b(calculation)g(mark)e(through)i +(#)e(*)h(!)31 b(^)p 5487 2682 22 4 v 49 w($)115 b Fg(C-#)4242 +2767 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 2836 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 +2921 y Fi(cop)n(y)25 b(do)n(wn)f(with)g(incremen)n(t)625 +b Fg(S-RET)5857 2897 y Ff(4)4242 3005 y Fi(A)25 b(form)n(ula)f(can)i (also)f(b)r(e)h(t)n(yp)r(ed)g(directly)g(in)n(to)f(in)n(to)h(a)f -(\014eld)g(and)h(will)4242 3078 y(executed)31 b(b)n(y)e +(\014eld)g(and)h(will)4242 3075 y(executed)31 b(b)n(y)e Fg(TAB)p Fi(,)h Fg(RET)g Fi(and)f Fg(C-c)36 b(C-c)p Fi(.)47 b(A)28 b(leading)h Fg(=)g Fi(in)n(tro)r(duces)h(a)4242 -3148 y(column)24 b(form)n(ula,)e Fg(:=)j Fi(a)e(named-\014eld)i(form)n -(ula.)4242 3232 y(Example:)31 b(Add)24 b(Col1)g(and)g(Col2)522 -b Fg(=$1+$2)4242 3301 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 3371 y Fi(...)30 +3145 y(column)24 b(form)n(ula,)e Fg(:=)j Fi(a)e(named-\014eld)i(form)n +(ula.)4242 3230 y(Example:)31 b(Add)24 b(Col1)g(and)g(Col2)522 +b Fg(=$1+$2)4242 3299 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 3369 y Fi(...)30 b(with)24 b(constan)n(ts)h(from)e(constan)n(ts.el)352 -b Fg(=$1/$c/$cm)4242 3441 y Fi(sum)23 b(from)g(3rd)h(hline)f(ab)r(o)n -(v)n(e)i(to)f(here)411 b Fg(:=vsum\(&III\))4242 3511 +b Fg(=$1/$c/$cm)4242 3439 y Fi(sum)23 b(from)g(3rd)h(hline)f(ab)r(o)n +(v)n(e)i(to)f(here)411 b Fg(:=vsum\(&III\))4242 3508 y Fi(apply)24 b(curren)n(t)g(column)g(form)n(ula)518 -b Fg(=)4242 3595 y Fd(Miscellaneous)4242 3679 y Fi(toggle)25 +b Fg(=)4242 3593 y Fd(Miscellaneous)4242 3678 y Fi(toggle)25 b(visibilit)n(y)d(of)i(v)n(ertical)g(lines)474 b Fg(C-c)36 -b(|)4242 3749 y Fi(exp)r(ort)25 b(as)e(tab-separated)j(\014le)370 -b Fg(M-x)36 b(org-table-export)4242 3819 y Fi(imp)r(ort)23 +b(|)4242 3748 y Fi(exp)r(ort)25 b(as)e(tab-separated)j(\014le)370 +b Fg(M-x)36 b(org-table-export)4242 3817 y Fi(imp)r(ort)23 b(tab-separated)j(\014le)447 b Fg(M-x)36 b(org-table-import)4242 -3903 y Fd(T)-7 b(ables)27 b(created)f(with)h(the)g Fg(table.el)i +3902 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 @@ -2569,65 +2557,67 @@ %%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.18\))-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 +(3.21\))-150 -46 y Fh(Timeline)37 b(and)g(Agenda)-150 +101 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 170 y Fi(...)30 b(include)24 b(past)h(dates)793 +b Fg(C-u)36 b(C-c)g(C-r)-150 267 y Fi(add/mo)n(v)n(e)25 +b(curren)n(t)f(\014le)g(to)g(fron)n(t)g(of)f(agenda)197 +b Fg(C-c)36 b([)-150 336 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 406 +y Fi(cycle)24 b(through)h(agenda)g(\014le)f(list)551 +b Fg(C-,)-150 487 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 463 y Ff(2)-150 556 +y Fi(agenda)25 b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 +b(C-o)-150 687 y Fi(T)-6 b(o)24 b(set)g(category)h(for)e(curren)n(t)h +(\014le,)g(add)g(line)1082 663 y Ff(3)1119 687 y Fi(:)-150 +759 y Fg(#+CATEGORY:)38 b(MyCateg)-150 856 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 +952 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 +1022 y(mands.)-150 1118 y Fd(View)e(org)f(\014le)-150 +1214 y Fi(sho)n(w)e(original)f(lo)r(cation)h(of)g(item)524 +b Fg(SPC)-150 1284 y Fi(...)30 b(also)24 b(a)n(v)l(ailable)g(with)781 +b Fg(mouse-3)-150 1353 y Fi(sho)n(w)24 b(and)g(recen)n(ter)h(windo)n(w) +626 b Fg(l)-150 1423 y Fi(goto)25 b(original)e(lo)r(cation)h(in)g +(other)g(windo)n(w)260 b Fg(TAB)-150 1493 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 +1563 y Fi(goto)25 b(original)e(lo)r(cation,)h(delete)h(other)f(windo)n +(ws)91 b Fg(RET)-150 1632 y Fi(toggle)25 b(follo)n(w-mo)r(de)861 +b Fg(f)-150 1729 y Fd(Change)27 b(displa)n(y)-150 1825 +y Fi(delete)e(other)f(windo)n(ws)791 b Fg(o)-150 1895 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 +1964 y Fi(switc)n(h)24 b(to)g(daily)g(view)822 b Fg(d)-150 +2034 y Fi(toggle)25 b(inclusion)e(of)h(diary)f(en)n(tries)473 +b Fg(D)-150 2104 y Fi(toggle)25 b(time)f(grid)f(for)g(daily)g(sc)n +(hedule)388 b Fg(g)-150 2174 y Fi(refresh)23 b(agenda)i(bu\013er)f +(with)g(an)n(y)g(c)n(hanges)239 b Fg(r)-150 2243 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 +2313 y Fi(displa)n(y)24 b(the)g(previous)g Fg(org-agenda-ndays)238 +b(LEFT)-150 2383 y Fi(goto)25 b(to)r(da)n(y)1110 b Fg(.)-150 +2479 y Fd(Remote)27 b(editing)-150 2575 y Fi(digit)d(argumen)n(t)984 +b Fg(0-9)-150 2671 y Fi(c)n(hange)25 b(state)g(of)f(curren)n(t)g(TODO)f +(item)333 b Fg(t)-150 2741 y Fi(set)24 b(priorit)n(y)f(of)g(curren)n(t) +i(item)612 b Fg(p)-150 2823 y Fi(raise)23 b(priorit)n(y)g(of)g(curren)n +(t)i(item)557 b Fg(S-UP)1430 2800 y Ff(4)-150 2904 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 Fg(S-DOWN)1500 2880 y Ff(4)-150 2974 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 +b Fg(P)-150 3080 y Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h +(earlier)315 b Fg(S-LEFT)1500 3057 y Ff(4)-150 3161 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 +b Fg(S-RIGHT)1535 3137 y Ff(4)-150 3231 y Fi(c)n(hange)25 +b(timestamp)g(to)f(to)r(da)n(y)598 b Fg(>)-150 3327 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 +Fg(i)-150 3423 y Fd(Calendar)26 b(commands)-150 3519 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 +b Fg(c)-150 3589 y Fi(compute)25 b(agenda)g(for)e(calendar)i(cursor)e +(date)180 b Fg(c)-150 3659 y Fi(sho)n(w)24 b(phases)g(of)f(the)i(mo)r +(on)669 b Fg(M)-150 3728 y Fi(sho)n(w)24 b(sunrise/sunset)g(times)636 +b Fg(S)-150 3798 y Fi(sho)n(w)24 b(holida)n(ys)1014 b +Fg(H)-150 3868 y Fi(con)n(v)n(ert)25 b(date)g(to)f(other)g(calendars) +478 b Fg(C)-150 3964 y Fd(Quit)27 b(and)g(Exit)-150 4060 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 +b Fg(q)-150 4130 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 -229 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 @@ -2642,8 +2632,8 @@ b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 306 y Fi(exp)r(ort)25 b(as)e(iCalendar)h(\014le)718 b Fg(C-c)36 b(C-x)g(i)2046 376 y Fi(exp)r(ort)25 b(all)e(agenda)i(\014les)e(as)h(iCalendar)f -(\014les)212 b Fg(C-c)36 b(C-x)g(C-i)2046 445 y Fi(compine)24 -b(all)f(agenda)j(\014les)d(to)h(single)g(iCal)f(\014le)161 +(\014les)212 b Fg(C-c)36 b(C-x)g(C-i)2046 445 y Fi(com)n(bine)24 +b(all)f(agenda)j(\014les)d(to)h(single)g(iCal)f(\014le)163 b Fg(C-c)36 b(C-x)g(C-c)2046 538 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 632 y Fi(toggle)25 b(\014xed)f(width)g(for)f(en)n(try)h(or)g(region)295 @@ -2760,7 +2750,7 @@ 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.18)h(for)h(Org-Mo)r(de)e(3.18,)i(2005)4912 3882 +y(v3.21)h(for)h(Org-Mo)r(de)e(3.21,)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
--- a/etc/orgcard.tex Wed Nov 23 01:35:21 2005 +0000 +++ b/etc/orgcard.tex Sat Dec 03 14:25:50 2005 +0000 @@ -1,4 +1,4 @@ -% Reference Card for Org Mode 3.20 +% Reference Card for Org Mode 3.21 % %**start of header \newcount\columnsperpage @@ -58,7 +58,7 @@ % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik % for their many good ideas. -\def\orgversionnumber{3.20} +\def\orgversionnumber{3.21} \def\year{2005} \def\shortcopyrightnotice{\vskip 1ex plus 2 fill @@ -313,8 +313,8 @@ \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{move subtree/list item up}{M-S-UP} +\key{move subtree/list item down}{M-S-DOWN} \key{kill subtree}{C-c C-x C-w} \key{copy subtree}{C-c C-x M-w} \key{yank subtree}{C-c C-x C-y}
--- a/lisp/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,465 @@ +2005-12-01 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-ann3): Bind mouse-2 to gdb-mouse-until + in the margin also. + (gdb-breakpoints-mode-map): Use D instead of d for + gdb-delete-breakpoint. + (gdb-get-frame-number): Require a number to match on. + (gdb-threads-mode-map): Add follow-link binding. + +2005-11-30 Jason Rumney <jasonr@gnu.org> + + * isearch.el (isearch-mode-map): Avoid exiting search on + language-change event. + +2005-11-30 Romain Francoise <romain@orebokech.com> + + * speedbar.el (speedbar-default-position): New defcustom. + (speedbar-frame-reposition-smartly): Use it. + + * dframe.el (dframe-reposition-frame-emacs): Fix position + computation for 'left location. + Update copyright year. + +2005-11-30 Stefan Monnier <monnier@iro.umontreal.ca> + + * help.el (help-map): Move initialization into declaration. + + * emacs-lisp/autoload.el (make-autoload): Handle defgroup specially. + + * help-fns.el (help-argument-name): Don't autoload. + It's useless and triggers a bug in cus-dep.el causing ldefs-boot + to be re-loaded when customizing the `help' group. + +2005-11-30 John Paul Wallington <jpw@gnu.org> + + * help-fns.el (describe-function-1): Fill arglist output. + +2005-11-30 Kim F. Storm <storm@cua.dk> + + * emulation/cua-rect.el (cua--rectangle-overlays): Make permanent-local. + (cua--rectangle-post-command): Cleanup overlays and deactivate mark + after revert-buffer (or anything else which kills all local variables). + + * apropos.el (apropos-parse-pattern): Doc fix. + Set apropos-regexp directly, rather than expecting callers to do so. + (apropos-command, apropos, apropos-value, apropos-documentation): + Simplify calls to apropos-parse-pattern. + +2005-11-29 Chong Yidong <cyd@stupidchicken.com> + + * hi-lock.el (hi-lock-line-face-buffer, hi-lock-face-buffer) + (hi-lock-face-phrase-buffer): Use hi-yellow face. + (hi-lock-write-interactive-patterns): Use comment-region. + + * longlines.el (longlines-mode): Add mail-setup-hook. + + * mail/mailheader.el, mail/sendmail.el: Revert 2005-11-17 changes. + + * simple.el (sendmail-user-agent-compose, next-line): + Conditionally use hard-newline. + +2005-11-29 Reiner Steib <Reiner.Steib@gmx.de> + + * international/latexenc.el (latex-inputenc-coding-alist): + Reword doc string. + +2005-11-29 Chong Yidong <cyd@stupidchicken.com> + + * help.el (describe-key-briefly, describe-key): Recognize default + bindings. + +2005-11-29 Romain Francoise <romain@orebokech.com> + + * view.el (view-inhibit-help-message): New defcustom. + (view-mode-enter): Use it. + +2005-11-29 Michael Kifer <kifer@cs.stonybrook.edu> + + * ediff-wind (ediff-setup-control-frame, ediff-make-wide-display): + Preserve user position. + +2005-11-28 Luc Teirlinck <teirllm@auburn.edu> + + * font-lock.el: Throw error if facemenu is not loaded to prevent + accidental change of loading order in loadup.el. (Suggested by RMS.) + + * loadup.el: Add comment explaining why facemenu must be loaded + before font-lock. + +2005-11-28 Jay Belanger <belanger@truman.edu> + + * calc/calc.el: Change global keybinding for calc-dispatch to "\C-x*". + (calc-dispatch-map): Add more keys for `calc-same-interface'. + + * calc/calc-misc.el (calc-dispatch-help): Update docstring. + + * calc/calc-embed.el (calc-do-embedded): Update help message. + + * calc/calc-prog.el (calc-user-define-invokation): Update help message. + +2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca> + + * log-edit.el (log-edit-insert-cvs-rcstemplate): Ignore stderr. + + * emacs-lisp/elp.el (elp-not-profilable): Replace interactive-p with + called-interactively-p. + (elp-profilable-p): Rename from elp-not-profilable-p. + Invert result and take into account macros and autoloaded functions. + (elp-instrument-function): Update call. + (elp-instrument-package): Update call. Add completion. + (elp-pack-number): Use match-string. + (elp-results-jump-to-definition-by-mouse): Merge into + elp-results-jump-to-definition and then remove. + (elp-output-insert-symname): Make help echo text single-line. + + * replace.el (query-replace-map): Move initialization into declaration. + (occur-engine): Use with-current-buffer. + (occur-mode-goto-occurrence): Make it work for mouse-clicks as well. + (occur-mode-mouse-goto): Replace with an alias. + +2005-11-28 Juri Linkov <juri@jurta.org> + + * simple.el (quoted-insert): Let-bind input-method-function to nil. + + * term/w32-win.el: Bind [S-tab] to [backtab]. + + * info.el (Info-fontify-node): Set 2nd arg `noerror' of + `Info-find-file' to t. + + * replace.el (occur-mode-mouse-goto): Pop, don't switch. + (occur-mode-goto-occurrence): Let-bind same-window-buffer-names + and same-window-regexps. + (occur-next-error): Don't move point for arg 0. + +2005-11-28 Chong Yidong <cyd@stupidchicken.com> + + * replace.el (occur-mode-goto-occurrence): Pop, don't switch. + +2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca> + + * log-edit.el (log-edit-changelog-use-first): New var. + (log-edit-changelog-ours-p): Use it. + (log-edit-insert-changelog): Set it with new arg `use-first'. + (log-edit-insert-cvs-rcstemplate, log-edit-insert-filenames): New funs. + (log-edit-hook): Add them to the list of suggested options. + + * textmodes/flyspell.el (flyspell-last-buffer): New var. + (flyspell-accept-buffer-local-defs): Use it to avoid doing silly + redundant work. + (flyspell-mode-on): Use add-hook for after-change-functions. + (flyspell-mode-off): Use remove-hook for after-change-functions. + (flyspell-changes): Make it buffer-local. + (flyspell-after-change-function): Make it non-interactive. Use push. + (flyspell-post-command-hook): Check input-pending-p while processing + the potentially long list of buffer changes. + +2005-11-28 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu> + + * buff-menu.el (list-buffers-noselect): Display the selected + frame's buffer list, not the global one. + +2005-11-28 Nick Roberts <nickrob@snap.net.nz> + + * xt-mouse.el (xterm-mouse-event): Set last-input-event so + that (list last-input-event) works as in interactive spec. + +2005-11-27 Luc Teirlinck <teirllm@auburn.edu> + + * loadup.el ("facemenu"): Load facemenu before font-lock, because + `facemenu-keymap' needs to be defined when font-lock is loaded. + Otherwise, `M-o M-o' is not bound to `font-lock-fontify-block'. + +2005-11-27 Stefan Monnier <monnier@iro.umontreal.ca> + + * completion.el: Remove useless leading * in defcustom docstrings. + (save-completions-file-name): Use ~/.emacs.d if available. + (completion-standard-syntax-table): Rename from + cmpl-standard-syntax-table and fold initialization into declaration, + thus removing cmpl-make-standard-completion-syntax-table. + (completion-lisp-syntax-table, completion-c-syntax-table) + (completion-fortran-syntax-table, completion-c-def-syntax-table): Idem. + (cmpl-saved-syntax, cmpl-saved-point): Remove. + (symbol-under-point, symbol-before-point) + (symbol-under-or-before-point, symbol-before-point-for-complete) + (add-completions-from-c-buffer): Use with-syntax-table. + (make-completion): Don't return a list of completion entries. + Update callers. + (cmpl-prefix-entry-head, cmpl-prefix-entry-tail): Use defalias. + (completion-initialize): Rename from initialize-completions. + (completion-find-file-hook): Rename from cmpl-find-file-hook. + (kill-emacs-save-completions): Collect stats here. + (save-completions-to-file, load-completions-from-file): + Use with-current-buffer. + (completion-def-wrapper): Rename from def-completion-wrapper. Make it + into a function. Move all calls to toplevel. + (completion-lisp-mode-hook): New fun. + (completion-c-mode-hook, completion-setup-fortran-mode): + Set the syntax-table here. Use local-set-key. + (completion-saved-bindings): New var. + (dynamic-completion-mode): Make it into a proper minor mode. + (load-completions-from-file): Remove unused var `num-uses'. + + * emacs-lisp/cl-macs.el (defstruct): Don't define the default + constructor if it is explicitly overridden. + + * complete.el (PC-completion-as-file-name-predicate): + Use minibuffer-completing-file-name. + (partial-completion-mode): Use find-file-not-found-functions. + (PC-lisp-complete-symbol): Use with-syntax-table. + (PC-look-for-include-file): Remove dead setq. + (PC-look-for-include-file, PC-expand-many-files, PC-do-completion) + (PC-complete): Use with-current-buffer. + + * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): \ doesn't + escape single quotes. + +2005-11-27 Luc Teirlinck <teirllm@auburn.edu> + + * dabbrev.el (dabbrev-completion): Simplify code, by getting rid + of `if' whose condition always returned nil. Doc fix. + + * buff-menu.el (Buffer-menu-revert-function): Make the selected + window's buffer the current buffer around the call to + `list-buffers-noselect'. This is necessary to mark that buffer + with a `.' in the Buffer Menu when called from Lisp, for instance + by Auto Revert Mode. + +2005-11-28 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-stopped): Detect child process when + attaching to it. + (gdb-pre-prompt): Make sure gdb-error is reset. + + * progmodes/gud.el (gud-gdb-marker-filter): When GDB is invoked + with a child process, detect it. + (gud-speedbar-buttons): Match regexp more carefully. + +2005-11-27 Richard M. Stallman <rms@gnu.org> + + * mouse.el (mouse-drag-move-window-bottom): + Use adjust-window-trailing-edge. + +2005-11-27 Luc Teirlinck <teirllm@auburn.edu> + + * simple.el (blink-matching-open): Ignore + `blink-matching-paren-on-screen' if `show-paren-mode' is enabled. + (blink-matching-paren-on-screen): Update docstring. + + * paren.el (show-paren-mode): No longer change + `blink-matching-paren-on-screen'. + +2005-11-27 John Paul Wallington <jpw@pobox.com> + + * progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select) + (gdb-threads-select, gdb-edit-register-value): + Use `posn-set-point' instead of `mouse-set-point' because the + latter is not fbound when configured without X. + +2005-11-27 Kim F. Storm <storm@cua.dk> + + * emulation/cua-rect.el (cua--highlight-rectangle): Preserve + existing face when partially highlighting a TAB in a rectangle. + +2005-11-26 Kim F. Storm <storm@cua.dk> + + * ido.el (ido-mode-map): Doc fix. + (ido-mode-common-map, ido-mode-file-map) + (ido-mode-file-dir-map, ido-mode-buffer-map): New keymaps. + (ido-define-mode-map): Rewrite. Select one of the new maps as + parent for ido-mode-map instead of building from scratch. + (ido-init-mode-maps): New defun to initialize new maps. + (ido-mode): Call it. + (ido-switch-buffer): Doc fix -- use \<ido-mode-buffer-map>. + (ido-find-file): Doc fix -- use \<ido-mode-file-map>. + +2005-11-26 John Paul Wallington <jpw@pobox.com> + + * arc-mode.el (archive-extract): Use `posn-set-point' instead of + `mouse-set-point' because the latter is not fbound when configured + without X. + +2005-11-26 Thien-Thi Nguyen <ttn@gnu.org> + + * files.el (file-relative-name): Doc fix. + +2005-11-26 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at> + + * progmodes/octave-inf.el (inferior-octave-startup): Force a + non-empty string for secondary prompt PS2. + +2005-11-25 Chong Yidong <cyd@stupidchicken.com> + + * progmodes/compile.el (compilation-setup): Fix last change. + +2005-11-26 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-info-breakpoints-custom) + (gdb-mouse-toggle-breakpoint-margin) + (gdb-mouse-toggle-breakpoint-fringe, gdb-threads-select): + Add gdb-server-prefix to keep out of command history. + (gdb-edit-register-value): New function. + (gdb-registers-mode-map): Bind mouse-2 and RET to it. + (gdb-info-registers-custom): Use above map. + +2005-11-25 Chong Yidong <cyd@stupidchicken.com> + + * custom.el (enable-theme): Signal error if argument is not a + theme. Don't recalculate a face if it's not loaded yet. + + * cus-face.el (custom-theme-set-faces): Don't change saved-face if + the `user' theme is in effect. + + * info.el (Info-on-current-buffer): Record actual filename in + Info-current-file, instead of t, or a fake filename if a non-file + buffer. Make autoload. + (Info-find-node, Info-revert-find-node): No need to check for + Info-current-file nil. + (Info-set-mode-line, Info-up, Info-copy-current-node-name): + Info-current-file is now never `t'. + (Info-fontify-node): Many simplifications due to Info-current-file + always being valid. Use Info-find-file to find node filename. + +2005-11-25 David Kastrup <dak@gnu.org> + + * longlines.el (longlines-wrap-line): Reorder wrapping to "insert + new character, then delete" in order to preserve markers. + +2005-11-25 David Ponce <david@dponce.com> + + * recentf.el (recentf-arrange-by-rule): Handle a special + `auto-mode-alist'-like "strip suffix" rule. + (recentf-build-mode-rules): Handle second level auto-mode entries. + +2005-11-25 Michael Kifer <kifer@cs.stonybrook.edu> + + * viper-keym.el (viper-ESC-key): Use different values in terminal and + window modes. + + * viper.el (viper-emacs-state-mode-list): Delete mail-mode, add + jde-javadoc-checker-report-mode. + + * ediff-wind (ediff-make-wide-display): Slight simplification. + + * ediff.el (ediff-date): Change the date of last update. + +2005-11-24 Chong Yidong <cyd@stupidchicken.com> + + * hi-lock.el (hi-lock-buffer-mode): Renamed from `hi-lock-mode'. + Use define-minor-mode, and make it a local mode. Turn on font-lock. + (hi-lock-mode): New global minor mode. + (turn-on-hi-lock-if-enabled): New function. + (hi-lock-line-face-buffer, hi-lock-face-buffer, hi-lock-set-pattern): + Change arguments to regexp and face instead of a font-lock pattern. + Directly set face property, instead of refontifying. + (hi-lock-font-lock-hook): Check if font-lock is being turned on. + (hi-lock-find-patterns): Use line-number-at-pos. + + (hi-lock-face-phrase-buffer): Call hi-lock-buffer-mode. Use new + arguments for hi-lock-set-pattern. + (hi-lock-unface-buffer, hi-lock-set-file-patterns): Call + font-lock-fontify-buffer. + (hi-lock-find-file-hook, hi-lock-current-line) + (hi-lock-refontify, hi-lock-set-patterns): Delete unused functions. + + (hi-lock-font-lock-hook): Turn off hi-lock when font lock is + turned off. + + * progmodes/compile.el (compilation-setup): Don't fiddle with + font-lock-defaults. + +2005-11-25 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-var-create-handler) + (gdb-var-list-children-handler): Find values for all variable + objects. gud-speedbar-buttons decides whether to display them. + +2005-11-24 Romain Francoise <romain@orebokech.com> + + * info.el (Info-speedbar-fetch-file-nodes): Prefix temporary + buffer name with a space. + +2005-11-24 Carsten Dominik <dominik@science.uva.nl> + + * textmodes/org.el: (org-export-plain-list-max-depth): Renamed from + `org-export-local-list-max-depth'. Change default value to 3. + (org-auto-renumber-ordered-lists) + (org-plain-list-ordered-item-terminator): New options. + (org-at-item-p, org-beginning-of-item, org-end-of-item) + (org-get-indentation, org-get-string-indentation) + (org-maybe-renumber-ordered-list, org-renumber-ordered-list): New + functions. + (org-move-item-down, org-move-item-up): New commands. + (org-export-as-html): New classes for CSS support. Bug fix in + regular expression detecting fixed-width regions. Respect + `org-local-list-ordered-item-terminator'. + (org-set-autofill-regexps, org-adaptive-fill-function): "1)" is + also a list item. + (org-metaup, org-metadown, org-shiftmetaup, org-shiftmetadown): + New item moving functions. + +2005-11-24 Juri Linkov <juri@jurta.org> + + * isearch.el (isearch-repeat): With empty search ring set + `isearch-error' to the error string instead of signaling error + with the function `error'. + +2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * term/mac-win.el: Make modifier `ctrl' an alias for `control'. + +2005-11-24 Nick Roberts <nickrob@snap.net.nz> + + * progmodes/gdb-ui.el (gdb-speedbar-auto-raise): New function + and variable. + (gdb-var-create-handler, gdb-var-list-children-handler): + Don't match on "char **...". + (gdb-var-update-handler): Find values for all variable objects. + (gdb-info-frames-custom): Identify frames by leading "#". + + * progmodes/gud.el (gud-speedbar-menu-items): Add + gdb-speedbar-auto-raise as radio button. + (gud-speedbar-buttons): Raise speedbar if requested. + Don't match on "char **...". + (gud-speedbar-buttons): Add (pointer) value for non-leaves. + Make it editable. + +2005-11-23 Chong Yidong <cyd@stupidchicken.com> + + * info.el (Info-fontify-node): Handle the case where + Info-current-file is t. + +2005-11-23 Stefan Monnier <monnier@iro.umontreal.ca> + + * simple.el (blink-matching-open): Fix off-by-one in last change. + +2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * term/mac-win.el: Don't change default directory. + +2005-11-22 Luc Teirlinck <teirllm@auburn.edu> + + * cus-edit.el (Custom-reset-standard): Make it handle Custom group + buffers correctly. (It used to throw an error in such buffers.) + Make it ask for confirmation in group buffers and other Custom + buffers containing more than one customization item. + +2005-11-22 John Paul Wallington <jpw@gnu.org> + + * net/goto-addr.el (goto-address-fontify): Put `follow-link' + property on mail and url overlays. + (goto-address-at-point): Use `posn-set-point' instead of + `mouse-set-point' because the latter is not fbound when configured + without X. + +2005-11-22 Lars Hansen <larsh@soem.dk> + + * ls-lisp.el (ls-lisp-parse-symlink): Delete. + (ls-lisp-classify, ls-lisp-format): Delete call to + ls-lisp-parse-symlink. + (ls-lisp-handle-switches): Handle symlinks to directories as + directories when ls-lisp-dirs-first in non-nil. + 2005-11-21 Luc Teirlinck <teirllm@auburn.edu> * startup.el (command-line): Make sure that loaddefs.el is handled @@ -37,6 +499,12 @@ * faces.el: Revert 2005-11-17 change. :ignore-defface is now handled automagically. +2005-11-20 Andreas Schwab <schwab@suse.de> + + * descr-text.el (describe-char): When copying overlays put them + over the full char description instead of just the first character + of it. + 2005-11-20 Juri Linkov <juri@jurta.org> * simple.el (what-cursor-position):
--- a/lisp/apropos.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/apropos.el Sat Dec 03 14:25:50 2005 +0000 @@ -301,7 +301,9 @@ (defun apropos-parse-pattern (pattern) "Rewrite a list of words to a regexp matching all permutations. -If PATTERN is a string, that means it is already a regexp." +If PATTERN is a string, that means it is already a regexp. +This updates variables `apropos-pattern', `apropos-pattern-quoted', +`apropos-regexp', `apropos-words', and `apropos-all-words-regexp'." (setq apropos-words nil apropos-all-words nil) (if (consp pattern) @@ -325,11 +327,14 @@ (setq syn (cdr syn)))) (setq apropos-words (cons s apropos-words) apropos-all-words (cons a apropos-all-words)))) - (setq apropos-all-words-regexp (apropos-words-to-regexp apropos-all-words ".+")) - (apropos-words-to-regexp apropos-words ".*?")) + (setq apropos-all-words-regexp + (apropos-words-to-regexp apropos-all-words ".+")) + (setq apropos-regexp + (apropos-words-to-regexp apropos-words ".*?"))) (setq apropos-pattern-quoted (regexp-quote pattern) apropos-all-words-regexp pattern - apropos-pattern pattern))) + apropos-pattern pattern + apropos-regexp pattern))) (defun apropos-calc-scores (str words) @@ -442,7 +447,7 @@ (if (or current-prefix-arg apropos-do-all) "command or function" "command")) current-prefix-arg)) - (setq apropos-regexp (apropos-parse-pattern pattern)) + (apropos-parse-pattern pattern) (let ((message (let ((standard-output (get-buffer-create "*Apropos*"))) (print-help-return-message 'identity)))) @@ -508,7 +513,7 @@ time-consuming. Returns list of symbols and documentation found." (interactive (list (apropos-read-pattern "symbol") current-prefix-arg)) - (setq apropos-regexp (apropos-parse-pattern pattern)) + (apropos-parse-pattern pattern) (apropos-symbols-internal (apropos-internal apropos-regexp (and (not do-all) @@ -577,7 +582,7 @@ Returns list of symbols and values found." (interactive (list (apropos-read-pattern "value") current-prefix-arg)) - (setq apropos-regexp (apropos-parse-pattern pattern)) + (apropos-parse-pattern pattern) (or do-all (setq do-all apropos-do-all)) (setq apropos-accumulator ()) (let (f v p) @@ -623,7 +628,7 @@ Returns list of symbols and documentation found." (interactive (list (apropos-read-pattern "documentation") current-prefix-arg)) - (setq apropos-regexp (apropos-parse-pattern pattern)) + (apropos-parse-pattern pattern) (or do-all (setq do-all apropos-do-all)) (setq apropos-accumulator () apropos-files-scanned ()) (let ((standard-input (get-buffer-create " apropos-temp"))
--- a/lisp/arc-mode.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/arc-mode.el Sat Dec 03 14:25:50 2005 +0000 @@ -895,7 +895,7 @@ (defun archive-extract (&optional other-window-p event) "In archive mode, extract this entry of the archive into its own buffer." (interactive (list nil last-input-event)) - (if event (mouse-set-point event)) + (if event (posn-set-point (event-end event))) (let* ((view-p (eq other-window-p 'view)) (descr (archive-get-descr)) (ename (aref descr 0))
--- a/lisp/buff-menu.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/buff-menu.el Sat Dec 03 14:25:50 2005 +0000 @@ -210,7 +210,12 @@ (prop (point-min)) ;; do not make undo records for the reversion. (buffer-undo-list t)) - (list-buffers-noselect Buffer-menu-files-only) + ;; We can be called by Auto Revert Mode with the "*Buffer Menu*" + ;; temporarily the current buffer. Make sure that the + ;; interactively current buffer is correctly identified with a `.' + ;; by `list-buffers-noselect'. + (with-current-buffer (window-buffer) + (list-buffers-noselect Buffer-menu-files-only)) (if oline (while (setq prop (next-single-property-change prop 'buffer)) (when (eq (get-text-property prop 'buffer) oline) @@ -717,7 +722,7 @@ (if (memq c '(?\n ?\s)) c underline)) header))))) ;; Collect info for every buffer we're interested in. - (dolist (buffer (or buffer-list (buffer-list))) + (dolist (buffer (or buffer-list (buffer-list (selected-frame)))) (with-current-buffer buffer (let ((name (buffer-name)) (file buffer-file-name))
--- a/lisp/calc/calc-embed.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/calc/calc-embed.el Sat Dec 03 14:25:50 2005 +0000 @@ -315,7 +315,7 @@ (or (eq calc-embedded-quiet t) (message "Embedded Calc mode enabled; %s to return to normal" (if calc-embedded-quiet - "Type `M-# x'" + "Type `C-x * x'" "Give this command again"))))) (scroll-down 0)) ; fix a bug which occurs when truncate-lines is changed.
--- a/lisp/calc/calc-misc.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/calc/calc-misc.el Sat Dec 03 14:25:50 2005 +0000 @@ -33,7 +33,7 @@ (require 'calc-macs) (defun calc-dispatch-help (arg) - "M-# is a prefix key; follow it with one of these letters: + "C-x* is a prefix key sequence; follow it with one of these letters: For turning Calc on and off: C calc. Start the Calculator in a window at the bottom of the screen. @@ -73,8 +73,9 @@ M read-kbd-macro. Read a region of keystroke names as a keyboard macro. 0 (zero) calc-reset. Reset Calc stack and modes to default state. -Press twice (`M-# M-#' or `M-# #') to turn Calc on or off using the same -Calc user interface as before (either M-# C or M-# K; initially M-# C)." +Press `*' twice (`C-x * *') to turn Calc on or off using the same +Calc user interface as before (either C-x * C or C-x * K; initially C-x * C). +" (interactive "P") (calc-check-defines) (if calc-dispatch-help
--- a/lisp/calc/calc-prog.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/calc/calc-prog.el Sat Dec 03 14:25:50 2005 +0000 @@ -667,7 +667,7 @@ (or last-kbd-macro (error "No keyboard macro defined")) (setq calc-invocation-macro last-kbd-macro) - (message "Use `M-# Z' to invoke this macro")) + (message "Use `C-x * Z' to invoke this macro")) (defun calc-user-define-edit () (interactive) ; but no calc-wrapper!
--- a/lisp/calc/calc.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/calc/calc.el Sat Dec 03 14:25:50 2005 +0000 @@ -816,11 +816,6 @@ ;; Verify that Calc is running on the right kind of system. (defvar calc-emacs-type-lucid (not (not (string-match "Lucid" emacs-version)))) -;; Set up the standard keystroke (M-#) to run the Calculator, if that key -;; has not yet been bound to anything. For best results, the user should -;; do this before Calc is even loaded, so that M-# can auto-load Calc. -(or (global-key-binding "\e#") (global-set-key "\e#" 'calc-dispatch)) - ;; Set up the autoloading linkage. (let ((name (and (fboundp 'calc-dispatch) (eq (car-safe (symbol-function 'calc-dispatch)) 'autoload) @@ -1046,14 +1041,20 @@ ( ?x . calc-quit ) ( ?y . calc-copy-to-buffer ) ( ?z . calc-user-invocation ) - ( ?= . calc-embedded-update-formula ) ( ?\' . calc-embedded-new-formula ) ( ?\` . calc-embedded-edit ) ( ?: . calc-grab-sum-down ) ( ?_ . calc-grab-sum-across ) ( ?0 . calc-reset ) + ( ?? . calc-dispatch-help ) ( ?# . calc-same-interface ) - ( ?? . calc-dispatch-help ) )) + ( ?& . calc-same-interface ) + ( ?\\ . calc-same-interface ) + ( ?= . calc-same-interface ) + ( ?* . calc-same-interface ) + ( ?/ . calc-same-interface ) + ( ?+ . calc-same-interface ) + ( ?- . calc-same-interface ) )) map)) ;;;; (Autoloads here) @@ -1095,7 +1096,7 @@ report-calc-bug))) -;;;###autoload (global-set-key "\e#" 'calc-dispatch) +;;;###autoload (define-key ctl-x-map "*" 'calc-dispatch) ;;;###autoload (defun calc-dispatch (&optional arg) @@ -3534,7 +3535,7 @@ (defun calc-user-invocation () (interactive) (unless calc-invocation-macro - (error "Use `Z I' inside Calc to define a `M-# Z' keyboard macro")) + (error "Use `Z I' inside Calc to define a `C-x * Z' keyboard macro")) (execute-kbd-macro calc-invocation-macro nil)) ;;; User-programmability.
--- a/lisp/complete.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/complete.el Sat Dec 03 14:25:50 2005 +0000 @@ -216,9 +216,9 @@ (PC-bindings partial-completion-mode) ;; Deal with include file feature... (cond ((not partial-completion-mode) - (remove-hook 'find-file-not-found-hooks 'PC-look-for-include-file)) + (remove-hook 'find-file-not-found-functions 'PC-look-for-include-file)) ((not PC-disable-includes) - (add-hook 'find-file-not-found-hooks 'PC-look-for-include-file))) + (add-hook 'find-file-not-found-functions 'PC-look-for-include-file))) ;; ... with some underhand redefining. (cond ((and (not partial-completion-mode) (functionp PC-old-read-file-name-internal)) @@ -261,8 +261,7 @@ ;; and this command is repeated, scroll that window. (if (and window (window-buffer window) (buffer-name (window-buffer window))) - (save-excursion - (set-buffer (window-buffer window)) + (with-current-buffer (window-buffer window) (if (pos-visible-in-window-p (point-max) window) (set-window-start window (point-min) nil) (scroll-other-window))) @@ -346,11 +345,8 @@ (defvar PC-delims-list nil) (defvar PC-completion-as-file-name-predicate - (function - (lambda () - (memq minibuffer-completion-table - '(read-file-name-internal read-directory-name-internal)))) - "A function testing whether a minibuffer completion now will work filename-style. + (lambda () minibuffer-completing-file-name) + "A function testing whether a minibuffer completion now will work filename-style. The function takes no arguments, and typically looks at the value of `minibuffer-completion-table' and the minibuffer contents.") @@ -665,8 +661,7 @@ (eq mode 'help)) (with-output-to-temp-buffer "*Completions*" (display-completion-list (sort helpposs 'string-lessp)) - (save-excursion - (set-buffer standard-output) + (with-current-buffer standard-output ;; Record which part of the buffer we are completing ;; so that choosing a completion from the list ;; knows how much old text to replace. @@ -732,16 +727,12 @@ or properties are considered." (interactive) (let* ((end (point)) - (buffer-syntax (syntax-table)) - (beg (unwind-protect - (save-excursion - (if lisp-mode-syntax-table - (set-syntax-table lisp-mode-syntax-table)) - (backward-sexp 1) - (while (= (char-syntax (following-char)) ?\') - (forward-char 1)) - (point)) - (set-syntax-table buffer-syntax))) + (beg (save-excursion + (with-syntax-table lisp-mode-syntax-table + (backward-sexp 1) + (while (= (char-syntax (following-char)) ?\') + (forward-char 1)) + (point)))) (minibuffer-completion-table obarray) (minibuffer-completion-predicate (if (eq (char-after (1- beg)) ?\() @@ -767,12 +758,11 @@ (goto-char end) (PC-do-completion nil beg end))) -;;; Use the shell to do globbing. -;;; This could now use file-expand-wildcards instead. +;; Use the shell to do globbing. +;; This could now use file-expand-wildcards instead. (defun PC-expand-many-files (name) - (save-excursion - (set-buffer (generate-new-buffer " *Glob Output*")) + (with-current-buffer (generate-new-buffer " *Glob Output*") (erase-buffer) (shell-command (concat "echo " name) t) (goto-char (point-min)) @@ -804,9 +794,9 @@ (setq files (cdr files))) p)))) -;;; Facilities for loading C header files. This is independent from the -;;; main completion code. See also the variable `PC-include-file-path' -;;; at top of this file. +;; Facilities for loading C header files. This is independent from the +;; main completion code. See also the variable `PC-include-file-path' +;; at top of this file. (defun PC-look-for-include-file () (if (string-match "[\"<]\\([^\"<>]*\\)[\">]?$" (buffer-file-name)) @@ -817,8 +807,7 @@ new-buf) (kill-buffer (current-buffer)) (if (equal name "") - (save-excursion - (set-buffer (car (buffer-list))) + (with-current-buffer (car (buffer-list)) (save-excursion (beginning-of-line) (if (looking-at @@ -855,8 +844,7 @@ (if path (setq name (concat (file-name-as-directory (car path)) name)) (error "No such include file: <%s>" name))) - (let ((dir (save-excursion - (set-buffer (car (buffer-list))) + (let ((dir (with-current-buffer (car (buffer-list)) default-directory))) (if (file-exists-p (concat dir name)) (setq name (concat dir name)) @@ -865,8 +853,7 @@ (if new-buf ;; no need to verify last-modified time for this! (set-buffer new-buf) - (setq new-buf (create-file-buffer name)) - (set-buffer new-buf) + (set-buffer (create-file-buffer name)) (erase-buffer) (insert-file-contents name t)) ;; Returning non-nil with the new buffer current @@ -885,7 +872,7 @@ env (substring env 0 pos))) path))) -;;; This is adapted from lib-complete.el, by Mike Williams. +;; This is adapted from lib-complete.el, by Mike Williams. (defun PC-include-file-all-completions (file search-path &optional full) "Return all completions for FILE in any directory on SEARCH-PATH. If optional third argument FULL is non-nil, returned pathnames should be
--- a/lisp/completion.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/completion.el Sat Dec 03 14:25:50 2005 +0000 @@ -82,11 +82,11 @@ ;; SAVING/LOADING COMPLETIONS ;; Completions are automatically saved from one session to another ;; (unless save-completions-flag or enable-completion is nil). -;; Loading this file (or calling initialize-completions) causes EMACS +;; Activating this minor-mode calling completion-initialize) causes Emacs ;; to load a completions database for a saved completions file -;; (default: ~/.completions). When you exit, EMACS saves a copy of the +;; (default: ~/.completions). When you exit, Emacs saves a copy of the ;; completions that you -;; often use. When you next start, EMACS loads in the saved completion file. +;; often use. When you next start, Emacs loads in the saved completion file. ;; ;; The number of completions saved depends loosely on ;; *saved-completions-decay-factor*. Completions that have never been @@ -141,8 +141,8 @@ ;; App --> Appropriately] ;; ;; INITIALIZATION -;; The form `(initialize-completions)' initializes the completion system by -;; trying to load in the user's completions. After the first cal, further +;; The form `(completion-initialize)' initializes the completion system by +;; trying to load in the user's completions. After the first call, further ;; calls have no effect so one should be careful not to put the form in a ;; site's standard site-init file. ;; @@ -180,7 +180,7 @@ ;; complete ;; Inserts a completion at point ;; -;; initialize-completions +;; completion-initialize ;; Loads the completions file and sets up so that exiting emacs will ;; save them. ;; @@ -286,59 +286,65 @@ (defcustom enable-completion t - "*Non-nil means enable recording and saving of completions. + "Non-nil means enable recording and saving of completions. If nil, no new words are added to the database or saved to the init file." :type 'boolean :group 'completion) (defcustom save-completions-flag t - "*Non-nil means save most-used completions when exiting Emacs. + "Non-nil means save most-used completions when exiting Emacs. See also `save-completions-retention-time'." :type 'boolean :group 'completion) -(defcustom save-completions-file-name (convert-standard-filename "~/.completions") - "*The filename to save completions to." +(defcustom save-completions-file-name + (let ((olddef (convert-standard-filename "~/.completions"))) + (cond + ((file-readable-p olddef) olddef) + ((file-directory-p (convert-standard-filename "~/.emacs.d/")) + (convert-standard-filename (expand-file-name completions "~/.emacs.d/"))) + (t olddef))) + "The filename to save completions to." :type 'file :group 'completion) (defcustom save-completions-retention-time 336 - "*Discard a completion if unused for this many hours. + "Discard a completion if unused for this many hours. \(1 day = 24, 1 week = 168). If this is 0, non-permanent completions will not be saved unless these are used. Default is two weeks." :type 'integer :group 'completion) (defcustom completion-on-separator-character nil - "*Non-nil means separator characters mark previous word as used. + "Non-nil means separator characters mark previous word as used. This means the word will be saved as a completion." :type 'boolean :group 'completion) (defcustom completions-file-versions-kept kept-new-versions - "*Number of versions to keep for the saved completions file." + "Number of versions to keep for the saved completions file." :type 'integer :group 'completion) (defcustom completion-prompt-speed-threshold 4800 - "*Minimum output speed at which to display next potential completion." + "Minimum output speed at which to display next potential completion." :type 'integer :group 'completion) (defcustom completion-cdabbrev-prompt-flag nil - "*If non-nil, the next completion prompt does a cdabbrev search. + "If non-nil, the next completion prompt does a cdabbrev search. This can be time consuming." :type 'boolean :group 'completion) (defcustom completion-search-distance 15000 - "*How far to search in the buffer when looking for completions. + "How far to search in the buffer when looking for completions. In number of characters. If nil, search the whole buffer." :type 'integer :group 'completion) (defcustom completions-merging-modes '(lisp c) - "*List of modes {`c' or `lisp'} for automatic completions merging. + "List of modes {`c' or `lisp'} for automatic completions merging. Definitions from visited files which have these modes are automatically added to the completion database." :type '(set (const lisp) (const c)) @@ -495,7 +501,7 @@ ;; Table definitions ;;----------------------------------------------- -(defun cmpl-make-standard-completion-syntax-table () +(defconst completion-standard-syntax-table (let ((table (make-syntax-table)) i) ;; Default syntax is whitespace. @@ -523,36 +529,9 @@ (modify-syntax-entry char "w" table))) table)) -(defconst cmpl-standard-syntax-table (cmpl-make-standard-completion-syntax-table)) - -(defun cmpl-make-lisp-completion-syntax-table () - (let ((table (copy-syntax-table cmpl-standard-syntax-table)) - (symbol-chars '(?! ?& ?? ?= ?^))) - (dolist (char symbol-chars) - (modify-syntax-entry char "_" table)) - table)) - -(defun cmpl-make-c-completion-syntax-table () - (let ((table (copy-syntax-table cmpl-standard-syntax-table)) - (separator-chars '(?+ ?* ?/ ?: ?%))) - (dolist (char separator-chars) - (modify-syntax-entry char " " table)) - table)) - -(defun cmpl-make-fortran-completion-syntax-table () - (let ((table (copy-syntax-table cmpl-standard-syntax-table)) - (separator-chars '(?+ ?- ?* ?/ ?:))) - (dolist (char separator-chars) - (modify-syntax-entry char " " table)) - table)) - -(defconst cmpl-lisp-syntax-table (cmpl-make-lisp-completion-syntax-table)) -(defconst cmpl-c-syntax-table (cmpl-make-c-completion-syntax-table)) -(defconst cmpl-fortran-syntax-table (cmpl-make-fortran-completion-syntax-table)) - -(defvar cmpl-syntax-table cmpl-standard-syntax-table +(defvar completion-syntax-table completion-standard-syntax-table "This variable holds the current completion syntax table.") -(make-variable-buffer-local 'cmpl-syntax-table) +(make-variable-buffer-local 'completion-syntax-table) ;;----------------------------------------------- ;; Symbol functions @@ -561,43 +540,34 @@ "Holds first character of symbol, after any completion symbol function.") (defvar cmpl-symbol-end nil "Holds last character of symbol, after any completion symbol function.") -;; These are temp. vars. we use to avoid using let. -;; Why ? Small speed improvement. -(defvar cmpl-saved-syntax nil) -(defvar cmpl-saved-point nil) (defun symbol-under-point () "Return the symbol that the point is currently on. But only if it is longer than `completion-min-length'." - (setq cmpl-saved-syntax (syntax-table)) - (unwind-protect - (progn - (set-syntax-table cmpl-syntax-table) - (cond - ;; Cursor is on following-char and after preceding-char - ((memq (char-syntax (following-char)) '(?w ?_)) - (setq cmpl-saved-point (point) - cmpl-symbol-start (scan-sexps (1+ cmpl-saved-point) -1) - cmpl-symbol-end (scan-sexps cmpl-saved-point 1)) - ;; Remove chars to ignore at the start. - (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) - (goto-char cmpl-symbol-start) - (forward-word 1) - (setq cmpl-symbol-start (point)) - (goto-char cmpl-saved-point))) - ;; Remove chars to ignore at the end. - (cond ((= (char-syntax (char-after (1- cmpl-symbol-end))) ?w) - (goto-char cmpl-symbol-end) - (forward-word -1) - (setq cmpl-symbol-end (point)) - (goto-char cmpl-saved-point))) - ;; Return completion if the length is reasonable. - (if (and (<= completion-min-length - (- cmpl-symbol-end cmpl-symbol-start)) - (<= (- cmpl-symbol-end cmpl-symbol-start) - completion-max-length)) - (buffer-substring cmpl-symbol-start cmpl-symbol-end))))) - (set-syntax-table cmpl-saved-syntax))) + (with-syntax-table completion-syntax-table + (when (memq (char-syntax (following-char)) '(?w ?_)) + ;; Cursor is on following-char and after preceding-char + (let ((saved-point (point))) + (setq cmpl-symbol-start (scan-sexps (1+ saved-point) -1) + cmpl-symbol-end (scan-sexps saved-point 1)) + ;; Remove chars to ignore at the start. + (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) + (goto-char cmpl-symbol-start) + (forward-word 1) + (setq cmpl-symbol-start (point)) + (goto-char saved-point))) + ;; Remove chars to ignore at the end. + (cond ((= (char-syntax (char-after (1- cmpl-symbol-end))) ?w) + (goto-char cmpl-symbol-end) + (forward-word -1) + (setq cmpl-symbol-end (point)) + (goto-char saved-point))) + ;; Return completion if the length is reasonable. + (if (and (<= completion-min-length + (- cmpl-symbol-end cmpl-symbol-start)) + (<= (- cmpl-symbol-end cmpl-symbol-start) + completion-max-length)) + (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))) ;; tests for symbol-under-point ;; `^' indicates cursor pos. where value is returned @@ -615,46 +585,42 @@ "Return a string of the symbol immediately before point. Returns nil if there isn't one longer than `completion-min-length'." ;; This is called when a word separator is typed so it must be FAST ! - (setq cmpl-saved-syntax (syntax-table)) - (unwind-protect - (progn - (set-syntax-table cmpl-syntax-table) - ;; Cursor is on following-char and after preceding-char - (cond ((= (setq cmpl-preceding-syntax (char-syntax (preceding-char))) ?_) - ;; Number of chars to ignore at end. - (setq cmpl-symbol-end (point) - cmpl-symbol-start (scan-sexps cmpl-symbol-end -1)) - ;; Remove chars to ignore at the start. - (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) - (goto-char cmpl-symbol-start) - (forward-word 1) - (setq cmpl-symbol-start (point)) - (goto-char cmpl-symbol-end))) - ;; Return value if long enough. - (if (>= cmpl-symbol-end - (+ cmpl-symbol-start completion-min-length)) - (buffer-substring cmpl-symbol-start cmpl-symbol-end))) - ((= cmpl-preceding-syntax ?w) - ;; chars to ignore at end - (setq cmpl-saved-point (point) - cmpl-symbol-start (scan-sexps cmpl-saved-point -1)) - ;; take off chars. from end - (forward-word -1) - (setq cmpl-symbol-end (point)) - ;; remove chars to ignore at the start - (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) - (goto-char cmpl-symbol-start) - (forward-word 1) - (setq cmpl-symbol-start (point)))) - ;; Restore state. - (goto-char cmpl-saved-point) - ;; Return completion if the length is reasonable - (if (and (<= completion-min-length - (- cmpl-symbol-end cmpl-symbol-start)) - (<= (- cmpl-symbol-end cmpl-symbol-start) - completion-max-length)) - (buffer-substring cmpl-symbol-start cmpl-symbol-end))))) - (set-syntax-table cmpl-saved-syntax))) + (with-syntax-table completion-syntax-table + ;; Cursor is on following-char and after preceding-char + (cond ((= (setq cmpl-preceding-syntax (char-syntax (preceding-char))) ?_) + ;; Number of chars to ignore at end. + (setq cmpl-symbol-end (point) + cmpl-symbol-start (scan-sexps cmpl-symbol-end -1)) + ;; Remove chars to ignore at the start. + (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) + (goto-char cmpl-symbol-start) + (forward-word 1) + (setq cmpl-symbol-start (point)) + (goto-char cmpl-symbol-end))) + ;; Return value if long enough. + (if (>= cmpl-symbol-end + (+ cmpl-symbol-start completion-min-length)) + (buffer-substring cmpl-symbol-start cmpl-symbol-end))) + ((= cmpl-preceding-syntax ?w) + ;; chars to ignore at end + (let ((saved-point (point))) + (setq cmpl-symbol-start (scan-sexps saved-point -1)) + ;; take off chars. from end + (forward-word -1) + (setq cmpl-symbol-end (point)) + ;; remove chars to ignore at the start + (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) + (goto-char cmpl-symbol-start) + (forward-word 1) + (setq cmpl-symbol-start (point)))) + ;; Restore state. + (goto-char saved-point) + ;; Return completion if the length is reasonable + (if (and (<= completion-min-length + (- cmpl-symbol-end cmpl-symbol-start)) + (<= (- cmpl-symbol-end cmpl-symbol-start) + completion-max-length)) + (buffer-substring cmpl-symbol-start cmpl-symbol-end))))))) ;; tests for symbol-before-point ;; `^' indicates cursor pos. where value is returned @@ -675,17 +641,11 @@ ;; copying all the code. ;; However, it is only used by the completion string prompter. ;; If it comes into common use, it could be rewritten. - (cond ((memq (progn - (setq cmpl-saved-syntax (syntax-table)) - (unwind-protect - (progn - (set-syntax-table cmpl-syntax-table) - (char-syntax (following-char))) - (set-syntax-table cmpl-saved-syntax))) - '(?w ?_)) - (symbol-under-point)) - (t - (symbol-before-point)))) + (if (memq (with-syntax-table completion-syntax-table + (char-syntax (following-char))) + '(?w ?_)) + (symbol-under-point) + (symbol-before-point))) (defun symbol-before-point-for-complete () @@ -693,28 +653,23 @@ ;; or nil if there isn't one. Like symbol-before-point but doesn't trim the ;; end chars." ;; Cursor is on following-char and after preceding-char - (setq cmpl-saved-syntax (syntax-table)) - (unwind-protect - (progn - (set-syntax-table cmpl-syntax-table) - (cond ((memq (setq cmpl-preceding-syntax (char-syntax (preceding-char))) - '(?_ ?w)) - (setq cmpl-symbol-end (point) - cmpl-symbol-start (scan-sexps cmpl-symbol-end -1)) - ;; Remove chars to ignore at the start. - (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) - (goto-char cmpl-symbol-start) - (forward-word 1) - (setq cmpl-symbol-start (point)) - (goto-char cmpl-symbol-end))) - ;; Return completion if the length is reasonable. - (if (and (<= completion-prefix-min-length - (- cmpl-symbol-end cmpl-symbol-start)) - (<= (- cmpl-symbol-end cmpl-symbol-start) - completion-max-length)) - (buffer-substring cmpl-symbol-start cmpl-symbol-end))))) - ;; Restore syntax table. - (set-syntax-table cmpl-saved-syntax))) + (with-syntax-table completion-syntax-table + (cond ((memq (setq cmpl-preceding-syntax (char-syntax (preceding-char))) + '(?_ ?w)) + (setq cmpl-symbol-end (point) + cmpl-symbol-start (scan-sexps cmpl-symbol-end -1)) + ;; Remove chars to ignore at the start. + (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) + (goto-char cmpl-symbol-start) + (forward-word 1) + (setq cmpl-symbol-start (point)) + (goto-char cmpl-symbol-end))) + ;; Return completion if the length is reasonable. + (if (and (<= completion-prefix-min-length + (- cmpl-symbol-end cmpl-symbol-start)) + (<= (- cmpl-symbol-end cmpl-symbol-start) + completion-max-length)) + (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))) ;; tests for symbol-before-point-for-complete ;; `^' indicates cursor pos. where value is returned @@ -866,7 +821,7 @@ (setq saved-point (point) saved-syntax (syntax-table)) ;; Restore completion state - (set-syntax-table cmpl-syntax-table) + (set-syntax-table completion-syntax-table) (goto-char cdabbrev-current-point) ;; Loop looking for completions (while @@ -1010,8 +965,8 @@ ;; CONSTRUCTOR (defun make-completion (string) - "Return a list of a completion entry." - (list (list string 0 nil current-completion-source))) + "Return a completion entry." + (list string 0 nil current-completion-source)) ;; Obsolete ;;(defmacro cmpl-prefix-entry-symbol (completion-entry) @@ -1026,11 +981,9 @@ ;; READER Macros -(defmacro cmpl-prefix-entry-head (prefix-entry) - (list 'car prefix-entry)) +(defalias 'cmpl-prefix-entry-head 'car) -(defmacro cmpl-prefix-entry-tail (prefix-entry) - (list 'cdr prefix-entry)) +(defalias 'cmpl-prefix-entry-tail 'cdr) ;; WRITER Macros @@ -1092,17 +1045,17 @@ ;; These are the internal functions used to update the datebase ;; ;; -(defvar completion-to-accept nil) - ;;"Set to a string that is pending its acceptance." +(defvar completion-to-accept nil + "Set to a string that is pending its acceptance.") ;; this checked by the top level reading functions -(defvar cmpl-db-downcase-string nil) - ;; "Setup by find-exact-completion, etc. The given string, downcased." -(defvar cmpl-db-symbol nil) - ;; "The interned symbol corresponding to cmpl-db-downcase-string. - ;; Set up by cmpl-db-symbol." -(defvar cmpl-db-prefix-symbol nil) - ;; "The interned prefix symbol corresponding to cmpl-db-downcase-string." +(defvar cmpl-db-downcase-string nil + "Setup by `find-exact-completion', etc. The given string, downcased.") +(defvar cmpl-db-symbol nil + "The interned symbol corresponding to `cmpl-db-downcase-string'. +Set up by `cmpl-db-symbol'.") +(defvar cmpl-db-prefix-symbol nil + "The interned prefix symbol corresponding to `cmpl-db-downcase-string'.") (defvar cmpl-db-entry nil) (defvar cmpl-db-debug-p nil "Set to t if you want to debug the database.") @@ -1190,7 +1143,7 @@ (or (find-exact-completion string) ;; not there (let (;; create an entry - (entry (make-completion string)) + (entry (list (make-completion string))) ;; setup the prefix (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 @@ -1244,7 +1197,7 @@ cmpl-db-entry) ;; not there (let (;; create an entry - (entry (make-completion completion-string)) + (entry (list (make-completion completion-string))) ;; setup the prefix (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 @@ -1650,7 +1603,7 @@ (setq cmpl-current-index (+ cmpl-current-index (or arg 1)))) (t (if (not cmpl-initialized-p) - (initialize-completions)) ;; make sure everything's loaded + (completion-initialize)) ;; make sure everything's loaded (cond ((consp current-prefix-arg) ;; control-u (setq arg 0) (setq cmpl-leave-point-at-start t)) @@ -1752,9 +1705,8 @@ (let ((completions-merging-modes nil)) (setq buffer (find-file-noselect file)))) (unwind-protect - (save-excursion - (set-buffer buffer) - (add-completions-from-buffer)) + (with-current-buffer buffer + (add-completions-from-buffer)) (if (not buffer-already-there-p) (kill-buffer buffer))))) @@ -1781,7 +1733,7 @@ start-num))))) ;; Find file hook -(defun cmpl-find-file-hook () +(defun completion-find-file-hook () (cond (enable-completion (cond ((and (memq major-mode '(emacs-lisp-mode lisp-mode)) (memq 'lisp completions-merging-modes)) @@ -1864,7 +1816,7 @@ ;; Whitespace chars (have symbol syntax) ;; Everything else has word syntax -(defun cmpl-make-c-def-completion-syntax-table () +(defconst completion-c-def-syntax-table (let ((table (make-syntax-table)) (whitespace-chars '(? ?\n ?\t ?\f ?\v ?\r)) ;; unfortunately the ?( causes the parens to appear unbalanced @@ -1885,8 +1837,6 @@ (modify-syntax-entry ?\} "){" table) table)) -(defconst cmpl-c-def-syntax-table (cmpl-make-c-def-completion-syntax-table)) - ;; Regexps (defconst *c-def-regexp* ;; This stops on lines with possible definitions @@ -1930,81 +1880,77 @@ ;; Benchmark -- ;; Sun 3/280-- 1250 lines/sec. - (let (string next-point char - (saved-syntax (syntax-table))) + (let (string next-point char) (save-excursion (goto-char (point-min)) (catch 'finish-add-completions - (unwind-protect - (while t - ;; we loop here only when scan-sexps fails - ;; (i.e. unbalance exps.) - (set-syntax-table cmpl-c-def-syntax-table) - (condition-case e - (while t - (re-search-forward *c-def-regexp*) - (cond - ((= (preceding-char) ?#) - ;; preprocessor macro, see if it's one we handle - (setq string (buffer-substring (point) (+ (point) 6))) - (cond ((or (string-equal string "define") - (string-equal string "ifdef ")) - ;; skip forward over definition symbol - ;; and add it to database - (and (forward-word 2) - (setq string (symbol-before-point)) - ;;(push string foo) - (add-completion-to-tail-if-new string))))) - (t - ;; C definition - (setq next-point (point)) - (while (and - next-point - ;; scan to next separator char. - (setq next-point (scan-sexps next-point 1))) - ;; position the point on the word we want to add - (goto-char next-point) - (while (= (setq char (following-char)) ?*) - ;; handle pointer ref - ;; move to next separator char. - (goto-char - (setq next-point (scan-sexps (point) 1)))) - (forward-word -1) - ;; add to database - (if (setq string (symbol-under-point)) - ;; (push string foo) - (add-completion-to-tail-if-new string) - ;; Local TMC hack (useful for parsing paris.h) - (if (and (looking-at "_AP") ;; "ansi prototype" - (progn - (forward-word -1) - (setq string - (symbol-under-point)))) - (add-completion-to-tail-if-new string))) - ;; go to next - (goto-char next-point) - ;; (push (format "%c" (following-char)) foo) - (if (= (char-syntax char) ?\() - ;; if on an opening delimiter, go to end - (while (= (char-syntax char) ?\() - (setq next-point (scan-sexps next-point 1) - char (char-after next-point))) - (or (= char ?,) - ;; Current char is an end char. - (setq next-point nil))))))) - (search-failed ;;done - (throw 'finish-add-completions t)) - (error - ;; Check for failure in scan-sexps - (if (or (string-equal (nth 1 e) - "Containing expression ends prematurely") - (string-equal (nth 1 e) "Unbalanced parentheses")) - ;; unbalanced paren., keep going - ;;(ding) - (forward-line 1) - (message "Error parsing C buffer for completions--please send bug report") - (throw 'finish-add-completions t))))) - (set-syntax-table saved-syntax)))))) + (with-syntax-table completion-c-def-syntax-table + (while t + ;; we loop here only when scan-sexps fails + ;; (i.e. unbalance exps.) + (condition-case e + (while t + (re-search-forward *c-def-regexp*) + (cond + ((= (preceding-char) ?#) + ;; preprocessor macro, see if it's one we handle + (setq string (buffer-substring (point) (+ (point) 6))) + (cond ((member string '("define" "ifdef ")) + ;; skip forward over definition symbol + ;; and add it to database + (and (forward-word 2) + (setq string (symbol-before-point)) + ;;(push string foo) + (add-completion-to-tail-if-new string))))) + (t + ;; C definition + (setq next-point (point)) + (while (and + next-point + ;; scan to next separator char. + (setq next-point (scan-sexps next-point 1))) + ;; position the point on the word we want to add + (goto-char next-point) + (while (= (setq char (following-char)) ?*) + ;; handle pointer ref + ;; move to next separator char. + (goto-char + (setq next-point (scan-sexps (point) 1)))) + (forward-word -1) + ;; add to database + (if (setq string (symbol-under-point)) + ;; (push string foo) + (add-completion-to-tail-if-new string) + ;; Local TMC hack (useful for parsing paris.h) + (if (and (looking-at "_AP") ;; "ansi prototype" + (progn + (forward-word -1) + (setq string + (symbol-under-point)))) + (add-completion-to-tail-if-new string))) + ;; go to next + (goto-char next-point) + ;; (push (format "%c" (following-char)) foo) + (if (= (char-syntax char) ?\() + ;; if on an opening delimiter, go to end + (while (= (char-syntax char) ?\() + (setq next-point (scan-sexps next-point 1) + char (char-after next-point))) + (or (= char ?,) + ;; Current char is an end char. + (setq next-point nil))))))) + (search-failed ;;done + (throw 'finish-add-completions t)) + (error + ;; Check for failure in scan-sexps + (if (or (string-equal (nth 1 e) + "Containing expression ends prematurely") + (string-equal (nth 1 e) "Unbalanced parentheses")) + ;; unbalanced paren., keep going + ;;(ding) + (forward-line 1) + (message "Error parsing C buffer for completions--please send bug report") + (throw 'finish-add-completions t)))))))))) ;;--------------------------------------------------------------------------- @@ -2018,7 +1964,8 @@ ((not cmpl-completions-accepted-p) (message "Completions database has not changed - not writing.")) (t - (save-completions-to-file))))) + (save-completions-to-file)))) + (cmpl-statistics-block (record-cmpl-kill-emacs))) ;; There is no point bothering to change this again ;; unless the package changes so much that it matters @@ -2046,7 +1993,7 @@ (if (file-writable-p filename) (progn (if (not cmpl-initialized-p) - (initialize-completions));; make sure everything's loaded + (completion-initialize)) ;; make sure everything's loaded (message "Saving completions to file %s" filename) (let* ((delete-old-versions t) @@ -2059,9 +2006,7 @@ (total-saved 0) (backup-filename (completion-backup-filename filename))) - (save-excursion - (get-buffer-create " *completion-save-buffer*") - (set-buffer " *completion-save-buffer*") + (with-current-buffer (get-buffer-create " *completion-save-buffer*") (setq buffer-file-name filename) (if (not (verify-visited-file-modtime (current-buffer))) @@ -2151,9 +2096,7 @@ (if (not no-message-p) (message "Loading completions from %sfile %s . . ." (if backup-readable-p "backup " "") filename)) - (save-excursion - (get-buffer-create " *completion-save-buffer*") - (set-buffer " *completion-save-buffer*") + (with-current-buffer (get-buffer-create " *completion-save-buffer*") (setq buffer-file-name filename) ;; prepare the buffer to be modified (clear-visited-file-modtime) @@ -2161,8 +2104,7 @@ (let ((insert-okay-p nil) (buffer (current-buffer)) - (current-time (cmpl-hours-since-origin)) - string num-uses entry last-use-time + string entry last-use-time cmpl-entry cmpl-last-use-time (current-completion-source cmpl-source-init-file) (start-num @@ -2233,13 +2175,13 @@ start-num))) )))))) -(defun initialize-completions () +(defun completion-initialize () "Load the default completions file. Also sets up so that exiting Emacs will automatically save the file." (interactive) - (cond ((not cmpl-initialized-p) - (load-completions-from-file))) - (setq cmpl-initialized-p t)) + (unless cmpl-initialized-p + (load-completions-from-file) + (setq cmpl-initialized-p t))) ;;----------------------------------------------- ;; Kill region patch @@ -2302,33 +2244,21 @@ ;; Note that because of the way byte compiling works, none of ;; the functions defined with this macro get byte compiled. -(defmacro def-completion-wrapper (function-name type &optional new-name) +(defun completion-def-wrapper (function-name type) "Add a call to update the completion database before function execution. TYPE is the type of the wrapper to be added. Can be :before or :under." - (cond ((eq type :separator) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-before-separator)) - ((eq type :before) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-before-point)) - ((eq type :backward-under) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-backward-under)) - ((eq type :backward) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-backward)) - ((eq type :under) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-under-point)) - ((eq type :under-or-before) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-under-or-before-point)) - ((eq type :minibuffer-separator) - (list 'put (list 'quote function-name) ''completion-function - ''use-completion-minibuffer-separator)))) + (put function-name 'completion-function + (cdr (assq type + '((:separator 'use-completion-before-separator) + (:before 'use-completion-before-point) + (:backward-under 'use-completion-backward-under) + (:backward 'use-completion-backward) + (:under 'use-completion-under-point) + (:under-or-before 'use-completion-under-or-before-point) + (:minibuffer-separator 'use-completion-minibuffer-separator)))))) (defun use-completion-minibuffer-separator () - (let ((cmpl-syntax-table cmpl-standard-syntax-table)) + (let ((completion-syntax-table completion-standard-syntax-table)) (use-completion-before-separator))) (defun use-completion-backward-under () @@ -2347,170 +2277,197 @@ (get this-command 'completion-function)) 'use-completion-under-or-before-point))) +;; Lisp mode diffs. + +(defconst completion-lisp-syntax-table + (let ((table (copy-syntax-table completion-standard-syntax-table)) + (symbol-chars '(?! ?& ?? ?= ?^))) + (dolist (char symbol-chars) + (modify-syntax-entry char "_" table)) + table)) + +(defun completion-lisp-mode-hook () + (setq completion-syntax-table completion-lisp-syntax-table) + ;; Lisp Mode diffs + (local-set-key "!" 'self-insert-command) + (local-set-key "&" 'self-insert-command) + (local-set-key "%" 'self-insert-command) + (local-set-key "?" 'self-insert-command) + (local-set-key "=" 'self-insert-command) + (local-set-key "^" 'self-insert-command)) + ;; C mode diffs. -(defvar c-mode-map) +(defconst completion-c-syntax-table + (let ((table (copy-syntax-table completion-standard-syntax-table)) + (separator-chars '(?+ ?* ?/ ?: ?%))) + (dolist (char separator-chars) + (modify-syntax-entry char " " table)) + table)) +(completion-def-wrapper 'electric-c-semi :separator) (defun completion-c-mode-hook () - (def-completion-wrapper electric-c-semi :separator) - (define-key c-mode-map "+" 'completion-separator-self-insert-command) - (define-key c-mode-map "*" 'completion-separator-self-insert-command) - (define-key c-mode-map "/" 'completion-separator-self-insert-command)) -;; Do this either now or whenever C mode is loaded. -(if (featurep 'cc-mode) - (completion-c-mode-hook) - (add-hook 'c-mode-hook 'completion-c-mode-hook)) + (setq completion-syntax-table completion-c-syntax-table) + (local-set-key "+" 'completion-separator-self-insert-command) + (local-set-key "*" 'completion-separator-self-insert-command) + (local-set-key "/" 'completion-separator-self-insert-command)) ;; FORTRAN mode diffs. (these are defined when fortran is called) -(defvar fortran-mode-map) +(defconst completion-fortran-syntax-table + (let ((table (copy-syntax-table completion-standard-syntax-table)) + (separator-chars '(?+ ?- ?* ?/ ?:))) + (dolist (char separator-chars) + (modify-syntax-entry char " " table)) + table)) (defun completion-setup-fortran-mode () - (define-key fortran-mode-map "+" 'completion-separator-self-insert-command) - (define-key fortran-mode-map "-" 'completion-separator-self-insert-command) - (define-key fortran-mode-map "*" 'completion-separator-self-insert-command) - (define-key fortran-mode-map "/" 'completion-separator-self-insert-command)) + (setq completion-syntax-table completion-fortran-syntax-table) + (local-set-key "+" 'completion-separator-self-insert-command) + (local-set-key "-" 'completion-separator-self-insert-command) + (local-set-key "*" 'completion-separator-self-insert-command) + (local-set-key "/" 'completion-separator-self-insert-command)) -;;; Enable completion mode. +;; Enable completion mode. + +(defvar fortran-mode-hook) + +(defvar completion-saved-bindings nil) ;;;###autoload -(defun dynamic-completion-mode () +(define-minor-mode dynamic-completion-mode "Enable dynamic word-completion." - (interactive) - (add-hook 'find-file-hook 'cmpl-find-file-hook) - (add-hook 'pre-command-hook 'completion-before-command) - - ;; Install the appropriate mode tables. - (add-hook 'lisp-mode-hook - (lambda () - (setq cmpl-syntax-table cmpl-lisp-syntax-table))) - (add-hook 'c-mode-hook - (lambda () - (setq cmpl-syntax-table cmpl-c-syntax-table))) - (add-hook 'fortran-mode-hook - (lambda () - (setq cmpl-syntax-table cmpl-fortran-syntax-table) - (completion-setup-fortran-mode))) - - ;; "Complete" Key Keybindings. - - (global-set-key "\M-\r" 'complete) - (global-set-key [?\C-\r] 'complete) + :global t + ;; This is always good, not specific to dynamic-completion-mode. (define-key function-key-map [C-return] [?\C-\r]) - ;; Tests - - ;; (add-completion "cumberland") - ;; (add-completion "cumberbund") - ;; cum - ;; Cumber - ;; cumbering - ;; cumb - - ;; Save completions when killing Emacs. - - (add-hook 'kill-emacs-hook - (lambda () - (kill-emacs-save-completions) - (cmpl-statistics-block - (record-cmpl-kill-emacs)))) - - ;; Patches to standard keymaps insert completions - (substitute-key-definition 'kill-region 'completion-kill-region - global-map) + (dolist (x '((find-file-hook . completion-find-file-hook) + (pre-command-hook . completion-before-command) + ;; Save completions when killing Emacs. + (kill-emacs-hook . kill-emacs-save-completions) - ;; Separators - ;; We've used the completion syntax table given as a guide. - ;; - ;; Global separator chars. - ;; We left out <tab> because there are too many special cases for it. Also, - ;; in normal coding it's rarely typed after a word. - (global-set-key " " 'completion-separator-self-insert-autofilling) - (global-set-key "!" 'completion-separator-self-insert-command) - (global-set-key "%" 'completion-separator-self-insert-command) - (global-set-key "^" 'completion-separator-self-insert-command) - (global-set-key "&" 'completion-separator-self-insert-command) - (global-set-key "(" 'completion-separator-self-insert-command) - (global-set-key ")" 'completion-separator-self-insert-command) - (global-set-key "=" 'completion-separator-self-insert-command) - (global-set-key "`" 'completion-separator-self-insert-command) - (global-set-key "|" 'completion-separator-self-insert-command) - (global-set-key "{" 'completion-separator-self-insert-command) - (global-set-key "}" 'completion-separator-self-insert-command) - (global-set-key "[" 'completion-separator-self-insert-command) - (global-set-key "]" 'completion-separator-self-insert-command) - (global-set-key ";" 'completion-separator-self-insert-command) - (global-set-key "\"" 'completion-separator-self-insert-command) - (global-set-key "'" 'completion-separator-self-insert-command) - (global-set-key "#" 'completion-separator-self-insert-command) - (global-set-key "," 'completion-separator-self-insert-command) - (global-set-key "?" 'completion-separator-self-insert-command) + ;; Install the appropriate mode tables. + (lisp-mode-hook . completion-lisp-mode-hook) + (c-mode-hook . completion-c-mode-hook) + (fortran-mode-hook . completion-setup-fortran-mode))) + (if dynamic-completion-mode + (add-hook (car x) (cdr x)) + (remove-hook (car x) (cdr x)))) + + ;; "Complete" Key Keybindings. We don't want to use a minor-mode + ;; map because these have too high a priority. We could/should + ;; probably change the interpretation of minor-mode-map-alist such + ;; that a map has lower precedence if the symbol is not buffer-local. + (while completion-saved-bindings + (let ((binding (pop completion-saved-bindings))) + (global-set-key (car binding) (cdr binding)))) + (when dynamic-completion-mode + (dolist (binding + '(("\M-\r" . complete) + ([?\C-\r] . complete) - ;; We include period and colon even though they are symbol chars because : - ;; - in text we want to pick up the last word in a sentence. - ;; - in C pointer refs. we want to pick up the first symbol - ;; - it won't make a difference for lisp mode (package names are short) - (global-set-key "." 'completion-separator-self-insert-command) - (global-set-key ":" 'completion-separator-self-insert-command) + ;; Tests - + ;; (add-completion "cumberland") + ;; (add-completion "cumberbund") + ;; cum + ;; Cumber + ;; cumbering + ;; cumb + + ;; Patches to standard keymaps insert completions + ([remap kill-region] . completion-kill-region) - ;; Lisp Mode diffs - (define-key lisp-mode-map "!" 'self-insert-command) - (define-key lisp-mode-map "&" 'self-insert-command) - (define-key lisp-mode-map "%" 'self-insert-command) - (define-key lisp-mode-map "?" 'self-insert-command) - (define-key lisp-mode-map "=" 'self-insert-command) - (define-key lisp-mode-map "^" 'self-insert-command) - - ;; Avoid warnings. - (defvar c-mode-map) - (defvar fortran-mode-map) + ;; Separators + ;; We've used the completion syntax table given as a guide. + ;; + ;; Global separator chars. + ;; We left out <tab> because there are too many special + ;; cases for it. Also, in normal coding it's rarely typed + ;; after a word. + (" " . completion-separator-self-insert-autofilling) + ("!" . completion-separator-self-insert-command) + ("%" . completion-separator-self-insert-command) + ("^" . completion-separator-self-insert-command) + ("&" . completion-separator-self-insert-command) + ("(" . completion-separator-self-insert-command) + (")" . completion-separator-self-insert-command) + ("=" . completion-separator-self-insert-command) + ("`" . completion-separator-self-insert-command) + ("|" . completion-separator-self-insert-command) + ("{" . completion-separator-self-insert-command) + ("}" . completion-separator-self-insert-command) + ("[" . completion-separator-self-insert-command) + ("]" . completion-separator-self-insert-command) + (";" . completion-separator-self-insert-command) + ("\"". completion-separator-self-insert-command) + ("'" . completion-separator-self-insert-command) + ("#" . completion-separator-self-insert-command) + ("," . completion-separator-self-insert-command) + ("?" . completion-separator-self-insert-command) - ;;----------------------------------------------- - ;; End of line chars. - ;;----------------------------------------------- - (def-completion-wrapper newline :separator) - (def-completion-wrapper newline-and-indent :separator) - (def-completion-wrapper comint-send-input :separator) - (def-completion-wrapper exit-minibuffer :minibuffer-separator) - (def-completion-wrapper eval-print-last-sexp :separator) - (def-completion-wrapper eval-last-sexp :separator) - ;;(def-completion-wrapper minibuffer-complete-and-exit :minibuffer) - - ;;----------------------------------------------- - ;; Cursor movement - ;;----------------------------------------------- + ;; We include period and colon even though they are symbol + ;; chars because : + ;; - in text we want to pick up the last word in a sentence. + ;; - in C pointer refs. we want to pick up the first symbol + ;; - it won't make a difference for lisp mode (package names + ;; are short) + ("." . completion-separator-self-insert-command) + (":" . completion-separator-self-insert-command))) + (push (cons (car binding) (lookup-key global-map (car binding))) + completion-saved-bindings) + (global-set-key (car binding) (cdr binding))) - (def-completion-wrapper next-line :under-or-before) - (def-completion-wrapper previous-line :under-or-before) - (def-completion-wrapper beginning-of-buffer :under-or-before) - (def-completion-wrapper end-of-buffer :under-or-before) - (def-completion-wrapper beginning-of-line :under-or-before) - (def-completion-wrapper end-of-line :under-or-before) - (def-completion-wrapper forward-char :under-or-before) - (def-completion-wrapper forward-word :under-or-before) - (def-completion-wrapper forward-sexp :under-or-before) - (def-completion-wrapper backward-char :backward-under) - (def-completion-wrapper backward-word :backward-under) - (def-completion-wrapper backward-sexp :backward-under) + ;; Tests -- + ;; foobarbiz + ;; foobar + ;; fooquux + ;; fooper + + (cmpl-statistics-block + (record-completion-file-loaded)) + + (completion-initialize))) + +;;----------------------------------------------- +;; End of line chars. +;;----------------------------------------------- +(completion-def-wrapper 'newline :separator) +(completion-def-wrapper 'newline-and-indent :separator) +(completion-def-wrapper 'comint-send-input :separator) +(completion-def-wrapper 'exit-minibuffer :minibuffer-separator) +(completion-def-wrapper 'eval-print-last-sexp :separator) +(completion-def-wrapper 'eval-last-sexp :separator) +;;(completion-def-wrapper 'minibuffer-complete-and-exit :minibuffer) - (def-completion-wrapper delete-backward-char :backward) - (def-completion-wrapper delete-backward-char-untabify :backward) - - ;; Tests -- - ;; foobarbiz - ;; foobar - ;; fooquux - ;; fooper +;;----------------------------------------------- +;; Cursor movement +;;----------------------------------------------- - (cmpl-statistics-block - (record-completion-file-loaded)) +(completion-def-wrapper 'next-line :under-or-before) +(completion-def-wrapper 'previous-line :under-or-before) +(completion-def-wrapper 'beginning-of-buffer :under-or-before) +(completion-def-wrapper 'end-of-buffer :under-or-before) +(completion-def-wrapper 'beginning-of-line :under-or-before) +(completion-def-wrapper 'end-of-line :under-or-before) +(completion-def-wrapper 'forward-char :under-or-before) +(completion-def-wrapper 'forward-word :under-or-before) +(completion-def-wrapper 'forward-sexp :under-or-before) +(completion-def-wrapper 'backward-char :backward-under) +(completion-def-wrapper 'backward-word :backward-under) +(completion-def-wrapper 'backward-sexp :backward-under) - (initialize-completions)) +(completion-def-wrapper 'delete-backward-char :backward) +(completion-def-wrapper 'delete-backward-char-untabify :backward) -(mapc (lambda (x) (add-to-list 'debug-ignored-errors x)) - '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$" +;; Old names, non-namespace-clean. +(defvaralias 'cmpl-syntax-table 'completion-syntax-table) +(defalias 'initialize-completions 'completion-initialize) + +(dolist (x '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$" "^The string \".*\" is too short to be saved as a completion\\.$")) + (add-to-list 'debug-ignored-errors x)) (provide 'completion) -;;; arch-tag: 6990dafe-4abd-4a1f-8c42-ffb25e120f5e +;; arch-tag: 6990dafe-4abd-4a1f-8c42-ffb25e120f5e ;;; completion.el ends here
--- a/lisp/cus-edit.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/cus-edit.el Sat Dec 03 14:25:50 2005 +0000 @@ -800,13 +800,18 @@ making them as if they had never been customized at all." (interactive) (let ((children custom-options)) - (mapc (lambda (widget) - (and (widget-get widget :custom-standard-value) - (widget-apply widget :custom-standard-value) - (if (memq (widget-get widget :custom-state) - '(modified set changed saved rogue)) - (widget-apply widget :custom-reset-standard)))) - children))) + (when (or (and (= 1 (length children)) + (memq (widget-type (car children)) + '(custom-variable custom-face))) + (yes-or-no-p "Really erase all customizations in this buffer? ")) + (mapc (lambda (widget) + (and (if (widget-get widget :custom-standard-value) + (widget-apply widget :custom-standard-value) + t) + (memq (widget-get widget :custom-state) + '(modified set changed saved rogue)) + (widget-apply widget :custom-reset-standard))) + children)))) ;;; The Customize Commands
--- a/lisp/cus-face.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/cus-face.el Sat Dec 03 14:25:50 2005 +0000 @@ -323,13 +323,18 @@ (let ((face (nth 0 entry)) (spec (nth 1 entry)) (now (nth 2 entry)) - (comment (nth 3 entry))) + (comment (nth 3 entry)) + oldspec) ;; If FACE is actually an alias, customize the face it ;; is aliased to. (if (get face 'face-alias) (setq face (get face 'face-alias))) - (put face 'saved-face spec) - (put face 'saved-face-comment comment) + + (setq oldspec (get face 'theme-face)) + (when (not (and oldspec (eq 'user (caar oldspec)))) + (put face 'saved-face spec) + (put face 'saved-face-comment comment)) + (custom-push-theme 'theme-face face theme 'set spec) (when (or now immediate) (put face 'force-face (if now 'rogue 'immediate)))
--- a/lisp/custom.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/custom.el Sat Dec 03 14:25:50 2005 +0000 @@ -1120,9 +1120,14 @@ (defun enable-theme (theme) "Reenable all variable and face settings defined by THEME. The newly enabled theme gets the highest precedence (after `user'). -If it is already enabled, just give it highest precedence (after `user')." +If it is already enabled, just give it highest precedence (after `user'). + +This signals an error if THEME does not specify any theme +settings. Theme settings are set using `load-theme'." (interactive "SEnable Custom theme: ") (let ((settings (get theme 'theme-settings))) + (if (and (not (eq theme 'user)) (null settings)) + (error "No theme settings defined in %s." (symbol-name theme))) (dolist (s settings) (let* ((prop (car s)) (symbol (cadr s)) @@ -1130,7 +1135,8 @@ (put symbol prop (cons (cddr s) (assq-delete-all theme spec-list))) (if (eq prop 'theme-value) (custom-theme-recalc-variable symbol) - (custom-theme-recalc-face symbol))))) + (if (facep symbol) + (custom-theme-recalc-face symbol)))))) (setq custom-enabled-themes (cons theme (delq theme custom-enabled-themes))) ;; `user' must always be the highest-precedence enabled theme.
--- a/lisp/dabbrev.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/dabbrev.el Sat Dec 03 14:25:50 2005 +0000 @@ -373,11 +373,7 @@ completions. If the prefix argument is 16 (which comes from C-u C-u), -then it searches *all* buffers. - -With no prefix argument, it reuses an old completion list -if there is a suitable one already." - +then it searches *all* buffers." (interactive "*P") (dabbrev--reset-global-variables) (let* ((dabbrev-check-other-buffers (and arg t)) @@ -392,57 +388,43 @@ (my-obarray dabbrev--last-obarray) init) (save-excursion - (if (and (null arg) - my-obarray - (or (eq dabbrev--last-completion-buffer (current-buffer)) - (and (window-minibuffer-p (selected-window)) - (eq dabbrev--last-completion-buffer - (dabbrev--minibuffer-origin)))) - dabbrev--last-abbreviation - (>= (length abbrev) (length dabbrev--last-abbreviation)) - (string= dabbrev--last-abbreviation - (substring abbrev 0 - (length dabbrev--last-abbreviation))) - (setq init (try-completion abbrev my-obarray))) - ;; We can reuse the existing completion list. - nil - ;;-------------------------------- - ;; New abbreviation to expand. - ;;-------------------------------- - (setq dabbrev--last-abbreviation abbrev) - ;; Find all expansion - (let ((completion-list - (dabbrev--find-all-expansions abbrev ignore-case-p)) - (completion-ignore-case ignore-case-p)) - ;; Make an obarray with all expansions - (setq my-obarray (make-vector (length completion-list) 0)) - (or (> (length my-obarray) 0) - (error "No dynamic expansion for \"%s\" found%s" - abbrev - (if dabbrev--check-other-buffers "" " in this-buffer"))) - (cond - ((or (not ignore-case-p) - (not dabbrev-case-replace)) - (mapc (function (lambda (string) - (intern string my-obarray))) - completion-list)) - ((string= abbrev (upcase abbrev)) - (mapc (function (lambda (string) - (intern (upcase string) my-obarray))) - completion-list)) - ((string= (substring abbrev 0 1) - (upcase (substring abbrev 0 1))) - (mapc (function (lambda (string) - (intern (capitalize string) my-obarray))) - completion-list)) - (t - (mapc (function (lambda (string) - (intern (downcase string) my-obarray))) - completion-list))) - (setq dabbrev--last-obarray my-obarray) - (setq dabbrev--last-completion-buffer (current-buffer)) - ;; Find the longest common string. - (setq init (try-completion abbrev my-obarray))))) + ;;-------------------------------- + ;; New abbreviation to expand. + ;;-------------------------------- + (setq dabbrev--last-abbreviation abbrev) + ;; Find all expansion + (let ((completion-list + (dabbrev--find-all-expansions abbrev ignore-case-p)) + (completion-ignore-case ignore-case-p)) + ;; Make an obarray with all expansions + (setq my-obarray (make-vector (length completion-list) 0)) + (or (> (length my-obarray) 0) + (error "No dynamic expansion for \"%s\" found%s" + abbrev + (if dabbrev--check-other-buffers "" " in this-buffer"))) + (cond + ((or (not ignore-case-p) + (not dabbrev-case-replace)) + (mapc (function (lambda (string) + (intern string my-obarray))) + completion-list)) + ((string= abbrev (upcase abbrev)) + (mapc (function (lambda (string) + (intern (upcase string) my-obarray))) + completion-list)) + ((string= (substring abbrev 0 1) + (upcase (substring abbrev 0 1))) + (mapc (function (lambda (string) + (intern (capitalize string) my-obarray))) + completion-list)) + (t + (mapc (function (lambda (string) + (intern (downcase string) my-obarray))) + completion-list))) + (setq dabbrev--last-obarray my-obarray) + (setq dabbrev--last-completion-buffer (current-buffer)) + ;; Find the longest common string. + (setq init (try-completion abbrev my-obarray)))) ;;-------------------------------- ;; Let the user choose between the expansions ;;--------------------------------
--- a/lisp/dframe.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/dframe.el Sat Dec 03 14:25:50 2005 +0000 @@ -1,6 +1,6 @@ ;;; dframe --- dedicate frame support modes -;;; Copyright (C) 1996, 97, 98, 99, 2000, 01, 02, 03, 04 Free Software Foundation +;;; Copyright (C) 1996, 97, 98, 99, 2000, 01, 02, 03, 04, 05 Free Software Foundation ;; Author: Eric M. Ludlam <zappo@gnu.org> ;; Keywords: file, tags, tools @@ -509,7 +509,7 @@ (setq newleft (+ pfx pfw 5) newtop pfy)) ((eq location 'left) - (setq newleft (+ pfx 10 nfw) + (setq newleft (- pfx 10 nfw) newtop pfy)) ((eq location 'left-right) (setq newleft
--- a/lisp/ediff-wind.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/ediff-wind.el Sat Dec 03 14:25:50 2005 +0000 @@ -955,8 +955,9 @@ (minibuffer-window designated-minibuffer-frame)) (cons 'width fwidth) - (cons 'height fheight)) - ) + (cons 'height fheight) + (cons 'user-position t) + )) ;; adjust autoraise (setq adjusted-parameters @@ -1135,9 +1136,8 @@ (list (cons 'left (max 0 (eval (cdr (assoc 'left frame-A-params))))) (cons 'width (cdr (assoc 'width frame-A-params)))) ediff-wide-display-frame frame-A) - (modify-frame-parameters frame-A (list (cons 'left cw) - (cons 'width wd))))) - + (modify-frame-parameters + frame-A `((left . ,cw) (width . ,wd) (user-position t))))) ;; Revise the mode line to display which difference we have selected
--- a/lisp/ediff.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/ediff.el Sat Dec 03 14:25:50 2005 +0000 @@ -8,7 +8,7 @@ ;; Keywords: comparing, merging, patching, tools, unix (defconst ediff-version "2.80.1" "The current version of Ediff") -(defconst ediff-date "October 5, 2005" "Date of last update") +(defconst ediff-date "November 25, 2005" "Date of last update") ;; This file is part of GNU Emacs.
--- a/lisp/emacs-lisp/autoload.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emacs-lisp/autoload.el Sat Dec 03 14:25:50 2005 +0000 @@ -135,6 +135,15 @@ (if (equal setter ''custom-set-minor-mode) `(put ',varname 'custom-set 'custom-set-minor-mode)))))) + ((eq car 'defgroup) + ;; In Emacs this is normally handled separately by cus-dep.el, but for + ;; third party packages, it can be convenient to explicitly autoload + ;; a group. + (let ((groupname (nth 1 form))) + `(let ((loads (get ',groupname 'custom-loads))) + (if (member ',file loads) nil + (put ',groupname 'custom-loads (cons ',file loads)))))) + ;; nil here indicates that this is not a special autoload form. (t nil))))
--- a/lisp/emacs-lisp/cl-macs.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emacs-lisp/cl-macs.el Sat Dec 03 14:25:50 2005 +0000 @@ -2175,7 +2175,12 @@ (symbol-name (car args)) "")))) ((eq opt :constructor) (if (cdr args) - (push args constrs) + (progn + ;; If this defines a constructor of the same name as + ;; the default one, don't define the default. + (if (eq (car args) constructor) + (setq constructor nil)) + (push args constrs)) (if args (setq constructor (car args))))) ((eq opt :copier) (if args (setq copier (car args))))
--- a/lisp/emacs-lisp/elp.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emacs-lisp/elp.el Sat Dec 03 14:25:50 2005 +0000 @@ -206,18 +206,28 @@ "Master function symbol.") (defvar elp-not-profilable - '(elp-wrapper elp-elapsed-time error call-interactively apply current-time interactive-p) + ;; First, the functions used inside each instrumented function: + '(elp-wrapper called-interactively-p + ;; Then the functions used by the above functions. I used + ;; (delq nil (mapcar (lambda (x) (and (symbolp x) (fboundp x) x)) + ;; (aref (symbol-function 'elp-wrapper) 2))) + ;; to help me find this list. + error call-interactively apply current-time) "List of functions that cannot be profiled. Those functions are used internally by the profiling code and profiling them would thus lead to infinite recursion.") -(defun elp-not-profilable-p (fun) - (or (memq fun elp-not-profilable) - (keymapp fun) - (condition-case nil - (when (subrp (symbol-function fun)) - (eq 'unevalled (cdr (subr-arity (symbol-function fun))))) - (error nil)))) +(defun elp-profilable-p (fun) + (and (symbolp fun) + (fboundp fun) + (not (or (memq fun elp-not-profilable) + (keymapp fun) + (memq (car-safe (symbol-function fun)) '(autoload macro)) + (condition-case nil + (when (subrp (indirect-function fun)) + (eq 'unevalled + (cdr (subr-arity (indirect-function fun))))) + (error nil)))))) ;;;###autoload @@ -237,9 +247,6 @@ (let* ((funguts (symbol-function funsym)) (infovec (vector 0 0 funguts)) (newguts '(lambda (&rest args)))) - ;; We cannot profile functions used internally during profiling. - (when (elp-not-profilable-p funsym) - (error "ELP cannot profile the function: %s" funsym)) ;; we cannot profile macros (and (eq (car-safe funguts) 'macro) (error "ELP cannot profile macro: %s" funsym)) @@ -252,6 +259,9 @@ ;; type functionality (i.e. it shouldn't execute the function). (and (eq (car-safe funguts) 'autoload) (error "ELP cannot profile autoloaded function: %s" funsym)) + ;; We cannot profile functions used internally during profiling. + (unless (elp-profilable-p funsym) + (error "ELP cannot profile the function: %s" funsym)) ;; put rest of newguts together (if (commandp funsym) (setq newguts (append newguts '((interactive))))) @@ -344,18 +354,15 @@ For example, to instrument all ELP functions, do the following: \\[elp-instrument-package] RET elp- RET" - (interactive "sPrefix of package to instrument: ") + (interactive + (list (completing-read "Prefix of package to instrument: " + obarray 'elp-profilable-p))) (if (zerop (length prefix)) (error "Instrumenting all Emacs functions would render Emacs unusable")) (elp-instrument-list (mapcar 'intern - (all-completions - prefix obarray - (lambda (sym) - (and (fboundp sym) - (not (or (memq (car-safe (symbol-function sym)) '(autoload macro)) - (elp-not-profilable-p sym))))))))) + (all-completions prefix obarray 'elp-profilable-p)))) (defun elp-restore-list (&optional list) "Restore the original definitions for all functions in `elp-function-list'. @@ -488,12 +495,12 @@ ;; check for very large or small numbers (if (string-match "^\\(.*\\)\\(e[+-].*\\)$" number) (concat (substring - (substring number (match-beginning 1) (match-end 1)) + (match-string 1 number) 0 (- width (match-end 2) (- (match-beginning 2)) 3)) "..." - (substring number (match-beginning 2) (match-end 2))) - (concat (substring number 0 width))))) + (match-string 2 number)) + (substring number 0 width)))) (defun elp-output-result (resultvec) ;; output the RESULTVEC into the results buffer. RESULTVEC is a 4 or @@ -528,20 +535,15 @@ (defvar elp-results-symname-map (let ((map (make-sparse-keymap))) - (define-key map [mouse-2] 'elp-results-jump-to-definition-by-mouse) + (define-key map [mouse-2] 'elp-results-jump-to-definition) (define-key map "\C-m" 'elp-results-jump-to-definition) map) "Keymap used on the function name column." ) -(defun elp-results-jump-to-definition-by-mouse (event) - "Jump to the definition of the function under the place specified by EVENT." - (interactive "e") - (posn-set-point (event-end event)) - (elp-results-jump-to-definition)) - -(defun elp-results-jump-to-definition () +(defun elp-results-jump-to-definition (&optional event) "Jump to the definition of the function under the point." - (interactive) + (interactive (list last-nonmenu-event)) + (if event (posn-set-point (event-end event))) (find-function (get-text-property (point) 'elp-symname))) (defun elp-output-insert-symname (symname) @@ -550,7 +552,7 @@ 'elp-symname (intern symname) 'keymap elp-results-symname-map 'mouse-face 'highlight - 'help-echo (substitute-command-keys "\\{elp-results-symname-map}")))) + 'help-echo "mouse-2 or RET jumps to definition"))) ;;;###autoload (defun elp-results () @@ -630,5 +632,5 @@ (provide 'elp) -;;; arch-tag: c4eef311-9b3e-4bb2-8a54-3485d41b4eb1 +;; arch-tag: c4eef311-9b3e-4bb2-8a54-3485d41b4eb1 ;;; elp.el ends here
--- a/lisp/emulation/cua-rect.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emulation/cua-rect.el Sat Dec 03 14:25:50 2005 +0000 @@ -65,6 +65,7 @@ ;; List of overlays used to display current rectangle. (defvar cua--rectangle-overlays nil) (make-variable-buffer-local 'cua--rectangle-overlays) +(put 'cua--rectangle-overlays 'permanent-local t) (defvar cua--overlay-keymap (let ((map (make-sparse-keymap))) @@ -781,7 +782,7 @@ (make-string (- l cl0 (if (and (= le pl) (/= le lb)) 1 0)) (if cua--virtual-edges-debug ?. ?\s)) - 'face 'default)) + 'face (or (get-text-property (1- s) 'face) 'default))) (if (/= pl le) (setq s (1- s)))) (cond @@ -1393,7 +1394,12 @@ (if (and mark-active (not deactivate-mark)) (cua--highlight-rectangle) - (cua--deactivate-rectangle))) + (cua--deactivate-rectangle)) + (when cua--rectangle-overlays + ;; clean-up after revert-buffer + (mapcar (function delete-overlay) cua--rectangle-overlays) + (setq cua--rectangle-overlays nil) + (setq deactivate-mark t))) (when cua--rect-undo-set-point (goto-char cua--rect-undo-set-point) (setq cua--rect-undo-set-point nil)))
--- a/lisp/emulation/viper-keym.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emulation/viper-keym.el Sat Dec 03 14:25:50 2005 +0000 @@ -200,9 +200,10 @@ :type 'string :group 'viper) -(defcustom viper-ESC-key [(escape)] ; "\e" +(defcustom viper-ESC-key (if (viper-window-display-p) [(escape)] "\e") "Key used to ESC. -Enter as a sexp. Examples: \"\\e\", [(escape)]." +Enter as a sexp. Examples: \"\\e\", [(escape)]. +If running in a terminal, [(escape)] is not understood, so must use \"\\e\"." :type 'sexp :group 'viper :set (lambda (symbol value)
--- a/lisp/emulation/viper.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/emulation/viper.el Sat Dec 03 14:25:50 2005 +0000 @@ -9,7 +9,7 @@ ;; Author: Michael Kifer <kifer@cs.stonybrook.edu> ;; Keywords: emulations -(defconst viper-version "3.11.5 of October 5, 2005" +(defconst viper-version "3.11.5 of November 25, 2005" "The current version of Viper") ;; This file is part of GNU Emacs. @@ -429,7 +429,6 @@ occur-mode mh-folder-mode - mail-mode gnus-group-mode gnus-summary-mode @@ -442,6 +441,8 @@ rcirc-mode + jde-javadoc-checker-report-mode + view-mode vm-mode vm-summary-mode)
--- a/lisp/files.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/files.el Sat Dec 03 14:25:50 2005 +0000 @@ -3154,7 +3154,7 @@ This function returns a relative file name which is equivalent to FILENAME when used with that default directory as the default. If FILENAME and DIRECTORY lie on different machines or on different drives -on a DOS/Windows machine, it returns FILENAME on expanded form." +on a DOS/Windows machine, it returns FILENAME in expanded form." (save-match-data (setq directory (file-name-as-directory (expand-file-name (or directory
--- a/lisp/font-lock.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/font-lock.el Sat Dec 03 14:25:50 2005 +0000 @@ -1123,8 +1123,9 @@ (font-lock-fontify-region (point) (mark))) ((error quit) (message "Fontifying block...%s" error-data))))))) -(if (boundp 'facemenu-keymap) - (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)) +(unless (featurep 'facemenu) + (error "facemenu must be loaded before font-lock")) +(define-key facemenu-keymap "\M-o" 'font-lock-fontify-block) ;;; End of Fontification functions.
--- a/lisp/gnus/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/gnus/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,9 @@ +2005-11-30 Stefan Monnier <monnier@iro.umontreal.ca> + + * gnus-delay.el (gnus-delay-group): Don't autoload. + It's useless and could trigger a bug in cus-dep.el causing ldefs-boot + to be re-loaded when customizing the `gnus-delay' group. + 2005-11-19 Chong Yidong <cyd@stupidchicken.com> * message.el: Revert last changes.
--- a/lisp/gnus/gnus-delay.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/gnus/gnus-delay.el Sat Dec 03 14:25:50 2005 +0000 @@ -39,7 +39,6 @@ (require 'gnus-draft) (autoload 'parse-time-string "parse-time" nil nil) -;;;###autoload (defgroup gnus-delay nil "Arrange for sending postings later." :version "22.1" @@ -195,5 +194,5 @@ ;; coding: iso-8859-1 ;; End: -;;; arch-tag: fb2ad634-a897-4142-a503-f5991ec2349d +;; arch-tag: fb2ad634-a897-4142-a503-f5991ec2349d ;;; gnus-delay.el ends here
--- a/lisp/help-fns.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/help-fns.el Sat Dec 03 14:25:50 2005 +0000 @@ -223,7 +223,6 @@ (concat "src/" file) file))))) -;;;###autoload (defface help-argument-name '((((supports :slant italic)) :inherit italic)) "Face to highlight argument names in *Help* buffers." :group 'help) @@ -436,7 +435,9 @@ (format "\nMacro: %s" (format-kbd-macro def))) (t "[Missing arglist. Please make a bug report.]"))) (high (help-highlight-arguments use doc))) - (insert (car high) "\n") + (let ((fill-begin (point))) + (insert (car high) "\n") + (fill-region fill-begin (point))) (setq doc (cdr high)))) (let ((obsolete (and ;; function might be a lambda construct.
--- a/lisp/help.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/help.el Sat Dec 03 14:25:50 2005 +0000 @@ -38,7 +38,57 @@ (add-hook 'temp-buffer-setup-hook 'help-mode-setup) (add-hook 'temp-buffer-show-hook 'help-mode-finish) -(defvar help-map (make-sparse-keymap) +(defvar help-map + (let ((map (make-sparse-keymap))) + (define-key map (char-to-string help-char) 'help-for-help) + (define-key map [help] 'help-for-help) + (define-key map [f1] 'help-for-help) + (define-key map "." 'display-local-help) + (define-key map "?" 'help-for-help) + + (define-key map "\C-c" 'describe-copying) + (define-key map "\C-d" 'describe-distribution) + (define-key map "\C-e" 'view-emacs-problems) + (define-key map "\C-f" 'view-emacs-FAQ) + (define-key map "\C-m" 'view-order-manuals) + (define-key map "\C-n" 'view-emacs-news) + (define-key map "\C-p" 'describe-project) + (define-key map "\C-t" 'view-todo) + (define-key map "\C-w" 'describe-no-warranty) + + ;; This does not fit the pattern, but it is natural given the C-\ command. + (define-key map "\C-\\" 'describe-input-method) + + (define-key map "C" 'describe-coding-system) + (define-key map "F" 'Info-goto-emacs-command-node) + (define-key map "I" 'describe-input-method) + (define-key map "K" 'Info-goto-emacs-key-command-node) + (define-key map "L" 'describe-language-environment) + (define-key map "S" 'info-lookup-symbol) + + (define-key map "a" 'apropos-command) + (define-key map "b" 'describe-bindings) + (define-key map "c" 'describe-key-briefly) + (define-key map "d" 'apropos-documentation) + (define-key map "e" 'view-echo-area-messages) + (define-key map "f" 'describe-function) + (define-key map "h" 'view-hello-file) + + (define-key map "i" 'info) + (define-key map "4i" 'info-other-window) + + (define-key map "k" 'describe-key) + (define-key map "l" 'view-lossage) + (define-key map "m" 'describe-mode) + (define-key map "n" 'view-emacs-news) + (define-key map "p" 'finder-by-keyword) + (define-key map "r" 'info-emacs-manual) + (define-key map "s" 'describe-syntax) + (define-key map "t" 'help-with-tutorial) + (define-key map "w" 'where-is) + (define-key map "v" 'describe-variable) + (define-key map "q" 'help-quit) + map) "Keymap for characters following the Help key.") (define-key global-map (char-to-string help-char) 'help-command) @@ -46,73 +96,9 @@ (define-key global-map [f1] 'help-command) (fset 'help-command help-map) -(define-key help-map (char-to-string help-char) 'help-for-help) -(define-key help-map [help] 'help-for-help) -(define-key help-map [f1] 'help-for-help) -(define-key help-map "." 'display-local-help) -(define-key help-map "?" 'help-for-help) - -(define-key help-map "\C-c" 'describe-copying) -(define-key help-map "\C-d" 'describe-distribution) -(define-key help-map "\C-e" 'view-emacs-problems) -(define-key help-map "\C-f" 'view-emacs-FAQ) -(define-key help-map "\C-m" 'view-order-manuals) -(define-key help-map "\C-n" 'view-emacs-news) -(define-key help-map "\C-p" 'describe-project) -(define-key help-map "\C-t" 'view-todo) -(define-key help-map "\C-w" 'describe-no-warranty) - -;; This does not fit the pattern, but it is natural given the C-\ command. -(define-key help-map "\C-\\" 'describe-input-method) - -(define-key help-map "C" 'describe-coding-system) -(define-key help-map "F" 'Info-goto-emacs-command-node) -(define-key help-map "I" 'describe-input-method) -(define-key help-map "K" 'Info-goto-emacs-key-command-node) -(define-key help-map "L" 'describe-language-environment) -(define-key help-map "S" 'info-lookup-symbol) - -(define-key help-map "a" 'apropos-command) - -(define-key help-map "b" 'describe-bindings) - -(define-key help-map "c" 'describe-key-briefly) - -(define-key help-map "d" 'apropos-documentation) - -(define-key help-map "e" 'view-echo-area-messages) - -(define-key help-map "f" 'describe-function) - -(define-key help-map "h" 'view-hello-file) - -(define-key help-map "i" 'info) -(define-key help-map "4i" 'info-other-window) - -(define-key help-map "k" 'describe-key) - -(define-key help-map "l" 'view-lossage) - -(define-key help-map "m" 'describe-mode) - -(define-key help-map "n" 'view-emacs-news) - -(define-key help-map "p" 'finder-by-keyword) (autoload 'finder-by-keyword "finder" "Find packages matching a given keyword." t) -(define-key help-map "r" 'info-emacs-manual) - -(define-key help-map "s" 'describe-syntax) - -(define-key help-map "t" 'help-with-tutorial) - -(define-key help-map "w" 'where-is) - -(define-key help-map "v" 'describe-variable) - -(define-key help-map "q" 'help-quit) - ;; insert-button makes the action nil if it is not store somewhere (defvar help-button-cache nil) @@ -590,7 +576,7 @@ (goto-char position))) ;; Ok, now look up the key and name the command. (let ((defn (or (string-key-binding key) - (key-binding key))) + (key-binding key t))) key-desc) ;; Don't bother user with strings from (e.g.) the select-paste menu. (if (stringp (aref key (1- (length key)))) @@ -615,7 +601,7 @@ mouse events, and/or menu events. When calling from a program, pass KEY as a string or a vector. -If non-nil, UNTRANSLATED is a vector of the correspondinguntranslated events. +If non-nil, UNTRANSLATED is a vector of the corresponding untranslated events. It can also be a number, in which case the untranslated events from the last key sequence entered are used." ;; UP-EVENT is the up-event that was discarded by reading KEY, or nil. @@ -635,7 +621,7 @@ (when (windowp window) (set-buffer (window-buffer window)) (goto-char position)) - (let ((defn (or (string-key-binding key) (key-binding key)))) + (let ((defn (or (string-key-binding key) (key-binding key t)))) (if (or (null defn) (integerp defn) (equal defn 'undefined)) (message "%s is undefined" (help-key-description key untranslated)) (help-setup-xref (list #'describe-function defn) (interactive-p))
--- a/lisp/hi-lock.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/hi-lock.el Sat Dec 03 14:25:50 2005 +0000 @@ -89,16 +89,6 @@ :link '(custom-manual "(emacs)Highlight Interactively") :group 'font-lock) -;;;###autoload -(defcustom hi-lock-mode nil - "Toggle hi-lock, for interactively adding font-lock text-highlighting patterns." - :set (lambda (symbol value) - (hi-lock-mode (or value 0))) - :initialize 'custom-initialize-default - :type 'boolean - :group 'hi-lock - :require 'hi-lock) - (defcustom hi-lock-file-patterns-range 10000 "Limit of search in a buffer for hi-lock patterns. When a file is visited and hi-lock mode is on patterns starting @@ -244,19 +234,11 @@ (define-key hi-lock-map "\C-xwr" 'unhighlight-regexp) (define-key hi-lock-map "\C-xwb" 'hi-lock-write-interactive-patterns) -(unless (assq 'hi-lock-mode minor-mode-map-alist) - (setq minor-mode-map-alist (cons (cons 'hi-lock-mode hi-lock-map) - minor-mode-map-alist))) - -(unless (assq 'hi-lock-mode minor-mode-alist) - (setq minor-mode-alist (cons '(hi-lock-mode " H") minor-mode-alist))) - - ;; Visible Functions ;;;###autoload -(defun hi-lock-mode (&optional arg) +(define-minor-mode hi-lock-buffer-mode "Toggle minor mode for interactively adding font-lock highlighting patterns. If ARG positive turn hi-lock on. Issuing a hi-lock command will also @@ -297,43 +279,40 @@ will be read until Hi-lock: end is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'." - (interactive) - (let ((hi-lock-mode-prev hi-lock-mode)) - (setq hi-lock-mode - (if (null arg) (not hi-lock-mode) - (> (prefix-numeric-value arg) 0))) - ;; Turned on. - (when (and (not hi-lock-mode-prev) hi-lock-mode) - (add-hook 'find-file-hook 'hi-lock-find-file-hook) - (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook) - (if (null (default-value 'font-lock-defaults)) - (setq-default font-lock-defaults '(nil))) - (if (null font-lock-defaults) - (setq font-lock-defaults '(nil))) - (unless font-lock-mode - (font-lock-mode 1)) - (define-key-after menu-bar-edit-menu [hi-lock] - (cons "Regexp Highlighting" hi-lock-menu)) - (dolist (buffer (buffer-list)) - (with-current-buffer buffer (hi-lock-find-patterns)))) + :group 'hi-lock + :lighter " H" + :global nil + :keymap hi-lock-map + (if hi-lock-buffer-mode + ;; Turned on. + (progn + (unless font-lock-mode (font-lock-mode 1)) + (define-key-after menu-bar-edit-menu [hi-lock] + (cons "Regexp Highlighting" hi-lock-menu)) + (hi-lock-find-patterns) + (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook nil t)) ;; Turned off. - (when (and hi-lock-mode-prev (not hi-lock-mode)) - (dolist (buffer (buffer-list)) - (with-current-buffer buffer - (when (or hi-lock-interactive-patterns hi-lock-file-patterns) - (font-lock-remove-keywords nil hi-lock-interactive-patterns) - (font-lock-remove-keywords nil hi-lock-file-patterns) - (setq hi-lock-interactive-patterns nil - hi-lock-file-patterns nil) - (when font-lock-mode (hi-lock-refontify))))) + (when (or hi-lock-interactive-patterns + hi-lock-file-patterns) + (when hi-lock-interactive-patterns + (font-lock-remove-keywords nil hi-lock-interactive-patterns) + (setq hi-lock-interactive-patterns nil)) + (when hi-lock-file-patterns + (font-lock-remove-keywords nil hi-lock-file-patterns) + (setq hi-lock-file-patterns nil)) + (if font-lock-mode + (font-lock-fontify-buffer))) + (define-key-after menu-bar-edit-menu [hi-lock] nil) + (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook t))) - (let ((fld (default-value 'font-lock-defaults))) - (if (and fld (listp fld) (null (car fld))) - (setq-default font-lock-defaults (cdr fld)))) - (define-key-after menu-bar-edit-menu [hi-lock] nil) - (remove-hook 'find-file-hook 'hi-lock-find-file-hook) - (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)))) - +;;;###autoload +(define-global-minor-mode hi-lock-mode + hi-lock-buffer-mode turn-on-hi-lock-if-enabled + :group 'hi-lock) + +(defun turn-on-hi-lock-if-enabled () + (unless (memq major-mode hi-lock-exclude-modes) + (hi-lock-buffer-mode 1))) ;;;###autoload (defalias 'highlight-lines-matching-regexp 'hi-lock-line-face-buffer) @@ -352,12 +331,12 @@ (cons (or (car hi-lock-regexp-history) "") 1 ) nil nil 'hi-lock-regexp-history)) (hi-lock-read-face-name))) - (unless hi-lock-mode (hi-lock-mode)) - (or (facep face) (setq face 'rwl-yellow)) + (or (facep face) (setq face 'hi-yellow)) + (unless hi-lock-buffer-mode (hi-lock-buffer-mode 1)) (hi-lock-set-pattern ;; The \\(?:...\\) grouping construct ensures that a leading ^, +, * or ? ;; or a trailing $ in REGEXP will be interpreted correctly. - (list (concat "^.*\\(?:" regexp "\\).*$") (list 0 (list 'quote face) t)))) + (concat "^.*\\(?:" regexp "\\).*$") face)) ;;;###autoload @@ -377,9 +356,9 @@ (cons (or (car hi-lock-regexp-history) "") 1 ) nil nil 'hi-lock-regexp-history)) (hi-lock-read-face-name))) - (or (facep face) (setq face 'rwl-yellow)) - (unless hi-lock-mode (hi-lock-mode)) - (hi-lock-set-pattern (list regexp (list 0 (list 'quote face) t)))) + (or (facep face) (setq face 'hi-yellow)) + (unless hi-lock-buffer-mode (hi-lock-buffer-mode 1)) + (hi-lock-set-pattern regexp face)) ;;;###autoload (defalias 'highlight-phrase 'hi-lock-face-phrase-buffer) @@ -397,9 +376,9 @@ (cons (or (car hi-lock-regexp-history) "") 1 ) nil nil 'hi-lock-regexp-history))) (hi-lock-read-face-name))) - (or (facep face) (setq face 'rwl-yellow)) - (unless hi-lock-mode (hi-lock-mode)) - (hi-lock-set-pattern (list regexp (list 0 (list 'quote face) t)))) + (or (facep face) (setq face 'hi-yellow)) + (unless hi-lock-buffer-mode (hi-lock-buffer-mode 1)) + (hi-lock-set-pattern regexp face)) ;;;###autoload (defalias 'unhighlight-regexp 'hi-lock-unface-buffer) @@ -451,7 +430,7 @@ (font-lock-remove-keywords nil (list keyword)) (setq hi-lock-interactive-patterns (delq keyword hi-lock-interactive-patterns)) - (hi-lock-refontify)))) + (font-lock-fontify-buffer)))) ;;;###autoload (defun hi-lock-write-interactive-patterns () @@ -461,17 +440,16 @@ `highlight-regexp' and `highlight-lines-matching-regexp'; they can be found in variable `hi-lock-interactive-patterns'." (interactive) - (let ((prefix (format "%s %s:" (or comment-start "") "Hi-lock"))) - (when (> (+ (point) (length prefix)) hi-lock-file-patterns-range) - (beep) - (message - "Warning, inserted keywords not close enough to top of file.")) + (if (null hi-lock-interactive-patterns) + (error "There are no interactive patterns")) + (let ((beg (point))) (mapcar (lambda (pattern) - (insert (format "%s (%s) %s\n" - prefix (prin1-to-string pattern) (or comment-end "")))) - hi-lock-interactive-patterns))) - + (insert (format "Hi-lock: (%s)\n" (prin1-to-string pattern)))) + hi-lock-interactive-patterns) + (comment-region beg (point))) + (when (> (point) hi-lock-file-patterns-range) + (warn "Inserted keywords not close enough to top of file"))) ;; Implementation Functions @@ -513,29 +491,22 @@ (length prefix) 0))) '(hi-lock-face-history . 0)))) -(defun hi-lock-find-file-hook () - "Add hi-lock patterns, if present." - (hi-lock-find-patterns)) - -(defun hi-lock-current-line (&optional end) - "Return line number of line at point. -Optional argument END is maximum excursion." - (interactive) - (save-excursion - (beginning-of-line) - (1+ (count-lines 1 (or end (point)))))) - -(defun hi-lock-set-pattern (pattern) - "Add PATTERN to list of interactively highlighted patterns and refontify." - (hi-lock-set-patterns (list pattern))) - -(defun hi-lock-set-patterns (patterns) - "Add PATTERNS to list of interactively highlighted patterns and refontify.." - (dolist (pattern patterns) +(defun hi-lock-set-pattern (regexp face) + "Highlight REGEXP with face FACE." + (let ((pattern (list regexp (list 0 (list 'quote face) t)))) (unless (member pattern hi-lock-interactive-patterns) (font-lock-add-keywords nil (list pattern)) - (add-to-list 'hi-lock-interactive-patterns pattern))) - (hi-lock-refontify)) + (push pattern hi-lock-interactive-patterns) + (let ((buffer-undo-list t) + (inhibit-read-only t) + (mod (buffer-modified-p))) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward regexp (point-max) t) + (put-text-property + (match-beginning 0) (match-end 0) 'face face) + (goto-char (match-end 0)))) + (set-buffer-modified-p mod))))) (defun hi-lock-set-file-patterns (patterns) "Replace file patterns list with PATTERNS and refontify." @@ -543,13 +514,7 @@ (font-lock-remove-keywords nil hi-lock-file-patterns) (setq hi-lock-file-patterns patterns) (font-lock-add-keywords nil hi-lock-file-patterns) - (hi-lock-refontify))) - -(defun hi-lock-refontify () - "Unfontify then refontify buffer. Used when hi-lock patterns change." - (interactive) - (unless font-lock-mode (font-lock-mode 1)) - (font-lock-fontify-buffer)) + (font-lock-fontify-buffer))) (defun hi-lock-find-patterns () "Find patterns in current buffer for hi-lock." @@ -569,16 +534,17 @@ (condition-case nil (setq all-patterns (append (read (current-buffer)) all-patterns)) (error (message "Invalid pattern list expression at %d" - (hi-lock-current-line))))))) - (when hi-lock-mode (hi-lock-set-file-patterns all-patterns)) + (line-number-at-pos))))))) + (when hi-lock-buffer-mode (hi-lock-set-file-patterns all-patterns)) (if (interactive-p) (message "Hi-lock added %d patterns." (length all-patterns)))))) (defun hi-lock-font-lock-hook () "Add hi lock patterns to font-lock's." - (when hi-lock-mode - (font-lock-add-keywords nil hi-lock-file-patterns) - (font-lock-add-keywords nil hi-lock-interactive-patterns))) + (if font-lock-mode + (progn (font-lock-add-keywords nil hi-lock-file-patterns) + (font-lock-add-keywords nil hi-lock-interactive-patterns)) + (hi-lock-buffer-mode -1))) (provide 'hi-lock)
--- a/lisp/ido.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/ido.el Sat Dec 03 14:25:50 2005 +0000 @@ -899,7 +899,19 @@ ;; Persistent variables (defvar ido-mode-map nil - "Keymap for `ido-find-file' and `ido-switch-buffer'.") + "Currently active keymap for ido commands.") + +(defvar ido-mode-common-map nil + "Keymap for all ido commands.") + +(defvar ido-mode-file-map nil + "Keymap for ido file commands.") + +(defvar ido-mode-file-dir-map nil + "Keymap for ido file and directory commands.") + +(defvar ido-mode-buffer-map nil + "Keymap for ido buffer commands.") (defvar ido-file-history nil "History of files selected using `ido-find-file'.") @@ -1301,8 +1313,7 @@ (while e (setq d (car e) e (cdr e)) (if (not (consp d)) - (set-text-properties 0 (length d) nil d)))))) -) + (set-text-properties 0 (length d) nil d))))))) (defun ido-kill-emacs-hook () @@ -1333,6 +1344,8 @@ (t nil))) (ido-everywhere (if ido-everywhere 1 -1)) + (when ido-mode + (ido-init-mode-maps)) (when ido-mode (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup) @@ -1391,12 +1404,11 @@ ;;; IDO KEYMAP -(defun ido-define-mode-map () - "Set up the keymap for `ido'." - (let (map) - ;; generated every time so that it can inherit new functions. - - (setq map (copy-keymap minibuffer-local-map)) +(defun ido-init-mode-maps () + "Set up the keymaps used by `ido'." + + ;; Common map + (let ((map (make-sparse-keymap))) (define-key map "\C-a" 'ido-toggle-ignore) (define-key map "\C-c" 'ido-toggle-case) (define-key map "\C-e" 'ido-edit-input) @@ -1414,57 +1426,90 @@ (define-key map [right] 'ido-next-match) (define-key map [left] 'ido-prev-match) (define-key map "?" 'ido-completion-help) - ;; Magic commands. (define-key map "\C-b" 'ido-magic-backward-char) (define-key map "\C-f" 'ido-magic-forward-char) (define-key map "\C-d" 'ido-magic-delete-char) - - (when (memq ido-cur-item '(file dir)) - (define-key map "\C-x\C-b" (or ido-context-switch-command 'ido-enter-switch-buffer)) - (define-key map "\C-x\C-f" 'ido-fallback-command) - (define-key map "\C-x\C-d" (or (and ido-context-switch-command 'ignore) 'ido-enter-dired)) - (define-key map [down] 'ido-next-match-dir) - (define-key map [up] 'ido-prev-match-dir) - (define-key map [(meta up)] 'ido-prev-work-directory) - (define-key map [(meta down)] 'ido-next-work-directory) - (define-key map [backspace] 'ido-delete-backward-updir) - (define-key map "\d" 'ido-delete-backward-updir) - (define-key map [(meta backspace)] 'ido-delete-backward-word-updir) - (define-key map [(control backspace)] 'ido-up-directory) - (define-key map "\C-l" 'ido-reread-directory) - (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir) - (define-key map [(meta ?b)] 'ido-push-dir) - (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir) - (define-key map [(meta ?k)] 'ido-forget-work-directory) - (define-key map [(meta ?m)] 'ido-make-directory) - (define-key map [(meta ?n)] 'ido-next-work-directory) - (define-key map [(meta ?o)] 'ido-prev-work-file) - (define-key map [(meta control ?o)] 'ido-next-work-file) - (define-key map [(meta ?p)] 'ido-prev-work-directory) - (define-key map [(meta ?s)] 'ido-merge-work-directories) - ) - - (when (eq ido-cur-item 'file) - (define-key map "\C-k" 'ido-delete-file-at-head) - (define-key map "\C-o" 'ido-copy-current-word) - (define-key map "\C-w" 'ido-copy-current-file-name) - (define-key map [(meta ?l)] 'ido-toggle-literal) - (define-key map "\C-v" 'ido-toggle-vc) - ) - - (when (eq ido-cur-item 'buffer) - (define-key map "\C-x\C-f" (or ido-context-switch-command 'ido-enter-find-file)) - (define-key map "\C-x\C-b" 'ido-fallback-command) - (define-key map "\C-k" 'ido-kill-buffer-at-head) - ) - - (when (if (boundp 'viper-mode) viper-mode) - (define-key map [remap viper-intercept-ESC-key] 'ignore) - (when (memq ido-cur-item '(file dir)) + (set-keymap-parent map minibuffer-local-map) + (setq ido-mode-common-map map)) + + ;; File and directory map + (let ((map (make-sparse-keymap))) + (define-key map "\C-x\C-b" 'ido-enter-switch-buffer) + (define-key map "\C-x\C-f" 'ido-fallback-command) + (define-key map "\C-x\C-d" 'ido-enter-dired) + (define-key map [down] 'ido-next-match-dir) + (define-key map [up] 'ido-prev-match-dir) + (define-key map [(meta up)] 'ido-prev-work-directory) + (define-key map [(meta down)] 'ido-next-work-directory) + (define-key map [backspace] 'ido-delete-backward-updir) + (define-key map "\d" 'ido-delete-backward-updir) + (define-key map [(meta backspace)] 'ido-delete-backward-word-updir) + (define-key map [(control backspace)] 'ido-up-directory) + (define-key map "\C-l" 'ido-reread-directory) + (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir) + (define-key map [(meta ?b)] 'ido-push-dir) + (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir) + (define-key map [(meta ?k)] 'ido-forget-work-directory) + (define-key map [(meta ?m)] 'ido-make-directory) + (define-key map [(meta ?n)] 'ido-next-work-directory) + (define-key map [(meta ?o)] 'ido-prev-work-file) + (define-key map [(meta control ?o)] 'ido-next-work-file) + (define-key map [(meta ?p)] 'ido-prev-work-directory) + (define-key map [(meta ?s)] 'ido-merge-work-directories) + (set-keymap-parent map ido-mode-common-map) + (setq ido-mode-file-dir-map map)) + + ;; File only map + (let ((map (make-sparse-keymap))) + (define-key map "\C-k" 'ido-delete-file-at-head) + (define-key map "\C-o" 'ido-copy-current-word) + (define-key map "\C-w" 'ido-copy-current-file-name) + (define-key map [(meta ?l)] 'ido-toggle-literal) + (define-key map "\C-v" 'ido-toggle-vc) + (set-keymap-parent map ido-mode-file-dir-map) + (setq ido-mode-file-map map)) + + ;; Buffer map + (let ((map (make-sparse-keymap))) + (define-key map "\C-x\C-f" 'ido-enter-find-file) + (define-key map "\C-x\C-b" 'ido-fallback-command) + (define-key map "\C-k" 'ido-kill-buffer-at-head) + (set-keymap-parent map ido-mode-common-map) + (setq ido-mode-buffer-map map))) + + +(defun ido-define-mode-map () + "Set up the keymap for `ido'." + + ;; generated every time so that it can inherit new functions. + (let ((map (make-sparse-keymap)) + (viper-p (if (boundp 'viper-mode) viper-mode))) + + (when viper-p + (define-key map [remap viper-intercept-ESC-key] 'ignore)) + + (cond + ((memq ido-cur-item '(file dir)) + (when ido-context-switch-command + (define-key map "\C-x\C-b" ido-context-switch-command) + (define-key map "\C-x\C-d" 'ignore)) + (when viper-p (define-key map [remap viper-backward-char] 'ido-delete-backward-updir) (define-key map [remap viper-del-backward-char-in-insert] 'ido-delete-backward-updir) - (define-key map [remap viper-delete-backward-word] 'ido-delete-backward-word-updir))) + (define-key map [remap viper-delete-backward-word] 'ido-delete-backward-word-updir)) + (set-keymap-parent map + (if (eq ido-cur-item 'file) + ido-mode-file-map + ido-mode-file-dir-map))) + + ((eq ido-cur-item 'buffer) + (when ido-context-switch-command + (define-key map "\C-x\C-f" ido-context-switch-command)) + (set-keymap-parent map ido-mode-buffer-map)) + + (t + (set-keymap-parent map ido-mode-common-map))) (setq ido-mode-map map))) @@ -3625,7 +3670,7 @@ displayed if substring-matching is used \(default). Look at `ido-enable-prefix' and `ido-toggle-prefix'. When you have found the buffer you want, it can then be selected. As you type, most keys have -their normal keybindings, except for the following: \\<ido-mode-map> +their normal keybindings, except for the following: \\<ido-mode-buffer-map> RET Select the buffer at the front of the list of matches. If the list is empty, possibly prompt to create new buffer. @@ -3713,7 +3758,7 @@ if substring-matching is used \(default). Look at `ido-enable-prefix' and `ido-toggle-prefix'. When you have found the filename you want, it can then be selected. As you type, most keys have their normal keybindings, -except for the following: \\<ido-mode-map> +except for the following: \\<ido-mode-file-map> RET Select the file at the front of the list of matches. If the list is empty, possibly prompt to create new file. @@ -3732,7 +3777,7 @@ \\[ido-merge-work-directories] search for file in the work directory history. \\[ido-forget-work-directory] removes current directory from the work directory history. \\[ido-prev-work-file] or \\[ido-next-work-file] cycle through the work file history. -\\[ido-wide-find-file] and \\[ido-wide-find-dir] prompts and uses find to locate files or directories. +\\[ido-wide-find-file-or-pop-dir] and \\[ido-wide-find-dir-or-delete-dir] prompts and uses find to locate files or directories. \\[ido-make-directory] prompts for a directory to create in current directory. \\[ido-fallback-command] Fallback to non-ido version of current command. \\[ido-toggle-regexp] Toggle regexp searching.
--- a/lisp/info.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/info.el Sat Dec 03 14:25:50 2005 +0000 @@ -290,8 +290,7 @@ (defvar Info-current-file nil "Info file that Info is now looking at, or nil. This is the name that was specified in Info, not the actual file name. -It doesn't contain directory names or file name extensions added by Info. -Can also be t when using `Info-on-current-buffer'.") +It doesn't contain directory names or file name extensions added by Info.") (defvar Info-current-subfile nil "Info subfile that is actually in the *info* buffer now. @@ -691,12 +690,13 @@ ;; Go into Info buffer. (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*")) ;; Record the node we are leaving. - (if (and Info-current-file (not no-going-back)) + (if (not no-going-back) (setq Info-history (cons (list Info-current-file Info-current-node (point)) Info-history))) (Info-find-node-2 filename nodename no-going-back)) +;;;###autoload (defun Info-on-current-buffer (&optional nodename) "Use the `Info-mode' to browse the current Info buffer. If a prefix arg is provided, it queries for the NODENAME which @@ -708,7 +708,10 @@ (unless nodename (setq nodename "Top")) (info-initialize) (Info-mode) - (set (make-local-variable 'Info-current-file) t) + (set (make-local-variable 'Info-current-file) + (or buffer-file-name + ;; If called on a non-file buffer, make a fake file name. + (concat default-directory (buffer-name)))) (Info-find-node-2 nil nodename)) ;; It's perhaps a bit nasty to kill the *info* buffer to force a re-read, @@ -726,8 +729,7 @@ (pline (count-lines (point-min) (line-beginning-position))) (wline (count-lines (point-min) (window-start))) (old-history Info-history) - (new-history (and Info-current-file - (list Info-current-file Info-current-node (point))))) + (new-history (list Info-current-file Info-current-node (point)))) (kill-buffer (current-buffer)) (Info-find-node filename nodename) (setq Info-history old-history) @@ -1400,12 +1402,10 @@ (nconc (propertized-buffer-identification "%b") (list (concat " (" - (file-name-nondirectory - (if (stringp Info-current-file) - Info-current-file - (or buffer-file-name ""))) - ") " - (or Info-current-node "")))))) + (if Info-current-file + (file-name-nondirectory Info-current-file) + " ") + ") " (or Info-current-node "")))))) ;; Go to an Info node specified with a filename-and-nodename string ;; of the sort that is found in pointers in nodes. @@ -1884,7 +1884,7 @@ (let ((old-node Info-current-node) (old-file Info-current-file) (node (Info-extract-pointer "up")) p) - (and (or same-file (not (stringp Info-current-file))) + (and same-file (string-match "^(" node) (error "Up node is in another Info file")) (Info-goto-node node) @@ -3266,12 +3266,8 @@ (interactive "P") (unless Info-current-node (error "No current Info node")) - (let ((node (concat "(" (file-name-nondirectory - (or (and (stringp Info-current-file) - Info-current-file) - buffer-file-name - "")) - ")" Info-current-node))) + (let ((node (concat "(" (file-name-nondirectory Info-current-file) ")" + Info-current-node))) (if (zerop (prefix-numeric-value arg)) (setq node (concat "(info \"" node "\")"))) (kill-new node) @@ -3804,23 +3800,19 @@ (and (not (equal (match-string 4) "")) (match-string 4)) (match-string 2))))) - (file (file-name-nondirectory - Info-current-file)) + (file Info-current-file) (hl Info-history-list) res) (if (string-match "(\\([^)]+\\))\\([^)]*\\)" node) - (setq file (file-name-nondirectory - (match-string 1 node)) + (setq file (Info-find-file (match-string 1 node) t) node (if (equal (match-string 2 node) "") "Top" (match-string 2 node)))) - (while hl - (if (and (string-equal node (nth 1 (car hl))) - (string-equal file - (file-name-nondirectory - (nth 0 (car hl))))) - (setq res (car hl) hl nil) - (setq hl (cdr hl)))) + (while hl + (if (and (string-equal node (nth 1 (car hl))) + (string-equal file (nth 0 (car hl)))) + (setq res (car hl) hl nil) + (setq hl (cdr hl)))) res))) 'info-xref-visited 'info-xref)) ;; For multiline ref, unfontify newline and surrounding whitespace (save-excursion @@ -3913,22 +3905,19 @@ (let ((node (if (equal (match-string 3) "") (match-string 1) (match-string 3))) - (file (file-name-nondirectory Info-current-file)) + (file Info-current-file) (hl Info-history-list) res) (if (string-match "(\\([^)]+\\))\\([^)]*\\)" node) - (setq file (file-name-nondirectory - (match-string 1 node)) + (setq file (Info-find-file (match-string 1 node) t) node (if (equal (match-string 2 node) "") "Top" (match-string 2 node)))) - (while hl - (if (and (string-equal node (nth 1 (car hl))) - (string-equal file - (file-name-nondirectory - (nth 0 (car hl))))) - (setq res (car hl) hl nil) - (setq hl (cdr hl)))) + (while hl + (if (and (string-equal node (nth 1 (car hl))) + (string-equal file (nth 0 (car hl)))) + (setq res (car hl) hl nil) + (setq hl (cdr hl)))) res))) 'info-xref-visited 'info-xref))) (when (and not-fontified-p (memq Info-hide-note-references '(t hide))) (put-text-property (match-beginning 2) (1- (match-end 6)) @@ -4121,7 +4110,7 @@ NODESPEC is a string of the form: (file)node." (save-excursion ;; Set up a buffer we can use to fake-out Info. - (set-buffer (get-buffer-create "*info-browse-tmp*")) + (set-buffer (get-buffer-create " *info-browse-tmp*")) (if (not (equal major-mode 'Info-mode)) (Info-mode)) ;; Get the node into this buffer
--- a/lisp/international/latexenc.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/international/latexenc.el Sat Dec 03 14:25:50 2005 +0000 @@ -78,7 +78,8 @@ ("next" . next) ; The Next encoding ("utf8" . utf-8) ("utf8x" . utf-8)) ; used by the Unicode LaTeX package - "Mapping from encoding names used by LaTeX's \"inputenc.sty\" to Emacs coding systems. + "Mapping from LaTeX encodings to Emacs coding systems. +LaTeX encodings are specified with \"\\usepackage[encoding]{inputenc}\". Used by the function `latexenc-find-file-coding-system'." :group 'files :group 'mule
--- a/lisp/isearch.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/isearch.el Sat Dec 03 14:25:50 2005 +0000 @@ -386,6 +386,8 @@ (define-key map [iconify-frame] nil) (define-key map [make-frame-visible] nil) (define-key map [mouse-movement] nil) + (define-key map [language-change] nil) + ;; For searching multilingual text. (define-key map "\C-\\" 'isearch-toggle-input-method) (define-key map "\C-^" 'isearch-toggle-specified-input-method) @@ -1138,15 +1140,16 @@ ;; C-s in forward or C-r in reverse. (if (equal isearch-string "") ;; If search string is empty, use last one. - (setq isearch-string - (or (if isearch-regexp - (car regexp-search-ring) - (car search-ring)) - (error "No previous search string")) - isearch-message - (mapconcat 'isearch-text-char-description - isearch-string "") - isearch-case-fold-search isearch-last-case-fold-search) + (if (null (if isearch-regexp regexp-search-ring search-ring)) + (setq isearch-error "No previous search string") + (setq isearch-string + (if isearch-regexp + (car regexp-search-ring) + (car search-ring)) + isearch-message + (mapconcat 'isearch-text-char-description + isearch-string "") + isearch-case-fold-search isearch-last-case-fold-search)) ;; If already have what to search for, repeat it. (or isearch-success (progn
--- a/lisp/loadup.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/loadup.el Sat Dec 03 14:25:50 2005 +0000 @@ -134,11 +134,13 @@ (load "frame") (load "term/tty-colors") (load "font-core") +;; facemenu must be loaded before font-lock, because `facemenu-keymap' +;; needs to be defined when font-lock is loaded. +(load "facemenu") (load "emacs-lisp/syntax") (load "font-lock") (load "jit-lock") -(load "facemenu") (if (fboundp 'track-mouse) (progn (load "mouse")
--- a/lisp/log-edit.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/log-edit.el Sat Dec 03 14:25:50 2005 +0000 @@ -120,8 +120,10 @@ log-edit-insert-changelog) "*Hook run at the end of `log-edit'." :group 'log-edit - :type '(hook :options (log-edit-insert-cvs-template - log-edit-insert-changelog))) + :type '(hook :options (log-edit-insert-changelog + log-edit-insert-cvs-rcstemplate + log-edit-insert-cvs-template + log-edit-insert-filenames))) (defcustom log-edit-mode-hook (if (boundp 'vc-log-mode-hook) vc-log-mode-hook) "*Hook run when entering `log-edit-mode'." @@ -281,20 +283,13 @@ (insert "\n")))) ;; Compatibility with old names. -(defvaralias 'vc-comment-ring 'log-edit-comment-ring) -(make-obsolete-variable 'vc-comment-ring 'log-edit-comment-ring "22.1") -(defvaralias 'vc-comment-ring-index 'log-edit-comment-ring-index) -(make-obsolete-variable 'vc-comment-ring-index 'log-edit-comment-ring-index "22.1") -(defalias 'vc-previous-comment 'log-edit-previous-comment) -(make-obsolete 'vc-previous-comment 'log-edit-previous-comment "22.1") -(defalias 'vc-next-comment 'log-edit-next-comment) -(make-obsolete 'vc-next-comment 'log-edit-next-comment "22.1") -(defalias 'vc-comment-search-reverse 'log-edit-comment-search-backward) -(make-obsolete 'vc-comment-search-reverse 'log-edit-comment-search-backward "22.1") -(defalias 'vc-comment-search-forward 'log-edit-comment-search-forward) -(make-obsolete 'vc-comment-search-forward 'log-edit-comment-search-forward "22.1") -(defalias 'vc-comment-to-change-log 'log-edit-comment-to-change-log) -(make-obsolete 'vc-comment-to-change-log 'log-edit-comment-to-change-log "22.1") +(define-obsolete-variable-alias 'vc-comment-ring 'log-edit-comment-ring "22.1") +(define-obsolete-variable-alias 'vc-comment-ring-index 'log-edit-comment-ring-index "22.1") +(define-obsolete-function-alias 'vc-previous-comment 'log-edit-previous-comment "22.1") +(define-obsolete-function-alias 'vc-next-comment 'log-edit-next-comment "22.1") +(define-obsolete-function-alias 'vc-comment-search-reverse 'log-edit-comment-search-backward "22.1") +(define-obsolete-function-alias 'vc-comment-search-forward 'log-edit-comment-search-forward "22.1") +(define-obsolete-function-alias 'vc-comment-to-change-log 'log-edit-comment-to-change-log "22.1") ;;; ;;; Actual code @@ -396,31 +391,6 @@ "Return the list of files that are about to be committed." (ignore-errors (funcall log-edit-listfun))) - -(defun log-edit-insert-changelog () - "Insert a log message by looking at the ChangeLog. -The idea is to write your ChangeLog entries first, and then use this -command to commit your changes. - -To select default log text, we: -- find the ChangeLog entries for the files to be checked in, -- verify that the top entry in the ChangeLog is on the current date - and by the current user; if not, we don't provide any default text, -- search the ChangeLog entry for paragraphs containing the names of - the files we're checking in, and finally -- use those paragraphs as the log text." - (interactive) - (log-edit-insert-changelog-entries (log-edit-files)) - (log-edit-set-common-indentation) - (goto-char (point-min)) - (when (looking-at "\\*\\s-+") - (forward-line 1) - (when (not (re-search-forward "^\\*\\s-+" nil t)) - (goto-char (point-min)) - (skip-chars-forward "^():") - (skip-chars-forward ": ") - (delete-region (point-min) (point))))) - (defun log-edit-mode-help () "Provide help for the `log-edit-mode-map'." (interactive) @@ -465,11 +435,29 @@ (selected-window))))) (defun log-edit-insert-cvs-template () - "Insert the template specified by the CVS administrator, if any." + "Insert the template specified by the CVS administrator, if any. +This simply uses the local CVS/Template file." + (interactive) + (when (or (interactive-p) (= (point-min) (point-max))) + (when (file-readable-p "CVS/Template") + (insert-file-contents "CVS/Template")))) + +(defun log-edit-insert-cvs-rcstemplate () + "Insert the rcstemplate from the CVS repository. +This contacts the repository to get the rcstemplate file and +can thus take some time." (interactive) - (when (file-readable-p "CVS/Template") - (insert-file-contents "CVS/Template"))) + (when (or (interactive-p) (= (point-min) (point-max))) + (when (file-readable-p "CVS/Root") + ;; Ignore the stderr stuff, even if it's an error. + (call-process "cvs" nil '(t nil) nil + "checkout" "-p" "CVSROOT/rcstemplate")))) +(defun log-edit-insert-filenames () + "Insert the list of files that are to be committed." + (interactive) + (insert "Affected files: \n" + (mapconcat 'identity (log-edit-files) " \n"))) (defun log-edit-add-to-changelog () "Insert this log message into the appropriate ChangeLog file." @@ -482,6 +470,37 @@ (save-excursion (log-edit-comment-to-change-log))))) +(defvar log-edit-changelog-use-first nil) +(defun log-edit-insert-changelog (&optional use-first) + "Insert a log message by looking at the ChangeLog. +The idea is to write your ChangeLog entries first, and then use this +command to commit your changes. + +To select default log text, we: +- find the ChangeLog entries for the files to be checked in, +- verify that the top entry in the ChangeLog is on the current date + and by the current user; if not, we don't provide any default text, +- search the ChangeLog entry for paragraphs containing the names of + the files we're checking in, and finally +- use those paragraphs as the log text. + +If the optional prefix arg USE-FIRST is given (via \\[universal-argument]), +or if the command is repeated a second time in a row, use the first log entry +regardless of user name or time." + (interactive "P") + (let ((log-edit-changelog-use-first + (or use-first (eq last-command 'log-edit-insert-changelog)))) + (log-edit-insert-changelog-entries (log-edit-files))) + (log-edit-set-common-indentation) + (goto-char (point-min)) + (when (looking-at "\\*\\s-+") + (forward-line 1) + (when (not (re-search-forward "^\\*\\s-+" nil t)) + (goto-char (point-min)) + (skip-chars-forward "^():") + (skip-chars-forward ": ") + (delete-region (point-min) (point))))) + ;;;; ;;;; functions for getting commit message from ChangeLog a file... ;;;; Courtesy Jim Blandy @@ -561,7 +580,9 @@ (functionp add-log-time-format) (funcall add-log-time-format)) (format-time-string "%Y-%m-%d")))) - (looking-at (regexp-quote (format "%s %s <%s>" time name mail))))) + (looking-at (if log-edit-changelog-use-first + "[^ \t]" + (regexp-quote (format "%s %s <%s>" time name mail)))))) (defun log-edit-changelog-entries (file) "Return the ChangeLog entries for FILE, and the ChangeLog they came from.
--- a/lisp/longlines.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/longlines.el Sat Dec 03 14:25:50 2005 +0000 @@ -136,6 +136,7 @@ ;; Hacks to make longlines play nice with various modes. (cond ((eq major-mode 'mail-mode) + (add-hook 'mail-setup-hook 'longlines-decode-buffer nil t) (or mail-citation-hook (add-hook 'mail-citation-hook 'mail-indent-citation nil t)) (add-hook 'mail-citation-hook 'longlines-decode-region nil t)) @@ -246,17 +247,21 @@ nil) (if (longlines-merge-lines-p) (progn (end-of-line) - (delete-char 1) ;; After certain commands (e.g. kill-line), there may be two ;; successive soft newlines in the buffer. In this case, we ;; replace these two newlines by a single space. Unfortunately, ;; this breaks the conservation of (spaces + newlines), so we ;; have to fiddle with longlines-wrap-point. - (if (or (bolp) (eolp)) - (if (> longlines-wrap-point (point)) - (setq longlines-wrap-point - (1- longlines-wrap-point))) - (insert-char ? 1)) + (if (or (prog1 (bolp) (forward-char 1)) (eolp)) + (progn + (delete-char -1) + (if (> longlines-wrap-point (point)) + (setq longlines-wrap-point + (1- longlines-wrap-point)))) + (insert-before-markers-and-inherit ?\ ) + (backward-char 1) + (delete-char -1) + (forward-char 1)) nil) (forward-line 1) t)))
--- a/lisp/ls-lisp.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/ls-lisp.el Sat Dec 03 14:25:50 2005 +0000 @@ -45,8 +45,6 @@ ;; * A few obscure ls switches are still ignored: see the docstring of ;; `insert-directory'. -;; * Generally only numeric uid/gid. - ;; TO DO ============================================================= ;; Complete handling of F switch (if/when possible). @@ -61,8 +59,8 @@ ;; Revised by Andrew Innes and Geoff Volker (and maybe others). ;; Modified by Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>, mainly -;; to support many more ls options, "platform emulation", hooks for -;; external symbolic link support and more robust sorting. +;; to support many more ls options, "platform emulation" and more +;; robust sorting. ;;; Code: @@ -175,14 +173,6 @@ (or (featurep 'ls-lisp) ; FJW: unless this file is being reloaded! (setq original-insert-directory (symbol-function 'insert-directory))) -;; This stub is to allow ls-lisp to parse symbolic links via another -;; library such as w32-symlinks.el from -;; http://centaur.maths.qmw.ac.uk/Emacs/: -(defun ls-lisp-parse-symlink (file-name) - "This stub may be redefined to parse FILE-NAME as a symlink. -It should return nil or the link target as a string." - nil) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -429,7 +419,9 @@ ;; symbolic link, or nil. (let (el dirs files) (while file-alist - (if (eq (cadr (setq el (car file-alist))) t) ; directory + (if (or (eq (cadr (setq el (car file-alist))) t) ; directory + (and (stringp (cadr el)) + (file-directory-p (cadr el)))) ; symlink to a directory (setq dirs (cons el dirs)) (setq files (cons el files))) (setq file-alist (cdr file-alist))) @@ -455,12 +447,11 @@ \[But FIFOs and sockets are not recognized.] FILEDATA has the form (filename . `file-attributes'). Its `cadr' is t for directory, string (name linked to) for symbolic link, or nil." - (let ((dir (cadr filedata)) (file-name (car filedata))) - (cond ((or dir - ;; Parsing .lnk files here is perhaps overkill! - (setq dir (ls-lisp-parse-symlink file-name))) + (let ((file-name (car filedata)) + (type (cadr filedata))) + (cond (type (cons - (concat file-name (if (eq dir t) "/" "@")) + (concat file-name (if (eq type t) "/" "@")) (cdr filedata))) ((string-match "x" (nth 9 filedata)) (cons @@ -506,10 +497,6 @@ ;; t for directory, string (name linked to) ;; for symbolic link, or nil. (drwxrwxrwx (nth 8 file-attr))) ; attribute string ("drwxrwxrwx") - (and (null file-type) - ;; Maybe no kernel support for symlinks, so... - (setq file-type (ls-lisp-parse-symlink file-name)) - (aset drwxrwxrwx 0 ?l)) ; symbolic link - update attribute string (concat (if (memq ?i switches) ; inode number (format " %6d" (nth 10 file-attr))) ;; nil is treated like "" in concat
--- a/lisp/mail/mailheader.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/mail/mailheader.el Sat Dec 03 14:25:50 2005 +0000 @@ -146,7 +146,7 @@ (insert (capitalize (symbol-name header)) ": " (if (consp value) (car value) value) - hard-newline))) + "\n"))) (defun mail-header-format (format-rules headers) "Use FORMAT-RULES to format HEADERS and insert into current buffer. @@ -187,7 +187,7 @@ (if (cdr rule) (funcall (cdr rule) header value) (funcall mail-header-format-function header value)))))) - (insert hard-newline))) + (insert "\n"))) (provide 'mailheader)
--- a/lisp/mail/sendmail.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/mail/sendmail.el Sat Dec 03 14:25:50 2005 +0000 @@ -446,7 +446,7 @@ ;; has been called and has done so. (let ((fill-prefix "\t") (address-start (point))) - (insert to hard-newline) + (insert to "\n") (fill-region-as-paragraph address-start (point-max)) (goto-char (point-max)) (unless (bolp) @@ -455,7 +455,7 @@ (if cc (let ((fill-prefix "\t") (address-start (progn (insert "CC: ") (point)))) - (insert cc hard-newline) + (insert cc "\n") (fill-region-as-paragraph address-start (point-max)) (goto-char (point-max)) (unless (bolp) @@ -464,23 +464,23 @@ (let ((fill-prefix "\t") (fill-column 78) (address-start (point))) - (insert "In-reply-to: " in-reply-to hard-newline) + (insert "In-reply-to: " in-reply-to "\n") (fill-region-as-paragraph address-start (point-max)) (goto-char (point-max)) (unless (bolp) (newline)))) - (insert "Subject: " (or subject "") hard-newline) + (insert "Subject: " (or subject "") "\n") (if mail-default-headers (insert mail-default-headers)) (if mail-default-reply-to - (insert "Reply-to: " mail-default-reply-to hard-newline)) + (insert "Reply-to: " mail-default-reply-to "\n")) (if mail-self-blind - (insert "BCC: " user-mail-address hard-newline)) + (insert "BCC: " user-mail-address "\n")) (if mail-archive-file-name - (insert "FCC: " mail-archive-file-name hard-newline)) + (insert "FCC: " mail-archive-file-name "\n")) (put-text-property (point) (progn - (insert mail-header-separator hard-newline) + (insert mail-header-separator "\n") (1- (point))) 'category 'mail-header-separator) ;; Insert the signature. But remember the beginning of the message. @@ -488,7 +488,7 @@ (cond ((eq mail-signature t) (if (file-exists-p mail-signature-file) (progn - (insert hard-newline hard-newline "-- " hard-newline) + (insert "\n\n-- \n") (insert-file-contents mail-signature-file)))) ((stringp mail-signature) (insert mail-signature)) @@ -835,14 +835,14 @@ (split-string new-header-values ",[[:space:]]+" t)) (mapconcat 'identity l ", ")) - hard-newline)) + "\n")) ;; Add Mail-Reply-To if none yet (unless (mail-fetch-field "mail-reply-to") (goto-char (mail-header-end)) (insert "Mail-Reply-To: " (or (mail-fetch-field "reply-to") user-mail-address) - hard-newline)))))) + "\n")))))) (unless (memq mail-send-nonascii '(t mime)) (goto-char (point-min)) (skip-chars-forward "\0-\177") @@ -931,7 +931,7 @@ fullname-end 1) (replace-match "\\\\\\&" t)) (insert "\"")))) - (insert " <" login ">" hard-newline)) + (insert " <" login ">\n")) ((eq mail-from-style 'parens) (insert "From: " login " (") (let ((fullname-start (point))) @@ -955,9 +955,9 @@ fullname-end 1) (replace-match "\\1(\\3)" t) (goto-char fullname-start)))) - (insert ")" hard-newline)) + (insert ")\n")) ((null mail-from-style) - (insert "From: " login hard-newline)) + (insert "From: " login "\n")) ((eq mail-from-style 'system-default) nil) (t (error "Invalid value for `mail-from-style'"))))) @@ -996,7 +996,7 @@ (goto-char (point-max)) ;; require one newline at the end. (or (= (preceding-char) ?\n) - (insert hard-newline)) + (insert ?\n)) ;; Change header-delimiter to be what sendmail expects. (goto-char (mail-header-end)) (delete-region (point) (progn (end-of-line) (point))) @@ -1008,7 +1008,7 @@ ;; Ignore any blank lines in the header (while (and (re-search-forward "\n\n\n*" delimline t) (< (point) delimline)) - (replace-match hard-newline)) + (replace-match "\n")) (goto-char (point-min)) ;; Look for Resent- headers. They require sending ;; the message specially. @@ -1070,10 +1070,10 @@ (setq charset (coding-system-get selected-coding 'mime-charset)) (goto-char delimline) - (insert "MIME-version: 1.0" hard-newline + (insert "MIME-version: 1.0\n" "Content-type: text/plain; charset=" - (symbol-name charset) hard-newline - "Content-Transfer-Encoding: 8bit" hard-newline))) + (symbol-name charset) + "\nContent-Transfer-Encoding: 8bit\n"))) ;; Insert an extra newline if we need it to work around ;; Sun's bug that swallows newlines. (goto-char (1+ delimline)) @@ -1167,8 +1167,8 @@ (set-buffer tembuf) (erase-buffer) ;; This initial newline is written out if the fcc file already exists. - (insert hard-newline "From " (user-login-name) " " - (current-time-string time) hard-newline) + (insert "\nFrom " (user-login-name) " " + (current-time-string time) "\n") ;; Insert the time zone before the year. (forward-char -1) (forward-word -1) @@ -1178,7 +1178,7 @@ (insert-buffer-substring rmailbuf) ;; Make sure messages are separated. (goto-char (point-max)) - (insert hard-newline) + (insert ?\n) (goto-char 2) ;; ``Quote'' "^From " as ">From " ;; (note that this isn't really quoting, as there is no requirement @@ -1220,11 +1220,10 @@ (rmail-maybe-set-message-counters) (widen) (narrow-to-region (point-max) (point-max)) - (insert "\C-l" hard-newline "0, unseen,," - hard-newline "*** EOOH ***" hard-newline - "Date: " (mail-rfc822-date) hard-newline) + (insert "\C-l\n0, unseen,,\n*** EOOH ***\n" + "Date: " (mail-rfc822-date) "\n") (insert-buffer-substring curbuf beg2 end) - (insert hard-newline "\C-_") + (insert "\n\C-_") (goto-char (point-min)) (widen) (search-backward "\n\^_") @@ -1262,11 +1261,10 @@ (set-buffer (get-buffer-create " mail-temp")) (setq buffer-read-only nil) (erase-buffer) - (insert "\C-l" hard-newline "0, unseen,," hard-newline - "*** EOOH ***" hard-newline "Date: " - (mail-rfc822-date) hard-newline) + (insert "\C-l\n0, unseen,,\n*** EOOH ***\nDate: " + (mail-rfc822-date) "\n") (insert-buffer-substring curbuf beg2 end) - (insert hard-newline "\C-_") + (insert "\n\C-_") (write-region (point-min) (point-max) (car fcc-list) t) (erase-buffer))) (write-region @@ -1318,7 +1316,7 @@ (expand-abbrev) (or (mail-position-on-field "cc" t) (progn (mail-position-on-field "to") - (insert hard-newline "CC: ")))) + (insert "\nCC: ")))) (defun mail-bcc () "Move point to end of BCC-field. Create a BCC field if none." @@ -1326,7 +1324,7 @@ (expand-abbrev) (or (mail-position-on-field "bcc" t) (progn (mail-position-on-field "to") - (insert hard-newline "BCC: ")))) + (insert "\nBCC: ")))) (defun mail-fcc (folder) "Add a new FCC field, with file name completion." @@ -1334,7 +1332,7 @@ (expand-abbrev) (or (mail-position-on-field "fcc" t) ;Put new field after exiting FCC. (mail-position-on-field "to")) - (insert hard-newline "FCC: " folder)) + (insert "\nFCC: " folder)) (defun mail-reply-to () "Move point to end of Reply-To-field. Create a Reply-To field if none." @@ -1349,7 +1347,7 @@ (expand-abbrev) (or (mail-position-on-field "mail-reply-to" t) (progn (mail-position-on-field "to") - (insert hard-newline "Mail-Reply-To: ")))) + (insert "\nMail-Reply-To: ")))) (defun mail-mail-followup-to () "Move point to end of Mail-Followup-To field. @@ -1358,7 +1356,7 @@ (expand-abbrev) (or (mail-position-on-field "mail-followup-to" t) (progn (mail-position-on-field "to") - (insert hard-newline "Mail-Followup-To: ")))) + (insert "\nMail-Followup-To: ")))) (defun mail-position-on-field (field &optional soft) (let (end @@ -1373,7 +1371,7 @@ t) (or soft (progn (goto-char end) - (insert field ": " hard-newline) + (insert field ": \n") (skip-chars-backward "\n"))) nil))) @@ -1396,7 +1394,7 @@ (delete-region (point) (point-max))) (if (stringp mail-signature) (insert mail-signature) - (insert hard-newline hard-newline "-- " hard-newline) + (insert "\n\n-- \n") (insert-file-contents (expand-file-name mail-signature-file))))) (defun mail-fill-yanked-message (&optional justifyp) @@ -1482,7 +1480,7 @@ ;; loop would deactivate the mark because we inserted text. (goto-char (prog1 (mark t) (set-marker (mark-marker) (point) (current-buffer)))) - (if (not (eolp)) (insert hard-newline))))) + (if (not (eolp)) (insert ?\n))))) (defun mail-yank-clear-headers (start end) (if (< end start) @@ -1566,8 +1564,7 @@ (insert-char ?= (max 0 (- 60 (current-column)))) (newline) (setq middle (point)) - (insert "============================================================" - hard-newline) + (insert "============================================================\n") (push-mark) (goto-char middle) (insert-file-contents file)
--- a/lisp/mouse.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/mouse.el Sat Dec 03 14:25:50 2005 +0000 @@ -371,16 +371,9 @@ Move it down if GROWTH is positive, or up if GROWTH is negative. If this would make WINDOW too short, shrink the window or windows above it to make room." - (let ((excess (- window-min-height (+ (window-height window) growth)))) - ;; EXCESS is the number of lines we need to take from windows above. - (if (> excess 0) - ;; This can recursively shrink windows all the way up. - (let ((window-above (mouse-drag-window-above window))) - (if window-above - (mouse-drag-move-window-bottom window-above (- excess)))))) - (save-selected-window - (select-window window) - (enlarge-window growth nil (> growth 0)))) + (condition-case nil + (adjust-window-trailing-edge window growth nil) + (error nil))) (defsubst mouse-drag-move-window-top (window growth) "Move the top of WINDOW up or down by GROWTH lines.
--- a/lisp/net/goto-addr.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/net/goto-addr.el Sat Dec 03 14:25:50 2005 +0000 @@ -174,6 +174,7 @@ (overlay-put this-overlay 'evaporate t) (overlay-put this-overlay 'mouse-face goto-address-url-mouse-face) + (overlay-put this-overlay 'follow-link t) (overlay-put this-overlay 'help-echo "mouse-2, C-c RET: follow URL") (overlay-put this-overlay @@ -189,6 +190,7 @@ (overlay-put this-overlay 'evaporate t) (overlay-put this-overlay 'mouse-face goto-address-mail-mouse-face) + (overlay-put this-overlay 'follow-link t) (overlay-put this-overlay 'help-echo "mouse-2, C-c RET: mail this address") (overlay-put this-overlay @@ -210,7 +212,7 @@ there, then load the URL at or before point." (interactive (list last-input-event)) (save-excursion - (if event (mouse-set-point event)) + (if event (posn-set-point (event-end event))) (let ((address (save-excursion (goto-address-find-address-at-point)))) (if (and address (save-excursion
--- a/lisp/paren.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/paren.el Sat Dec 03 14:25:50 2005 +0000 @@ -110,14 +110,7 @@ When Show Paren mode is enabled, any matching parenthesis is highlighted in `show-paren-style' after `show-paren-delay' seconds of Emacs idle time." :global t :group 'paren-showing - ;; Turn off the usual paren-matching method - ;; when this one is turned on. - (if (local-variable-p 'show-paren-mode) - (make-local-variable 'blink-matching-paren-on-screen) - (kill-local-variable 'blink-matching-paren-on-screen)) - (setq blink-matching-paren-on-screen (not show-paren-mode)) - - ;; Now enable or disable the mechanism. + ;; Enable or disable the mechanism. ;; First get rid of the old idle timer. (if show-paren-idle-timer (cancel-timer show-paren-idle-timer))
--- a/lisp/progmodes/compile.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/progmodes/compile.el Sat Dec 03 14:25:50 2005 +0000 @@ -1335,19 +1335,18 @@ ;; jit-lock might fontify some things too late. (set (make-local-variable 'font-lock-support-mode) nil) (set (make-local-variable 'font-lock-maximum-size) nil) - (let ((fld font-lock-defaults)) - (if (and minor fld) + (if minor + (let ((fld font-lock-defaults)) (font-lock-add-keywords nil (compilation-mode-font-lock-keywords)) - (setq font-lock-defaults '(compilation-mode-font-lock-keywords t))) - (if minor (if font-lock-mode (if fld (font-lock-fontify-buffer) (font-lock-change-mode) (turn-on-font-lock)) - (turn-on-font-lock)) - ;; maybe defer font-lock till after derived mode is set up - (run-mode-hooks 'compilation-turn-on-font-lock)))) + (turn-on-font-lock))) + (setq font-lock-defaults '(compilation-mode-font-lock-keywords t)) + ;; maybe defer font-lock till after derived mode is set up + (run-mode-hooks 'compilation-turn-on-font-lock))) ;;;###autoload (define-minor-mode compilation-shell-minor-mode
--- a/lisp/progmodes/gdb-ui.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/progmodes/gdb-ui.el Sat Dec 03 14:25:50 2005 +0000 @@ -41,7 +41,7 @@ ;; You don't need to know about annotations to use this mode as a debugger, ;; but if you are interested developing the mode itself, then see the ;; Annotations section in the GDB info manual. -;; + ;; GDB developers plan to make the annotation interface obsolete. A new ;; interface called GDB/MI (machine interface) has been designed to replace ;; it. Some GDB/MI commands are used in this file through the CLI command @@ -49,26 +49,32 @@ ;; GDB (6.2 onwards) that uses GDB/MI as the primary interface to GDB. It is ;; still under development and is part of a process to migrate Emacs from ;; annotations to GDB/MI. -;; -;; This mode SHOULD WORK WITH GDB 5.0 ONWARDS but you will NEED GDB 6.0 -;; ONWARDS TO USE WATCH EXPRESSIONS. -;; -;; Windows Platforms: -;; + +;; This mode SHOULD WORK WITH GDB 5.0 onwards but you will NEED GDB 6.0 +;; onwards to use watch expressions. + +;;; Windows Platforms: + ;; If you are using Emacs and GDB on Windows you will need to flush the buffer ;; explicitly in your program if you want timely display of I/O in Emacs. ;; Alternatively you can make the output stream unbuffered, for example, by ;; using a macro: -;; + ;; #ifdef UNBUFFERED ;; setvbuf (stdout, (char *) NULL, _IONBF, 0); ;; #endif -;; + ;; and compiling with -DUNBUFFERED while debugging. -;; -;; Known Bugs: -;; -;; TODO: + +;;; Known Bugs: + +;; 1) Strings that are watched don't update in the speedbar when their +;; contents change. +;; 2) Watch expressions go out of scope when the inferior is re-run. +;; 3) Cannot handle multiple debug sessions. + +;;; TODO: + ;; 1) Use MI command -data-read-memory for memory window. ;; 2) Highlight changed register values (use MI commands ;; -data-list-register-values and -data-list-changed-registers instead @@ -397,6 +403,8 @@ 'gdb-mouse-until) (define-key gud-minor-mode-map [left-fringe drag-mouse-1] 'gdb-mouse-until) + (define-key gud-minor-mode-map [left-margin mouse-2] + 'gdb-mouse-until) (define-key gud-minor-mode-map [left-margin mouse-3] 'gdb-mouse-toggle-breakpoint-margin) (define-key gud-minor-mode-map [left-fringe mouse-3] @@ -471,6 +479,21 @@ (forward-char 2) (gud-call (concat "until *%a"))))))))) +(defcustom gdb-speedbar-auto-raise t + "If non-nil raise speedbar every time display of watch expressions is\ + updated." + :type 'boolean + :group 'gud + :version "22.1") + +(defun gdb-speedbar-auto-raise (arg) + "Toggle automatic raising of the speedbar for watch expressions." + (interactive "P") + (setq gdb-speedbar-auto-raise + (if (null arg) + (not gdb-speedbar-auto-raise) + (> (prefix-numeric-value arg) 0)))) + (defcustom gdb-use-colon-colon-notation nil "If non-nil use FUN::VAR format to display variables in the speedbar." :type 'boolean @@ -514,19 +537,16 @@ (unless (string-equal speedbar-initial-expansion-list-name "GUD") (speedbar-change-initial-expansion-list "GUD")) - (if (or (equal (nth 2 var) "0") - (and (equal (nth 2 var) "1") - (string-match "char \\*" (nth 3 var)))) - (gdb-enqueue-input - (list - (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) - 'gdba) - (concat "server interpreter mi \"-var-evaluate-expression " - (nth 1 var) "\"\n") - (concat "-var-evaluate-expression " (nth 1 var) "\n")) - `(lambda () (gdb-var-evaluate-expression-handler - ,(nth 1 var) nil)))) - (setq gdb-var-changed t))) + (gdb-enqueue-input + (list + (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) + 'gdba) + (concat "server interpreter mi \"-var-evaluate-expression " + (nth 1 var) "\"\n") + (concat "-var-evaluate-expression " (nth 1 var) "\n")) + `(lambda () (gdb-var-evaluate-expression-handler + ,(nth 1 var) nil)))) + (setq gdb-var-changed t)) (if (re-search-forward "Undefined command" nil t) (message-box "Watching expressions requires gdb 6.0 onwards") (message "No symbol \"%s\" in current context." expr))))) @@ -575,16 +595,13 @@ (if (string-equal (cadr var1) (cadr varchild)) (throw 'child-already-watched nil))) (push varchild var-list) - (if (or (equal (nth 2 varchild) "0") - (and (equal (nth 2 varchild) "1") - (string-match "char \\*" (nth 3 varchild)))) - (gdb-enqueue-input - (list - (concat - "server interpreter mi \"-var-evaluate-expression " - (nth 1 varchild) "\"\n") - `(lambda () (gdb-var-evaluate-expression-handler - ,(nth 1 varchild) nil)))))))) + (gdb-enqueue-input + (list + (concat + "server interpreter mi \"-var-evaluate-expression " + (nth 1 varchild) "\"\n") + `(lambda () (gdb-var-evaluate-expression-handler + ,(nth 1 varchild) nil))))))) (push var var-list))) (setq gdb-var-list (nreverse var-list)))))) @@ -604,16 +621,12 @@ (catch 'var-found-1 (let ((varnum (match-string 1))) (dolist (var gdb-var-list) - (when (and (string-equal varnum (cadr var)) - (or (equal (nth 2 var) "0") - (and (equal (nth 2 var) "1") - (string-match "char \\*" (nth 3 var))))) - (gdb-enqueue-input - (list - (concat "server interpreter mi \"-var-evaluate-expression " - varnum "\"\n") - `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))) - (throw 'var-found-1 nil))))))) + (gdb-enqueue-input + (list + (concat "server interpreter mi \"-var-evaluate-expression " + varnum "\"\n") + `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))) + (throw 'var-found-1 nil)))))) (setq gdb-pending-triggers (delq 'gdb-var-update gdb-pending-triggers)) (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) @@ -1005,6 +1018,7 @@ "An annotation handler for `pre-prompt'. This terminates the collection of output from a previous command if that happens to be in effect." + (setq gdb-error nil) (let ((sink gdb-output-sink)) (cond ((eq sink 'user) t) @@ -1097,6 +1111,7 @@ It is just like `gdb-stopping', except that if we already set the output sink to `user' in `gdb-stopping', that is fine." (setq gud-running nil) + (setq gdb-active-process t) (let ((sink gdb-output-sink)) (cond ((eq sink 'inferior) @@ -1458,11 +1473,11 @@ (gdb-put-breakpoint-icon (eq flag ?y) bptno))) (gdb-enqueue-input (list - (concat "list " + (concat gdb-server-prefix "list " (match-string-no-properties 1) ":1\n") 'ignore)) (gdb-enqueue-input - (list "info source\n" + (list (concat gdb-server-prefix "info source\n") `(lambda () (gdb-get-location ,bptno ,line ,flag)))))))))) (end-of-line))))) @@ -1497,7 +1512,7 @@ (list (let ((bptno (get-text-property 0 'gdb-bptno (car (posn-string posn))))) - (concat + (concat gdb-server-prefix (if (get-text-property 0 'gdb-enabled (car (posn-string posn))) "disable " @@ -1523,7 +1538,7 @@ (when (stringp obj) (gdb-enqueue-input (list - (concat + (concat gdb-server-prefix (if (get-text-property 0 'gdb-enabled obj) "disable " "enable ") @@ -1557,7 +1572,7 @@ (suppress-keymap map) (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) (define-key map " " 'gdb-toggle-breakpoint) - (define-key map "d" 'gdb-delete-breakpoint) + (define-key map "D" 'gdb-delete-breakpoint) (define-key map "q" 'kill-this-buffer) (define-key map "\r" 'gdb-goto-breakpoint) (define-key map [mouse-2] 'gdb-goto-breakpoint) @@ -1612,7 +1627,7 @@ (defun gdb-goto-breakpoint (&optional event) "Display the breakpoint location specified at current line." (interactive (list last-input-event)) - (if event (mouse-set-point event)) + (if event (posn-set-point (event-end event))) ;; Hack to stop gdb-goto-breakpoint displaying in GUD buffer. (let ((window (get-buffer-window gud-comint-buffer))) (if window (save-selected-window (select-window window)))) @@ -1661,7 +1676,7 @@ (while (< (point) (point-max)) (setq bl (line-beginning-position) el (line-end-position)) - (unless (looking-at "No ") + (when (looking-at "#") (add-text-properties bl el '(mouse-face highlight help-echo "mouse-2, RET: Select frame"))) @@ -1730,14 +1745,15 @@ (defun gdb-get-frame-number () (save-excursion (end-of-line) - (let* ((pos (re-search-backward "^#*\\([0-9]*\\)" nil t)) + (let* ((start (line-beginning-position)) + (pos (re-search-backward "^#*\\([0-9]+\\)" start t)) (n (or (and pos (match-string-no-properties 1)) "0"))) n))) (defun gdb-frames-select (&optional event) "Select the frame and display the relevant source." (interactive (list last-input-event)) - (if event (mouse-set-point event)) + (if event (posn-set-point (event-end event))) (gdb-enqueue-input (list (concat gdb-server-prefix "frame " (gdb-get-frame-number) "\n") 'ignore)) @@ -1790,6 +1806,7 @@ (define-key map "q" 'kill-this-buffer) (define-key map "\r" 'gdb-threads-select) (define-key map [mouse-2] 'gdb-threads-select) + (define-key map [follow-link] 'mouse-face) map)) (defvar gdb-threads-font-lock-keywords @@ -1822,9 +1839,10 @@ (defun gdb-threads-select (&optional event) "Select the thread and display the relevant source." (interactive (list last-input-event)) - (if event (mouse-set-point event)) + (if event (posn-set-point (event-end event))) (gdb-enqueue-input - (list (concat "thread " (gdb-get-thread-number) "\n") 'ignore)) + (list (concat gdb-server-prefix "thread " + (gdb-get-thread-number) "\n") 'ignore)) (gud-display-frame)) @@ -1851,19 +1869,36 @@ (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) (save-excursion (let ((buffer-read-only nil) - bl) + start end) (goto-char (point-min)) (while (< (point) (point-max)) - (setq bl (line-beginning-position)) + (setq start (line-beginning-position)) + (setq end (line-end-position)) (when (looking-at "^[^ ]+") (unless (string-equal (match-string 0) "The") - (put-text-property bl (match-end 0) - 'face font-lock-variable-name-face))) + (put-text-property start (match-end 0) + 'face font-lock-variable-name-face) + (add-text-properties start end + '(help-echo "mouse-2: edit value" + mouse-face highlight)))) (forward-line 1)))))) +(defun gdb-edit-register-value (&optional event) + (interactive (list last-input-event)) + (save-excursion + (if event (posn-set-point (event-end event))) + (beginning-of-line) + (let* ((register (current-word)) + (value (read-string (format "New value (%s): " register)))) + (gdb-enqueue-input + (list (concat gdb-server-prefix "set $" register "=" value "\n") + 'ignore))))) + (defvar gdb-registers-mode-map (let ((map (make-sparse-keymap))) (suppress-keymap map) + (define-key map "\r" 'gdb-edit-register-value) + (define-key map [mouse-2] 'gdb-edit-register-value) (define-key map " " 'toggle-gdb-all-registers) (define-key map "q" 'kill-this-buffer) map)) @@ -1907,9 +1942,9 @@ (setq gdb-all-registers nil) (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) (setq mode-name "Registers:"))) - (setq gdb-all-registers t) - (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) - (setq mode-name "Registers:All"))) + (setq gdb-all-registers t) + (with-current-buffer (gdb-get-buffer 'gdb-registers-buffer) + (setq mode-name "Registers:All"))) (gdb-invalidate-registers)) @@ -2245,13 +2280,13 @@ "Keymap to create watch expression of a complex data type local variable.") (defconst gdb-struct-string - (concat (propertize "[struct/union];" + (concat (propertize "[struct/union]" 'mouse-face 'highlight 'help-echo "mouse-2: create watch expression" 'local-map gdb-locals-watch-keymap) "\n")) (defconst gdb-array-string - (concat " " (propertize "[array];" + (concat " " (propertize "[array]" 'mouse-face 'highlight 'help-echo "mouse-2: create watch expression" 'local-map gdb-locals-watch-keymap) "\n"))
--- a/lisp/progmodes/gud.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/progmodes/gud.el Sat Dec 03 14:25:50 2005 +0000 @@ -52,6 +52,7 @@ (defvar gdb-show-changed-values) (defvar gdb-var-changed) (defvar gdb-var-list) +(defvar gdb-speedbar-auto-raise) (defvar tool-bar-map) ;; ====================================================================== @@ -410,6 +411,10 @@ (memq gud-minor-mode '(gdbmi gdba)))] ["Delete expression" gdb-var-delete (with-current-buffer gud-comint-buffer + (memq gud-minor-mode '(gdbmi gdba)))] + ["Auto raise frame" gdb-speedbar-auto-raise + :style toggle :selected gdb-speedbar-auto-raise + :visible (with-current-buffer gud-comint-buffer (memq gud-minor-mode '(gdbmi gdba)))]) "Additional menu items to add to the speedbar frame.") @@ -444,16 +449,18 @@ (looking-at "Watch Expressions:"))))) (erase-buffer) (insert "Watch Expressions:\n") + (if gdb-speedbar-auto-raise + (raise-frame speedbar-frame)) (let ((var-list gdb-var-list)) (while var-list - (let* ((depth 0) (start 0) (char ?+) + (let* (char (depth 0) (start 0) (var (car var-list)) (varnum (nth 1 var))) (while (string-match "\\." varnum start) (setq depth (1+ depth) start (1+ (match-beginning 0)))) (if (or (equal (nth 2 var) "0") (and (equal (nth 2 var) "1") - (string-match "char \\*" (nth 3 var)))) + (string-match "char \\*$" (nth 3 var)))) (speedbar-make-tag-line 'bracket ?? nil nil (concat (car var) "\t" (nth 4 var)) 'gdb-edit-value @@ -463,12 +470,25 @@ 'font-lock-warning-face nil) depth) (if (and (cadr var-list) - (string-match varnum (cadr (cadr var-list)))) - (setq char ?-)) + (string-match (concat varnum "\\.") + (cadr (cadr var-list)))) + (setq char ?-) + (setq char ?+)) + (if (string-match "\\*$" (nth 3 var)) + (speedbar-make-tag-line 'bracket char + 'gdb-speedbar-expand-node varnum + (concat (car var) "\t" + (nth 3 var)"\t" + (nth 4 var)) + 'gdb-edit-value nil + (if (and (nth 5 var) + gdb-show-changed-values) + 'font-lock-warning-face + nil) depth) (speedbar-make-tag-line 'bracket char 'gdb-speedbar-expand-node varnum (concat (car var) "\t" (nth 3 var)) - nil nil nil depth))) + nil nil nil depth)))) (setq var-list (cdr var-list)))) (setq gdb-var-changed nil))) (t (if (and (save-excursion @@ -556,6 +576,11 @@ ;; they are found. (while (string-match "\n\032\032\\(.*\\)\n" gud-marker-acc) (let ((match (match-string 1 gud-marker-acc))) + + ;; Pick up stopped annotation if attaching to process. + (if (string-equal match "stopped") (setq gdb-active-process t)) + + ;; Using annotations, switch to gud-gdba-marker-filter. (when (string-equal match "prompt") (require 'gdb-ui) (gdb-prompt nil)) @@ -569,6 +594,8 @@ ;; Set the accumulator to the remaining text. gud-marker-acc (substring gud-marker-acc (match-end 0))) + + ;; Pick up any errors that occur before first prompt annotation. (if (string-equal match "error-begin") (put-text-property 0 (length gud-marker-acc) 'face font-lock-warning-face @@ -3079,6 +3106,8 @@ ("\\$\\(\\w+\\)" (1 font-lock-variable-name-face)) ("^\\s-*\\([a-z]+\\)" (1 font-lock-keyword-face)))) +;; FIXME: The keyword "end" associated with "document" +;; should have font-lock-keyword-face (currently font-lock-doc-face). (defvar gdb-script-font-lock-syntactic-keywords '(("^document\\s-.*\\(\n\\)" (1 "< b")) ;; It would be best to change the \n in front, but it's more difficult.
--- a/lisp/progmodes/octave-inf.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/progmodes/octave-inf.el Sat Dec 03 14:25:50 2005 +0000 @@ -220,6 +220,13 @@ (concat (mapconcat 'identity inferior-octave-output-list "\n") "\n")))) + + ;; An empty secondary prompt, as e.g. obtained by '--braindead', + ;; means trouble. + (inferior-octave-send-list-and-digest (list "PS2\n")) + (if (string-match "^PS2 = *$" (car inferior-octave-output-list)) + (inferior-octave-send-list-and-digest (list "PS2 = \"> \"\n"))) + ;; O.k., now we are ready for the Inferior Octave startup commands. (let* (commands (program (file-name-nondirectory inferior-octave-program))
--- a/lisp/progmodes/sh-script.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/progmodes/sh-script.el Sat Dec 03 14:25:50 2005 +0000 @@ -1002,6 +1002,8 @@ ;; The list of special chars is taken from the single-unix spec ;; of the shell command language (under `quoting') but with `$' removed. `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) + ;; In a '...' the backslash is not escaping. + ("\\(\\\\\\)'" 1 ,sh-st-punc) ;; Make sure $@ and @? are correctly recognized as sexps. ("\\$\\([?@]\\)" 1 ,sh-st-symbol) ;; Find HEREDOC starters and add a corresponding rule for the ender.
--- a/lisp/recentf.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/recentf.el Sat Dec 03 14:25:50 2005 +0000 @@ -813,39 +813,49 @@ Arrange them in sub-menus following rules in `recentf-arrange-rules'." (if (not recentf-arrange-rules) l - (let ((menus (mapcar #'(lambda (r) (list (car r))) - recentf-arrange-rules)) - menu others min file rules elts count) + (let* ((strip (assq t recentf-arrange-rules)) + (rules (remq strip recentf-arrange-rules)) + (menus (mapcar #'(lambda (r) (list (car r))) rules)) + others l1 l2 menu file min count) + ;; Put menu items into sub-menus as defined by rules. (dolist (elt l) - (setq file (recentf-menu-element-value elt) - rules recentf-arrange-rules - elts menus - menu nil) - (while (and (not menu) rules) - (when (recentf-match-rule-p (cdar rules) file) - (setq menu (car elts)) + (setq l1 menus ;; List of sub-menus + l2 rules ;; List of corresponding matchers. + file (recentf-menu-element-value elt) + menu nil) + ;; Apply the strip suffix rule. + (while (recentf-match-rule-p (cdr strip) file) + (setq file (substring file 0 (match-beginning 0)))) + ;; Search which sub-menu to put the menu item into. + (while (and (not menu) l2) + (when (recentf-match-rule-p (cdar l2) file) + (setq menu (car l1)) (recentf-set-menu-element-value menu (cons elt (recentf-menu-element-value menu)))) - (setq rules (cdr rules) - elts (cdr elts))) - (unless menu - (push elt others))) - - (setq l nil - min (if (natnump recentf-arrange-by-rules-min-items) - recentf-arrange-by-rules-min-items 0)) + (setq l1 (cdr l1) + l2 (cdr l2))) + ;; Put unmatched menu items in the `others' bin. + (or menu (push elt others))) + ;; Finalize the sub-menus. That is, for each one: + ;; - truncate it depending on the value of + ;; `recentf-arrange-by-rules-min-items', + ;; - replace %d by the number of menu items, + ;; - apply `recentf-arrange-by-rule-subfilter' to menu items. + (setq min (if (natnump recentf-arrange-by-rules-min-items) + recentf-arrange-by-rules-min-items 0) + l2 nil) (dolist (menu menus) - (when (setq elts (recentf-menu-element-value menu)) - (setq count (length elts)) + (when (setq l1 (recentf-menu-element-value menu)) + (setq count (length l1)) (if (< count min) - (setq others (nconc elts others)) + (setq others (nconc l1 others)) (recentf-set-menu-element-item menu (format (recentf-menu-element-item menu) count)) (recentf-set-menu-element-value menu (recentf-apply-menu-filter - recentf-arrange-by-rule-subfilter (nreverse elts))) - (push menu l)))) - + recentf-arrange-by-rule-subfilter (nreverse l1))) + (push menu l2)))) + ;; Add the menu items remaining in the `others' bin. (if (and (stringp recentf-arrange-by-rule-others) others) (nreverse (cons @@ -853,12 +863,11 @@ (format recentf-arrange-by-rule-others (length others)) (recentf-apply-menu-filter recentf-arrange-by-rule-subfilter (nreverse others))) - l)) + l2)) (nconc - (nreverse l) + (nreverse l2) (recentf-apply-menu-filter - recentf-arrange-by-rule-subfilter (nreverse others))))) - )) + recentf-arrange-by-rule-subfilter (nreverse others))))))) ;;; Predefined rule based menu filters ;; @@ -870,12 +879,20 @@ (dolist (mode auto-mode-alist) (setq regexp (car mode) mode (cdr mode)) - (when (symbolp mode) - (setq rule-name (symbol-name mode)) - (if (string-match "\\(.*\\)-mode$" rule-name) - (setq rule-name (match-string 1 rule-name))) - (setq rule-name (concat rule-name " (%d)") - rule (assoc rule-name rules)) + (when mode + (cond + ;; Build a special "strip suffix" rule from entries of the + ;; form (REGEXP FUNCTION NON-NIL). Notice that FUNCTION is + ;; ignored by the menu filter. So in some corner cases a + ;; wrong mode could be guessed. + ((and (consp mode) (cadr mode)) + (setq rule-name t)) + ((and mode (symbolp mode)) + (setq rule-name (symbol-name mode)) + (if (string-match "\\(.*\\)-mode$" rule-name) + (setq rule-name (match-string 1 rule-name))) + (setq rule-name (concat rule-name " (%d)")))) + (setq rule (assoc rule-name rules)) (if rule (setcdr rule (cons regexp (cdr rule))) (push (list rule-name regexp) rules))))
--- a/lisp/replace.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/replace.el Sat Dec 03 14:25:50 2005 +0000 @@ -693,6 +693,7 @@ (defvar occur-mode-map (let ((map (make-sparse-keymap))) + ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto]. (define-key map [mouse-2] 'occur-mode-mouse-goto) (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) (define-key map "\C-m" 'occur-mode-goto-occurrence) @@ -746,18 +747,6 @@ "Handle `revert-buffer' for Occur mode buffers." (apply 'occur-1 (append occur-revert-arguments (list (buffer-name))))) -(defun occur-mode-mouse-goto (event) - "In Occur mode, go to the occurrence whose line you click on." - (interactive "e") - (let (pos) - (save-excursion - (set-buffer (window-buffer (posn-window (event-end event)))) - (save-excursion - (goto-char (posn-point (event-end event))) - (setq pos (occur-mode-find-occurrence)))) - (switch-to-buffer-other-window (marker-buffer pos)) - (goto-char pos))) - (defun occur-mode-find-occurrence () (let ((pos (get-text-property (point) 'occur-target))) (unless pos @@ -766,11 +755,23 @@ (error "Buffer for this occurrence was killed")) pos)) -(defun occur-mode-goto-occurrence () +(defalias 'occur-mode-mouse-goto 'occur-mode-goto-occurrence) +(defun occur-mode-goto-occurrence (&optional event) "Go to the occurrence the current line describes." - (interactive) - (let ((pos (occur-mode-find-occurrence))) - (switch-to-buffer (marker-buffer pos)) + (interactive (list last-nonmenu-event)) + (let ((pos + (if (null event) + ;; Actually `event-end' works correctly with a nil argument as + ;; well, so we could dispense with this test, but let's not + ;; rely on this undocumented behavior. + (occur-mode-find-occurrence) + (with-current-buffer (window-buffer (posn-window (event-end event))) + (save-excursion + (goto-char (posn-point (event-end event))) + (occur-mode-find-occurrence))))) + same-window-buffer-names + same-window-regexps) + (pop-to-buffer (marker-buffer pos)) (goto-char pos))) (defun occur-mode-goto-occurrence-other-window () @@ -832,7 +833,8 @@ (goto-char (cond (reset (point-min)) ((< argp 0) (line-beginning-position)) - ((line-end-position)))) + ((> argp 0) (line-end-position)) + ((point)))) (occur-find-match (abs argp) (if (> 0 argp) @@ -1089,8 +1091,7 @@ (marker nil) (curstring "") (headerpt (with-current-buffer out-buf (point)))) - (save-excursion - (set-buffer buf) + (with-current-buffer buf (or coding ;; Set CODING only if the current buffer locally ;; binds buffer-file-coding-system. @@ -1223,42 +1224,43 @@ E to edit the replacement string" "Help message while in `query-replace'.") -(defvar query-replace-map (make-sparse-keymap) +(defvar query-replace-map + (let ((map (make-sparse-keymap))) + (define-key map " " 'act) + (define-key map "\d" 'skip) + (define-key map [delete] 'skip) + (define-key map [backspace] 'skip) + (define-key map "y" 'act) + (define-key map "n" 'skip) + (define-key map "Y" 'act) + (define-key map "N" 'skip) + (define-key map "e" 'edit-replacement) + (define-key map "E" 'edit-replacement) + (define-key map "," 'act-and-show) + (define-key map "q" 'exit) + (define-key map "\r" 'exit) + (define-key map [return] 'exit) + (define-key map "." 'act-and-exit) + (define-key map "\C-r" 'edit) + (define-key map "\C-w" 'delete-and-edit) + (define-key map "\C-l" 'recenter) + (define-key map "!" 'automatic) + (define-key map "^" 'backup) + (define-key map "\C-h" 'help) + (define-key map [f1] 'help) + (define-key map [help] 'help) + (define-key map "?" 'help) + (define-key map "\C-g" 'quit) + (define-key map "\C-]" 'quit) + (define-key map "\e" 'exit-prefix) + (define-key map [escape] 'exit-prefix) + map) "Keymap that defines the responses to questions in `query-replace'. The \"bindings\" in this map are not commands; they are answers. The valid answers include `act', `skip', `act-and-show', `exit', `act-and-exit', `edit', `delete-and-edit', `recenter', `automatic', `backup', `exit-prefix', and `help'.") -(define-key query-replace-map " " 'act) -(define-key query-replace-map "\d" 'skip) -(define-key query-replace-map [delete] 'skip) -(define-key query-replace-map [backspace] 'skip) -(define-key query-replace-map "y" 'act) -(define-key query-replace-map "n" 'skip) -(define-key query-replace-map "Y" 'act) -(define-key query-replace-map "N" 'skip) -(define-key query-replace-map "e" 'edit-replacement) -(define-key query-replace-map "E" 'edit-replacement) -(define-key query-replace-map "," 'act-and-show) -(define-key query-replace-map "q" 'exit) -(define-key query-replace-map "\r" 'exit) -(define-key query-replace-map [return] 'exit) -(define-key query-replace-map "." 'act-and-exit) -(define-key query-replace-map "\C-r" 'edit) -(define-key query-replace-map "\C-w" 'delete-and-edit) -(define-key query-replace-map "\C-l" 'recenter) -(define-key query-replace-map "!" 'automatic) -(define-key query-replace-map "^" 'backup) -(define-key query-replace-map "\C-h" 'help) -(define-key query-replace-map [f1] 'help) -(define-key query-replace-map [help] 'help) -(define-key query-replace-map "?" 'help) -(define-key query-replace-map "\C-g" 'quit) -(define-key query-replace-map "\C-]" 'quit) -(define-key query-replace-map "\e" 'exit-prefix) -(define-key query-replace-map [escape] 'exit-prefix) - (defun replace-match-string-symbols (n) "Process a list (and any sub-lists), expanding certain symbols. Symbol Expands To
--- a/lisp/simple.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/simple.el Sat Dec 03 14:25:50 2005 +0000 @@ -609,7 +609,7 @@ digits are interpreted as a character code. This is intended to be useful for editing binary files." (interactive "*p") - (let* ((char (let (translation-table-for-input) + (let* ((char (let (translation-table-for-input input-method-function) (if (or (not overwrite-mode) (eq overwrite-mode 'overwrite-mode-binary)) (read-quoted-char) @@ -3330,7 +3330,7 @@ ;; When adding a newline, don't expand an abbrev. (let ((abbrev-mode nil)) (end-of-line) - (insert hard-newline)) + (insert (if use-hard-newlines hard-newline "\n"))) (line-move arg nil nil try-vscroll)) (if (interactive-p) (condition-case nil @@ -4263,7 +4263,11 @@ (defcustom blink-matching-paren-on-screen t "*Non-nil means show matching open-paren when it is on screen. If nil, means don't show it (but the open-paren can still be shown -when it is off screen)." +when it is off screen). + +This variable has no effect if `blink-matching-paren' is nil. +\(In that case, the open-paren is never shown.) +It is also ignored if `show-paren-mode' is enabled." :type 'boolean :group 'paren-blinking) @@ -4324,7 +4328,7 @@ ;; The cdr might hold a new paren-class info rather than ;; a matching-char info, in which case the two CDRs ;; should match. - (eq matching-paren (cdr (syntax-after oldpos))))) + (eq matching-paren (cdr (syntax-after (1- oldpos)))))) (message "Mismatched parentheses")) ((not blinkpos) (if (not blink-matching-paren-distance) @@ -4332,10 +4336,11 @@ ((pos-visible-in-window-p blinkpos) ;; Matching open within window, temporarily move to blinkpos but only ;; if `blink-matching-paren-on-screen' is non-nil. - (when blink-matching-paren-on-screen - (save-excursion - (goto-char blinkpos) - (sit-for blink-matching-delay)))) + (and blink-matching-paren-on-screen + (not show-paren-mode) + (save-excursion + (goto-char blinkpos) + (sit-for blink-matching-delay)))) (t (save-excursion (goto-char blinkpos) @@ -4514,7 +4519,8 @@ (unless (member-ignore-case (car (car other-headers)) '("in-reply-to" "cc" "body")) (insert (car (car other-headers)) ": " - (cdr (car other-headers)) hard-newline)) + (cdr (car other-headers)) + (if use-hard-newlines hard-newline "\n"))) (setq other-headers (cdr other-headers))) (when body (forward-line 1)
--- a/lisp/speedbar.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/speedbar.el Sat Dec 03 14:25:50 2005 +0000 @@ -331,6 +331,16 @@ :group 'speedbar :type 'boolean) +(defcustom speedbar-default-position 'left-right + "*Default position of the speedbar frame. +Possible values are 'left, 'right or 'left-right. +If value is 'left-right, the most suitable location is +determined automatically." + :group 'speedbar + :type '(radio (const :tag "Automatic" left-right) + (const :tag "Left" left) + (const :tag "Right" right))) + (defcustom speedbar-sort-tags nil "*If non-nil, sort tags in the speedbar display. *Obsolete*. Use `semantic-tag-hierarchy-method' instead." @@ -967,7 +977,7 @@ (t (dframe-reposition-frame speedbar-frame (dframe-attached-frame speedbar-frame) - 'left-right)))) + speedbar-default-position)))) (defun speedbar-detach () "Detach the current Speedbar from auto-updating.
--- a/lisp/term/mac-win.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/term/mac-win.el Sat Dec 03 14:25:50 2005 +0000 @@ -1085,6 +1085,9 @@ (put 'return 'ascii-character ?\C-m) (put 'escape 'ascii-character ?\e) +;; Modifier name `ctrl' is an alias of `control'. +(put 'ctrl 'modifier-value (get 'control 'modifier-value)) + ;;;; Script codes and coding systems (defconst mac-script-code-coding-systems @@ -1962,10 +1965,10 @@ user-login-name user-real-login-name user-full-name)) (set v (decode-coding-string (symbol-value v) mac-system-coding-system)))) -;; If Emacs is started from the Finder, change the default directory -;; to the user's home directory. -(if (string= default-directory "/") - (cd "~")) +;; Now the default directory is changed to the user's home directory +;; in emacs.c if invoked from the WindowServer (with -psn_* option). +;; (if (string= default-directory "/") +;; (cd "~")) ;; Darwin 6- pty breakage is now controlled from the C code so that ;; it applies to all builds on darwin. See s/darwin.h PTY_ITERATION.
--- a/lisp/term/w32-win.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/term/w32-win.el Sat Dec 03 14:25:50 2005 +0000 @@ -1039,6 +1039,8 @@ (substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame global-map) +(define-key function-key-map [S-tab] [backtab]) + ;;; Do the actual Windows setup here; the above code just defines ;;; functions and variables that we use now.
--- a/lisp/textmodes/flyspell.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/textmodes/flyspell.el Sat Dec 03 14:25:50 2005 +0000 @@ -501,23 +501,29 @@ ;;*---------------------------------------------------------------------*/ ;;* flyspell-accept-buffer-local-defs ... */ ;;*---------------------------------------------------------------------*/ +(defvar flyspell-last-buffer nil + "The buffer in which the last flyspell operation took place.") + (defun flyspell-accept-buffer-local-defs () - ;; strange problem. If buffer in current window has font-lock turned on, - ;; but SET-BUFFER was called to point to an invisible buffer, this ispell - ;; call will reset the buffer to the buffer in the current window. However, - ;; it only happens at startup (fix by Albert L. Ting). - (save-current-buffer - (ispell-accept-buffer-local-defs)) - (if (not (and (eq flyspell-dash-dictionary ispell-dictionary) - (eq flyspell-dash-local-dictionary ispell-local-dictionary))) + ;; When flyspell-word is used inside a loop (e.g. when processing + ;; flyspell-changes), the calls to `ispell-accept-buffer-local-defs' end + ;; up dwarfing everything else, so only do it when the buffer has changed. + (unless (eq flyspell-last-buffer (current-buffer)) + (setq flyspell-last-buffer (current-buffer)) + ;; Strange problem: If buffer in current window has font-lock turned on, + ;; but SET-BUFFER was called to point to an invisible buffer, this ispell + ;; call will reset the buffer to the buffer in the current window. + ;; However, it only happens at startup (fix by Albert L. Ting). + (save-current-buffer + (ispell-accept-buffer-local-defs)) + (unless (and (eq flyspell-dash-dictionary ispell-dictionary) + (eq flyspell-dash-local-dictionary ispell-local-dictionary)) ;; The dictionary has changed - (progn - (setq flyspell-dash-dictionary ispell-dictionary) - (setq flyspell-dash-local-dictionary ispell-local-dictionary) - (if (member (or ispell-local-dictionary ispell-dictionary) - flyspell-dictionaries-that-consider-dash-as-word-delimiter) - (setq flyspell-consider-dash-as-word-delimiter-flag t) - (setq flyspell-consider-dash-as-word-delimiter-flag nil))))) + (setq flyspell-dash-dictionary ispell-dictionary) + (setq flyspell-dash-local-dictionary ispell-local-dictionary) + (setq flyspell-consider-dash-as-word-delimiter-flag + (member (or ispell-local-dictionary ispell-dictionary) + flyspell-dictionaries-that-consider-dash-as-word-delimiter))))) ;;*---------------------------------------------------------------------*/ ;;* flyspell-mode-on ... */ @@ -543,9 +549,7 @@ ;; we bound flyspell action to pre-command hook (add-hook 'pre-command-hook (function flyspell-pre-command-hook) t t) ;; we bound flyspell action to after-change hook - (make-local-variable 'after-change-functions) - (setq after-change-functions - (cons 'flyspell-after-change-function after-change-functions)) + (add-hook 'after-change-functions 'flyspell-after-change-function nil t) ;; set flyspell-generic-check-word-p based on the major mode (let ((mode-predicate (get major-mode 'flyspell-mode-predicate))) (if mode-predicate @@ -650,8 +654,7 @@ ;; we remove the hooks (remove-hook 'post-command-hook (function flyspell-post-command-hook) t) (remove-hook 'pre-command-hook (function flyspell-pre-command-hook) t) - (setq after-change-functions (delq 'flyspell-after-change-function - after-change-functions)) + (remove-hook 'after-change-functions 'flyspell-after-change-function t) ;; we remove all the flyspell hilightings (flyspell-delete-all-overlays) ;; we have to erase pre cache variables @@ -704,14 +707,14 @@ ;;* position has to be spell checked. */ ;;*---------------------------------------------------------------------*/ (defvar flyspell-changes nil) +(make-variable-buffer-local 'flyspell-changes) ;;*---------------------------------------------------------------------*/ ;;* flyspell-after-change-function ... */ ;;*---------------------------------------------------------------------*/ (defun flyspell-after-change-function (start stop len) "Save the current buffer and point for Flyspell's post-command hook." - (interactive) - (setq flyspell-changes (cons (cons start stop) flyspell-changes))) + (push (cons start stop) flyspell-changes)) ;;*---------------------------------------------------------------------*/ ;;* flyspell-check-changed-word-p ... */ @@ -899,7 +902,7 @@ (progn (setq flyspell-word-cache-end -1) (setq flyspell-word-cache-result '_))))) - (while (consp flyspell-changes) + (while (and (not (input-pending-p)) (consp flyspell-changes)) (let ((start (car (car flyspell-changes))) (stop (cdr (car flyspell-changes)))) (if (flyspell-check-changed-word-p start stop) @@ -1011,7 +1014,7 @@ ;; when emacs is exited without query (set-process-query-on-exit-flag ispell-process nil) ;; Wait until ispell has processed word. Since this code is often - ;; executed rom post-command-hook but the ispell process may not + ;; executed from post-command-hook but the ispell process may not ;; be responsive, it's important to make sure we re-enable C-g. (with-local-quit (while (progn
--- a/lisp/textmodes/org.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/textmodes/org.el Sat Dec 03 14:25:50 2005 +0000 @@ -5,7 +5,7 @@ ;; 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.20 +;; Version: 3.21 ;; ;; This file is part of GNU Emacs. ;; @@ -76,10 +76,17 @@ ;; The documentation of Org-mode can be found in the TeXInfo file. The ;; distribution also contains a PDF version of it. At the homepage of ;; Org-mode, you can read the same text online as HTML. There is also an -;; excellent reference card made by Philip Rooke. +;; excellent reference card made by Philip Rooke. This card can be found +;; in the etc/ directory of Emacs 22. ;; ;; Changes: ;; ------- +;; Version 3.21 +;; - Improved CSS support for the HTML export. Thanks to Christian Egli. +;; - Editing support for hand-formatted lists +;; - M-S-cursor keys handle plain list items +;; - C-c C-c renumbers ordered plain lists +;; ;; Version 3.20 ;; - There is finally an option to make TAB jump over horizontal lines ;; in tables instead of creating a new line before that line. @@ -88,7 +95,7 @@ ;; - Changes to the HTML exporter ;; - hand-formatted lists are exported correctly, similar to ;; markdown lists. Nested lists are possible. See the docstring -;; of the variable `org-export-local-list-max-depth'. +;; of the variable `org-export-plain-list-max-depth'. ;; - cleaned up to produce valid HTML 4.0 (transitional). ;; - support for cascading style sheets. ;; - New command to cycle through all agenda files, on C-, @@ -234,7 +241,7 @@ ;;; Customization variables -(defvar org-version "3.20" +(defvar org-version "3.21" "The version number of the file org.el.") (defun org-version () (interactive) @@ -889,6 +896,25 @@ :group 'org-structure :type 'boolean) +(defcustom org-plain-list-ordered-item-terminator t + "The character that makes a line with leading number an ordered list item. +Valid values are ?. and ?\). To get both terminators, use t. While +?. may look nicer, it creates the danger that a line with leading +number may be incorrectly interpreted as an item. ?\) therefore is +the safe choice." + :group 'org-structure + :type '(choice (const :tag "dot like in \"2.\"" ?.) + (const :tag "paren like in \"2)\"" ?\)) + (const :tab "both" t))) + +(defcustom org-auto-renumber-ordered-lists t + "Non-nil means, automatically renumber ordered plain lists. +Renumbering happens when the sequence have been changed with +\\[org-shiftmetaup] or \\[org-shiftmetadown]. After other editing commands, +use \\[org-ctrl-c-ctrl-c] to trigger renumbering." + :group 'org-structure + :type 'boolean) + (defgroup org-link nil "Options concerning links in Org-mode." :tag "Org Link" @@ -1342,24 +1368,48 @@ :group 'org-export :type 'string) -(defcustom org-export-html-style "" +(defcustom org-export-html-style +"<style type=\"text/css\"> + html { + font-family: Times, serif; + font-size: 12pt; + } + .title { text-align: center; } + .todo, .deadline { color: red; } + .done { color: green; } + pre { + border: 1pt solid #AEBDCC; + background-color: #F3F5F7; + padding: 5pt; + font-family: courier, monospace; + } + table { border-collapse: collapse; } + td, th { + vertical-align: top; + border: 1pt solid #ADB9CC; + } +</style>" "The default style specification for exported HTML files. Since there are different ways of setting style information, this variable needs to contain the full HTML structure to provide a style, including the -surrounding HTML tags. For example, legal values would be +surrounding HTML tags. The style specifications should include definiitons +for new classes todo, done, title, and deadline. For example, legal values +would be. <style type=\"text/css\"> p {font-weight: normal; color: gray; } h1 {color: black; } + .title { text-align: center; } + .todo, .deadline { color: red; } + .done { color: green; } </style> -or +or, if you want to keep the style in a file, <link rel=\"stylesheet\" type=\"text/css\" href=\"mystyles.css\"> As the value of this option simply gets inserted into the HTML <head> header, -you can \"misuse\" it to add arbitrary text to the header. -" +you can \"misuse\" it to add arbitrary text to the header." :group 'org-export :type 'string) @@ -1393,18 +1443,16 @@ :group 'org-export :type 'boolean) -(defcustom org-export-local-list-max-depth 1 +(defcustom org-export-plain-list-max-depth 3 "Maximum depth of hand-formatted lists in HTML export. + Org-mode parses hand-formatted enumeration and bullet lists and -transforms them to HTML open export. Different indentation of the bullet -or number indicates different list nesting levels. To avoid confusion, -only a single level is allowed by default. This means that a list is started -with an item, and that all further items are consitered as long as the -indentation is larger or equal to the indentation of the first item. When this -is larger than 1, deeper indentation leads to deeper list nesting. -If you are careful with hand formatting, you can increase this limit and -get lists of arbitrary depth. For example, by setting this option to 3, the -following list would look correct in HTML: +transforms them to HTML open export. Different indentation of the +bullet or number indicates different list nesting levels. To avoid +confusion, only a single level is allowed by default. When this is +larger than 1, deeper indentation leads to deeper list nesting. For +example, the default value of 3 allows the following list to be +formatted correctly in HTML: * Fruit - Apple @@ -2757,6 +2805,234 @@ (throw 'exit nil))) t)))) +;;; Plain list item + +(defun org-at-item-p () + "Is point in a line starting a hand-formatted item?" + (let ((llt org-plain-list-ordered-item-terminator)) + (save-excursion + (goto-char (point-at-bol)) + (looking-at + (cond + ((eq llt t) "\\([ \t]*\\([-+]\\|\\([0-9]+[.)]\\)\\)\\|[ \t]+\\*\\)\\( \\|$\\)") + ((= llt ?.) "\\([ \t]*\\([-+]\\|\\([0-9]+\\.\\)\\)\\|[ \t]+\\*\\)\\( \\|$\\)") + ((= llt ?\)) "\\([ \t]*\\([-+]\\|\\([0-9]+)\\)\\)\\|[ \t]+\\*\\)\\( \\|$\\)") + (t (error "Invalid value of `org-plain-list-ordered-item-terminator'"))))))) + +(defun org-get-indentation () + "Get the indentation of the current line, ionterpreting tabs." + (save-excursion + (beginning-of-line 1) + (skip-chars-forward " \t") + (current-column))) + +(defun org-beginning-of-item () + "Go to the beginning of the current hand-formatted item. +If the cursor is not in an item, throw an error." + (let ((pos (point)) + (limit (save-excursion (org-back-to-heading) + (beginning-of-line 2) (point))) + ind ind1) + (if (org-at-item-p) + (beginning-of-line 1) + (beginning-of-line 1) + (skip-chars-forward " \t") + (setq ind (current-column)) + (if (catch 'exit + (while t + (beginning-of-line 0) + (if (< (point) limit) (throw 'exit nil)) + (unless (looking-at " \t]*$") + (skip-chars-forward " \t") + (setq ind1 (current-column)) + (if (< ind1 ind) + (throw 'exit (org-at-item-p)))))) + nil + (goto-char pos) + (error "Not in an item"))))) + +(defun org-end-of-item () + "Go to the beginning of the current hand-formatted item. +If the cursor is not in an item, throw an error." + (let ((pos (point)) + (limit (save-excursion (outline-next-heading) (point))) + (ind (save-excursion + (org-beginning-of-item) + (skip-chars-forward " \t") + (current-column))) + ind1) + (if (catch 'exit + (while t + (beginning-of-line 2) + (if (>= (point) limit) (throw 'exit t)) + (unless (looking-at "[ \t]*$") + (skip-chars-forward " \t") + (setq ind1 (current-column)) + (if (<= ind1 ind) (throw 'exit t))))) + (beginning-of-line 1) + (goto-char pos) + (error "Not in an item")))) + +(defun org-move-item-down (arg) + "Move the plain list item at point down, i.e. swap with following item. +Subitems (items with larger indentation are considered part of the item, +so this really moves item trees." + (interactive "p") + (let (beg end ind ind1 (pos (point)) txt) + (org-beginning-of-item) + (setq beg (point)) + (setq ind (org-get-indentation)) + (org-end-of-item) + (setq end (point)) + (setq ind1 (org-get-indentation)) + (if (and (org-at-item-p) (= ind ind1)) + (progn + (org-end-of-item) + (setq txt (buffer-substring beg end)) + (save-excursion + (delete-region beg end)) + (setq pos (point)) + (insert txt) + (goto-char pos) + (org-maybe-renumber-ordered-list)) + (goto-char pos) + (error "Cannot move this item further down")))) + +(defun org-move-item-up (arg) + "Move the plain list item at point up, i.e. swap with previous item. +Subitems (items with larger indentation are considered part of the item, +so this really moves item trees." + (interactive "p") + (let (beg end ind ind1 (pos (point)) txt) + (org-beginning-of-item) + (setq beg (point)) + (setq ind (org-get-indentation)) + (org-end-of-item) + (setq end (point)) + (goto-char beg) + (catch 'exit + (while t + (beginning-of-line 0) + (if (looking-at "[ \t]*$") + nil + (if (<= (setq ind1 (org-get-indentation)) ind) + (throw 'exit t))))) + (condition-case nil + (org-beginning-of-item) + (error (goto-char beg) + (error "Cannot move this item further up"))) + (setq ind1 (org-get-indentation)) + (if (and (org-at-item-p) (= ind ind1)) + (progn + (setq txt (buffer-substring beg end)) + (save-excursion + (delete-region beg end)) + (setq pos (point)) + (insert txt) + (goto-char pos) + (org-maybe-renumber-ordered-list)) + (goto-char pos) + (error "Cannot move this item further up")))) + +(defun org-maybe-renumber-ordered-list () + "Renumber the ordered list at point if setup allows it. +This tests the user option `org-auto-renumber-ordered-lists' before +doing the renumbering." + (and org-auto-renumber-ordered-lists + (org-at-item-p) + (match-beginning 3) + (org-renumber-ordered-list 1))) + +(defun org-get-string-indentation (s) + "What indentation has S due to SPACE and TAB at the beginning of the string?" + (let ((n -1) (i 0) (w tab-width) c) + (catch 'exit + (while (< (setq n (1+ n)) (length s)) + (setq c (aref s n)) + (cond ((= c ?\ ) (setq i (1+ i))) + ((= c ?\t) (setq i (* (/ (+ w i) w) w))) + (t (throw 'exit t))))) + i)) + +(defun org-renumber-ordered-list (arg) + "Renumber an ordered plain list. +Cursor neext to be in the first line of an item, the line that starts +with something like \"1.\" or \"2)\"." + (interactive "p") + (unless (and (org-at-item-p) + (match-beginning 3)) + (error "This is not an ordered list")) + (let ((line (org-current-line)) + (col (current-column)) + (ind (org-get-string-indentation + (buffer-substring (point-at-bol) (match-beginning 3)))) + (term (substring (match-string 3) -1)) + ind1 (n (1- arg))) + ;; find where this list begins + (catch 'exit + (while t + (catch 'next + (beginning-of-line 0) + (if (looking-at "[ \t]*$") (throw 'next t)) + (skip-chars-forward " \t") (setq ind1 (current-column)) + (if (and (<= ind1 ind) + (not (org-at-item-p))) + (throw 'exit t))))) + ;; Walk forward and replace these numbers + (catch 'exit + (while t + (catch 'next + (beginning-of-line 2) + (if (eobp) (throw 'exit nil)) + (if (looking-at "[ \t]*$") (throw 'next nil)) + (skip-chars-forward " \t") (setq ind1 (current-column)) + (if (> ind1 ind) (throw 'next t)) + (if (< ind1 ind) (throw 'exit t)) + (if (not (org-at-item-p)) (throw 'exit nil)) + (if (not (match-beginning 3)) + (error "unordered bullet in ordered list. Press \\[undo] to recover")) + (delete-region (match-beginning 3) (1- (match-end 3))) + (goto-char (match-beginning 3)) + (insert (format "%d" (setq n (1+ n))))))) + (goto-line line) + (move-to-column col))) + +(defvar org-last-indent-begin-marker (make-marker)) +(defvar org-last-indent-end-marker (make-marker)) + + +(defun org-outdent-item (arg) + "Outdent a local list item." + (interactive "p") + (org-indent-item (- arg))) + +(defun org-indent-item (arg) + "Indent a local list item." + (interactive "p") + (unless (org-at-item-p) + (error "Not on an item")) + (let (beg end ind ind1) + (if (memq last-command '(org-shiftmetaright org-shiftmetaleft)) + (setq beg org-last-indent-begin-marker + end org-last-indent-end-marker) + (org-beginning-of-item) + (setq beg (move-marker org-last-indent-begin-marker (point))) + (org-end-of-item) + (setq end (move-marker org-last-indent-end-marker (point)))) + (goto-char beg) + (skip-chars-forward " \t") (setq ind (current-column)) + (if (< (+ arg ind) 0) (error "Cannot outdent beyond margin")) + (while (< (point) end) + (beginning-of-line 1) + (skip-chars-forward " \t") (setq ind1 (current-column)) + (delete-region (point-at-bol) (point)) + (indent-to-column (+ ind1 arg)) + (beginning-of-line 2)) + (goto-char beg))) + + +;;; Archiving + (defun org-archive-subtree () "Move the current subtree to the archive. The archive can be a certain top-level heading in the current file, or in @@ -8985,6 +9261,7 @@ (in-local-list nil) (local-list-num nil) (local-list-indent nil) + (llt org-plain-list-ordered-item-terminator) (email user-mail-address) (language org-export-default-language) (text nil) @@ -9039,7 +9316,7 @@ " language (org-html-expand title) (or charset "iso-8859-1") date time author style)) - (if title (insert (concat "<H1 align=\"center\">" + (if title (insert (concat "<H1 class=\"title\">" (org-html-expand title) "</H1>\n"))) (if author (insert (concat (nth 1 lang-words) ": " author "\n"))) (if email (insert (concat "<a href=\"mailto:" email "\"><" @@ -9089,7 +9366,7 @@ (insert (format (if todo - "<li><a href=\"#sec-%d\"><span style='color:red'>%s</span></a>\n" + "<li><a href=\"#sec-%d\"><span class=\"todo\">%s</span></a>\n" "<li><a href=\"#sec-%d\">%s</a>\n") head-count txt)) (setq org-last-level level)) @@ -9122,7 +9399,7 @@ (insert "<pre>\n")) (insert (org-html-protect (match-string 1 line)) "\n") (when (and lines - (not (string-match "^[ \t]+\\(:.*\\)" + (not (string-match "^[ \t]*\\(:.*\\)" (car lines)))) (setq infixed nil) (insert "</pre>\n")) @@ -9180,9 +9457,9 @@ (match-beginning 2)) (if (equal (match-string 2 line) org-done-string) (setq line (replace-match - "<span style='color:green'>\\2</span>" + "<span class=\"done\">\\2</span>" nil nil line 2)) - (setq line (replace-match "<span style='color:red'>\\2</span>" + (setq line (replace-match "<span class=\"todo\">\\2</span>" nil nil line 2)))) ;; DEADLINES @@ -9192,9 +9469,8 @@ (string-match "<a href" (substring line 0 (match-beginning 0)))) nil ; Don't do the replacement - it is inside a link - (setq line (replace-match "<span style='color:red'>\\&</span>" + (setq line (replace-match "<span class=\"deadline\">\\&</span>" nil nil line 1))))) - (cond ((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line) ;; This is a headline @@ -9233,13 +9509,21 @@ (insert (org-format-table-html table-buffer table-orig-buffer)))) (t ;; Normal lines - (when (and (> org-export-local-list-max-depth 0) + (when (and (> org-export-plain-list-max-depth 0) (string-match - "^\\( *\\)\\(\\([-+*]\\)\\|\\([0-9]+\\.\\)\\)? *\\([^ \t\n\r]\\)" + (cond + ((eq llt t) "^\\([ \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+[.)]\\)\\)?\\( +[^ \t\n\r]\\|[ \t]*$\\)") + ((= llt ?.) "^\\([ \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+\\.\\)\\)?\\( +[^ \t\n\r]\\|[ \t]*$\\)") + ((= llt ?\)) "^\\( \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+)\\)\\)?\\( +[^ \t\n\r]\\|[ \t]*$\\)") + (t (error "Invalid value of `org-plain-list-ordered-item-terminator'"))) line)) - (setq ind (- (match-end 1) (match-beginning 1)) + (setq ind (org-get-string-indentation line) start-is-num (match-beginning 4) - starter (if (match-beginning 2) (match-string 2 line))) + starter (if (match-beginning 2) (match-string 2 line)) + line (substring line (match-beginning 5))) + (unless (string-match "[^ \t]" line) + ;; empty line. Pretend indentation is large. + (setq ind (1+ (or (car local-list-indent) 1)))) (while (and in-local-list (or (and (= ind (car local-list-indent)) (not starter)) @@ -9247,13 +9531,12 @@ (insert (if (car local-list-num) "</ol>\n" "</ul>")) (pop local-list-num) (pop local-list-indent) (setq in-local-list local-list-indent)) - (cond ((and starter (or (not in-local-list) (> ind (car local-list-indent))) (< (length local-list-indent) - org-export-local-list-max-depth)) + org-export-plain-list-max-depth)) ;; Start new (level of ) list (insert (if start-is-num "<ol>\n<li>\n" "<ul>\n<li>\n")) (push start-is-num local-list-num) @@ -9261,8 +9544,7 @@ (setq in-local-list t)) (starter ;; continue current list - (insert "<li>\n"))) - (setq line (substring line (match-beginning 5)))) + (insert "<li>\n")))) ;; Empty lines start a new paragraph. If hand-formatted lists ;; are not fully interpreted, lines starting with "-", "+", "*" ;; also start a new paragraph. @@ -9327,7 +9609,7 @@ (mapconcat (lambda (x) (if head (concat "<th>" x "</th>") - (concat "<td valign=\"top\">" x "</td>"))) + (concat "<td>" x "</td>"))) fields "") "</tr>\n")))) (setq html (concat html "</table>\n")) @@ -9366,10 +9648,8 @@ (lambda (x) (if (equal x "") (setq x empty)) (if head - (concat "<th valign=\"top\">" x - "</th>\n") - (concat "<td valign=\"top\">" x - "</td>\n"))) + (concat "<th>" x "</th>\n") + (concat "<td>" x "</td>\n"))) field-buffer "\n") "</tr>\n")) (setq head nil) @@ -10016,6 +10296,7 @@ (cond ((org-at-table-p) (org-table-delete-column)) ((org-on-heading-p) (org-promote-subtree)) + ((org-at-item-p) (call-interactively 'org-outdent-item)) (t (org-shiftcursor-error)))) (defun org-shiftmetaright () @@ -10026,30 +10307,36 @@ (cond ((org-at-table-p) (org-table-insert-column)) ((org-on-heading-p) (org-demote-subtree)) + ((org-at-item-p) (call-interactively 'org-indent-item)) (t (org-shiftcursor-error)))) (defun org-shiftmetaup (&optional arg) "Move subtree up or kill table row. -Calls `org-move-subtree-up' or `org-table-kill-row', depending on context. -See the individual commands for more information." +Calls `org-move-subtree-up' or `org-table-kill-row' or +`org-move-item-up' depending on context. See the individual commands +for more information." (interactive "P") (cond ((org-at-table-p) (org-table-kill-row)) ((org-on-heading-p) (org-move-subtree-up arg)) + ((org-at-item-p) (org-move-item-up arg)) (t (org-shiftcursor-error)))) (defun org-shiftmetadown (&optional arg) "Move subtree down or insert table row. -Calls `org-move-subtree-down' or `org-table-insert-row', depending on context. -See the individual commands for more information." +Calls `org-move-subtree-down' or `org-table-insert-row' or +`org-move-item-down', depending on context. See the individual +commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-insert-row arg)) ((org-on-heading-p) (org-move-subtree-down arg)) + ((org-at-item-p) (org-move-item-down arg)) (t (org-shiftcursor-error)))) (defun org-metaleft (&optional arg) "Promote heading or move table column to left. Calls `org-do-promote' or `org-table-move-column', depending on context. +With no specific context, calls the Emacs default `backward-word'. See the individual commands for more information." (interactive "P") (cond @@ -10060,6 +10347,7 @@ (defun org-metaright (&optional arg) "Demote subtree or move table column to right. Calls `org-do-demote' or `org-table-move-column', depending on context. +With no specific context, calls the Emacs default `forward-word'. See the individual commands for more information." (interactive "P") (cond @@ -10069,22 +10357,26 @@ (defun org-metaup (&optional arg) "Move subtree up or move table row up. -Calls `org-move-subtree-up' or `org-table-move-row', depending on context. -See the individual commands for more information." +Calls `org-move-subtree-up' or `org-table-move-row' or +`org-move-item-up', depending on context. See the individual commands +for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-row 'up)) ((org-on-heading-p) (org-move-subtree-up arg)) + ((org-at-item-p) (org-move-item-up arg)) (t (org-shiftcursor-error)))) (defun org-metadown (&optional arg) "Move subtree down or move table row down. -Calls `org-move-subtree-down' or `org-table-move-row', depending on context. -See the individual commands for more information." +Calls `org-move-subtree-down' or `org-table-move-row' or +`org-move-item-down', depending on context. See the individual +commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-row nil)) ((org-on-heading-p) (org-move-subtree-down arg)) + ((org-at-item-p) (org-move-item-down arg)) (t (org-shiftcursor-error)))) (defun org-shiftup (&optional arg) @@ -10153,6 +10445,8 @@ (org-table-recalculate t) (org-table-maybe-recalculate-line)) (org-table-align)) + ((org-at-item-p) + (org-renumber-ordered-list (prefix-numeric-value arg))) ((save-excursion (beginning-of-line 1) (looking-at "#\\+\\([A-Z]+\\)")) (cond ((equal (match-string 1) "TBLFM") @@ -10165,11 +10459,13 @@ (org-mode-restart)))) ((org-region-active-p) (org-table-convert-region (region-beginning) (region-end) arg)) - ((and (region-beginning) (region-end)) + ((condition-case nil + (and (region-beginning) (region-end)) + (error nil)) (if (y-or-n-p "Convert inactive region to table? ") (org-table-convert-region (region-beginning) (region-end) arg) (error "Abort"))) - (t (error "No table at point, and no region to make one"))))) + (t (error "C-c C-c can do nothing useful at this location."))))) (defun org-mode-restart () "Restart Org-mode, to scan again for special lines. @@ -10436,7 +10732,7 @@ (set (make-local-variable 'paragraph-separate) "\f\\|\\*\\|[ ]*$\\|[ \t]*[:|]") ;; The paragraph starter includes hand-formatted lists. (set (make-local-variable 'paragraph-start) - "\f\\|[ ]*$\\|\\([*\f]+\\)\\|[ \t]*\\([-+*]\\|[0-9]+\\.[ \t]+\\)\\|[ \t]*[:|]") + "\f\\|[ ]*$\\|\\([*\f]+\\)\\|[ \t]*\\([-+*]\\|[0-9]+[.)][ \t]+\\)\\|[ \t]*[:|]") ;; Inhibit auto-fill for headers, tables and fixed-width lines. ;; But only if the user has not turned off tables or fixed-width regions (set (make-local-variable 'auto-fill-inhibit-regexp) @@ -10472,7 +10768,7 @@ "Return a fill prefix for org-mode files. In particular, this makes sure hanging paragraphs for hand-formatted lists work correctly." - (if (looking-at " *\\([-*+] \\|[0-9]+\\. \\)?") + (if (looking-at " *\\([-*+] \\|[0-9]+[.)] \\)?") (make-string (- (match-end 0) (match-beginning 0)) ?\ ))) ;; Functions needed for Emacs/XEmacs region compatibility @@ -10707,3 +11003,4 @@ ;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd ;;; org.el ends here +
--- a/lisp/view.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/view.el Sat Dec 03 14:25:50 2005 +0000 @@ -93,6 +93,12 @@ :type 'boolean :group 'view) +(defcustom view-inhibit-help-message nil + "*Non-nil inhibits the help message showed upon entering View mode." + :type 'boolean + :group 'view + :version "22.1") + ;;;###autoload (defvar view-mode nil "Non-nil if View mode is enabled. @@ -516,9 +522,10 @@ (unless view-mode ; Do nothing if already in view mode. (view-mode-enable) (force-mode-line-update) - (message "%s" - (substitute-command-keys "\ -View mode: type \\[help-command] for help, \\[describe-mode] for commands, \\[View-quit] to quit.")))) + (unless view-inhibit-help-message + (message "%s" + (substitute-command-keys "\ +View mode: type \\[help-command] for help, \\[describe-mode] for commands, \\[View-quit] to quit."))))) (defun view-mode-exit (&optional return-to-alist exit-action all-win) "Exit View mode in various ways, depending on optional arguments.
--- a/lisp/xt-mouse.el Wed Nov 23 01:35:21 2005 +0000 +++ b/lisp/xt-mouse.el Sat Dec 03 14:25:50 2005 +0000 @@ -151,10 +151,12 @@ (set-terminal-parameter nil 'xterm-mouse-x x) (set-terminal-parameter nil 'xterm-mouse-y y) - (if w - (list mouse (posn-at-x-y (- x left) (- y top) w t)) - (list mouse - (append (list nil 'menu-bar) (nthcdr 2 (posn-at-x-y x y w t))))))) + (setq + last-input-event + (if w + (list mouse (posn-at-x-y (- x left) (- y top) w t)) + (list mouse + (append (list nil 'menu-bar) (nthcdr 2 (posn-at-x-y x y w t)))))))) ;;;###autoload (define-minor-mode xterm-mouse-mode
--- a/lispref/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/lispref/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,7 @@ +2005-11-27 Richard M. Stallman <rms@gnu.org> + + * windows.texi (Resizing Windows): Add adjust-window-trailing-edge. + 2005-11-21 Juri Linkov <juri@jurta.org> * customize.texi (Common Keywords): Update links types
--- a/lispref/windows.texi Wed Nov 23 01:35:21 2005 +0000 +++ b/lispref/windows.texi Sat Dec 03 14:25:50 2005 +0000 @@ -1216,6 +1216,9 @@ @defun set-window-point window position This function positions point in @var{window} at position @var{position} in @var{window}'s buffer. It returns @var{position}. + +If @var{window} is selected, and its buffer is current, +this simply does @code{goto-char}. @end defun @node Window Start @@ -1702,7 +1705,7 @@ bound for automatic scrolling, i.e. automatic scrolling will not scroll a window to a column less than the specified one. -@deffn Command scroll-left &optional count +@deffn Command scroll-left &optional count set-minimum This function scrolls the selected window @var{count} columns to the left (or to the right if @var{count} is negative). The default for @var{count} is the window width, minus 2. @@ -1710,20 +1713,23 @@ The return value is the total amount of leftward horizontal scrolling in effect after the change---just like the value returned by @code{window-hscroll} (below). -@end deffn - -@deffn Command scroll-right &optional count -This function scrolls the selected window @var{count} columns to the -right (or to the left if @var{count} is negative). The default -for @var{count} is the window width, minus 2. - -The return value is the total amount of leftward horizontal scrolling in -effect after the change---just like the value returned by -@code{window-hscroll} (below). Once you scroll a window as far right as it can go, back to its normal position where the total leftward scrolling is zero, attempts to scroll any farther right have no effect. + +If @var{set-minimum} is non-@code{nil}, the new scroll amount becomes +the lower bound for automatic scrolling; that is, automatic scrolling +will not scroll a window to a column less than the value returned by +this function. Interactive calls pass non-@code{nil} for +@var{set-minimum}. +@end deffn + +@deffn Command scroll-right &optional count set-minimum +This function scrolls the selected window @var{count} columns to the +right (or to the left if @var{count} is negative). The default +for @var{count} is the window width, minus 2. Aside from the direction +of scrolling, this works just like @code{scroll-left}. @end deffn @defun window-hscroll &optional window @@ -2032,6 +2038,14 @@ @end example @end deffn +@defun adjust-window-trailing-edge window delta horizontal +This function makes the selected window @var{delta} lines taller or +@var{delta} columns wider, by moving the bottom or right edge. This +function does not delete other windows; if it cannot make the +requested size adjustment, it signals an error. On success, this +function returns @code{nil}. +@end defun + @defun fit-window-to-buffer &optional window max-height min-height This function makes @var{window} the right height to display its contents exactly. If @var{window} is omitted or @code{nil}, it uses
--- a/make-dist Wed Nov 23 01:35:21 2005 +0000 +++ b/make-dist Sat Dec 03 14:25:50 2005 +0000 @@ -316,10 +316,10 @@ nt nt/inc nt/inc/sys nt/inc/arpa nt/inc/netinet nt/icons \ etc etc/e \ etc/images etc/images/ezimage etc/images/gnus etc/images/gud \ - etc/images/low-color etc/images/mail etc/images/smilies \ - etc/tree-widget etc/tree-widget/default etc/tree-widget/folder \ - info man m4 msdos vms mac mac/inc mac/inc/sys \ - mac/src mac/Emacs.app mac/Emacs.app/Contents \ + etc/images/icons etc/images/low-color etc/images/mail \ + etc/images/smilies etc/tree-widget etc/tree-widget/default \ + etc/tree-widget/folder info man m4 msdos vms mac mac/inc \ + mac/inc/sys mac/src mac/Emacs.app mac/Emacs.app/Contents \ mac/Emacs.app/Contents/MacOS mac/Emacs.app/Contents/Resources \ mac/Emacs.app/Contents/Resources/English.lproj do @@ -602,7 +602,7 @@ fi done) -for dir in etc/images/ezimage etc/images/gnus etc/images/gud \ +for dir in etc/images/ezimage etc/images/gnus etc/images/gud etc/images/icons \ etc/images/low-color etc/images/mail etc/images/smilies \ etc/tree-widget/default etc/tree-widget/folder ; do echo "Making links to \`${dir}'"
--- a/man/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/man/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,34 @@ +2005-12-01 Nick Roberts <nickrob@snap.net.nz> + + * building.texi (GDB User Interface Layout): Describe how to + kill associated buffers. + (Breakpoints Buffer): Use D instead of d for gdb-delete-breakpoint. + (Watch Expressions): Be more precise. + (Other GDB User Interface Buffers): Describe how to change a + register value. + +2005-11-30 Carsten Dominik <dominik@science.uva.nl> + + * org.texi (Plain Lists): Typos fixed. + +2005-11-28 Jay Belanger <belanger@truman.edu> + + * calc.texi: Change references of `M-#' to `C-x *' prefix. + +2005-11-24 Carsten Dominik <dominik@science.uva.nl> + + * org.texi: (Structure editing): New item moving commands added. + (Plain Lists): New section. + +2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macos.texi (Mac Input): Remove description of + mac-command-key-is-meta. Add descriptions of + mac-control-modifier, mac-command-modifier, and + mac-option-modifier. + (Mac International): Fix description of conversion of clipboard data. + (Mac Font Specs): Add example of font customization by face attributes. + 2005-11-22 Nick Roberts <nickrob@snap.net.nz> * building.texi (Watch Expressions): Expand description.
--- a/man/building.texi Wed Nov 23 01:35:21 2005 +0000 +++ b/man/building.texi Sat Dec 03 14:25:50 2005 +0000 @@ -835,6 +835,8 @@ gdb-display-@var{buffertype}-buffer} or @code{M-x gdb-frame-@var{buffertype}-buffer} respectively, where @var{buffertype} is the relevant buffer type e.g breakpoints. +Most of these buffers are read-only and be killed by simply +pressing @kbd{q} in them. When you finish debugging then kill the GUD buffer with @kbd{C-x k}, which will also kill all the buffers associated with the session. @@ -863,8 +865,8 @@ when it is disabled. Text-only terminals correspondingly display a @samp{B} or @samp{b}. -@item d -@kindex d @r{(GDB breakpoints buffer)} +@item D +@kindex D @r{(GDB breakpoints buffer)} @findex gdb-delete-breakpoint Delete the breakpoint at the current line (@code{gdb-delete-breakpoint}). @@ -903,8 +905,9 @@ Each watch expression is displayed in the speedbar. Complex data types, such as arrays, structures and unions are represented in a tree format. Leaves and simple data types show the name of the expression -and its value, and display the type as a tooltip. Higher levels -just show the name and the data type. +and its value, and display the type as a tooltip. Higher levels show +the name, type and address value for pointers and just the name and +type otherwise. To expand or contract a complex data type, click @kbd{Mouse-2} on the tag to the left of the expression. @@ -961,8 +964,9 @@ @item Registers Buffer @findex toggle-gdb-all-registers The registers buffer displays the values held by the registers -(@pxref{Registers,,, gdb, The GNU debugger}). Press @key{SPC} to -toggle the display of floating point registers +(@pxref{Registers,,, gdb, The GNU debugger}). Press @key{RET} or +click @kbd{Mouse-2} on a register if you want to change its value. +Press @key{SPC} to toggle the display of floating point registers (@code{toggle-gdb-all-registers}). @item Assembler Buffer
--- a/man/calc.texi Wed Nov 23 01:35:21 2005 +0000 +++ b/man/calc.texi Sat Dec 03 14:25:50 2005 +0000 @@ -167,7 +167,7 @@ * Embedded Mode:: Working with formulas embedded in a file. * Programming:: Calc as a programmable calculator. -* Customizable Variables:: Customizable Variables. +* Customizing Calc:: Customizing Calc. * Reporting Bugs:: How to report bugs and make suggestions. * Summary:: Summary of Calc commands and functions. @@ -708,9 +708,9 @@ @c [fix-ref Help Commands] You can access this manual on-line at any time within Calc by pressing the @kbd{h i} key sequence. Outside of the Calc window, -you can press @kbd{M-# i} to read the manual on-line. Also, you -can jump directly to the Tutorial by pressing @kbd{h t} or @kbd{M-# t}, -or to the Summary by pressing @kbd{h s} or @kbd{M-# s}. Within Calc, +you can press @kbd{C-x * i} to read the manual on-line. Also, you +can jump directly to the Tutorial by pressing @kbd{h t} or @kbd{C-x * t}, +or to the Summary by pressing @kbd{h s} or @kbd{C-x * s}. Within Calc, you can also go to the part of the manual describing any Calc key, function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v}, respectively. @xref{Help Commands}. @@ -773,8 +773,8 @@ is usually omitted in key sequences like @kbd{M-x calc-keypad @key{RET}}. Commands are generally shown like this: @kbd{p} (@code{calc-precision}) -or @kbd{M-# k} (@code{calc-keypad}). This means that the command is -normally used by pressing the @kbd{p} key or @kbd{M-# k} key sequence, +or @kbd{C-x * k} (@code{calc-keypad}). This means that the command is +normally used by pressing the @kbd{p} key or @kbd{C-x * k} key sequence, but it also has the full-name equivalent shown, e.g., @kbd{M-x calc-precision}. Commands that correspond to functions in algebraic notation @@ -797,7 +797,7 @@ Tutorial. To begin, start Emacs if necessary (usually the command @code{emacs} -does this), and type @kbd{M-# c} (or @kbd{@key{ESC} # c}) to start the +does this), and type @kbd{C-x * c} to start the Calculator. (You can also use @kbd{M-x calc} if this doesn't work. @xref{Starting Calc}, for various ways of starting the Calculator.) @@ -849,7 +849,7 @@ result from the most-recent and compute the Inverse Hyperbolic sine. @strong{Keypad mode.} If you are using the X window system, press -@w{@kbd{M-# k}} to get Keypad mode. (If you don't use X, skip to +@w{@kbd{C-x * k}} to get Keypad mode. (If you don't use X, skip to the next section.) @noindent @@ -869,12 +869,12 @@ Click on @key{<-} to erase the result, then click @key{OFF} to turn the Keypad Calculator off. -@strong{Grabbing data.} Type @kbd{M-# x} if necessary to exit Calc. +@strong{Grabbing data.} Type @kbd{C-x * x} if necessary to exit Calc. Now select the following numbers as an Emacs region: ``Mark'' the front of the list by typing @kbd{C-@key{SPC}} or @kbd{C-@@} there, then move to the other end of the list. (Either get this list from -the on-line copy of this manual, accessed by @w{@kbd{M-# i}}, or just -type these numbers into a scratch file.) Now type @kbd{M-# g} to +the on-line copy of this manual, accessed by @w{@kbd{C-x * i}}, or just +type these numbers into a scratch file.) Now type @kbd{C-x * g} to ``grab'' these numbers into Calc. @example @@ -896,7 +896,7 @@ @noindent You can also grab data as a rectangular matrix. Place the cursor on the upper-leftmost @samp{1} and set the mark, then move to just after -the lower-right @samp{8} and press @kbd{M-# r}. +the lower-right @samp{8} and press @kbd{C-x * r}. @noindent Type @kbd{v t} to transpose this @@ -908,7 +908,7 @@ matrix. Type @w{@kbd{v u}} to unpack the rows into two separate vectors. Now type @w{@kbd{V R + @key{TAB} V R +}} to compute the sums of the two original columns. (There is also a special -grab-and-sum-columns command, @kbd{M-# :}.) +grab-and-sum-columns command, @kbd{C-x * :}.) @strong{Units conversion.} Units are entered algebraically. Type @w{@kbd{' 43 mi/hr @key{RET}}} to enter the quantity 43 miles-per-hour. @@ -939,21 +939,21 @@ @iftex @strong{Help functions.} You can read about any command in the on-line -manual. Type @kbd{M-# c} to return to Calc after each of these +manual. Type @kbd{C-x * c} to return to Calc after each of these commands: @kbd{h k t N} to read about the @kbd{t N} command, @kbd{h f sqrt @key{RET}} to read about the @code{sqrt} function, and @kbd{h s} to read the Calc summary. @end iftex @ifinfo @strong{Help functions.} You can read about any command in the on-line -manual. Remember to type the letter @kbd{l}, then @kbd{M-# c}, to +manual. Remember to type the letter @kbd{l}, then @kbd{C-x * c}, to return here after each of these commands: @w{@kbd{h k t N}} to read about the @w{@kbd{t N}} command, @kbd{h f sqrt @key{RET}} to read about the @code{sqrt} function, and @kbd{h s} to read the Calc summary. @end ifinfo Press @key{DEL} repeatedly to remove any leftover results from the stack. -To exit from Calc, press @kbd{q} or @kbd{M-# c} again. +To exit from Calc, press @kbd{q} or @kbd{C-x * c} again. @node Using Calc, History and Acknowledgements, Demonstration of Calc, Getting Started @section Using Calc @@ -970,54 +970,38 @@ * Keypad Mode Overview:: * Standalone Operation:: * Embedded Mode Overview:: -* Other M-# Commands:: +* Other C-x * Commands:: @end menu @node Starting Calc, The Standard Interface, Using Calc, Using Calc @subsection Starting Calc @noindent -On most systems, you can type @kbd{M-#} to start the Calculator. -The notation @kbd{M-#} is short for Meta-@kbd{#}. On most -keyboards this means holding down the Meta (or Alt) and -Shift keys while typing @kbd{3}. - -@cindex META key -Once again, if you don't have a Meta key on your keyboard you can type -@key{ESC} first, then @kbd{#}, to accomplish the same thing. If you -don't even have an @key{ESC} key, you can fake it by holding down -Control or @key{CTRL} while typing a left square bracket -(that's @kbd{C-[} in Emacs notation). - -The key @kbd{M-#} is bound to the command @code{calc-dispatch}, -which can be rebound if convenient. -(@xref{Key Bindings,,Customizing Key Bindings,emacs, -The GNU Emacs Manual}.) - -When you press @kbd{M-#}, Emacs waits for you to press a second key to -complete the command. In this case, you will follow @kbd{M-#} with a -letter (upper- or lower-case, it doesn't matter for @kbd{M-#}) that says +On most systems, you can type @kbd{C-x *} to start the Calculator. +The key sequence @kbd{C-x *} is bound to the command @code{calc-dispatch}, +which can be rebound if convenient (@pxref{Customizing Calc}). + +When you press @kbd{C-x *}, Emacs waits for you to press a second key to +complete the command. In this case, you will follow @kbd{C-x *} with a +letter (upper- or lower-case, it doesn't matter for @kbd{C-x *}) that says which Calc interface you want to use. -To get Calc's standard interface, type @kbd{M-# c}. To get -Keypad mode, type @kbd{M-# k}. Type @kbd{M-# ?} to get a brief +To get Calc's standard interface, type @kbd{C-x * c}. To get +Keypad mode, type @kbd{C-x * k}. Type @kbd{C-x * ?} to get a brief list of the available options, and type a second @kbd{?} to get a complete list. -To ease typing, @kbd{M-# M-#} (or @kbd{M-# #} if that's easier) -also works to start Calc. It starts the same interface (either -@kbd{M-# c} or @w{@kbd{M-# k}}) that you last used, selecting the -@kbd{M-# c} interface by default. (If your installation has -a special function key set up to act like @kbd{M-#}, hitting that -function key twice is just like hitting @kbd{M-# M-#}.) - -If @kbd{M-#} doesn't work for you, you can always type explicit +To ease typing, @kbd{C-x * *} also works to start Calc. It starts the +same interface (either @kbd{C-x * c} or @w{@kbd{C-x * k}}) that you last +used, selecting the @kbd{C-x * c} interface by default. + +If @kbd{C-x *} doesn't work for you, you can always type explicit commands like @kbd{M-x calc} (for the standard user interface) or @w{@kbd{M-x calc-keypad}} (for Keypad mode). First type @kbd{M-x} (that's Meta with the letter @kbd{x}), then, at the prompt, type the full command (like @kbd{calc-keypad}) and press Return. -The same commands (like @kbd{M-# c} or @kbd{M-# M-#}) that start +The same commands (like @kbd{C-x * c} or @kbd{C-x * *}) that start the Calculator also turn it off if it is already on. @node The Standard Interface, Quick Mode Overview, Starting Calc, Using Calc @@ -1026,7 +1010,7 @@ @noindent @cindex Standard user interface Calc's standard interface acts like a traditional RPN calculator, -operated by the normal Emacs keyboard. When you type @kbd{M-# c} +operated by the normal Emacs keyboard. When you type @kbd{C-x * c} to start the Calculator, the Emacs screen splits into two windows with the file you were editing on top and Calc on the bottom. @@ -1082,55 +1066,55 @@ cursor is in the Calc stack or trail windows, keys are interpreted as Calc commands. -When you quit by pressing @kbd{M-# c} a second time, the Calculator +When you quit by pressing @kbd{C-x * c} a second time, the Calculator windows go away but the actual Stack and Trail are not gone, just -hidden. When you press @kbd{M-# c} once again you will get the +hidden. When you press @kbd{C-x * c} once again you will get the same stack and trail contents you had when you last used the Calculator. The Calculator does not remember its state between Emacs sessions. -Thus if you quit Emacs and start it again, @kbd{M-# c} will give you +Thus if you quit Emacs and start it again, @kbd{C-x * c} will give you a fresh stack and trail. There is a command (@kbd{m m}) that lets you save your favorite mode settings between sessions, though. One of the things it saves is which user interface (standard or Keypad) you last used; otherwise, a freshly started Emacs will -always treat @kbd{M-# M-#} the same as @kbd{M-# c}. +always treat @kbd{C-x * *} the same as @kbd{C-x * c}. The @kbd{q} key is another equivalent way to turn the Calculator off. -If you type @kbd{M-# b} first and then @kbd{M-# c}, you get a +If you type @kbd{C-x * b} first and then @kbd{C-x * c}, you get a full-screen version of Calc (@code{full-calc}) in which the stack and trail windows are still side-by-side but are now as tall as the whole -Emacs screen. When you press @kbd{q} or @kbd{M-# c} again to quit, -the file you were editing before reappears. The @kbd{M-# b} key +Emacs screen. When you press @kbd{q} or @kbd{C-x * c} again to quit, +the file you were editing before reappears. The @kbd{C-x * b} key switches back and forth between ``big'' full-screen mode and the normal partial-screen mode. -Finally, @kbd{M-# o} (@code{calc-other-window}) is like @kbd{M-# c} +Finally, @kbd{C-x * o} (@code{calc-other-window}) is like @kbd{C-x * c} except that the Calc window is not selected. The buffer you were -editing before remains selected instead. @kbd{M-# o} is a handy +editing before remains selected instead. @kbd{C-x * o} is a handy way to switch out of Calc momentarily to edit your file; type -@kbd{M-# c} to switch back into Calc when you are done. +@kbd{C-x * c} to switch back into Calc when you are done. @node Quick Mode Overview, Keypad Mode Overview, The Standard Interface, Using Calc @subsection Quick Mode (Overview) @noindent @dfn{Quick mode} is a quick way to use Calc when you don't need the -full complexity of the stack and trail. To use it, type @kbd{M-# q} +full complexity of the stack and trail. To use it, type @kbd{C-x * q} (@code{quick-calc}) in any regular editing buffer. Quick mode is very simple: It prompts you to type any formula in standard algebraic notation (like @samp{4 - 2/3}) and then displays the result at the bottom of the Emacs screen (@mathit{3.33333333333} in this case). You are then back in the same editing buffer you -were in before, ready to continue editing or to type @kbd{M-# q} +were in before, ready to continue editing or to type @kbd{C-x * q} again to do another quick calculation. The result of the calculation will also be in the Emacs ``kill ring'' so that a @kbd{C-y} command at this point will yank the result into your editing buffer. Calc mode settings affect Quick mode, too, though you will have to -go into regular Calc (with @kbd{M-# c}) to change the mode settings. +go into regular Calc (with @kbd{C-x * c}) to change the mode settings. @c [fix-ref Quick Calculator mode] @xref{Quick Calculator}, for further information. @@ -1144,7 +1128,7 @@ don't have a mouse, you will have to operate Keypad mode with your arrow keys (which is probably more trouble than it's worth). -Type @kbd{M-# k} to turn Keypad mode on or off. Once again you +Type @kbd{C-x * k} to turn Keypad mode on or off. Once again you get two new windows, this time on the righthand side of the screen instead of at the bottom. The upper window is the familiar Calc Stack; the lower window is a picture of a typical calculator keypad. @@ -1206,7 +1190,7 @@ keypad. One advantage of Keypad mode is that you don't need an explicit command to switch between editing and calculating. -If you press @kbd{M-# b} first, you get a full-screen Keypad mode +If you press @kbd{C-x * b} first, you get a full-screen Keypad mode (@code{full-calc-keypad}) with three windows: The keypad in the lower left, the stack in the lower right, and the trail on top. @@ -1234,13 +1218,13 @@ @end example @noindent -which run a full-screen Calculator (as if by @kbd{M-# b M-# c}) or -a full-screen X-based Calculator (as if by @kbd{M-# b M-# k}). +which run a full-screen Calculator (as if by @kbd{C-x * b C-x * c}) or +a full-screen X-based Calculator (as if by @kbd{C-x * b C-x * k}). In standalone operation, quitting the Calculator (by pressing @kbd{q} or clicking on the keypad @key{EXIT} button) quits Emacs itself. -@node Embedded Mode Overview, Other M-# Commands, Standalone Operation, Using Calc +@node Embedded Mode Overview, Other C-x * Commands, Standalone Operation, Using Calc @subsection Embedded Mode (Overview) @noindent @@ -1276,7 +1260,7 @@ @end group @end smallexample -Now, move the cursor onto this new formula and press @kbd{M-# e}. +Now, move the cursor onto this new formula and press @kbd{C-x * e}. Calc will read the formula (using the surrounding blank lines to tell how much text to read), then push this formula (invisibly) onto the Calc stack. The cursor will stay on the formula in the @@ -1340,10 +1324,10 @@ @end group @end smallexample -To leave Embedded mode, type @kbd{M-# e} again. The mode line +To leave Embedded mode, type @kbd{C-x * e} again. The mode line and keyboard will revert to the way they were before. -The related command @kbd{M-# w} operates on a single word, which +The related command @kbd{C-x * w} operates on a single word, which generally means a single number, inside text. It uses any non-numeric characters rather than blank lines to delimit the formula it reads. Here's an example of its use: @@ -1352,10 +1336,10 @@ A slope of one-third corresponds to an angle of 1 degrees. @end smallexample -Place the cursor on the @samp{1}, then type @kbd{M-# w} to enable +Place the cursor on the @samp{1}, then type @kbd{C-x * w} to enable Embedded mode on that number. Now type @kbd{3 /} (to get one-third), and @kbd{I T} (the Inverse Tangent converts a slope into an angle), -then @w{@kbd{M-# w}} again to exit Embedded mode. +then @w{@kbd{C-x * w}} again to exit Embedded mode. @smallexample A slope of one-third corresponds to an angle of 18.4349488229 degrees. @@ -1364,48 +1348,51 @@ @c [fix-ref Embedded Mode] @xref{Embedded Mode}, for full details. -@node Other M-# Commands, , Embedded Mode Overview, Using Calc -@subsection Other @kbd{M-#} Commands - -@noindent -Two more Calc-related commands are @kbd{M-# g} and @kbd{M-# r}, +@node Other C-x * Commands, , Embedded Mode Overview, Using Calc +@subsection Other @kbd{C-x *} Commands + +@noindent +Two more Calc-related commands are @kbd{C-x * g} and @kbd{C-x * r}, which ``grab'' data from a selected region of a buffer into the Calculator. The region is defined in the usual Emacs way, by a ``mark'' placed at one end of the region, and the Emacs cursor or ``point'' placed at the other. -The @kbd{M-# g} command reads the region in the usual left-to-right, +The @kbd{C-x * g} command reads the region in the usual left-to-right, top-to-bottom order. The result is packaged into a Calc vector of numbers and placed on the stack. Calc (in its standard user interface) is then started. Type @kbd{v u} if you want to unpack this vector into separate numbers on the stack. Also, -@kbd{C-u M-# g} interprets the region as a single number or +@kbd{C-u C-x * g} interprets the region as a single number or formula. -The @kbd{M-# r} command reads a rectangle, with the point and +The @kbd{C-x * r} command reads a rectangle, with the point and mark defining opposite corners of the rectangle. The result is a matrix of numbers on the Calculator stack. -Complementary to these is @kbd{M-# y}, which ``yanks'' the +Complementary to these is @kbd{C-x * y}, which ``yanks'' the value at the top of the Calc stack back into an editing buffer. -If you type @w{@kbd{M-# y}} while in such a buffer, the value is -yanked at the current position. If you type @kbd{M-# y} while +If you type @w{@kbd{C-x * y}} while in such a buffer, the value is +yanked at the current position. If you type @kbd{C-x * y} while in the Calc buffer, Calc makes an educated guess as to which editing buffer you want to use. The Calc window does not have to be visible in order to use this command, as long as there is something on the Calc stack. -Here, for reference, is the complete list of @kbd{M-#} commands. +Here, for reference, is the complete list of @kbd{C-x *} commands. The shift, control, and meta keys are ignored for the keystroke -following @kbd{M-#}. +following @kbd{C-x *}. @noindent Commands for turning Calc on and off: @table @kbd -@item # +@item * Turn Calc on or off, employing the same user interface as last time. +@item =, +, -, /, \, &, # +Alternatives for @kbd{*}. + @item C Turn Calc on or off using its standard bottom-of-the-screen interface. If Calc is already turned on but the cursor is not @@ -1417,7 +1404,7 @@ move it out of that window. @item B -Control whether @kbd{M-# c} and @kbd{M-# k} use the full screen. +Control whether @kbd{C-x * c} and @kbd{C-x * k} use the full screen. @item Q Use Quick mode for a single short calculation. @@ -1628,7 +1615,7 @@ @c [tutorial] @ifinfo -@c This node is accessed by the `M-# t' command. +@c This node is accessed by the `C-x * t' command. @node Interactive Tutorial, , , Top @chapter Tutorial @@ -1682,16 +1669,16 @@ The easiest way to read this tutorial on-line is to have two windows on your Emacs screen, one with Calc and one with the Info system. (If you have a printed copy of the manual you can use that instead.) Press -@kbd{M-# c} to turn Calc on or to switch into the Calc window, and -press @kbd{M-# i} to start the Info system or to switch into its window. +@kbd{C-x * c} to turn Calc on or to switch into the Calc window, and +press @kbd{C-x * i} to start the Info system or to switch into its window. Or, you may prefer to use the tutorial in printed form. @end ifinfo @iftex The easiest way to read this tutorial on-line is to have two windows on your Emacs screen, one with Calc and one with the Info system. (If you have a printed copy of the manual you can use that instead.) Press -@kbd{M-# c} to turn Calc on or to switch into the Calc window, and -press @kbd{M-# i} to start the Info system or to switch into its window. +@kbd{C-x * c} to turn Calc on or to switch into the Calc window, and +press @kbd{C-x * i} to start the Info system or to switch into its window. @end iftex This tutorial is designed to be done in sequence. But the rest of this @@ -1772,8 +1759,8 @@ Thus we could add the numbers 2 and 3 in an RPN calculator by typing: @kbd{2 @key{RET} 3 @key{RET} +}. (The @key{RET} key, Return, corresponds to the @key{ENTER} key on traditional RPN calculators.) Try this now if -you wish; type @kbd{M-# c} to switch into the Calc window (you can type -@kbd{M-# c} again or @kbd{M-# o} to switch back to the Tutorial window). +you wish; type @kbd{C-x * c} to switch into the Calc window (you can type +@kbd{C-x * c} again or @kbd{C-x * o} to switch back to the Tutorial window). The first four keystrokes ``push'' the numbers 2 and 3 onto the stack. The @kbd{+} key ``pops'' the top two numbers from the stack, adds them, and pushes the result (5) back onto the stack. Here's how the stack @@ -1785,7 +1772,7 @@ . 1: 3 . . - M-# c 2 @key{RET} 3 @key{RET} + @key{DEL} + C-x * c 2 @key{RET} 3 @key{RET} + @key{DEL} @end group @end smallexample @@ -2434,7 +2421,7 @@ @noindent If you make a mistake, you can usually correct it by pressing shift-@kbd{U}, the ``undo'' command. First, clear the stack (@kbd{M-0 @key{DEL}}) and exit -and restart Calc (@kbd{M-# M-# M-# M-#}) to make sure things start off +and restart Calc (@kbd{C-x * * C-x * *}) to make sure things start off with a clean slate. Now: @smallexample @@ -4093,7 +4080,7 @@ @noindent If you are reading this tutorial in printed form, you will find it -easiest to press @kbd{M-# i} to enter the on-line Info version of +easiest to press @kbd{C-x * i} to enter the on-line Info version of the manual and find this table there. (Press @kbd{g}, then type @kbd{List Tutorial}, to jump straight to this section.) @@ -4102,7 +4089,7 @@ (On your system this may be @kbd{C-2}, @kbd{C-@key{SPC}}, or @kbd{NUL}.) Now position the cursor to the lower-right, just after the @expr{1.354}. You have now defined this region as an Emacs ``rectangle.'' Still -in the Info buffer, type @kbd{M-# r}. This command +in the Info buffer, type @kbd{C-x * r}. This command (@code{calc-grab-rectangle}) will pop you back into the Calculator, with the contents of the rectangle you specified in the form of a matrix. @@ -4372,7 +4359,7 @@ @cindex Geometric mean (@bullet{}) @strong{Exercise 3.} If the input data do not form a -rectangle, you can use @w{@kbd{M-# g}} (@code{calc-grab-region}) +rectangle, you can use @w{@kbd{C-x * g}} (@code{calc-grab-region}) to grab the data the way Emacs normally works with regions---it reads left-to-right, top-to-bottom, treating line breaks the same as spaces. Use this command to find the geometric mean of the following numbers. @@ -4385,7 +4372,7 @@ @end example @noindent -The @kbd{M-# g} command accepts numbers separated by spaces or commas, +The @kbd{C-x * g} command accepts numbers separated by spaces or commas, with or without surrounding vector brackets. @xref{List Answer 3, 3}. (@bullet{}) @@ -5120,7 +5107,7 @@ @end smallexample To see a complete list of built-in units, type @kbd{u v}. Press -@w{@kbd{M-# c}} again to re-enter the Calculator when you're done looking +@w{@kbd{C-x * c}} again to re-enter the Calculator when you're done looking at the units table. (@bullet{}) @strong{Exercise 13.} How many seconds are there really @@ -6586,9 +6573,9 @@ which reads the current region of the current buffer as a sequence of keystroke names, and defines that sequence on the @kbd{X} (and @kbd{C-x e}) key. Because this is so useful, Calc puts this -command on the @kbd{M-# m} key. Try reading in this macro in the +command on the @kbd{C-x * m} key. Try reading in this macro in the following form: Press @kbd{C-@@} (or @kbd{C-@key{SPC}}) at -one end of the text below, then type @kbd{M-# m} at the other. +one end of the text below, then type @kbd{C-x * m} at the other. @example @group @@ -6738,7 +6725,7 @@ using the @kbd{z s} command to call itself recursively, then assign it to the same key with @kbd{Z K s}. Now the @kbd{z s} command will run the complete recursive program. (Another way is to use @w{@kbd{Z E}} -or @kbd{M-# m} (@code{read-kbd-macro}) to read the whole macro at once, +or @kbd{C-x * m} (@code{read-kbd-macro}) to read the whole macro at once, thus avoiding the ``training'' phase.) The task: Write a program that computes Stirling numbers of the first kind, given @expr{n} and @expr{m} on the stack. Test it with @emph{small} inputs like @@ -7530,7 +7517,7 @@ @noindent Move to one end of the list and press @kbd{C-@@} (or @kbd{C-@key{SPC}} or whatever) to set the mark, then move to the other end of the list -and type @w{@kbd{M-# g}}. +and type @w{@kbd{C-x * g}}. @smallexample @group @@ -9525,7 +9512,7 @@ @infoline @expr{x - f(x)/f'(x)}. (Because this definition is long, it will be repeated in concise form -below. You can use @w{@kbd{M-# m}} to load it from there. While you are +below. You can use @w{@kbd{C-x * m}} to load it from there. While you are entering a @kbd{Z ` Z '} body in a macro, Calc simply collects keystrokes without executing them. In the following diagrams we'll pretend Calc actually executed the keystrokes as you typed them, @@ -9647,7 +9634,7 @@ step is repeated until @expr{z > 5}. (Because this definition is long, it will be repeated in concise form -below. You can use @w{@kbd{M-# m}} to load it from there. While you are +below. You can use @w{@kbd{C-x * m}} to load it from there. While you are entering a @kbd{Z ` Z '} body in a macro, Calc simply collects keystrokes without executing them. In the following diagrams we'll pretend Calc actually executed the keystrokes as you typed them, @@ -9768,7 +9755,7 @@ coefficient on the @expr{x^n} term times @expr{n!}. (Because this definition is long, it will be repeated in concise form -below. You can use @w{@kbd{M-# m}} to load it from there. While you are +below. You can use @w{@kbd{C-x * m}} to load it from there. While you are entering a @kbd{Z ` Z '} body in a macro, Calc simply collects keystrokes without executing them. In the following diagrams we'll pretend Calc actually executed the keystrokes as you typed them, @@ -9877,7 +9864,7 @@ to the form @expr{s(n,m) = s(n-1,m-1) - (n-1) s(n-1,m)}. (Because this definition is long, it will be repeated in concise form -below. You can use @kbd{M-# m} to load it from there.) +below. You can use @kbd{C-x * m} to load it from there.) @smallexample @group @@ -9951,10 +9938,10 @@ @end group @end example -You can read this definition using @kbd{M-# m} (@code{read-kbd-macro}) +You can read this definition using @kbd{C-x * m} (@code{read-kbd-macro}) followed by @kbd{Z K s}, without having to make a dummy definition first, because @code{read-kbd-macro} doesn't need to execute the -definition as it reads it in. For this reason, @code{M-# m} is often +definition as it reads it in. For this reason, @code{C-x * m} is often the easiest way to create recursive programs in Calc. @node Programming Answer 12, , Programming Answer 11, Answers to Exercises @@ -10044,15 +10031,14 @@ to turn the trail window off, but the @samp{*Calc Trail*} buffer itself still exists and is updated silently. @xref{Trail Commands}. -@kindex M-# c -@kindex M-# M-# -@ignore -@mindex @null -@end ignore -@kindex M-# # -In most installations, the @kbd{M-# c} key sequence is a more -convenient way to start the Calculator. Also, @kbd{M-# M-#} and -@kbd{M-# #} are synonyms for @kbd{M-# c} unless you last used Calc +@kindex C-x * c +@kindex C-x * * +@ignore +@mindex @null +@end ignore +In most installations, the @kbd{C-x * c} key sequence is a more +convenient way to start the Calculator. Also, @kbd{C-x * *} +is a synonym for @kbd{C-x * c} unless you last used Calc in its Keypad mode. @kindex x @@ -10068,7 +10054,7 @@ @cindex Extensions module @cindex @file{calc-ext} module -The Calculator exists in many parts. When you type @kbd{M-# c}, the +The Calculator exists in many parts. When you type @kbd{C-x * c}, the Emacs ``auto-load'' mechanism will bring in only the first part, which contains the basic arithmetic functions. The other parts will be auto-loaded the first time you use the more advanced commands like trig @@ -10076,48 +10062,48 @@ of the Calculator in the common case when all you need to do is a little arithmetic. If for some reason the Calculator fails to load an extension module automatically, you can force it to load all the -extensions by using the @kbd{M-# L} (@code{calc-load-everything}) +extensions by using the @kbd{C-x * L} (@code{calc-load-everything}) command. @xref{Mode Settings}. -If you type @kbd{M-x calc} or @kbd{M-# c} with any numeric prefix argument, +If you type @kbd{M-x calc} or @kbd{C-x * c} with any numeric prefix argument, the Calculator is loaded if necessary, but it is not actually started. If the argument is positive, the @file{calc-ext} extensions are also loaded if necessary. User-written Lisp code that wishes to make use of Calc's arithmetic routines can use @samp{(calc 0)} or @samp{(calc 1)} to auto-load the Calculator. -@kindex M-# b +@kindex C-x * b @pindex full-calc -If you type @kbd{M-# b}, then next time you use @kbd{M-# c} you +If you type @kbd{C-x * b}, then next time you use @kbd{C-x * c} you will get a Calculator that uses the full height of the Emacs screen. -When full-screen mode is on, @kbd{M-# c} runs the @code{full-calc} +When full-screen mode is on, @kbd{C-x * c} runs the @code{full-calc} command instead of @code{calc}. From the Unix shell you can type @samp{emacs -f full-calc} to start a new Emacs specifically for use as a calculator. When Calc is started from the Emacs command line like this, Calc's normal ``quit'' commands actually quit Emacs itself. -@kindex M-# o +@kindex C-x * o @pindex calc-other-window -The @kbd{M-# o} command is like @kbd{M-# c} except that the Calc +The @kbd{C-x * o} command is like @kbd{C-x * c} except that the Calc window is not actually selected. If you are already in the Calc -window, @kbd{M-# o} switches you out of it. (The regular Emacs +window, @kbd{C-x * o} switches you out of it. (The regular Emacs @kbd{C-x o} command would also work for this, but it has a tendency to drop you into the Calc Trail window instead, which -@kbd{M-# o} takes care not to do.) - -@ignore -@mindex M-# q -@end ignore -For one quick calculation, you can type @kbd{M-# q} (@code{quick-calc}) +@kbd{C-x * o} takes care not to do.) + +@ignore +@mindex C-x * q +@end ignore +For one quick calculation, you can type @kbd{C-x * q} (@code{quick-calc}) which prompts you for a formula (like @samp{2+3/4}). The result is displayed at the bottom of the Emacs screen without ever creating any special Calculator windows. @xref{Quick Calculator}. @ignore -@mindex M-# k +@mindex C-x * k @end ignore Finally, if you are using the X window system you may want to try -@kbd{M-# k} (@code{calc-keypad}) which runs Calc with a +@kbd{C-x * k} (@code{calc-keypad}) which runs Calc with a ``calculator keypad'' picture as well as a stack display. Click on the keys with the mouse to operate the calculator. @xref{Keypad Mode}. @@ -10128,13 +10114,13 @@ The @kbd{q} key (@code{calc-quit}) exits Calc mode and closes the Calculator's window(s). It does not delete the Calculator buffers. If you type @kbd{M-x calc} again, the Calculator will reappear with the -contents of the stack intact. Typing @kbd{M-# c} or @kbd{M-# M-#} +contents of the stack intact. Typing @kbd{C-x * c} or @kbd{C-x * *} again from inside the Calculator buffer is equivalent to executing -@code{calc-quit}; you can think of @kbd{M-# M-#} as toggling the +@code{calc-quit}; you can think of @kbd{C-x * *} as toggling the Calculator on and off. -@kindex M-# x -The @kbd{M-# x} command also turns the Calculator off, no matter which +@kindex C-x * x +The @kbd{C-x * x} command also turns the Calculator off, no matter which user interface (standard, Keypad, or Embedded) is currently active. It also cancels @code{calc-edit} mode if used from there. @@ -10174,18 +10160,18 @@ and @code{calc-scroll-up}. They scroll up or down by one-half the height of the Calc window. -@kindex M-# 0 +@kindex C-x * 0 @pindex calc-reset -The @kbd{M-# 0} command (@code{calc-reset}; that's @kbd{M-#} followed +The @kbd{C-x * 0} command (@code{calc-reset}; that's @kbd{C-x *} followed by a zero) resets the Calculator to its initial state. This clears the stack, resets all the modes to their initial values (the values that were saved with @kbd{m m} (@code{calc-save-modes})), clears the caches (@pxref{Caches}), and so on. (It does @emph{not} erase the values of any variables.) With an argument of 0, Calc will be reset to its default state; namely, the modes will be given their default values. -With a positive prefix argument, @kbd{M-# 0} preserves the contents of +With a positive prefix argument, @kbd{C-x * 0} preserves the contents of the stack but resets everything else to its initial state; with a -negative prefix argument, @kbd{M-# 0} preserves the contents of the +negative prefix argument, @kbd{C-x * 0} preserves the contents of the stack but resets everything else to its default state. @pindex calc-version @@ -10219,21 +10205,21 @@ Calc-specific analogues to the @kbd{C-h} functions for Emacs help. @kindex h i -@kindex M-# i +@kindex C-x * i @kindex i @pindex calc-info The @kbd{h i} (@code{calc-info}) command runs the Emacs Info system to read this manual on-line. This is basically the same as typing @kbd{C-h i} (the regular way to run the Info system), then, if Info is not already in the Calc manual, selecting the beginning of the -manual. The @kbd{M-# i} command is another way to read the Calc +manual. The @kbd{C-x * i} command is another way to read the Calc manual; it is different from @kbd{h i} in that it works any time, not just inside Calc. The plain @kbd{i} key is also equivalent to @kbd{h i}, though this key is obsolete and may be replaced with a different command in a future version of Calc. @kindex h t -@kindex M-# t +@kindex C-x * t @pindex calc-tutorial The @kbd{h t} (@code{calc-tutorial}) command runs the Info system on the Tutorial section of the Calc manual. It is like @kbd{h i}, @@ -10241,14 +10227,14 @@ than the beginning of the whole manual. (It actually selects the node ``Interactive Tutorial'' which tells a few things about using the Info system before going on to the actual tutorial.) -The @kbd{M-# t} key is equivalent to @kbd{h t} (but it works at +The @kbd{C-x * t} key is equivalent to @kbd{h t} (but it works at all times). @kindex h s -@kindex M-# s +@kindex C-x * s @pindex calc-info-summary The @kbd{h s} (@code{calc-info-summary}) command runs the Info system -on the Summary node of the Calc manual. @xref{Summary}. The @kbd{M-# s} +on the Summary node of the Calc manual. @xref{Summary}. The @kbd{C-x * s} key is equivalent to @kbd{h s}. @kindex h k @@ -10526,11 +10512,11 @@ @section ``Quick Calculator'' Mode @noindent -@kindex M-# q +@kindex C-x * q @pindex quick-calc @cindex Quick Calculator There is another way to invoke the Calculator if all you need to do -is make one or two quick calculations. Type @kbd{M-# q} (or +is make one or two quick calculations. Type @kbd{C-x * q} (or @kbd{M-x quick-calc}), then type any formula as an algebraic entry. The Calculator will compute the result and display it in the echo area, without ever actually putting up a Calc window. @@ -10539,11 +10525,11 @@ refer to the previous Quick Calculator result. Older results are not retained; the Quick Calculator has no effect on the full Calculator's stack or trail. If you compute a result and then -forget what it was, just run @code{M-# q} again and enter +forget what it was, just run @code{C-x * q} again and enter @samp{$} as the formula. If this is the first time you have used the Calculator in this Emacs -session, the @kbd{M-# q} command will create the @code{*Calculator*} +session, the @kbd{C-x * q} command will create the @code{*Calculator*} buffer and perform all the usual initializations; it simply will refrain from putting that buffer up in a new window. The Quick Calculator refers to the @code{*Calculator*} buffer for all mode @@ -10551,15 +10537,15 @@ Calculator uses, simply run the full Calculator momentarily and use the regular @kbd{p} command. -If you use @code{M-# q} from inside the Calculator buffer, the +If you use @code{C-x * q} from inside the Calculator buffer, the effect is the same as pressing the apostrophe key (algebraic entry). The result of a Quick calculation is placed in the Emacs ``kill ring'' as well as being displayed. A subsequent @kbd{C-y} command will yank the result into the editing buffer. You can also use this -to yank the result into the next @kbd{M-# q} input line as a more +to yank the result into the next @kbd{C-x * q} input line as a more explicit alternative to @kbd{$} notation, or to yank the result -into the Calculator stack after typing @kbd{M-# c}. +into the Calculator stack after typing @kbd{C-x * c}. If you finish your formula by typing @key{LFD} (or @kbd{C-j}) instead of @key{RET}, the result is inserted immediately into the current @@ -10655,7 +10641,7 @@ The @kbd{U} key may be pressed any number of times to undo successively farther back in time; with a numeric prefix argument it undoes a specified number of operations. The undo history is cleared only by the -@kbd{q} (@code{calc-quit}) command. (Recall that @kbd{M-# c} is +@kbd{q} (@code{calc-quit}) command. (Recall that @kbd{C-x * c} is synonymous with @code{calc-quit} while inside the Calculator; this also clears the undo history.) @@ -10731,7 +10717,7 @@ @pindex another-calc It is possible to have any number of Calc mode buffers at once. Usually this is done by executing @kbd{M-x another-calc}, which -is similar to @kbd{M-# c} except that if a @samp{*Calculator*} +is similar to @kbd{C-x * c} except that if a @samp{*Calculator*} buffer already exists, a new, independent one with a name of the form @samp{*Calculator*<@var{n}>} is created. You can also use the command @code{calc-mode} to put any buffer into Calculator mode, but @@ -10778,9 +10764,9 @@ necessary; typically this means you will type a command and it won't work because some function you've never heard of was undefined. -@kindex M-# L +@kindex C-x * L @pindex calc-load-everything -If this happens, the easiest workaround is to type @kbd{M-# L} +If this happens, the easiest workaround is to type @kbd{C-x * L} (@code{calc-load-everything}) to force all the parts of Calc to be loaded right away. This will cause Emacs to take up a lot more memory than it would otherwise, but it's guaranteed to fix the problem. @@ -10839,7 +10825,7 @@ If you suspect a Calculator cache has become corrupt, you can use the @code{calc-flush-caches} command to reset all caches to the empty state. (This should only be necessary in the event of bugs in the Calculator.) -The @kbd{M-# 0} (with the zero key) command also resets caches along +The @kbd{C-x * 0} (with the zero key) command also resets caches along with all other aspects of the Calculator's state. @node Debugging Calc, , Caches, Troubleshooting Commands @@ -12049,8 +12035,8 @@ Commands that interpret (``parse'') text as algebraic formulas include algebraic entry (@kbd{'}), editing commands like @kbd{`} which parse -the contents of the editing buffer when you finish, the @kbd{M-# g} -and @w{@kbd{M-# r}} commands, the @kbd{C-y} command, the X window system +the contents of the editing buffer when you finish, the @kbd{C-x * g} +and @w{@kbd{C-x * r}} commands, the @kbd{C-y} command, the X window system ``paste'' mouse operation, and Embedded mode. All of these operations use the same rules for parsing formulas; in particular, language modes (@pxref{Language Modes}) affect them all in the same way. @@ -12446,8 +12432,8 @@ The modes saved in the file include everything controlled by the @kbd{m} and @kbd{d} prefix keys, the current precision and binary word size, whether or not the trail is displayed, the current height of the Calc -window, and more. The current interface (used when you type @kbd{M-# -M-#}) is also saved. If there were already saved mode settings in the +window, and more. The current interface (used when you type @kbd{C-x * *}) +is also saved. If there were already saved mode settings in the file, they are replaced. Otherwise, the new mode information is appended to the end of the file. @@ -12473,7 +12459,7 @@ use in the future for commands like @kbd{m m}. The default settings file name is @file{~/.calc.el}. You can see the current file name by giving a blank response to the @kbd{m F} prompt. See also the -discussion of the @code{calc-settings-file} variable; @pxref{Customizable Variables}. +discussion of the @code{calc-settings-file} variable; @pxref{Customizing Calc}. If the file name you give is your user init file (typically @file{~/.emacs}), @kbd{m F} will not automatically load the new file. This @@ -12494,7 +12480,7 @@ until the various advanced Calc features are used. Since this mode only has effect when Calc is first loaded, @kbd{m x} is usually followed by @kbd{m m} to make the mode-setting permanent. To load all of Calc just -once, rather than always in the future, you can press @kbd{M-# L}. +once, rather than always in the future, you can press @kbd{C-x * L}. @kindex m S @pindex calc-shift-prefix @@ -12864,7 +12850,7 @@ to update all @samp{=>} operators while leaving recomputation off.) To update @samp{=>} operators in an Embedded buffer while -automatic recomputation is off, use @w{@kbd{M-# u}}. +automatic recomputation is off, use @w{@kbd{C-x * u}}. @xref{Embedded Mode}. @node Working Message, , Automatic Recomputation, Calculation Modes @@ -13511,7 +13497,7 @@ @samp{\,} (@TeX{}'s thin-space symbol) as the digit separator. Please note that grouped numbers will not generally be parsed correctly -if re-read in textual form, say by the use of @kbd{M-# y} and @kbd{M-# g}. +if re-read in textual form, say by the use of @kbd{C-x * y} and @kbd{C-x * g}. (@xref{Kill and Yank}, for details on these commands.) One exception is the @samp{\,} separator, which doesn't interfere with parsing because it is ignored by @TeX{} language mode. @@ -13571,7 +13557,7 @@ calculations are often carried to one or two more significant figures, but values placed on the stack will be rounded down to ten figures.) Numbers are never actually rounded to the display precision for storage, -except by commands like @kbd{C-k} and @kbd{M-# y} which operate on the +except by commands like @kbd{C-k} and @kbd{C-x * y} which operate on the actual displayed text in the Calculator buffer. @kindex d . @@ -14133,9 +14119,9 @@ For example, suppose the formula @samp{2*a[1] + atan(a[2])} occurs in a C program; elsewhere in the program you need the derivatives of this formula with respect to @samp{a[1]} and @samp{a[2]}. First, type @kbd{d C} -to switch to C notation. Now use @code{C-u M-# g} to grab the formula +to switch to C notation. Now use @code{C-u C-x * g} to grab the formula into the Calculator, @kbd{a d a[1] @key{RET}} to differentiate with respect -to the first variable, and @kbd{M-# y} to yank the formula for the derivative +to the first variable, and @kbd{C-x * y} to yank the formula for the derivative back into your C program. Press @kbd{U} to undo the differentiation and repeat with @kbd{a d a[2] @key{RET}} for the other derivative. @@ -21278,8 +21264,8 @@ The obsolete reduce-by-columns function, @code{reducec}, is still supported but there is no way to get it through the @kbd{V R} command. -The commands @kbd{M-# :} and @kbd{M-# _} are equivalent to typing -@kbd{M-# r} to grab a rectangle of data into Calc, and then typing +The commands @kbd{C-x * :} and @kbd{C-x * _} are equivalent to typing +@kbd{C-x * r} to grab a rectangle of data into Calc, and then typing @kbd{V R : +} or @kbd{V R _ +}, respectively, to sum the columns or rows of the matrix. @xref{Grabbing From Buffers}. @@ -27934,7 +27920,7 @@ The @kbd{u V} (@code{calc-view-units-table}) command is like @kbd{u v} except that the cursor is not moved into the Units Table buffer. You can type @kbd{u V} again to remove the Units Table from the display. To -return from the Units Table buffer after a @kbd{u v}, type @kbd{M-# c} +return from the Units Table buffer after a @kbd{u v}, type @kbd{C-x * c} again or use the regular Emacs @w{@kbd{C-x o}} (@code{other-window}) command. You can also kill the buffer with @kbd{C-x k} if you wish; the actual units table is safely stored inside the Calculator. @@ -29320,7 +29306,7 @@ @samp{%s} to signify the name of the file to be displayed or printed. Or, these variables may contain Lisp expressions which are evaluated to display or print the output. These variables are customizable -(@pxref{Customizable Variables}). +(@pxref{Customizing Calc}). @kindex g x @pindex calc-graph-display @@ -29479,20 +29465,20 @@ @section Grabbing from Other Buffers @noindent -@kindex M-# g +@kindex C-x * g @pindex calc-grab-region -The @kbd{M-# g} (@code{calc-grab-region}) command takes the text between +The @kbd{C-x * g} (@code{calc-grab-region}) command takes the text between point and mark in the current buffer and attempts to parse it as a vector of values. Basically, it wraps the text in vector brackets @samp{[ ]} unless the text already is enclosed in vector brackets, then reads the text as if it were an algebraic entry. The contents of the vector may be numbers, formulas, or any other Calc objects. -If the @kbd{M-# g} command works successfully, it does an automatic -@kbd{M-# c} to enter the Calculator buffer. +If the @kbd{C-x * g} command works successfully, it does an automatic +@kbd{C-x * c} to enter the Calculator buffer. A numeric prefix argument grabs the specified number of lines around point, ignoring the mark. A positive prefix grabs from point to the -@expr{n}th following newline (so that @kbd{M-1 M-# g} grabs from point +@expr{n}th following newline (so that @kbd{M-1 C-x * g} grabs from point to the end of the current line); a negative prefix grabs from point back to the @expr{n+1}st preceding newline. In these cases the text that is grabbed is exactly the same as the text that @kbd{C-k} would @@ -29503,19 +29489,19 @@ A plain @kbd{C-u} prefix interprets the region between point and mark as a single number or formula rather than a vector. For example, -@kbd{M-# g} on the text @samp{2 a b} produces the vector of three -values @samp{[2, a, b]}, but @kbd{C-u M-# g} on the same region +@kbd{C-x * g} on the text @samp{2 a b} produces the vector of three +values @samp{[2, a, b]}, but @kbd{C-u C-x * g} on the same region reads a formula which is a product of three things: @samp{2 a b}. (The text @samp{a + b}, on the other hand, will be grabbed as a -vector of one element by plain @kbd{M-# g} because the interpretation +vector of one element by plain @kbd{C-x * g} because the interpretation @samp{[a, +, b]} would be a syntax error.) If a different language has been specified (@pxref{Language Modes}), the grabbed text will be interpreted according to that language. -@kindex M-# r +@kindex C-x * r @pindex calc-grab-rectangle -The @kbd{M-# r} (@code{calc-grab-rectangle}) command takes the text between +The @kbd{C-x * r} (@code{calc-grab-rectangle}) command takes the text between point and mark and attempts to parse it as a matrix. If point and mark are both in the leftmost column, the lines in between are parsed in their entirety. Otherwise, point and mark define the corners of a rectangle @@ -29535,15 +29521,15 @@ format used in the Calc stack buffer) are ignored. If you wish to force this interpretation (even if the line contains bracketed portions), give a negative numeric prefix argument to the -@kbd{M-# r} command. +@kbd{C-x * r} command. If you give a numeric prefix argument of zero or plain @kbd{C-u}, each line is instead interpreted as a single formula which is converted into -a one-element vector. Thus the result of @kbd{C-u M-# r} will be a +a one-element vector. Thus the result of @kbd{C-u C-x * r} will be a one-column matrix. For example, suppose one line of the data is the -expression @samp{2 a}. A plain @w{@kbd{M-# r}} will interpret this as +expression @samp{2 a}. A plain @w{@kbd{C-x * r}} will interpret this as @samp{[2 a]}, which in turn is read as a two-element vector that forms -one row of the matrix. But a @kbd{C-u M-# r} will interpret this row +one row of the matrix. But a @kbd{C-u C-x * r} will interpret this row as @samp{[2*a]}. If you give a positive numeric prefix argument @var{n}, then each line @@ -29558,35 +29544,35 @@ @infoline 1x1 matrix, just hit @kbd{v u} (@code{calc-unpack}) twice.) -@kindex M-# : -@kindex M-# _ +@kindex C-x * : +@kindex C-x * _ @pindex calc-grab-sum-across @pindex calc-grab-sum-down @cindex Summing rows and columns of data -The @kbd{M-# :} (@code{calc-grab-sum-down}) command is a handy way to +The @kbd{C-x * :} (@code{calc-grab-sum-down}) command is a handy way to grab a rectangle of data and sum its columns. It is equivalent to -typing @kbd{M-# r}, followed by @kbd{V R : +} (the vector reduction +typing @kbd{C-x * r}, followed by @kbd{V R : +} (the vector reduction command that sums the columns of a matrix; @pxref{Reducing}). The result of the command will be a vector of numbers, one for each column -in the input data. The @kbd{M-# _} (@code{calc-grab-sum-across}) command +in the input data. The @kbd{C-x * _} (@code{calc-grab-sum-across}) command similarly grabs a rectangle and sums its rows by executing @w{@kbd{V R _ +}}. -As well as being more convenient, @kbd{M-# :} and @kbd{M-# _} are also +As well as being more convenient, @kbd{C-x * :} and @kbd{C-x * _} are also much faster because they don't actually place the grabbed vector on -the stack. In a @kbd{M-# r V R : +} sequence, formatting the vector +the stack. In a @kbd{C-x * r V R : +} sequence, formatting the vector for display on the stack takes a large fraction of the total time (unless you have planned ahead and used @kbd{v .} and @kbd{t .} modes). For example, suppose we have a column of numbers in a file which we wish to sum. Go to one corner of the column and press @kbd{C-@@} to -set the mark; go to the other corner and type @kbd{M-# :}. Since there +set the mark; go to the other corner and type @kbd{C-x * :}. Since there is only one column, the result will be a vector of one number, the sum. (You can type @kbd{v u} to unpack this vector into a plain number if you want to do further arithmetic with it.) To compute the product of the column of numbers, we would have to do it ``by hand'' since there's no special grab-and-multiply command. -Use @kbd{M-# r} to grab the column of numbers into the calculator in +Use @kbd{C-x * r} to grab the column of numbers into the calculator in the form of a column matrix. The statistics command @kbd{u *} is a handy way to find the product of a vector or matrix of numbers. @xref{Statistical Operations}. Another approach would be to use @@ -29618,13 +29604,13 @@ With a lone @kbd{C-u} as a prefix argument, @kbd{y} @emph{replaces} the region in the other buffer with the yanked text, then quits the Calculator, leaving you in that buffer. A typical use would be to use -@kbd{M-# g} to read a region of data into the Calculator, operate on the +@kbd{C-x * g} to read a region of data into the Calculator, operate on the data to produce a new matrix, then type @kbd{C-u y} to replace the original data with the new data. One might wish to alter the matrix display style (@pxref{Vector and Matrix Formats}) or change the current display language (@pxref{Language Modes}) before doing this. Also, note that this command replaces a linear region of text (as grabbed by -@kbd{M-# g}), not a rectangle (as grabbed by @kbd{M-# r}). +@kbd{C-x * g}), not a rectangle (as grabbed by @kbd{C-x * r}). If the editing buffer is in overwrite (as opposed to insert) mode, and the @kbd{C-u} prefix was not used, then the yanked number will @@ -29641,8 +29627,8 @@ ``overwrite mode'' has thus been generalized from overwriting characters to overwriting one complete number with another. -@kindex M-# y -The @kbd{M-# y} key sequence is equivalent to @kbd{y} except that +@kindex C-x * y +The @kbd{C-x * y} key sequence is equivalent to @kbd{y} except that it can be typed anywhere, not just in Calc. This provides an easy way to guarantee that Calc knows which editing buffer you want to use! @@ -29679,9 +29665,9 @@ @chapter Keypad Mode @noindent -@kindex M-# k +@kindex C-x * k @pindex calc-keypad -The @kbd{M-# k} (@code{calc-keypad}) command starts the Calculator +The @kbd{C-x * k} (@code{calc-keypad}) command starts the Calculator and displays a picture of a calculator-style keypad. If you are using the X window system, you can click on any of the ``keys'' in the keypad using the left mouse button to operate the calculator. @@ -29690,7 +29676,7 @@ calculations with the mouse. @pindex full-calc-keypad -If you have used @kbd{M-# b} first, @kbd{M-# k} instead invokes +If you have used @kbd{C-x * b} first, @kbd{C-x * k} instead invokes the @code{full-calc-keypad} command, which takes over the whole Emacs screen and displays the keypad, the Calc stack, and the Calc trail all at once. This mode would normally be used when running @@ -29851,9 +29837,9 @@ by the two limits of the interval. @end table -The @kbd{OFF} key turns Calc off; typing @kbd{M-# k} or @kbd{M-# M-#} +The @kbd{OFF} key turns Calc off; typing @kbd{C-x * k} or @kbd{C-x * *} again has the same effect. This is analogous to typing @kbd{q} or -hitting @kbd{M-# c} again in the normal calculator. If Calc is +hitting @kbd{C-x * c} again in the normal calculator. If Calc is running standalone (the @code{full-calc-keypad} command appeared in the command line that started Emacs), then @kbd{OFF} is replaced with @kbd{EXIT}; clicking on this actually exits Emacs itself. @@ -30093,11 +30079,11 @@ @section Basic Embedded Mode @noindent -@kindex M-# e +@kindex C-x * e @pindex calc-embedded To enter Embedded mode, position the Emacs point (cursor) on a -formula in any buffer and press @kbd{M-# e} (@code{calc-embedded}). -Note that @kbd{M-# e} is not to be used in the Calc stack buffer +formula in any buffer and press @kbd{C-x * e} (@code{calc-embedded}). +Note that @kbd{C-x * e} is not to be used in the Calc stack buffer like most Calc commands, but rather in regular editing buffers that are visiting your own files. @@ -30108,7 +30094,7 @@ @code{plain-tex-mode} and @code{context-mode}, C language for @code{c-mode} and @code{c++-mode}, FORTRAN language for @code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode}, -and eqn for @code{nroff-mode} (@pxref{Customizable Variables}). +and eqn for @code{nroff-mode} (@pxref{Customizing Calc}). These can be overridden with Calc's mode changing commands (@pxref{Mode Settings in Embedded Mode}). If no suitable language is available, Calc will continue with its current language. @@ -30145,9 +30131,9 @@ by point and mark) instead of formula delimiters. With a prefix argument of @kbd{C-u} only, Calc uses the current line as the formula. -@kindex M-# w +@kindex C-x * w @pindex calc-embedded-word -The @kbd{M-# w} (@code{calc-embedded-word}) command will start Embedded +The @kbd{C-x * w} (@code{calc-embedded-word}) command will start Embedded mode on the current ``word''; in this case Calc will scan for the first non-numeric character (i.e., the first character that is not a digit, sign, decimal point, or upper- or lower-case @samp{e}) forward and @@ -30165,7 +30151,7 @@ the built-in @code{arctan} function, and the @samp{a[1]} will be interpreted as @samp{a} times the vector @samp{[1]}! -If you press @kbd{M-# e} or @kbd{M-# w} to activate an embedded +If you press @kbd{C-x * e} or @kbd{C-x * w} to activate an embedded formula which is blank, say with the cursor on the space between the two delimiters @samp{$ $}, Calc will immediately prompt for an algebraic entry. @@ -30179,10 +30165,10 @@ When Embedded mode begins, Calc pushes the current formula onto the stack. No Calc stack window is created; however, Calc copies the top-of-stack position into the original buffer at all times. -You can create a Calc window by hand with @kbd{M-# o} if you +You can create a Calc window by hand with @kbd{C-x * o} if you find you need to see the entire stack. -For example, typing @kbd{M-# e} while somewhere in the formula +For example, typing @kbd{C-x * e} while somewhere in the formula @samp{n>2} in the following line enables Embedded mode on that inequality: @@ -30216,7 +30202,7 @@ We define $F_n = F_(n-1)+F_(n-2)$ for all $2 < n$. @end example -The @kbd{M-# o} command is a useful way to open a Calc window +The @kbd{C-x * o} command is a useful way to open a Calc window without actually selecting that window. Giving this command verifies that @samp{2 < n} is also on the Calc stack. Typing @kbd{17 @key{RET}} would produce: @@ -30232,9 +30218,9 @@ normally see the stack in Embedded mode, it is still there and it still operates in the same way. But, as with old-fashioned RPN calculators, you can only see the value at the top of the -stack at any given time (unless you use @kbd{M-# o}). - -Typing @kbd{M-# e} again turns Embedded mode off. The Calc +stack at any given time (unless you use @kbd{C-x * o}). + +Typing @kbd{C-x * e} again turns Embedded mode off. The Calc window reveals that the formula @w{@samp{2 < n}} is automatically removed from the stack, but the @samp{17} is not. Entering Embedded mode always pushes one thing onto the stack, and @@ -30242,11 +30228,11 @@ that happens on the stack is entirely your business as far as Embedded mode is concerned. -If you press @kbd{M-# e} in the wrong place by accident, it is +If you press @kbd{C-x * e} in the wrong place by accident, it is possible that Calc will be able to parse the nearby text as a formula and will mangle that text in an attempt to redisplay it ``properly'' in the current language mode. If this happens, -press @kbd{M-# e} again to exit Embedded mode, then give the +press @kbd{C-x * e} again to exit Embedded mode, then give the regular Emacs ``undo'' command (@kbd{C-_} or @kbd{C-x u}) to put the text back the way it was before Calc edited it. Note that Calc's own Undo command (typed before you turn Embedded mode back off) @@ -30357,10 +30343,10 @@ @r{(the value)} @end smallexample -@kindex M-# d +@kindex C-x * d @pindex calc-embedded-duplicate -The @kbd{M-# d} (@code{calc-embedded-duplicate}) command is a -handy way to make sequences like this. If you type @kbd{M-# d}, +The @kbd{C-x * d} (@code{calc-embedded-duplicate}) command is a +handy way to make sequences like this. If you type @kbd{C-x * d}, the formula under the cursor (which may or may not have Embedded mode enabled for it at the time) is copied immediately below and Embedded mode is then enabled for that copy. @@ -30374,7 +30360,7 @@ @end smallexample @noindent -and press @kbd{M-# d} with the cursor on this formula. The result +and press @kbd{C-x * d} with the cursor on this formula. The result is @smallexample @@ -30389,12 +30375,12 @@ @noindent with the second copy of the formula enabled in Embedded mode. You can now press @kbd{a d x @key{RET}} to take the derivative, and -@kbd{M-# d M-# d} to make two more copies of the derivative. +@kbd{C-x * d C-x * d} to make two more copies of the derivative. To complete the computations, type @kbd{3 s l x @key{RET}} to evaluate the last formula, then move up to the second-to-last formula and type @kbd{2 s l x @key{RET}}. -Finally, you would want to press @kbd{M-# e} to exit Embedded +Finally, you would want to press @kbd{C-x * e} to exit Embedded mode, then go up and insert the necessary text in between the various formulas and numbers. @@ -30402,40 +30388,37 @@ \bigskip @end tex -@kindex M-# f -@kindex M-# ' +@kindex C-x * f +@kindex C-x * ' @pindex calc-embedded-new-formula -The @kbd{M-# f} (@code{calc-embedded-new-formula}) command +The @kbd{C-x * f} (@code{calc-embedded-new-formula}) command creates a new embedded formula at the current point. It inserts some default delimiters, which are usually just blank lines, and then does an algebraic entry to get the formula (which is then enabled for Embedded mode). This is just shorthand for typing the delimiters yourself, positioning the cursor between -the new delimiters, and pressing @kbd{M-# e}. The key sequence -@kbd{M-# '} is equivalent to @kbd{M-# f}. - -@kindex M-# n -@kindex M-# p +the new delimiters, and pressing @kbd{C-x * e}. The key sequence +@kbd{C-x * '} is equivalent to @kbd{C-x * f}. + +@kindex C-x * n +@kindex C-x * p @pindex calc-embedded-next @pindex calc-embedded-previous -The @kbd{M-# n} (@code{calc-embedded-next}) and @kbd{M-# p} +The @kbd{C-x * n} (@code{calc-embedded-next}) and @kbd{C-x * p} (@code{calc-embedded-previous}) commands move the cursor to the next or previous active embedded formula in the buffer. They can take positive or negative prefix arguments to move by several formulas. Note that these commands do not actually examine the text of the buffer looking for formulas; they only see formulas which have previously been activated in Embedded mode. In fact, -@kbd{M-# n} and @kbd{M-# p} are a useful way to tell which +@kbd{C-x * n} and @kbd{C-x * p} are a useful way to tell which embedded formulas are currently active. Also, note that these commands do not enable Embedded mode on the next or previous -formula, they just move the cursor. (By the way, @kbd{M-# n} is -not as awkward to type as it may seem, because @kbd{M-#} ignores -Shift and Meta on the second keystroke: @kbd{M-# M-N} can be typed -by holding down Shift and Meta and alternately typing two keys.) - -@kindex M-# ` +formula, they just move the cursor. + +@kindex C-x * ` @pindex calc-embedded-edit -The @kbd{M-# `} (@code{calc-embedded-edit}) command edits the +The @kbd{C-x * `} (@code{calc-embedded-edit}) command edits the embedded formula at the current point as if by @kbd{`} (@code{calc-edit}). Embedded mode does not have to be enabled for this to work. Press @kbd{C-c C-c} to finish the edit, or @kbd{C-x k} to cancel. @@ -30500,10 +30483,10 @@ Then, @kbd{17 @key{TAB} @key{DEL}} will swap the 17 into place (@pxref{Selecting Subformulas}, to see how this works). -@kindex M-# j +@kindex C-x * j @pindex calc-embedded-select -The @kbd{M-# j} (@code{calc-embedded-select}) command provides an -easy way to operate on assignments. It is just like @kbd{M-# e}, +The @kbd{C-x * j} (@code{calc-embedded-select}) command provides an +easy way to operate on assignments. It is just like @kbd{C-x * e}, except that if the enabled formula is an assignment, it uses @kbd{j 2} to select the righthand side. If the enabled formula is an evaluates-to, it uses @kbd{j 1} to select the lefthand side. @@ -30514,20 +30497,18 @@ @end example @noindent -in which case @kbd{M-# j} will select the middle part (@samp{foo + 3}). +in which case @kbd{C-x * j} will select the middle part (@samp{foo + 3}). The formula is automatically deselected when you leave Embedded mode. -@kindex M-# u -@kindex M-# = +@kindex C-x * u @pindex calc-embedded-update-formula Another way to change the assignment to @code{foo} would simply be to edit the number using regular Emacs editing rather than Embedded mode. Then, we have to find a way to get Embedded mode to notice -the change. The @kbd{M-# u} or @kbd{M-# =} -(@code{calc-embedded-update-formula}) command is a convenient way -to do this. +the change. The @kbd{C-x * u} (@code{calc-embedded-update-formula}) +command is a convenient way to do this. @example foo := 6 @@ -30535,29 +30516,29 @@ foo + 7 => 13 @end example -Pressing @kbd{M-# u} is much like pressing @kbd{M-# e = M-# e}, that +Pressing @kbd{C-x * u} is much like pressing @kbd{C-x * e = C-x * e}, that is, temporarily enabling Embedded mode for the formula under the -cursor and then evaluating it with @kbd{=}. But @kbd{M-# u} does -not actually use @kbd{M-# e}, and in fact another formula somewhere -else can be enabled in Embedded mode while you use @kbd{M-# u} and +cursor and then evaluating it with @kbd{=}. But @kbd{C-x * u} does +not actually use @kbd{C-x * e}, and in fact another formula somewhere +else can be enabled in Embedded mode while you use @kbd{C-x * u} and that formula will not be disturbed. -With a numeric prefix argument, @kbd{M-# u} updates all active +With a numeric prefix argument, @kbd{C-x * u} updates all active @samp{=>} formulas in the buffer. Formulas which have not yet been activated in Embedded mode, and formulas which do not have @samp{=>} as their top-level operator, are not affected by this. (This is useful only if you have used @kbd{m C}; see below.) -With a plain @kbd{C-u} prefix, @kbd{C-u M-# u} updates only in the +With a plain @kbd{C-u} prefix, @kbd{C-u C-x * u} updates only in the region between mark and point rather than in the whole buffer. -@kbd{M-# u} is also a handy way to activate a formula, such as an +@kbd{C-x * u} is also a handy way to activate a formula, such as an @samp{=>} formula that has freshly been typed in or loaded from a file. -@kindex M-# a +@kindex C-x * a @pindex calc-embedded-activate -The @kbd{M-# a} (@code{calc-embedded-activate}) command scans +The @kbd{C-x * a} (@code{calc-embedded-activate}) command scans through the current buffer and activates all embedded formulas that contain @samp{:=} or @samp{=>} symbols. This does not mean that Embedded mode is actually turned on, but only that the @@ -30565,7 +30546,7 @@ the @samp{=>} values can be properly updated as assignments are changed. -It is a good idea to type @kbd{M-# a} right after loading a file +It is a good idea to type @kbd{C-x * a} right after loading a file that uses embedded @samp{=>} operators. Emacs includes a nifty ``buffer-local variables'' feature that you can use to do this automatically. The idea is to place near the end of your file @@ -30588,41 +30569,41 @@ When Emacs loads a file into memory, it checks for a Local Variables section like this one at the end of the file. If it finds this section, it does the specified things (in this case, running -@kbd{M-# a} automatically) before editing of the file begins. +@kbd{C-x * a} automatically) before editing of the file begins. The Local Variables section must be within 3000 characters of the end of the file for Emacs to find it, and it must be in the last page of the file if the file has any page separators. @xref{File Variables, , Local Variables in Files, emacs, the Emacs manual}. -Note that @kbd{M-# a} does not update the formulas it finds. -To do this, type, say, @kbd{M-1 M-# u} after @w{@kbd{M-# a}}. +Note that @kbd{C-x * a} does not update the formulas it finds. +To do this, type, say, @kbd{M-1 C-x * u} after @w{@kbd{C-x * a}}. Generally this should not be a problem, though, because the formulas will have been up-to-date already when the file was saved. -Normally, @kbd{M-# a} activates all the formulas it finds, but +Normally, @kbd{C-x * a} activates all the formulas it finds, but any previous active formulas remain active as well. With a -positive numeric prefix argument, @kbd{M-# a} first deactivates +positive numeric prefix argument, @kbd{C-x * a} first deactivates all current active formulas, then actives the ones it finds in its scan of the buffer. With a negative prefix argument, -@kbd{M-# a} simply deactivates all formulas. +@kbd{C-x * a} simply deactivates all formulas. Embedded mode has two symbols, @samp{Active} and @samp{~Active}, which it puts next to the major mode name in a buffer's mode line. It puts @samp{Active} if it has reason to believe that all -formulas in the buffer are active, because you have typed @kbd{M-# a} +formulas in the buffer are active, because you have typed @kbd{C-x * a} and Calc has not since had to deactivate any formulas (which can happen if Calc goes to update an @samp{=>} formula somewhere because a variable changed, and finds that the formula is no longer there due to some kind of editing outside of Embedded mode). Calc puts @samp{~Active} in the mode line if some, but probably not all, formulas in the buffer are active. This happens if you activate -a few formulas one at a time but never use @kbd{M-# a}, or if you -used @kbd{M-# a} but then Calc had to deactivate a formula +a few formulas one at a time but never use @kbd{C-x * a}, or if you +used @kbd{C-x * a} but then Calc had to deactivate a formula because it lost track of it. If neither of these symbols appears in the mode line, no embedded formulas are active in the buffer -(e.g., before Embedded mode has been used, or after a @kbd{M-- M-# a}). +(e.g., before Embedded mode has been used, or after a @kbd{M-- C-x * a}). Embedded formulas can refer to assignments both before and after them in the buffer. If there are several assignments to a variable, the @@ -30658,15 +30639,15 @@ The @kbd{m C} (@code{calc-auto-recompute}) command turns automatic recomputation of @samp{=>} forms on and off. If you turn automatic -recomputation off, you will have to use @kbd{M-# u} to update these +recomputation off, you will have to use @kbd{C-x * u} to update these formulas manually after an assignment has been changed. If you plan to change several assignments at once, it may be more efficient -to type @kbd{m C}, change all the assignments, then use @kbd{M-1 M-# u} +to type @kbd{m C}, change all the assignments, then use @kbd{M-1 C-x * u} to update the entire buffer afterwards. The @kbd{m C} command also controls @samp{=>} formulas on the stack; @pxref{Evaluates-To Operator}. When you turn automatic recomputation back on, the stack will be updated but the Embedded buffer will not; you must -use @kbd{M-# u} to update the buffer by hand. +use @kbd{C-x * u} to update the buffer by hand. @node Mode Settings in Embedded Mode, Customizing Embedded Mode, Assignments in Embedded Mode, Embedded Mode @section Mode Settings in Embedded Mode @@ -30777,11 +30758,11 @@ the file, as long as those mode settings are suitable for all formulas in the file. -Enabling a formula with @kbd{M-# e} causes a fresh scan for local +Enabling a formula with @kbd{C-x * e} causes a fresh scan for local mode annotations; you will have to use this after adding annotations above a formula by hand to get the formula to notice them. Updating -a formula with @kbd{M-# u} will also re-scan the local modes, but -global modes are only re-scanned by @kbd{M-# a}. +a formula with @kbd{C-x * u} will also re-scan the local modes, but +global modes are only re-scanned by @kbd{C-x * a}. Another way that modes can get out of date is if you add a local mode annotation to a formula that has another formula after it. @@ -30797,7 +30778,7 @@ 456. @end example -We would have to go down to the other formula and press @kbd{M-# u} +We would have to go down to the other formula and press @kbd{C-x * u} on it in order to get it to notice the new annotation. Two more mode-recording modes selectable by @kbd{m R} are available @@ -30819,13 +30800,13 @@ @noindent You can modify Embedded mode's behavior by setting various Lisp variables described here. These variables are customizable -(@pxref{Customizable Variables}), or you can use @kbd{M-x set-variable} +(@pxref{Customizing Calc}), or you can use @kbd{M-x set-variable} or @kbd{M-x edit-options} to adjust a variable on the fly. (Another possibility would be to use a file-local variable annotation at the end of the file; @pxref{File Variables, , Local Variables in Files, emacs, the Emacs manual}.) Many of the variables given mentioned here can be set to depend on the -major mode of the editing buffer (@pxref{Customizable Variables}). +major mode of the editing buffer (@pxref{Customizing Calc}). @vindex calc-embedded-open-formula The @code{calc-embedded-open-formula} variable holds a regular @@ -30899,8 +30880,8 @@ @vindex calc-embedded-open-word @vindex calc-embedded-close-word The @code{calc-embedded-open-word} and @code{calc-embedded-close-word} -variables are similar expressions used when you type @kbd{M-# w} -instead of @kbd{M-# e} to enable Embedded mode. +variables are similar expressions used when you type @kbd{C-x * w} +instead of @kbd{C-x * e} to enable Embedded mode. @vindex calc-embedded-open-plain The @code{calc-embedded-open-plain} variable is a string which @@ -30921,9 +30902,9 @@ @vindex calc-embedded-open-new-formula The @code{calc-embedded-open-new-formula} variable is a string which is inserted at the front of a new formula when you type -@kbd{M-# f}. Its default value is @code{"\n\n"}. If this -string begins with a newline character and the @kbd{M-# f} is -typed at the beginning of a line, @kbd{M-# f} will skip this +@kbd{C-x * f}. Its default value is @code{"\n\n"}. If this +string begins with a newline character and the @kbd{C-x * f} is +typed at the beginning of a line, @kbd{C-x * f} will skip this first newline to avoid introducing unnecessary blank lines in the file. @@ -30931,15 +30912,15 @@ The @code{calc-embedded-close-new-formula} variable is the corresponding string which is inserted at the end of a new formula. Its default value is also @code{"\n\n"}. The final newline is omitted by -@w{@kbd{M-# f}} if typed at the end of a line. (It follows that if -@kbd{M-# f} is typed on a blank line, both a leading opening +@w{@kbd{C-x * f}} if typed at the end of a line. (It follows that if +@kbd{C-x * f} is typed on a blank line, both a leading opening newline and a trailing closing newline are omitted.) @vindex calc-embedded-announce-formula The @code{calc-embedded-announce-formula} variable is a regular expression which is sure to be followed by an embedded formula. -The @kbd{M-# a} command searches for this pattern as well as for -@samp{=>} and @samp{:=} operators. Note that @kbd{M-# a} will +The @kbd{C-x * a} command searches for this pattern as well as for +@samp{=>} and @samp{:=} operators. Note that @kbd{C-x * a} will not activate just anything surrounded by formula delimiters; after all, blank lines are considered formula delimiters by default! But if your language includes a delimiter which can only occur @@ -30967,7 +30948,7 @@ major modes. If you change this, it is a good idea still to end with a newline so that mode annotations will appear on lines by themselves. -@node Programming, Customizable Variables, Embedded Mode, Top +@node Programming, Customizing Calc, Embedded Mode, Top @chapter Programming @noindent @@ -31179,9 +31160,9 @@ we take it for granted that it is clear we really mean @kbd{' [1 @key{SPC} 2 @key{SPC} 3] @key{RET}}. -@kindex M-# m +@kindex C-x * m @pindex read-kbd-macro -The @kbd{M-# m} (@code{read-kbd-macro}) command reads an Emacs ``region'' +The @kbd{C-x * m} (@code{read-kbd-macro}) command reads an Emacs ``region'' of spelled-out keystrokes and defines it as the current keyboard macro. It is a convenient way to define a keyboard macro that has been stored in a file, or to define a macro without executing it at the same time. @@ -31289,7 +31270,7 @@ Another approach is to enter a harmless dummy definition for the macro, then go back and edit in the real one with a @kbd{Z E} command. Yet another approach is to type the macro as written-out keystroke names -in a buffer, then use @kbd{M-# m} (@code{read-kbd-macro}) to read the +in a buffer, then use @kbd{C-x * m} (@code{read-kbd-macro}) to read the macro. @kindex Z / @@ -31463,29 +31444,29 @@ @node Invocation Macros, Algebraic Definitions, Keyboard Macros, Programming @section Invocation Macros -@kindex M-# z +@kindex C-x * z @kindex Z I @pindex calc-user-invocation @pindex calc-user-define-invocation -Calc provides one special keyboard macro, called up by @kbd{M-# z} +Calc provides one special keyboard macro, called up by @kbd{C-x * z} (@code{calc-user-invocation}), that is intended to allow you to define your own special way of starting Calc. To define this ``invocation macro,'' create the macro in the usual way with @kbd{C-x (} and @kbd{C-x )}, then type @kbd{Z I} (@code{calc-user-define-invocation}). There is only one invocation macro, so you don't need to type any additional letters after @kbd{Z I}. From now on, you can type -@kbd{M-# z} at any time to execute your invocation macro. +@kbd{C-x * z} at any time to execute your invocation macro. For example, suppose you find yourself often grabbing rectangles of numbers into Calc and multiplying their columns. You can do this -by typing @kbd{M-# r} to grab, and @kbd{V R : *} to multiply columns. -To make this into an invocation macro, just type @kbd{C-x ( M-# r +by typing @kbd{C-x * r} to grab, and @kbd{V R : *} to multiply columns. +To make this into an invocation macro, just type @kbd{C-x ( C-x * r V R : * C-x )}, then @kbd{Z I}. Then, to multiply a rectangle of data, -just mark the data in its buffer in the usual way and type @kbd{M-# z}. +just mark the data in its buffer in the usual way and type @kbd{C-x * z}. Invocation macros are treated like regular Emacs keyboard macros; all the special features described above for @kbd{Z K}-style macros -do not apply. @kbd{M-# z} is just like @kbd{C-x e}, except that it +do not apply. @kbd{C-x * z} is just like @kbd{C-x e}, except that it uses the macro that was last stored by @kbd{Z I}. (In fact, the macro does not even have to have anything to do with Calc!) @@ -34729,7 +34710,7 @@ @defvar calc-end-hook This hook is called by @code{calc-quit}, generally because the user -presses @kbd{q} or @kbd{M-# c} while in Calc. The Calc buffer will +presses @kbd{q} or @kbd{C-x * c} while in Calc. The Calc buffer will be the current buffer. The hook is called as the very first step, before the Calc window is destroyed. @end defvar @@ -34781,7 +34762,7 @@ @end defvar @defvar calc-reset-hook -This hook is called after @kbd{M-# 0} (@code{calc-reset}) has +This hook is called after @kbd{C-x * 0} (@code{calc-reset}) has reset all modes. The Calc buffer will be the current buffer. @end defvar @@ -34846,10 +34827,27 @@ list and also call @code{make-local-variable} itself. @end defvar -@node Customizable Variables, Reporting Bugs, Programming, Top -@appendix Customizable Variables - -GNU Calc is controlled by many variables, most of which can be reset +@node Customizing Calc, Reporting Bugs, Programming, Top +@appendix Customizing Calc + +The usual prefix for Calc is the key sequence @kbd{C-x *}. If you wish +to use a different prefix, you can put + +@example +(global-set-key "NEWPREFIX" 'calc-dispatch) +@end example + +@noindent +in your .emacs file. +(@xref{Key Bindings,,Customizing Key Bindings,emacs, +The GNU Emacs Manual}, for more information on binding keys.) +A convenient way to start Calc is with @kbd{C-x * *}; to make it equally +convenient for users who use a different prefix, the prefix can be +followed by @kbd{=}, @kbd{&}, @kbd{#}, @kbd{\}, @kbd{/}, @kbd{+} or +@kbd{-} as well as @kbd{*} to start Calc, and so in many cases the last +character of the prefix can simply be typed twice. + +Calc is controlled by many variables, most of which can be reset from within Calc. Some variables are less involved with actual calculation, and can be set outside of Calc using Emacs's customization facilities. These variables are listed below. @@ -34882,7 +34880,7 @@ The variable @code{calc-gnuplot-name} should be the name of the GNUPLOT program (a string). If you have GNUPLOT installed on your system but Calc is unable to find it, you may need to set this -variable. (@pxref{Customizable Variables}) +variable. (@pxref{Customizing Calc}) You may also need to set some Lisp variables to show Calc how to run GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value of @code{calc-gnuplot-name} is @code{"gnuplot"}. @@ -34936,9 +34934,9 @@ @defvarx calc-embedded-announce-formula-alist See @ref{Customizing Embedded Mode}.@* The variable @code{calc-embedded-announce-formula} helps determine -what formulas @kbd{M-# a} will activate in a buffer. It is a +what formulas @kbd{C-x * a} will activate in a buffer. It is a regular expression, and when activating embedded formulas with -@kbd{M-# a}, it will tell Calc that what follows is a formula to be +@kbd{C-x * a}, it will tell Calc that what follows is a formula to be activated. (Calc also uses other patterns to find formulas, such as @samp{=>} and @samp{:=}.) @@ -34975,7 +34973,7 @@ See @ref{Customizing Embedded Mode}.@* The variables @code{calc-embedded-open-formula} and @code{calc-embedded-open-formula} control the region that Calc will -activate as a formula when Embedded mode is entered with @kbd{M-# e}. +activate as a formula when Embedded mode is entered with @kbd{C-x * e}. They are regular expressions; Calc normally scans backward and forward in the buffer for the nearest text matching these regular expressions to be the ``formula @@ -35013,7 +35011,7 @@ See @ref{Customizing Embedded Mode}.@* The variables @code{calc-embedded-open-word} and @code{calc-embedded-close-word} control the region that Calc will -activate when Embedded mode is entered with @kbd{M-# w}. They are +activate when Embedded mode is entered with @kbd{C-x * w}. They are regular expressions. The default values of @code{calc-embedded-open-word} and @@ -35077,15 +35075,15 @@ See @ref{Customizing Embedded Mode}.@* The variables @code{calc-embedded-open-new-formula} and @code{calc-embedded-close-new-formula} are strings which are -inserted before and after a new formula when you type @kbd{M-# f}. +inserted before and after a new formula when you type @kbd{C-x * f}. The default value of @code{calc-embedded-open-new-formula} is @code{"\n\n"}. If this string begins with a newline character and the -@kbd{M-# f} is typed at the beginning of a line, @kbd{M-# f} will skip +@kbd{C-x * f} is typed at the beginning of a line, @kbd{C-x * f} will skip this first newline to avoid introducing unnecessary blank lines in the file. The default value of @code{calc-embedded-close-new-formula} is -also @code{"\n\n"}. The final newline is omitted by @w{@kbd{M-# f}} -if typed at the end of a line. (It follows that if @kbd{M-# f} is +also @code{"\n\n"}. The final newline is omitted by @w{@kbd{C-x * f}} +if typed at the end of a line. (It follows that if @kbd{C-x * f} is typed on a blank line, both a leading opening newline and a trailing closing newline are omitted.) @@ -35141,7 +35139,7 @@ and @code{calc-embedded-open-close-plain-alist}. @end defvar -@node Reporting Bugs, Summary, Customizable Variables, Top +@node Reporting Bugs, Summary, Customizing Calc, Top @appendix Reporting Bugs @noindent @@ -35225,35 +35223,34 @@ @advance@baselineskip-2.5pt @let@c@sumbreak @end iftex -@r{ @: M-# a @: @: 33 @:calc-embedded-activate@:} -@r{ @: M-# b @: @: @:calc-big-or-small@:} -@r{ @: M-# c @: @: @:calc@:} -@r{ @: M-# d @: @: @:calc-embedded-duplicate@:} -@r{ @: M-# e @: @: 34 @:calc-embedded@:} -@r{ @: M-# f @:formula @: @:calc-embedded-new-formula@:} -@r{ @: M-# g @: @: 35 @:calc-grab-region@:} -@r{ @: M-# i @: @: @:calc-info@:} -@r{ @: M-# j @: @: @:calc-embedded-select@:} -@r{ @: M-# k @: @: @:calc-keypad@:} -@r{ @: M-# l @: @: @:calc-load-everything@:} -@r{ @: M-# m @: @: @:read-kbd-macro@:} -@r{ @: M-# n @: @: 4 @:calc-embedded-next@:} -@r{ @: M-# o @: @: @:calc-other-window@:} -@r{ @: M-# p @: @: 4 @:calc-embedded-previous@:} -@r{ @: M-# q @:formula @: @:quick-calc@:} -@r{ @: M-# r @: @: 36 @:calc-grab-rectangle@:} -@r{ @: M-# s @: @: @:calc-info-summary@:} -@r{ @: M-# t @: @: @:calc-tutorial@:} -@r{ @: M-# u @: @: @:calc-embedded-update-formula@:} -@r{ @: M-# w @: @: @:calc-embedded-word@:} -@r{ @: M-# x @: @: @:calc-quit@:} -@r{ @: M-# y @: @:1,28,49 @:calc-copy-to-buffer@:} -@r{ @: M-# z @: @: @:calc-user-invocation@:} -@r{ @: M-# = @: @: @:calc-embedded-update-formula@:} -@r{ @: M-# : @: @: 36 @:calc-grab-sum-down@:} -@r{ @: M-# _ @: @: 36 @:calc-grab-sum-across@:} -@r{ @: M-# ` @:editing @: 30 @:calc-embedded-edit@:} -@r{ @: M-# 0 @:(zero) @: @:calc-reset@:} +@r{ @: C-x * a @: @: 33 @:calc-embedded-activate@:} +@r{ @: C-x * b @: @: @:calc-big-or-small@:} +@r{ @: C-x * c @: @: @:calc@:} +@r{ @: C-x * d @: @: @:calc-embedded-duplicate@:} +@r{ @: C-x * e @: @: 34 @:calc-embedded@:} +@r{ @: C-x * f @:formula @: @:calc-embedded-new-formula@:} +@r{ @: C-x * g @: @: 35 @:calc-grab-region@:} +@r{ @: C-x * i @: @: @:calc-info@:} +@r{ @: C-x * j @: @: @:calc-embedded-select@:} +@r{ @: C-x * k @: @: @:calc-keypad@:} +@r{ @: C-x * l @: @: @:calc-load-everything@:} +@r{ @: C-x * m @: @: @:read-kbd-macro@:} +@r{ @: C-x * n @: @: 4 @:calc-embedded-next@:} +@r{ @: C-x * o @: @: @:calc-other-window@:} +@r{ @: C-x * p @: @: 4 @:calc-embedded-previous@:} +@r{ @: C-x * q @:formula @: @:quick-calc@:} +@r{ @: C-x * r @: @: 36 @:calc-grab-rectangle@:} +@r{ @: C-x * s @: @: @:calc-info-summary@:} +@r{ @: C-x * t @: @: @:calc-tutorial@:} +@r{ @: C-x * u @: @: @:calc-embedded-update-formula@:} +@r{ @: C-x * w @: @: @:calc-embedded-word@:} +@r{ @: C-x * x @: @: @:calc-quit@:} +@r{ @: C-x * y @: @:1,28,49 @:calc-copy-to-buffer@:} +@r{ @: C-x * z @: @: @:calc-user-invocation@:} +@r{ @: C-x * : @: @: 36 @:calc-grab-sum-down@:} +@r{ @: C-x * _ @: @: 36 @:calc-grab-sum-across@:} +@r{ @: C-x * ` @:editing @: 30 @:calc-embedded-edit@:} +@r{ @: C-x * 0 @:(zero) @: @:calc-reset@:} @c @r{ @: 0-9 @:number @: @:@:number}
--- a/man/macos.texi Wed Nov 23 01:35:21 2005 +0000 +++ b/man/macos.texi Sat Dec 03 14:25:50 2005 +0000 @@ -42,17 +42,25 @@ @cindex Meta (Mac OS) @cindex keyboard coding (Mac OS) -@vindex mac-command-key-is-meta - On Mac, Emacs can use either the @key{option} key or the -@key{command} key as the @key{META} key. If the value of the variable -@code{mac-command-key-is-meta} is non-@code{nil} (its default value), -Emacs uses the @key{command} key as the @key{META} key. Otherwise it -uses the @key{option} key as the @key{META} key. +@vindex mac-control-modifier +@vindex mac-command-modifier +@vindex mac-option-modifier + On Mac, Emacs can use @key{control}, @key{command}, and @key{option} +keys as any of Emacs modifier keys except @key{SHIFT} (i.e., +@key{ALT}, @key{CTRL}, @key{HYPER}, @key{META}, and @key{SUPER}). The +assignment is controlled by the variables @code{mac-control-modifier}, +@code{mac-command-modifier}, and @code{mac-option-modifier}. The +value for each of these variables can be one of the following symbols: +@code{alt}, @code{control}, @code{hyper}, @code{meta}, @code{super}, +and @code{nil} (no particular assignment). By default, the +@key{control} key works as @key{CTRL}, and the @key{command} key as +@key{META}. - Most people should want to use the @key{command} key as the @key{META} key, -so that dead-key processing with the @key{option} key will still work. This is -useful for entering non-@acronym{ASCII} Latin characters directly from the Mac -keyboard, for example. + For the @key{option} key, if @code{mac-option-modifier} is set to +@code{nil}, which is the default, the key works as the normal +@key{option} key, i.e., dead-key processing will work. This is useful +for entering non-@acronym{ASCII} Latin characters directly from the +Mac keyboard, for example. Emacs recognizes the setting in the Keyboard control panel (Mac OS Classic) or the International system preference pane (Mac OS X) and @@ -133,18 +141,18 @@ converted to the encoding specified by the selection coding system using the converter in the Mac OS system, and then decoded into the Emacs internal encoding using the converter in Emacs. If the first -conversion failed, then the UTF-16 data is directly converted to Emacs -internal encoding using the converter in Emacs. Copying UTF-16 text -to the clipboard goes through the inverse path. The reason for this -two-path decoding is to avoid subtle differences in Unicode mappings -between the Mac OS system and Emacs such as various kinds of hyphens, -and to minimize users' customization. For example, users that mainly -use Latin characters would prefer Greek characters to be decoded into -the @code{mule-unicode-0100-24ff} charset, but Japanese users would -prefer them to be decoded into the @code{japanese-jisx0208} charset. -Since the coding system for selection is automatically set according -to the system locale setting, users usually don't have to set it -manually. +conversion failed, then the UTF-16 data is converted similarly but via +UTF-8. Copying UTF-16 text to the clipboard goes through the inverse +path. The reason for this two-pass decoding is to avoid subtle +differences in Unicode mappings between the Mac OS system and Emacs +such as various kinds of hyphens, to deal with UTF-16 data in native +byte order with no byte order mark, and to minimize users' +customization. For example, users that mainly use Latin characters +would prefer Greek characters to be decoded into the +@code{mule-unicode-0100-24ff} charset, but Japanese users would prefer +them to be decoded into the @code{japanese-jisx0208} charset. Since +the coding system for selection is automatically set according to the +system locale setting, users usually don't have to set it manually. The default language environment (@pxref{Language Environments}) is set according to the locale setting at the startup time. On Mac OS, @@ -283,8 +291,19 @@ @cindex font names (Mac OS) It is rare that you need to specify a font name in Emacs; usually -you specify face attributes instead. But when you do need to specify -a font name in Emacs on Mac, use a standard X font name: +you specify face attributes instead. For example, you can use 14pt +Courier by customizing the default face attributes for all frames: + +@lisp +(set-face-attribute 'default nil :family "courier" :height 140) +@end lisp + +@noindent +Alternatively, an interactive one is also available +(@pxref{Face Customization}). + +But when you do need to specify a font name in Emacs on Mac, use a +standard X font name: @smallexample -@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{}
--- a/man/org.texi Wed Nov 23 01:35:21 2005 +0000 +++ b/man/org.texi Sat Dec 03 14:25:50 2005 +0000 @@ -4,8 +4,8 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.20 -@set DATE October 2005 +@set VERSION 3.21 +@set DATE December 2005 @dircategory Emacs @direntry @@ -105,6 +105,7 @@ * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place * Sparse trees:: Matches embedded in context +* Plain Lists:: Editing hand-formatted lists Tables @@ -212,15 +213,16 @@ structured ASCII file, as HTML, or (todo and agenda items only) as an iCalendar file. -Org-mode keeps simple things simple. Not every outline branch needs -to be an action item, not every action item needs to have priority or -scheduling information associated with it. Org-mode can be used on -different levels and in different ways, for example +Org-mode keeps simple things simple. When first fired up, it should +feel like a simple but easy to use outliner. Complexity is not +imposed, but a large amount of functionality is available when you +need it. Org-mode can be used on 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 an ASCII table editor with 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} @@ -324,6 +326,7 @@ * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place * Sparse trees:: Matches embedded in context +* Plain Lists:: Editing hand-formatted lists @end menu @node Outlines, Headlines, Document Structure, Document Structure @@ -347,7 +350,8 @@ @cindex outline tree Headlines define the structure of an outline tree. The Headlines in -Org-mode start with one or more stars, for example +Org-mode start with one or more stars, on the left margin. For +example @example * Top level headline @@ -478,7 +482,8 @@ Demote the current subtree by one level @kindex M-S-@key{up} @item M-S-@key{up} -Move subtree up (swap with previous subtree of same level) +Move subtree up (swap with previous subtree of same +level) @kindex M-S-@key{down} @item M-S-@key{down} Move subtree down (swap with next subtree of same level) @@ -530,7 +535,7 @@ agenda, archiving to a different file is a good way to keep archived trees from contributing agenda items. -@node Sparse trees, , Archiving, Document Structure +@node Sparse trees, Plain Lists, Archiving, Document Structure @section Sparse trees @cindex sparse trees @cindex trees, sparse @@ -573,6 +578,69 @@ the document to another file (extension @file{.txt}) which then can be printed in any desired way. +@node Plain Lists, , Sparse trees, Document Structure +@section Plain Lists +@cindex plain lists +@cindex lists, plain + +Headlines define the entire structure of the Org-mode file, and also +lists (for example TODO items (@pxref{TODO items}) should be created +using headline levels. However, when taking notes, the plain text is +sometimes easier to read with hand-formatted lists. Org-mode supports +editing such lists, and the HTML exporter (@pxref{Exporting}) does +parse and format them. + +Org-mode knows ordered and unordered lists. Unordered list items +start with @samp{-}, @samp{+}, or @samp{*}@footnote{When using +@samp{*} as a bullet, lines must be indented or they will be seen as +top-level headlines.} as bullets. Ordered list items start with +@samp{1.} or @samp{1)}. Items belonging to the same list must have +the same indentation on the first line. In particular, if an ordered +list reaches number @samp{10.}, also the 2--digit numbers must be +written left-aligned with the other numbers in the list. Indentation +also determines the end of a list item. It ends before the next line +that is indented like the bullet/number, or less. For example: + +@example +** Lord of the Rings +My favorite scenes are (in this order) +1. Eowyns fight with the witch-king + + this was already my favorite scene in the book + + I really like Miranda Otto. +2. The attack of the Rohirrim +3. Peter Jackson being shot by Legolas + - on DVD only + He makes a really funny face when it happens. +@end example + +Org-mode supports these lists by tuning filling and wrapping commands +to correctly deal with them. Futhermore, the following commands act +on items when the cursor is in the first line of an item (the line +with the bullet or number). + +@table @kbd +@kindex M-S-@key{up} +@kindex M-S-@key{down} +@item M-S-@key{up} +@itemx M-S-@key{down} +Move the item including subitems up/down (swap with previous/next item +of same intentation). If the list is ordered, renumbering is +automatic. +@kindex M-S-@key{left} +@kindex M-S-@key{right} +@item M-S-@key{left} +@itemx M-S-@key{right} +Decrease/increase the indentation of the item, including subitems. +Initially, the item tree is selected based on current indentation. +When these commands are executed several times in direct succession, +the initially selected region is used, even if the new indentation +would imply a different hierarchy. To use the new hierarchy, break +the command chain with a cursor motion or so. +@kindex C-c C-c +@item C-c C-c +Renumber the ordered list at the cursor. +@end table + @node Tables, Hyperlinks, Document Structure, Top @chapter Tables @cindex tables @@ -2265,29 +2333,9 @@ @cindex lists, hand-formatted @item Hand-formatted lists with @samp{-}, @samp{*} or @samp{+} as -bullet@footnote{When using @samp{*} as a bullet, lines must be -indented or they will be seen as top-level headlines.}, or -with @samp{1.}, @samp{2.} as enumerator will be recognized and -transformed into HTML lists. The -lists is terminated by the next headline, or by a line that is -indented like the bullet/enumerator in the first line, or less. For -example: -@example -** Lord of the Rings -Some of my favorite scenes are -- Eowyns fight -- The attack of the Roherim - (this may be favorite one) -- Peter Jackson being shot by Legolas, - in the extended DVD edition only -My favorite characters are (in this sequence): - 1. Sam - 2. Eowyn - 3. Aragorn -Among the others I don't really have a preference. -@end example -By default, only no nesting of lists is allowed, but see the variable -@code{org-export-local-list-max-depth}. +bullet, or with @samp{1.} or @samp{2)} as enumerator will be recognized and +transformed into HTML lists. See @xref{Plain Lists}. + @cindex underlined text @cindex bold text @cindex italic text @@ -2772,9 +2820,9 @@ Juergen Vollmer contributed code generating the table of contents in HTML output, and other export improvements. @item -Christian Egli converted the documentation into TeXInfo format. He -also showed me his plans for a multifile summary for Org-mode. Some of -his ideas have found their way into the agenda. +Christian Egli converted the documentation into TeXInfo format and +patched basic CSS formatting support into the HTML exporter. He also +inspired the agenda by showing me his plans for a multifile summary. @item Philip Rooke created the Org-mode reference card. He also helped with beta testing and contributed a number of very useful ideas. @@ -2790,10 +2838,10 @@ @item Scheduling TODO items was inspired by John Wiegley's @file{planner.el}. @item -Sacha Chua, the current maintainer of Planner, offered linking code -from Planner. I made use of the offer for links to RMAIL and Wanderlust. +Sacha Chua, the current maintainer of Planner, suggested to copy +linking code from Planner (I took code for RMAIL and Wanderlust). @item -Oliver Oppitz sent several useful suggestions. +Oliver Oppitz made useful suggestions. @item Carsten Wimmer suggested some changes and helped fix a bug in linking to GNUS. @@ -2807,8 +2855,8 @@ Kai Grossjohann pointed out that a number of key bindings in Org-mode conflict with other packages. @item -Roland Winkler pointed out that additional keybindings are need to use -Org-mode on a tty. +Roland Winkler pointed out that additional keybindings are needed to +use Org-mode on a tty. @end itemize @node Index, Key Index, Miscellaneous, Top
--- a/nt/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/nt/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,13 @@ +2005-11-26 Chong Yidong <cyd@stupidchicken.com> + + * emacs.rc: Use new icons. + +2005-11-26 Eli Zaretskii <eliz@gnu.org> + + * emacs21.ico: Renamed from emacs.ico. + * emacs.ico: New icons from Andrew Zhilin + <andrew_zhilin@yahoo.com>. + 2005-09-10 Eli Zaretskii <eliz@gnu.org> * config.nt (HAVE_GET_CURRENT_DIR_NAME): Undefine.
--- a/nt/emacs.rc Wed Nov 23 01:35:21 2005 +0000 +++ b/nt/emacs.rc Sat Dec 03 14:25:50 2005 +0000 @@ -1,4 +1,4 @@ -Emacs ICON icons\gnu2a32t.ico +Emacs ICON icons\emacs.ico 32649 CURSOR icons\hand.cur #ifndef VS_VERSION_INFO
--- a/src/ChangeLog Wed Nov 23 01:35:21 2005 +0000 +++ b/src/ChangeLog Sat Dec 03 14:25:50 2005 +0000 @@ -1,3 +1,60 @@ +2005-11-30 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu> + + * buffer.c (Fpop_to_buffer): Remove superfluous call to record_buffer. + +2005-11-30 Kim F. Storm <storm@cua.dk> + + * alloc.c: Include fcntl.h. Define O_WRONLY if not defined. + (valid_lisp_object_p) [!GC_MARK_STACK]: Validate pointer by + passing it to `emacs_write'. + +2005-11-29 Ari Roponen <arjuropo@cc.jyu.fi> (tiny change) + + * atimer.c (stop_other_atimers): Fix loop to correctly compute `prev'. + +2005-11-27 Richard M. Stallman <rms@gnu.org> + + * window.c (adjust_window_trailing_edge): New function. + (Fadjust_window_trailing_edge): New function. + (syms_of_window): Defsubr it. + (window_deletion_count): New variable. + (delete_window): Update window_deletion_count. + +2005-11-26 Eli Zaretskii <eliz@gnu.org> + + * minibuf.c (syms_of_minibuf): Mention the extension of + `completion-auto-help's meaning by complete.el. + +2005-11-26 Henrik Enberg <henrik.enberg@telia.com> + + * xfaces.c (Finternal_set_lisp_face_attribute_from_resource): + Handle :inherit property as a lisp expression. + +2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macterm.c (Qcontrol): Rename from Qctrl. All uses changed. + (syms_of_macterm): Staticpro Qcontrol, Qmeta, Qalt, Qhyper, + Qsuper, and Qmodifier_value. + (Vmac_control_modifier, Vmac_option_modifier) + (Vmac_command_modifier, Vmac_function_modifier) + (Vmac_emulate_three_button_mouse, Vmac_wheel_button_is_mouse_2) + (Vmac_pass_command_to_system, Vmac_pass_control_to_system) + (Vmac_charset_info_alist): Doc fixes. + +2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * emacs.c (main) [MAC_OSX]: Change working directory to home + directory if `-psn_*' option is specified. + + * mac.c (DECODE_UTF_8): Remove macro. + [TARGET_API_MAC_CARBON] (cfstring_to_lisp_nodecode): New function + created from cfstring_to_lisp. + [TARGET_API_MAC_CARBON] (cfstring_to_lisp): Use it. + (xrm_get_preference_database) [TARGET_API_MAC_CARBON]: Likewise. + + * macterm.h (cfstring_to_lisp_nodecode) [TARGET_API_MAC_CARBON]: + Add prototype. + 2005-11-21 Ken Raeburn <raeburn@mit.edu> * keymap.c (shadow_lookup): Use make_number to pass a number to @@ -9,8 +66,8 @@ 2005-11-20 Chong Yidong <cyd@stupidchicken.com> - * xfaces.c (Finternal_set_lisp_face_attribute): Use - :ignore-defface for new frame defaults when `unspecified' is + * xfaces.c (Finternal_set_lisp_face_attribute): + Use :ignore-defface for new frame defaults when `unspecified' is supplied. (Finternal_get_lisp_face_attribute): Hide :ignore-defface. (merge_face_vectors): Don't do :ignore-defface overwriting here. @@ -35,24 +92,22 @@ * macterm.c [USE_CG_TEXT_DRAWING] (cg_text_anti_aliasing_threshold): New variable. - [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): New - function. + [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): New fun. (init_font_name_table) [USE_ATSUI && USE_CG_TEXT_DRAWING]: Use it. [USE_CG_TEXT_DRAWING] (mac_draw_string_cg): Don't do antialiasing if font size is smaller than or equal to cg_text_anti_aliasing_threshold. 2005-11-17 Chong Yidong <cyd@stupidchicken.com> - * image.c (x_create_bitmap_from_xpm_data): Free attributes on - fail. + * image.c (x_create_bitmap_from_xpm_data): Free attributes on fail. * xfaces.c (Qignore_defface): New variable. (syms_of_xfaces): Provide `:ignore-defface'. (IGNORE_DEFFACE_P): New macro. (check_lface_attrs, lface_fully_specified_p) (Finternal_set_lisp_face_attribute) - (Fface_attribute_relative_p, Fmerge_face_attribute): Handle - Qignore_defface as a possible value. + (Fface_attribute_relative_p, Fmerge_face_attribute): + Handle Qignore_defface as a possible value. (merge_face_vectors): The merged face is `unspecified' if the mergee specifies `:ignore-defface'. @@ -593,8 +648,8 @@ * xdisp.c (remember_mouse_glyph): Use MATRIX_BOTTOM_TEXT_ROW to get end of text rows. Obtain header-line/mode-line rows directly. - * xterm.c, w32term.c, macterm.c (note_mouse_movement): Restore - help_echo_string if mouse is moved inside last_mouse_glyph. + * xterm.c, w32term.c, macterm.c (note_mouse_movement): + Restore help_echo_string if mouse is moved inside last_mouse_glyph. 2005-10-12 Kim F. Storm <storm@cua.dk> @@ -659,8 +714,8 @@ (init_font_name_table) [USE_ATSUI]: Use decode_mac_font_name. Don't use Fdowncase because family name is already lowered by decode_mac_font_name. - (init_font_name_table): Always call decode_mac_font_name. Add - pair of family name and its reference to fm_font_family_alist. + (init_font_name_table): Always call decode_mac_font_name. + Add pair of family name and its reference to fm_font_family_alist. (mac_clear_font_name_table): Clear fm_font_family_alist. (XLoadQueryFont): Move font size parsing part to parse_x_font_name. Lookup fm_font_family_alist to get font family reference. @@ -760,8 +815,8 @@ (x_fix_overlapping_area): Add new OVERLAPS arg. (get_glyph_string_clip_rects): Add extern. - * dispnew.c (redraw_overlapping_rows): Call - rif->fix_overlapping_area with new OVERLAPS arg as redrawn part. + * dispnew.c (redraw_overlapping_rows): + Call rif->fix_overlapping_area with new OVERLAPS arg as redrawn part. * xdisp.c: Rename member for_overlaps_p in struct glyph_string to for_overlaps. @@ -1106,8 +1161,8 @@ * xsmfns.c: (get_current_dir_name): Remove prototype. - * lisp.h: (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]: Add - prototype. + * lisp.h: (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]: + Add prototype. * sysdep.c [WINDOWSNT]: Add prototype for getwd. Don't #undef NULL after including blockinput.h.
--- a/src/alloc.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/alloc.c Sat Dec 03 14:25:50 2005 +0000 @@ -66,6 +66,14 @@ extern POINTER_TYPE *sbrk (); #endif +#ifdef HAVE_FCNTL_H +#define INCLUDED_FCNTL +#include <fcntl.h> +#endif +#ifndef O_WRONLY +#define O_WRONLY 1 +#endif + #ifdef DOUG_LEA_MALLOC #include <malloc.h> @@ -4498,21 +4506,37 @@ valid_lisp_object_p (obj) Lisp_Object obj; { + void *p; #if !GC_MARK_STACK - /* Cannot determine this. */ - return -1; + int fd; #else - void *p; struct mem_node *m; +#endif if (INTEGERP (obj)) return 1; p = (void *) XPNTR (obj); - if (PURE_POINTER_P (p)) return 1; +#if !GC_MARK_STACK + /* We need to determine whether it is safe to access memory at + address P. Obviously, we cannot just access it (we would SEGV + trying), so we trick the o/s to tell us whether p is a valid + pointer. Unfortunately, we cannot use NULL_DEVICE here, as + emacs_write may not validate p in that case. */ + if ((fd = emacs_open("__Valid__Lisp__Object__", O_CREAT | O_WRONLY | O_TRUNC, 0666)) >= 0) + { + int valid = emacs_write(fd, (char *)p, 16) == 16; + emacs_close(fd); + unlink("__Valid__Lisp__Object__"); + return valid; + } + + return -1; +#else + m = mem_find (p); if (m == MEM_NIL)
--- a/src/atimer.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/atimer.c Sat Dec 03 14:25:50 2005 +0000 @@ -231,7 +231,7 @@ struct atimer *p, *prev; /* See if T is active. */ - for (p = atimers, prev = 0; p && p != t; p = p->next) + for (p = atimers, prev = NULL; p && p != t; prev = p, p = p->next) ; if (p == t)
--- a/src/buffer.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/buffer.c Sat Dec 03 14:25:50 2005 +0000 @@ -1722,9 +1722,6 @@ } } Fset_buffer (buf); - if (NILP (norecord)) - /* Why bother ? Fselect_window will do it for us anyway. -stef */ - record_buffer (buf); Fselect_window (Fdisplay_buffer (buf, other_window, Qnil), norecord); return buf; }
--- a/src/emacs.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/emacs.c Sat Dec 03 14:25:50 2005 +0000 @@ -963,9 +963,15 @@ #ifdef MAC_OSX /* Skip process serial number passed in the form -psn_x_y as - command-line argument. */ + command-line argument. The WindowServer adds this option when + Emacs is invoked from the Finder or by the `open' command. In + these cases, the working directory becomes `/', so we change it + to the user's home directory. */ if (argc > skip_args + 1 && strncmp (argv[skip_args+1], "-psn_", 5) == 0) - skip_args++; + { + chdir (getenv ("HOME")); + skip_args++; + } #endif /* MAC_OSX */ #ifdef VMS
--- a/src/mac.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/mac.c Sat Dec 03 14:25:50 2005 +0000 @@ -265,7 +265,6 @@ #if TARGET_API_MAC_CARBON static Lisp_Object Qstring, Qnumber, Qboolean, Qdate, Qdata; static Lisp_Object Qarray, Qdictionary; -#define DECODE_UTF_8(str) code_convert_string_norecord (str, Qutf_8, 0) struct cfdict_context { @@ -336,12 +335,11 @@ } -/* From CFString to a lisp string. Never returns a unibyte string - (even if it only contains ASCII characters). - This may cause GC during code conversion. */ +/* From CFString to a lisp string. Returns a unibyte string + containing a UTF-8 byte sequence. */ Lisp_Object -cfstring_to_lisp (string) +cfstring_to_lisp_nodecode (string) CFStringRef string; { Lisp_Object result = Qnil; @@ -362,9 +360,23 @@ } } + return result; +} + + +/* From CFString to a lisp string. Never returns a unibyte string + (even if it only contains ASCII characters). + This may cause GC during code conversion. */ + +Lisp_Object +cfstring_to_lisp (string) + CFStringRef string; +{ + Lisp_Object result = cfstring_to_lisp_nodecode (string); + if (!NILP (result)) { - result = DECODE_UTF_8 (result); + result = code_convert_string_norecord (result, Qutf_8, 0); /* This may be superfluous. Just to make sure that the result is a multibyte string. */ result = string_to_multibyte (result); @@ -1141,7 +1153,7 @@ CFSetGetValues (key_set, (const void **)keys); for (index = 0; index < count; index++) { - res_name = SDATA (cfstring_to_lisp (keys[index])); + res_name = SDATA (cfstring_to_lisp_nodecode (keys[index])); quarks = parse_resource_name (&res_name); if (!(NILP (quarks) || *res_name)) {
--- a/src/macterm.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/macterm.c Sat Dec 03 14:25:50 2005 +0000 @@ -199,7 +199,7 @@ /* The keysyms to use for the various modifiers. */ -static Lisp_Object Qalt, Qhyper, Qsuper, Qctrl, +static Lisp_Object Qalt, Qhyper, Qsuper, Qcontrol, Qmeta, Qmodifier_value; extern int inhibit_window_system; @@ -10923,17 +10923,19 @@ x_error_message_string = Qnil; #endif + Qcontrol = intern ("control"); staticpro (&Qcontrol); + Qmeta = intern ("meta"); staticpro (&Qmeta); + Qalt = intern ("alt"); staticpro (&Qalt); + Qhyper = intern ("hyper"); staticpro (&Qhyper); + Qsuper = intern ("super"); staticpro (&Qsuper); Qmodifier_value = intern ("modifier-value"); - Qctrl = intern ("ctrl"); - Fput (Qctrl, Qmodifier_value, make_number (ctrl_modifier)); - Qmeta = intern ("meta"); - Fput (Qmeta, Qmodifier_value, make_number (meta_modifier)); - Qalt = intern ("alt"); - Fput (Qalt, Qmodifier_value, make_number (alt_modifier)); - Qhyper = intern ("hyper"); - Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier)); - Qsuper = intern ("super"); - Fput (Qsuper, Qmodifier_value, make_number (super_modifier)); + staticpro (&Qmodifier_value); + + Fput (Qcontrol, Qmodifier_value, make_number (ctrl_modifier)); + Fput (Qmeta, Qmodifier_value, make_number (meta_modifier)); + Fput (Qalt, Qmodifier_value, make_number (alt_modifier)); + Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier)); + Fput (Qsuper, Qmodifier_value, make_number (super_modifier)); Qapplication = intern ("application"); staticpro (&Qapplication); Qabout = intern ("about"); staticpro (&Qabout); @@ -10980,63 +10982,61 @@ staticpro (&last_mouse_motion_frame); last_mouse_motion_frame = Qnil; - - /* Variables to configure modifier key assignment. */ DEFVAR_LISP ("mac-control-modifier", &Vmac_control_modifier, doc: /* Modifier key assumed when the Mac control key is pressed. -The value can be `alt', `ctrl', `hyper', or `super' for the respective -modifier. The default is `ctrl'. */); - Vmac_control_modifier = Qctrl; +The value can be `alt', `control', `hyper', or `super' for the +respective modifier. The default is `control'. */); + Vmac_control_modifier = Qcontrol; DEFVAR_LISP ("mac-option-modifier", &Vmac_option_modifier, doc: /* Modifier key assumed when the Mac alt/option key is pressed. -The value can be `alt', `ctrl', `hyper', or `super' for the respective -modifier. If the value is nil then the key will act as the normal -Mac control modifier, and the option key can be used to compose -characters depending on the chosen Mac keyboard setting. */); +The value can be `alt', `control', `hyper', or `super' for the +respective modifier. If the value is nil then the key will act as the +normal Mac control modifier, and the option key can be used to compose +characters depending on the chosen Mac keyboard setting. */); Vmac_option_modifier = Qnil; DEFVAR_LISP ("mac-command-modifier", &Vmac_command_modifier, doc: /* Modifier key assumed when the Mac command key is pressed. -The value can be `alt', `ctrl', `hyper', or `super' for the respective -modifier. The default is `meta'. */); +The value can be `alt', `control', `hyper', or `super' for the +respective modifier. The default is `meta'. */); Vmac_command_modifier = Qmeta; DEFVAR_LISP ("mac-function-modifier", &Vmac_function_modifier, doc: /* Modifier key assumed when the Mac function key is pressed. -The value can be `alt', `ctrl', `hyper', or `super' for the respective -modifier. Note that remapping the function key may lead to unexpected -results for some keys on non-US/GB keyboards. */); +The value can be `alt', `control', `hyper', or `super' for the +respective modifier. Note that remapping the function key may lead to +unexpected results for some keys on non-US/GB keyboards. */); Vmac_function_modifier = Qnil; DEFVAR_LISP ("mac-emulate-three-button-mouse", &Vmac_emulate_three_button_mouse, - doc: /* t means that when the option-key is held down while pressing the -mouse button, the click will register as mouse-2 and while the -command-key is held down, the click will register as mouse-3. -'reverse means that the option-key will register for mouse-3 -and the command-key will register for mouse-2. nil means that -no emulation should be done and the modifiers should be placed -on the mouse-1 event. */); + doc: /* Specify a way of three button mouse emulation. +The value can be nil, t, or the symbol `reverse'. +nil means that no emulation should be done and the modifiers should be +placed on the mouse-1 event. +t means that when the option-key is held down while pressing the mouse +button, the click will register as mouse-2 and while the command-key +is held down, the click will register as mouse-3. +The symbol `reverse' means that the option-key will register for +mouse-3 and the command-key will register for mouse-2. */); Vmac_emulate_three_button_mouse = Qnil; #if USE_CARBON_EVENTS DEFVAR_LISP ("mac-wheel-button-is-mouse-2", &Vmac_wheel_button_is_mouse_2, - doc: /* Non-nil means that the wheel button will be treated as mouse-2 and -the right click will be mouse-3. -Otherwise, the right click will be mouse-2 and the wheel button mouse-3.*/); + doc: /* Non-nil if the wheel button is mouse-2 and the right click mouse-3. +Otherwise, the right click will be treated as mouse-2 and the wheel +button will be mouse-3. */); Vmac_wheel_button_is_mouse_2 = Qt; DEFVAR_LISP ("mac-pass-command-to-system", &Vmac_pass_command_to_system, - doc: /* If non-nil, the Mac \"Command\" key is passed on to the Mac -Toolbox for processing before Emacs sees it. */); + doc: /* Non-nil if command key presses are passed on to the Mac Toolbox. */); Vmac_pass_command_to_system = Qt; DEFVAR_LISP ("mac-pass-control-to-system", &Vmac_pass_control_to_system, - doc: /* If non-nil, the Mac \"Control\" key is passed on to the Mac -Toolbox for processing before Emacs sees it. */); + doc: /* Non-nil if control key presses are passed on to the Mac Toolbox. */); Vmac_pass_control_to_system = Qt; #endif @@ -11051,14 +11051,14 @@ creating the terminal frame on Mac OS 9 before loading term/mac-win.elc. */ DEFVAR_LISP ("mac-charset-info-alist", &Vmac_charset_info_alist, - doc: /* Alist linking Emacs character sets to Mac text encoding and Emacs coding system. + doc: /* Alist of Emacs character sets vs text encodings and coding systems. Each entry should be of the form: (CHARSET-NAME TEXT-ENCODING CODING-SYSTEM) where CHARSET-NAME is a string used in font names to identify the -charset, TEXT-ENCODING is a TextEncodingBase value, and CODING_SYSTEM -is a coding system corresponding to TEXT-ENCODING. */); +charset, TEXT-ENCODING is a TextEncodingBase value in Mac, and +CODING_SYSTEM is a coding system corresponding to TEXT-ENCODING. */); Vmac_charset_info_alist = Fcons (list3 (build_string ("mac-roman"), make_number (smRoman), Qnil), Qnil);
--- a/src/macterm.h Wed Nov 23 01:35:21 2005 +0000 +++ b/src/macterm.h Sat Dec 03 14:25:50 2005 +0000 @@ -581,6 +581,7 @@ extern CFStringRef cfstring_create_with_utf8_cstring P_ ((const char *)); extern CFStringRef cfstring_create_with_string P_ ((Lisp_Object)); extern Lisp_Object cfdata_to_lisp P_ ((CFDataRef)); +extern Lisp_Object cfstring_to_lisp_nodecode P_ ((CFStringRef)); extern Lisp_Object cfstring_to_lisp P_ ((CFStringRef)); extern Lisp_Object cfnumber_to_lisp P_ ((CFNumberRef)); extern Lisp_Object cfdate_to_lisp P_ ((CFDateRef));
--- a/src/minibuf.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/minibuf.c Sat Dec 03 14:25:50 2005 +0000 @@ -2776,7 +2776,9 @@ history_delete_duplicates = 0; DEFVAR_LISP ("completion-auto-help", &Vcompletion_auto_help, - doc: /* *Non-nil means automatically provide help for invalid completion input. */); + doc: /* *Non-nil means automatically provide help for invalid completion input. +Under Partial Completion mode, a non-nil, non-t value has a special meaning; +see the doc string of `partial-completion-mode' for more details. */); Vcompletion_auto_help = Qt; DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
--- a/src/window.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/window.c Sat Dec 03 14:25:50 2005 +0000 @@ -212,6 +212,10 @@ Lisp_Object Vscroll_preserve_screen_position; +/* Incremented by 1 whenever a window is deleted. */ + +int window_deletion_count; + #if 0 /* This isn't used anywhere. */ /* Nonzero means we can split a frame even if it is "unsplittable". */ static int inhibit_frame_unsplittable; @@ -1335,7 +1339,7 @@ CHECK_WINDOW (window); p = XWINDOW (window); - /* It's okay to delete an already-deleted window. */ + /* It's a no-op to delete an already-deleted window. */ if (NILP (p->buffer) && NILP (p->hchild) && NILP (p->vchild)) @@ -1399,6 +1403,9 @@ } } + /* Now we know we can delete this one. */ + window_deletion_count++; + tem = p->buffer; /* tem is null for dummy parent windows (which have inferiors but not any contents themselves) */ @@ -4233,9 +4240,136 @@ adjust_glyphs (XFRAME (WINDOW_FRAME (XWINDOW (window)))); } + +/* Adjust the size of WINDOW by DELTA, moving only its trailing edge. + HORIZ_FLAG nonzero means adjust the width, moving the right edge. + zero means adjust the height, moving the bottom edge. + + Following siblings of the selected window are resized to fulfill + the size request. If they become too small in the process, they + are not deleted; instead, we signal an error. */ + +static void +adjust_window_trailing_edge (window, delta, horiz_flag) + Lisp_Object window; + int delta, horiz_flag; +{ + Lisp_Object parent, child; + struct window *p; + Lisp_Object old_config = Fcurrent_window_configuration (Qnil); + int delcount = window_deletion_count; + + /* Check values of window_min_width and window_min_height for + validity. */ + check_min_window_sizes (); + + if (NILP (window)) + window = Fselected_window (); + + CHECK_WINDOW (window); + + /* Give up if this window cannot be resized. */ + if (window_fixed_size_p (XWINDOW (window), horiz_flag, 1)) + error ("Window is not resizable"); + + while (1) + { + p = XWINDOW (window); + parent = p->parent; + + /* Make sure there is a following window. */ + if (NILP (parent) + && (horiz_flag ? 1 + : NILP (XWINDOW (window)->next))) + { + Fset_window_configuration (old_config); + error ("No other window following this one"); + } + + /* Don't make this window too small. */ + if (XINT (CURSIZE (window)) + delta + < (horiz_flag ? window_min_width : window_min_height)) + { + Fset_window_configuration (old_config); + error ("Cannot adjust window size as specified"); + } + + /* Clear out some redisplay caches. */ + XSETFASTINT (p->last_modified, 0); + XSETFASTINT (p->last_overlay_modified, 0); + + /* Adjust this window's edge. */ + XSETINT (CURSIZE (window), + XINT (CURSIZE (window)) + delta); + + /* If this window has following siblings in the desired dimension, + make them smaller. + (If we reach the top of the tree and can never do this, + we will fail and report an error, above.) */ + if (horiz_flag + ? !NILP (XWINDOW (parent)->hchild) + : !NILP (XWINDOW (parent)->vchild)) + { + if (!NILP (XWINDOW (window)->next)) + { + XSETINT (CURBEG (p->next), + XINT (CURBEG (p->next)) + delta); + size_window (p->next, XINT (CURSIZE (p->next)) - delta, + horiz_flag, 0); + break; + } + } + else + /* Here we have a chain of parallel siblings, in the other dimension. + Change the size of the other siblings. */ + for (child = (horiz_flag + ? XWINDOW (parent)->vchild + : XWINDOW (parent)->hchild); + ! NILP (child); + child = XWINDOW (child)->next) + if (! EQ (child, window)) + size_window (child, XINT (CURSIZE (child)) + delta, + horiz_flag, 0); + + window = parent; + } + + /* If we made a window so small it got deleted, + we failed. Report failure. */ + if (delcount != window_deletion_count) + { + Fset_window_configuration (old_config); + error ("Cannot adjust window size as specified"); + } + + /* Adjust glyph matrices. */ + adjust_glyphs (XFRAME (WINDOW_FRAME (XWINDOW (window)))); +} + #undef CURBEG #undef CURSIZE +DEFUN ("adjust-window-trailing-edge", Fadjust_window_trailing_edge, + Sadjust_window_trailing_edge, 3, 3, 0, + doc: /* Adjust the bottom or right edge of WINDOW by DELTA. +If HORIZ_FLAG is t, that means adjust the width, moving the right edge. +Otherwise, adjust the height, moving the bottom edge. + +Following siblings of the selected window are resized to fulfill +the size request. If they become too small in the process, they +are not deleted; instead, we signal an error. */) + (window, delta, horizontal) + Lisp_Object window, delta, horizontal; +{ + CHECK_NUMBER (delta); + adjust_window_trailing_edge (window, XINT (delta), !NILP (horizontal)); + + if (! NILP (Vwindow_configuration_change_hook)) + call1 (Vrun_hooks, Qwindow_configuration_change_hook); + + return Qnil; +} + /*********************************************************************** @@ -7116,6 +7250,7 @@ defsubr (&Ssplit_window); defsubr (&Senlarge_window); defsubr (&Sshrink_window); + defsubr (&Sadjust_window_trailing_edge); defsubr (&Sscroll_up); defsubr (&Sscroll_down); defsubr (&Sscroll_left);
--- a/src/xfaces.c Wed Nov 23 01:35:21 2005 +0000 +++ b/src/xfaces.c Sat Dec 03 14:25:50 2005 +0000 @@ -4704,7 +4704,7 @@ if (SYMBOLP (boolean_value)) value = boolean_value; } - else if (EQ (attr, QCbox)) + else if (EQ (attr, QCbox) || EQ (attr, QCinherit)) value = Fcar (Fread_from_string (value, Qnil, Qnil)); return Finternal_set_lisp_face_attribute (face, attr, value, frame);