# HG changeset patch # User Karoly Lorentey # Date 1135022242 0 # Node ID 14a4eb789b458db5db1a7d8492436ce84d568849 # Parent e26e2265dcc6d90d3d207d7bf5bba1539e165960# Parent 1c477099d3ac8922d5f8bb6b47b56cc39edafbaf Merged from miles@gnu.org--gnu-2005 (patch 169-173, 671-676) Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-671 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-672 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-673 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-674 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-675 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-676 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-169 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-170 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-171 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-172 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-173 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-454 diff -r e26e2265dcc6 -r 14a4eb789b45 admin/ChangeLog --- a/admin/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/admin/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,7 @@ +2005-12-13 Bill Wohler + + * FOR-RELEASE: Ensure MH-E 8.0 has been released. + 2005-12-09 Reiner Steib * FOR-RELEASE (DOCUMENTATION): Remove message-mail, gnus-* diff -r e26e2265dcc6 -r 14a4eb789b45 admin/FOR-RELEASE --- a/admin/FOR-RELEASE Mon Dec 19 16:13:20 2005 +0000 +++ b/admin/FOR-RELEASE Mon Dec 19 19:57:22 2005 +0000 @@ -28,6 +28,9 @@ ** Send an email to the various distributions, including the GNOME and KDE projects, to use the new Emacs icons in etc/images/icons. +** Ensure MH-E 8.0 has been released. +Assigned to Bill Wohler . + * NEW FEATURES ** Rework how fringe bitmaps are defined and used. @@ -47,6 +50,8 @@ * BUGS +** circle-printing bug from Stephen Berman; see my 5 Dec message. + ** Ronan Keryell's Sep 23 bug about "tramp sudo:: and version control on RCS" ** TCP server processes do not work on Windows. @@ -58,6 +63,9 @@ * DOCUMENTATION +** Add a node to the Lisp manual describing key sequences from the +Lisp point of view. + ** Fix some of these doc strings by adding \\ where needed. ada-mode diff -r e26e2265dcc6 -r 14a4eb789b45 etc/ChangeLog --- a/etc/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,8 @@ +2005-12-16 L$,1 q(Brentey K,Aa(Broly + + * NEWS: Change `prev-buffer' to `previous-buffer'; add note on + them using the frame-local buffer list. + 2005-12-10 David Koppelman * NEWS: hi-lock-mode is now buffer local, use global-hi-lock-mode diff -r e26e2265dcc6 -r 14a4eb789b45 etc/NEWS --- a/etc/NEWS Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/NEWS Mon Dec 19 19:57:22 2005 +0000 @@ -307,9 +307,10 @@ On 32bit machines, it is now 256M (i.e. 268435455). +++ -** You can now switch buffers in a cyclic order with C-x C-left and -(prev-buffer) and C-x C-right (next-buffer). C-x left and C-x right -can be used as well. +** You can now switch buffers in a cyclic order with C-x C-left +(previous-buffer) and C-x C-right (next-buffer). C-x left and +C-x right can be used as well. The functions keep a different buffer +cycle for each frame, using the frame-local buffer list. +++ ** `undo-only' does an undo which does not redo any previous undo. @@ -322,7 +323,7 @@ ** New commands to operate on pairs of open and close characters: `insert-pair', `delete-pair', `raise-sexp'. ---- ++++ ** New command `kill-whole-line' kills an entire line at once. By default, it is bound to C-S-. @@ -2539,6 +2540,10 @@ *** The new command `bibtex-copy-summary-as-kill' pushes summary of BibTeX entry to kill ring (bound to C-c C-t). +*** The new variables bibtex-expand-strings and +bibtex-autokey-expand-strings control the expansion of strings when +extracting the content of a BibTeX field. + +++ ** In Enriched mode, `set-left-margin' and `set-right-margin' are now by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l' @@ -4181,6 +4186,11 @@ ** Completion changes: +++ +*** The new function `minibuffer-completion-contents' returns the contents +of the minibuffer just before point. That is what completion commands +operate on. + ++++ *** The functions `all-completions' and `try-completion' now accept lists of strings as well as hash-tables additionally to alists, obarrays and functions. Furthermore, the function `test-completion' is now diff -r e26e2265dcc6 -r 14a4eb789b45 etc/PROBLEMS --- a/etc/PROBLEMS Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/PROBLEMS Mon Dec 19 19:57:22 2005 +0000 @@ -1107,7 +1107,7 @@ This is caused by a bug in the KDE applet `klipper' which periodically requests the X clipboard contents from applications. Early versions -of klipper don't implement the ICCM protocol for large selections, +of klipper don't implement the ICCCM protocol for large selections, which leads to Emacs being flooded with selection requests. After a while, Emacs may print a message: diff -r e26e2265dcc6 -r 14a4eb789b45 etc/TODO --- a/etc/TODO Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/TODO Mon Dec 19 19:57:22 2005 +0000 @@ -11,6 +11,8 @@ ** revert-buffer should eliminate overlays and the mark. +** erase-buffer should perhaps disregard read-only properties of text. + ** Make occur correctly handle matches that span more than one line, as well as overlapping matches. @@ -36,17 +38,33 @@ ** Make occur handle multi-line matches cleanly with context. +** In Custom buffers, put the option that turns a mode on or off first, + using a heuristic of some kind? + +** Define recompute-arg and recompute-arg-if for fix_command to use. + See rms message of 11 Dec 05. + +** Height returned by frame-parameter ... and height given to + make-frame does not mean the same thing. The former includes menu and + tool bar lines, the latter don't. frame-parameter should return height + without menu and tool bar lines. + +** In Emacs Info, examples of using Customize should be clickable + and they should create Custom buffers. + * Important features: ** Provide user-friendly ways to list all available font families, - list fonts, display a font as a sample, etc. [fx is looking at - multilingual font selection for Emacs 22.] + list fonts, display a font as a sample, etc. [fx looked at + multilingual font selection for Unicode-based Emacs 23.] ** Rewrite the face code to be simpler, clearer and faster. ** Program Enriched mode to read and save in RTF. [Is there actually a decent single definition of RTF? Maybe see info at - http://latex2rtf.sourceforge.net/.] + http://latex2rtf.sourceforge.net/.] This task seems to be addressed + by http://savannah.nongnu.org/projects/emacs-rtf/, which is still in + very early stages. ** Implement something better than the current Refill mode. This probably needs some primitive support. @@ -72,6 +90,8 @@ *** Discretionary hyphens that are not visible when they are at end of line. ** Make movemail work with IMAP. + movemail from GNU mailutils does that, so switching to it will solve + the issue. ** Internationalize Emacs's messages. @@ -106,6 +126,7 @@ and put some other errors under it. ** A function to tell you the argument pattern of functions. + See `function-arity' in http://www.loveshack.ukfsn.org/emacs/fx-misc.el. ** Make byte-compile warn when a doc string is too wide. @@ -123,6 +144,9 @@ ** ange-ftp *** understand sftp + This is hard to make work because sftp doesn't print status + messages. + *** Use MLS for ange-ftp-insert-directory if a list of files is specified. ** Ability to map a key, including all modified-combinations. @@ -154,7 +178,9 @@ ** Implement a clean way to use different major modes for different parts of a buffer. This could be useful in editing Bison input files, for instance, or other kinds of text - where one language is embedded in another language. + where one language is embedded in another language. See + http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also + mmm-mode, as reference for approaches took by others. ** Arrange a way for an input method to return the first character immediately, then replace it later. So that C-s a with @@ -178,7 +204,8 @@ ** Implement a variant of uncompress.el or jka-compr.el that works with GNU Privacy Guard for encryption. [Code exists but isn't assigned. See the Gnus development sources for assigned code concerning GPG - use with mail, which is probably a good start.] + use with mail, which is probably a good start.] See also + http://www.loveshack.ukfsn.org/emacs/auto-crypt.tgz. ** Save undo information in special temporary files, and reload it when needed for undoing. This could extend undo capacity. @@ -225,8 +252,9 @@ this and can say where some of the problems are.] ** Eliminate the storm of warnings concerning char/unsigned char - mismatches that we get with proprietary compilers on various systems. - They make it difficult to spot the important warnings. + mismatches that we get with GCC 4.x and proprietary compilers on + various systems. They make it difficult to spot the important + warnings. ** Fix anything necessary to use `long long' EMACS_INTs with GCC. @@ -242,9 +270,15 @@ ignoring X resources (Doze equivalents?) and most of the environment. What should not be ignored needs consideration. -** Investigate using the language environment (or locale?) to set up - more things, such as the default Ispell dictionary, calendar - holidays, quoting characters, space after periods and colons, ... +** Enhance locale handling: handle language, territory and charset + orthogonally and de-emphasize language environments. Use the locale + to set up more things, such as fontsets, the default Ispell + dictionary, diary format, calendar holidays and display, quoting + characters and phrase boundaries, sentence endings, collation for + sorting (at least for unicodes), HTTP Accept-language, patterns for + directory listings and compilation messages, yes-or-no replies, + common menu items when the toolkit supports it ... `locale-info' + needs extending for LC_COLLATE &c. [fx started on this.] ** Improve the GC (generational, incremental). (We may be able to use the Boehm collector.) [See the Boehm-GC branch in CVS for work on @@ -305,7 +339,8 @@ XRender/Freetype. ** Port the conservative stack marking code of Emacs' garbage collector - to more systems, so that we can completely get rid of GCPROs. + to more systems, so that we can completely get rid of GCPROs. Note + that Boehm garbage collector provides this. ** Reorder defcustom's in each package so that the more important options come first in the Customize buffers. This could be done by diff -r e26e2265dcc6 -r 14a4eb789b45 etc/orgcard.ps --- a/etc/orgcard.ps Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/orgcard.ps Mon Dec 19 19:57:22 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.12.08:1407 +%DVIPSSource: TeX output 2005.12.16:1527 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -369,190 +369,187 @@ 0B66137443B501B5FA711C7DF380DB1F64404DA241D1EF5F2D012A0293405302 F828BF879F46962DFAF75F44D4A394DB9D42E4874477097FF6F8DB9BC8712BC8 661A95A2467073355FE697CBE1D8E298569935E5405C22555C40DB775A808F54 -642939D8E4F76C61B2FE966F4FB55319873127C8EEB0572023C36D7624E7B0B4 -EDC15EC6E697D900271A4A20C5D357ADAA313C4F7717EB32258DC6C8C298109C -B80F85F201C0E5366A259304EF113C9C4DD3110BC88F76744C8337B201E8D546 -E69D1328A06F23255AF9F6AFEE6E17FB36B75C80C4E1AE1BF7CCC3C779B3264C -2185266C84CBF559883C6074F8B71BB04D8AE260EDBB86146FBF41E6DA64FD10 -D7982F9EA6A15D7FB61FEE3CA2E4571F8FE6D37967776E22C71C0ACD260DF10B -255BCC7E8521B60EFEEF9529B5D4B5A5B366EC9D4E55342297E4E6BDD3B4A6E2 -B929A4F670CF051869BE77438C78DE9DA89764614B1F6E76A331BBBAAD3EAB0B -66E6D4F1564028019F420E47804B4EAE7F08B9A6338BEF7FE8B5D81583EA5C48 -375796372085876CADB21502E77F66764F67C11F69FF205DD706653ED40DAE7F -2E817457C6EFA10FCEC0ABFFF46ED0B112A515A1C5ECE4016683D24AE4234933 -03142D3F5408D6B4347DF87D6DB6D843164701408CD5388BFF0234CDE46DA53B -1060EC8FC73A31E10053A53CAEFC90C96DB930F7E2FBD5039387A15F4CC5C197 -BC2FCA011971EBC13844C370CBA676162715E6B66038B342F9EBC6E278965958 -2950EFFFBF10886CD3EE43741B66EE71976215F5C090D6FCDAFA0F09FCE2C56C -F7173B885FA1B6883057AFEAC9923BB22BA085E74426F4DD57E0E59A7E245A9E -DED2D1CECA852F57EF4037FF66D51ECD30FC6EBC95E0192ACE4A4926841D64AC -5384D1AAD0FA9DB932E199F0271DA68F9A3AB951B65EE7DC0711DDA07C92E153 -012EFC4CB575702DAE0C7CB6666A9F44DC4F965F6079F94FD34B6EA6E79B4EE6 -7751BEE8B721F16F8C28DF7EFE4A67751B642FD7E4460CD770A7112211513C67 -F934EEB3A95C5FA1D66A73B388DE69380A40D3566E883E89D0B292FD8AF4B063 -19900CBA3E1DADB33A64F1462156977764A7832E74241F9378F0BEEDC2454535 -54B334D4B71F4E13FE7FC588D8475812464AA709476E1E3807B385499C6BD992 -9689235FC42C207A3877F7D5982A87C47EED577CA1FD1ADB133094868DBF49B0 -E0FA7D2736793756CE915E2F8855D11807C51F2BFB36583525C6C74E15849493 -DB1B673D7CA0B9B5A42FD5635F509E8249141229087995C982AD8CEAA5CAFD2B -46FBEAE379FE49FB1B55BA76076DC69BEC64F2AA719FF103318B45F367A90D98 -A34B2519B8C82E8F51E4961A40BDB2ED188D231E94CBB9F8594C18D1D5A41A66 -C04BE3C0E42C23033775FAB6E617813B891963166390794D8C048F86422FED88 -67BDF4A60D6AA66DC0E8E6A8E2BDACFF68FD55ED78F74F36D055A479CE24E2C8 -BC2B57DC809FEE856ED1EB1078FE6D5CE4959E44305276AC319839C53D9ED91A -DEB117759DD3BD4F1D4E67DF5943DB41DDE35CCF7E6A4D3BE6CF3830B7117022 -3099E42EAB2C1FEBA35DEEC194C18B77437CBB61DF968C4AAFBB70C1019CCAF3 -79E1EC1F5708B8DBA167D4370DDEA7ADD3BBA6A0C1F8E20058CDDAC1CD380676 -0B7DB158FA947AA7F3A02B41EF46836E01FB741F91B420247BB9C8744608FC37 -0AF67329F7978F142DBF659B8A8F0D592046EFFB7F3124667DF9562AEAAD6E0C -A13ABFFC85BBC9806A2DB76B9311484D1D8A400C89C86DB8C678CD3BBA36463B -2F01F3B91D58D3078EE300BCB8D7318288BF602368FD70E95267C2879ABA5AEF -BAA8B067472FFEFE32CF213BB0BCEB53A9EEF07731C7FA6E399A59681A71EA5F -C3A5D118CE6D7107E8BF350DFA0A80B18C2BB265E74806ED288871925E4CAC07 -BB7465B0CAF4AC1FA6A4DC966480038E8B46024BBDC9D725CC03D2B93A4326F3 -4C020B091438DBCF6320897643DB1232CF6CA9BFF9CE7EFDA8491FA0ED29A77C -F3F65B317C4F1694B0FD10DD7BE362887BE4EEC67173752A2F0729E18BC64AF6 -01002D8979E937F336588281BA04688904CE31C370BB9E6117C4E640EFF6C71D -47C98933ED5CBBBE0C9B1FC7B5878A624756490220C82913D7FFFE788F5913F0 -513DF7AE4F71ECF422E02D643B4920E08FA3623A1B54AD852A402762E6845883 -3C3D12E45E287BBA870C4366A13BA3D21B0D25733322A4659459F4B2D7C0C5A3 -7E57B0CEAA8346399418A54BB6676FE800F66DC3438EE48B6F220849AB9F3577 -FBFB7469A40FD2E4BBB12254B27EDA9C05EF6D99D45FA79FDC5E14CEEA23FEE1 -C1CD4C26D9C4D00A8D7BF5E9830CA971CBD857C9B832225B1A5736406259D91C -D6D5CB1817EC7255FFB0CC7D83E2EE23ADB05F1CEC026D6B2350D806004DD810 -B92F80C827323F56E668ED87B0F442D59BEA68246DDE64610D5AA53B6C7FCE4E -F79A27ED30BA0BF128EB09AA2F74C2FB745CD3303B47727C093816C4B99AA55A -73804DBB5CCCA241923C0998A565031C185C63BC348FB7A77D51371F0598C0E2 -A24B2D4F0D4CE6F6A6EC0C14432DD6C88B4361ABB0D6E3BB813F6625B18D1666 -EB9A382D7EF05E692CA5CE9C94A8E90036D693CB11C54252718CA093A1C6646C -7B6956CF2BFA3C0568DBAADD9F604B2AED8F0F963764F8E0E327C5929434BB40 -A0319C748381E5211012925CFD7EE914469E0A00CD7CC1A6C6DA8D1C7B30D3D8 -8E6C8E3C8B248ACA15A1B462C3A6C8B2ED701F336D65D45B560F30CC580E957F -73F06F636EF85567A48295FDD23341ACDDB6CD86A5E8F1FF6AD6910E8E221A66 -CEEB2B614CC23178C033F6D135BBA8278244340E119E6C82A4AE60286FE02D60 -7295FB5048291C2A655A20FF265D5357E6F3DA06564A410A97832C7079164F3C -6D193F267729A247D7B96E647758F458D0F6F494F8FC284DD73F413E1225E9E1 -2F6A917D8099C41822F84416FE47D4313DE9DCA3BF3D2D5E85CE4CAC70E0C1DD -DA64EB3692C90C1608C8FEAA0263ED74ECF5F758BD3BB0E595709944CFE77145 -D5E5B03C9E15F022AC53DA6680CB14362CF7F35E914F6DA5E3C40CA98ED01EE2 -64F3709D9A4B7CC60B6651E094EE51A72A2E6EF80357E8899028BF4E25DF47CC -A92B51E8A3C517D558D2F4A369BBE8A33FDA6F3A9B51B57CBD161832E5F2B28B -A7B4F445BBCFCB658FF4ED9AA299D37394C80923DB7A315B022A22B5A341F858 -A25F772684BF0781E80CDF15393188797DF2E8608C9A48B849E27F5A58F80F04 -E90E1572652E92FED49E65DDE13C0D61E0D6B912DEDCA5B156B94B4C4A347148 -6CF516119A9FA728767201F1D0EAC329957FE795D5B9AF1E709FCEC0D578D9D0 -21D2F8F40A67F3E3529CC7D0440738FFF94C0FC1BC4209ED743885DBEA970325 -184BA629A5DECB34AA558730B77A5401124495094F127C9512B8DA883BBD23D3 -05C37C5B4C5CC8C762E8BCBFC9CC89F4AC1DF4861E96762E8F5BF196E58B544E -005BF4AB1A2E4F0226B8EE5F487AE6458B4312C63CE169AB0E32BF92FCC346AE -ACDEC572CA5BB2FF6A3A7D24DB0429BFED712FA4166581BD5B1D02FA35BEAEA2 -25083FCD9F3F238FECA1032CDA403097F05E6FBB905A26E8408B95742DBCC2CB -41A11E63166829B856767F91AD47289F2685734C6E95FD1513C121060C33CBFA -1DF5DBCF55199D7EB4D4DEF001830895AB27C74C2599A805E5CD9F93D0915166 -D4B46F68E2071025CF7D20E382995054D346EF5C3B1C308686DB495A356B1A85 -171A56C79C443757FD2E6505A4DF3C605A7E1D0CAA353F2D6D1035E5A1264F11 -8AC28DBDFCD0DE25AD0B0A5E925C8726A430A07AFE252D24D901C6178850440E -EBDE3E8A0F136B8A644FC16D5B02D2DE66E6486404C0402691643519A0E01F9B -55D2911E41E64DEDA8F1531A840E458C7BBFE061637128167712B922183B3D40 -5BA3E23873239A62E090BF06174683D2706967C84DB0E6AD95687C189B1F14B6 -8D093E1D89C131589B091E903AB2FE30961A638ADE54576C8B6BE3E80FD8C606 -3CDF0D132180627000FB587B4957FE8B65A91CD3D784036824E7FD60C16EFCB7 -114B26A392E24C58458EE510A6969A034CCB9178E82C46B067500AE85ED02305 -B00E94E4173EE1D733B7B60FE5B0223C21DB47E4FBAE6D590A0A789F004F974C -D1B95DD1FD7EE0B64ED316F8F3485D684EEE187B4E08B8F589DB88A8EC55F413 -9880BAB80CB43EF24C742F48148B4942C78E399940DC86D8BF84B88A5EC89E5F -BD9A2DDE0DD69B40FEFF423FDAE8226F7E18CC5E9F14F03DE0F486A4CCA21FC6 -6793081C69D63CEF16B92860F56F3966309F06B729FCBE1F86FDA8BDFE94962B -7062011520CF6929FCD531AB79606209BE467FD3274A1E87548D92E3F7862610 -9BD97EBB6B544F04E76E22B15B4E106690BAF9F37C243DC028451AE203DDA893 -D5F8A0C6AD763F8973B5063F0B3EB0CFA7663C6F308C256778A8E14A005050BB -BBA147B795C6D680CD425392B0A57988AE673EF0D997A204EA7136D26139FB7C -1C356AF9EEAED3980CB27231D9835571DEFC3498991FB2942638D86186AF73BC -FD55FEC65A66A35557BFD8114C10FD8F872EE976F0F231B40FB7320B92A0BFB1 -596391CD560BC7C28EAC9F342700671354A221326522B70DC5E832AE3F39685D -E6453C1110F0A7D0918E8E413BCAC5DD5A09524C059E5BD9C132586538F2EB52 -972B7D2C89D5A43B3D9697D23DD431F66768765B871CDB5FA608685C65B71A62 -1065B21A81192026F2BA728D35112C40704DD9E8332D8E374C986A6A48E4A30E -8C46AAA96718FF84A04A96949E7E6A653DD2556ACAA4E3B42E787EC539975B71 -309BF31D6ABA17C37CBCB4E4E0CB25F0BC09E2C307FBB375C1DF1D258544F5AE -2CF1819D249283EFE28203C1ADCF39CA6DE74F89AB5159680DF2992F6CD631F4 -A1185EBF7588211686B1DDF915270563B238D03CA0BA3C60676FF08259852BB7 -20B1D958E12BBCA69228FBA42E65969D02DB2A37F3C39B07CF455F473A449711 -7D7023F4D994E55DEFCF0406D8669EBBC92E3EE1050A2D24B1B5D4DA393AB9C3 -0ED709A039AB7E5F82099517E8B70417510BCB6AC6662A78D37C8733D8C4B27D -69E643F58935BA3043DDB9DE4D78CA38D7A965E6B797EAF65DF5E6E0E825AEFC -5DA53C3E50ECDAF26EDA4FE61FEB99E5900F61BD827C8F1C1CA156ABE502B2FA -548C30594DFA196183B2B27D04B4EEB2B63CA5F47C6263FECF253F8114496D21 -278A8DF5C172A66E60FDDF596254D729F67C4779420AB74A39D5E5ADEE663EB6 -E0D65ADBB179625BB93C569C166E53E831875219AD377F6EA835354C7F263F0E -A93C51E43F591BED9DA28122831BB5DCDE46D6B0BB91DB34BE123B75BC583DCA -3719935F02FFC65283B01DC6BE4D06280134E6C7E1EB87028071EC9AAC1B6CBD -4C8651ED2B26213533372B226198CDCCD42AE24CBB79E0FEC2DB57D40B4D4983 -20055205F06ACD3C1E345357EEA95492766B103EFD28E23A91850AAF157FD34A -9F25A59B8D807B37829CC139226F81A336E16124416CA69165A1D58000A582EF -DD388863B47EBFA763C31A82E0BDD6A0C9E2E7CDB418B5B21D607C6A2EC40299 -FA8E69DF37DF5EB775CDFD8AC0FB199C6E11739B644909CEAFE4D2123828DDD7 -FE23B3098C1B25394574D44FA5436574F34DD6963AA246E3B0C17108B4573B78 -8DC32286E9A466D15AC01E0470E60261C362F237096E8627CA4F87DC1AFD83AF -54C3CBB610E1B97A3CC046F83C1E99EE5BCAC6B90687A9FA6A402D6BB917567A -B4E347A7AFF8027E9A118F5B8905EDD930BA4A87E7115A3272ED8CEEE0195963 -6ACF972FFF29B2FECA6E38CF77B3BA25B9058BF64DCB2FB5122D7CEBB7201921 -617F419A92CBEBC15A8A4EF253F294E8CEAA76DA2149212E3519F233EE0FB983 -EC681C89E6403B5D852426C94FEC5E2CD93CFC8B15CB99243105F21415FE2273 -D0463CC70E5E1F45F559E3D544D6B81FBD5358CE5562AAEE8AB43A33FC4EDE84 -1E028C5B4F39771F9BF65141AD73990530E2A739CDD75DE47D38B55F66763604 -2D7B5A6630F46D2C6B8D3CF40FF01A6397D19BADBA8C4766D9BE10EA73A4EDDF -BE40B3572AC0533176CA444FCDE3BEC2F1907C63F6E92971A861AADB0191E6C4 -8ED6E10C231D438D6505D9393104204F5FD0DDD9058B7E04E5732C8FC17814A1 -10A1463B5EE58F33672B5F97CCD7BC6936AE5A49719BD68B1CEDFD8E5592C122 -3749B86FD0E373AECC1188A639723D4CEB42B142062534AB42E766BC3B709986 -57E70E68B9740AC5F284F04BAB28239B5DC8AF12BD5E39A31C9A2E1C9A519D5A -60A966DF2A68BE4A5EDF5392AB2CC26D3D3274119B1FFE40795C9D097541BD8E -BB1B65E7A2B94AA25AE5C57031959F0861F5DE27C61C371704B3855DA678468F -2A9337DCFEBD02EFAF984D01B5369177B0301646C57625ED4C455A4219CC042F -C6BE63A086360AE4A9DD5B37949F4176E5F5601DBE7533BC590CFEED94B31EAB -A68B6741B5E32C610F6345620B94E87F14B79B1D15F8F3A638C94E9A9B7AE4AC -FD1A5FBCEFCA8015ABD25EE55312DF3FC193F68515619DBBABDC301E09399425 -9F15C1D4FEADF2912C676267DB8D5D7594719A5DAC965C08812FE51C4905E2EB -0CA991DF28FFE9D5BEAD055656608714092626632613CD297E11B629ED77AD75 -BDB8892C98DA992489FB138543CEE8D294B2AC6F924E2A622C40059A180665A6 -698EA5BC74994374B85FE9D541DD4C9A7782F66F0D5FB928555616CF6B9523B4 -4780DC444B4D3CD2B9C2B2F255F8B2C926093F9F80BECEA3DF2301DA26B87FEF -CEFD179713B1EA0C8CE779CE59191D468613F0D708A14225B26DD97A64AEF55A -AA6134FD3473888724BB3F34D2171BF6F2E3DB28EE4945BADB0B5B5A4D83D087 -920EEC92A5B85F1DAB6176F44A8A36A503685A83928836E7FC4079F929C29269 -F7ED0F93B67E1EA9D0C3055F16305152DAA2E79E08A89D6A29D686836A43F5BC -6283FB2C37ECE9B467B6DF24E68062D1DCB25ECA8AC9C4BC3D846F3F95D91712 -B90B7727D06B9143C4F215B04C126CCE6F38A8512F39B14A94BA956EB696549E -5A795B86BC82C8BEC872D9F3D0B4909DCCA395F3065D7AB72B5DFF4AFD6B1B6D -8E75CE3316230349FC4F3E889A81F2452534AA3AF82C5768C77C1229975197DD -B8D26C9B94921A80A399BB6B292EA56D7E2217E8E6E8FDD817E8A2DCB986D1D0 -4F3BA37C60C6CD745A1F33F7507818676EB53F2A7E4B0F97A30013820BF6DF15 -31DF184711F646B7B9CAF27B396B8C218036A7B668F15EBB0808D9E8DA1B7871 -3FD447EA00E5629CF2A6DE3F411AFFD4296B36F8DA06D040FA763E0AF241ED62 -80468F92A98E9FA82EB534897362208DC3FC4B268BF646EF99518430FC3D13F0 -9F0501EB8540FF16596A894A6C7DA4119D473647E4E2CC534EDCA764138ACE8D -426D6FEDFA065F9235A8DD34019FE0922B06DD75F967C8331ADDF79C1D7B1A11 -B68A43DF4797C9A81C1D3EB9EEEAE7D8A9EEA3C08C13F48C33FEF4C5493C4270 -5EEA2BAEEE9CC40D07F1883BD193B11EAF9E0CAA3214B3C34BBB3C27FAFFD949 -1BB4CAE77B627E300325CE0141854BDAF24E73CF535C952997168E5DF594C269 -DCC646A460CE417967E3C09A63E9125E01EE2770DFF73A2694D94549EA71799D -C086B5FF88292D1B6E7F3FB425809E6B0BC2671CF26397BF3DCC756DBB1920FE -470B6D9239E3BD4DECB5EBEA0D1289734E80D8D4544DE8957E66306E4B638557 -212699F0E892892570AC8C060EB37A64B471DB2CBF05CEF4418F787A7D96F04A -8B55B4234948AAAC51F8B34792AAD1A75956A4642ECED3731E34742BDB338CCB -0ABBA52FE5901663ACE4E026CEFFCAA5EF6BD97A4316877C7A976E5523BA4A9D -82F6717666FA6F765F51E414148A4666C293B24F6283FB94E63F9CE245CFFF5A -3C6B620EAD4BBF2C45C1CFCBCD758DF350D0CC4C972C72CDF4A19465BFBA4E60 -ABE57C22DDC94E22A4A396A3A99362FF311AB63EA2E790E0BED6F62AF8CAD265 -DD6923A736C427086275A4E2DBFF09AFF176D01D43F5229F311E0DAE01E57F54 -A8406CB7843847FF1901EE9B0F6B915B4D6A4DFF13F469AFABF2BAAC8F54AF0C -01F66A4169950F247441B5DBCB35D23A063FE9907FF9653BFBBAC43680C35791 -D2FB66355B28C577D8D553071664685A1763DC2C18074A5FC1FFFE2BB4E36525 -067A907027F1EA6303D866DD5DB69C4457C01FA0A1859C1C80133BAA88D7DA6B -E04146BB1C3FAFDB2B9E60F582BDE0E73AA446F9008C97BCCE66D53130A26727 -4C52271A6CCCAF062E550A4318C940BDCD0F17FC4FB5F0FE8BE15311199852C7 -20 +642939D8E4F76C61B2FE966F4FB55319873127C8EEB05732A1538FE03EC2D8CB +9089DE328A396DAB3908179FEA2FC3F2ECC48593049FD23114A04B474FF4FBED +4D3B8835148CCB742574F4914B7201CE41A57A42EF61099509E5C42B744611C2 +B40581A6BCF6FA223E5B5221B8BB16AC6EEE3774130E121F23A04E1548F58899 +41C9DD31E720AE7392E4E2CE0ED4B691620CDB0228D3BEE1F4AF4112241C74E5 +89C40027D8F25369B8F8815BB2403AD0E662895788B884C37D5746AFB596D64C +91C4B4AC3B860C089DBC08719251578B4AEABE5119CE4A5BF7BE0FC5847A7BE2 +82EE4F04FE7F67A4B02B73B1E6D69803B856FFF88BBCDC4BDE933DA0090E3D24 +5E9F11C18394EB1A69A8C648793D729B3C76FCD4817F0452A3CFE4B47DDFCA2E +8A7987C7AC0C5CDC51D42A0AC709201FC4858488389FD39C0F14E68C9E8E918F +2EA7CDA76FF8E950004610903FCCB3BB4523F508016865C0F3DC87ACC363CA71 +981A1B75907A3348D8C35E867AAB1E024F02C1194664E2E4A8354A37C872726B +B6D473C2FC1907459E9AB67A223242E9F340DD0AA85370070865311AA1AF3E69 +BC3C286D23125C8001AC764125DA2A007EDFCAFC23AC17047F115039CFF7719D +172A2976B25175FF34BED0486DAC13B3960F7C82B3F40179C0ABE42BA0DCFD22 +E82E6B47087D860E7C001B9C77BE65354EED91B802E16E308E0EB449449BBA69 +BF82461F824006BA23E5DEFD08AD630382AD24F5820240CF266B524629119A9E +568FBAE62F7DCA9A8E038CC470C3D40F5A28154F71D49CF3376F12B35BDB5103 +43CB5A77CC06D6E6568793DBE6F2F5E790C4C61ADD771886C32B343F770EB898 +ABE5830F10E08855F2E3710BA7A7611BAE785B16A17C7C3E96949BE7E952960C +55F85782937576D319FBC8D015F278B33191D444020510CC857B80AB9D2CBDE8 +A097E47F522EBD31BFC07E5D62E11349E52EC30D934277F52E627F01229CF3A1 +3150AFBF3A47521D33F6060FAB19F3D5E572DE196E4B9D6B07C7DA1130CBA29F +C20E18E63979ED97F7CA6D4A0D5E35AB480DE427A3C7D98189E39650F062BB0E +B603F8C4276237F4EF1A117AF66616DA4394969FD32C9487BCD3BB8956CB261D +A7B6822762ED2CAE7EF809021DF732143796A0A220A43ACB23CD8D019A63BA65 +3900405988F03B4847BECDC0BF96E6F9DF339A32ABFAA8C7DE02978CA89DD3F8 +22852CBC2A1A339E5E5928BB1F6589EA13F66D07C38AEBE44361DEBC8D529B5E +E05EE01DB98F53E40A15A5C524C87F2A3F2238AEC054295217406B5569D0D183 +9102E7B4F63FF0599B1E2F4D4B375FBD84EE0792191AF7E6DA7AB1208F422807 +DF6A76606542430AA6A8CB8103B6C2AED2981C3C32932DCDA258C2A4EE6726BD +546DED3A25D153322A907256E3D47AC6DBD030A4950572B5D092BB7BF44BF296 +3D2558F21F2D02076D1FAC2B0C3055A32127C56CAACF3ED83389B97F5CF85B99 +13F17A8D568A24FCFD3A67D77BC302C2C3BE864D828F82B1C0266DEEF26797BF +2BB0BCE4A90C9BC5936576CD13A3FC68A3E77F1496D64E35DAEA8B7034A4AEED +77DC6F2489AE7C5061C6D26D132D640B16A8597AD76B4A10F1F6CAF0D3D03488 +1D43FA6517E4E3403B9B5DE190233A21638203BF1E26B4141ADCB720F6CF0DAC +BA2797A763D3CCC235BD8E824F76D7DAD10EE1D81062A15BFDDD2597AFFA9785 +38ED014803582AC7174DD9A3CEFF6B1853861BC26490C565D06BD40FF2574232 +A037F6CBEE39D142B732D76C5D3AA9ED356DB3F32CE17485E0685D25228D04B0 +9ACACF2F45AA22B06C885AEE6B688A4413F78480B2514C9D8F0C0FDC1CCEA424 +055EA4F21C58C11EEF35D93BF4FF5CD6CE5F6D5086EDECE08A204603D21AA55E +3BC356F129216C45DB39DF5D073E034DBEB3D9FD3B6F3FC1DC36DE953B614541 +85865A1FA68CE5F33609C13B34A6D61E415631B863FD8241B7B648A926AB4B4B +BB36F77618030F0F12CA2791A8DF77CEB70B3D20213774FA778B15764AAD214B +38B949DA9E1BD3CA9F35CBA1B5C165C8E7808B054A8DD3DA4EB734BB6BCE9BDF +E26FE758C8663F0C0A038BAAD033DC61D5951386D0CEFC4953DB117A32B3E7EA +2C314B62654F2AB0CF5CDA47DBD398A0B24F68BE7E96F5A1E13997AE9DEA4767 +06E767E97559883FFAF99DD954BD92E077B70BDFBE7EB412F97E6D5EB850BBBE +614C94A47E0110E17945EBBD89514A0F466A491A553D2A1F4E45DDA45BD7E242 +71F72A3BFF7B816205E7E9070EBF97BDDBD69D6C7BE8195A80EF00A450BDBE22 +DF2DC92689803A21A6069F9FD0EE1D21B1DAD0036B750D80F4C27847E49052AB +6CE3AC50933D6ABD597A77F608F681AE3204AC5EA90DF8D94D0732A9CD36E186 +00B3FCB742A1219D124F64178DECF64E9477417A5768F7A35273785626C75F06 +29E8F8609574D3B1D11DAA5C31D971C5CB4F008A07A50EC88EC3A6BA7BE34FEA +BD13C6E4297C54A68D77D93F1D864D07D46DA3099E783C10F2A1409782A7D358 +D2FAE601C33EE893769753A996F9C533584A6DA1016D024E3D1A4795EC82E718 +A969E496C1768E2D109A03F19E109F26E2A7330436D63466BBF722D5DFED0C6E +32727F1C909C7D904BDF80893366E07A3F50D50B3CEAD62CA5BE7BAA499793F2 +8D31619270E1013BB8593F12933C32F1FF25939D04C863B9C13A9681CDB0FC97 +09D987D476B87143F16C6CC687C073E11A7AA9AF508EFF714367E6371F61D88D +C48685A861A2CE5876781D9E67EE1AE407A4583C0F787BCEF96FA3AD6ACD7240 +0313B2712601C71C3A3B4AA2FF1C6450C83311823F59005EB1F533A9686F575E +10A2F86FAAEE062476FB0F25B8A076568785FCE5C807F6AE452193E030CE4673 +582549A4A79C62A4A9D881FE893BBBA0DB9D101E3ED230603AA987AF453DFB54 +4A9C5A6AFA92F8FA0E9C649BA8791106C9EB84EE57F85E710D5C75BA3F50BFA2 +48C3DB83E7CFF4663B53A1225FFB08F8A73768EFA641255A1F0F2400C901EB07 +E3605CFFC5CDDFDA6F32FB05F1E334FCAD07D6F7C5510C3FE556B598C9576B6E +8BAC48BA0E8ACEDD0437225EFC7617336D96AD13853FC2C14872DBF3F59041ED +D94EF2FD18DB0BC4E0B2EDF8374A04CFC77FFAF95CDEE4A6F350D5FAB91BAE8D +D3BEA0CD0A5CFE82868FA6B9FF1D824B084C664F2FFA69C59D69786966764EDF +11E12F692EA4F9AEFB94BA8F7124E0A54B40A27B5EFD3F333FDBFE1823BF5687 +3E2A7D9828E58EEB412AC9922804E470E449F7AF100C8846DBAFE581DB3D1EF2 +603144A62AAFA7DF9FC925FC10922FD9264C626B83D0F72EE045D831D64A3ADF +8C89E4571C97F1D90FE910FD633932EFDBB93D72CDCE970DDDE89DE05074AE47 +7322CC2CED801E4AC068CF0900F2C89908B03A79953B640C2995C37CDFC719AC +E1666F7C33B047F86A1D8002DFD34F544DBFDFC8E8895CF7B76BFE065C2DCD65 +77C63FF35E1603053E839D4E586BD3D836B8F3607A80126FA4A7220BED2A81A8 +A536224F9A82B912FE4D04F2552ECF52D8DE6C756A48F9AA1846EED1C7EAB7D5 +FB3D6CF1B5B9F5B5622AAA0EC8ADFF7B648FC7A8E583984839E02CA462971C3B +88BA639FAE7ABC0A73FAA490C92188981045BA68705C66DB5FAEB10CC8B831DD +45AD8677682EFEDCC0F04C09A9AF365BD8538978FA47ABA7DECD6E30FD770D9F +7D19A1FA0C0D126491F20B0584E6E02806DD56CA4F04282549E112AD77619DB0 +536D2695EFAFFEAEEF20360DD93B404A8626DD27CB904B306151845F8E649C9E +93421279160215EE7A3B275E5AE99F2D4C8540609DBB9B4D084CB93817E8090D +C38B0755DFFDD48B03F15847250C3B0F0D1FF0CB8D2B08A86D6755780A7F244E +04E74A3A7F65BA429A35CE856CD858E0E1D28B93650FBCF8B68BF45D5CBB79C5 +B8F147BB12CEB2B198044576D54DCA1E5900C478C714E35816C6C72F49A7B7EC +52F8021E4A52938403DA93EC8766717B7AFF436EA6CE0AEA5B53DD1593BD4C0B +A1C69EDB97F09FAB01DDF697CC803F2E0C828376FDB779A7A14D90BFA27064BF +9F76EDAD9159D3687AC5290E3AA97FA85B7E2D6D9A93D453EDE90A3DF2F76D45 +2878AA74C3BF40268C7BE7F17BCCB0F45C5F135076188EDC12BD22022A391390 +6D8C4AE077EAEB4FBB0A7D4CC57435D0BD5B2C96058D7F09F14E1EADFFF53D9E +277BF06C1AD687AD2ADF9E8E3DA035375E5A1E2191273C22498308A3F3451FA4 +8F9694F3C459101CF5A57AE16EFA685DB852B3CAE3A8EB49ECC55EC76948BEBA +AFBD31AE0E475986319CC070F83E5419877E90449385EFD6085FDE79F762C2FA +8B7FA109126EB97BF1714D1FF975C0ADE725846556E6AA0F8CAEF200D5EE897B +EE3F73DD0EE5E506B17E562F173A13F01C7A35E9B87A72403E39884ECBA55A54 +18E98868F7D61512299A63103F5ECF110F7DA4D03E0B993438037DD8E93D6C9D +FD36435A7625BB47CCBD58506441D07FE1A4A0B0EC8EC80DAD4DAD8CCF11FCCC +D7DEE863D8BDBB2AF8BE49FD5F3A2A0169C7E9153BA07584629114BA1C0AF127 +F8BECCC41D7CA8F91BDFD4793D2F659452671DECC917E219A63457DF50AE0E0F +A86B21E595210BCE3276DF47A623FDCFE1520BE11CE1A14DC590F6DAB1396A30 +EC8790FC9E59915B52B2773F96D5ED0226F8DE7E480C491BF6AFFC3AC48625A6 +8F6DBEDBABF203DC6970C1FF4A99F11EE2CD0BE08A5E55D7582A02E8E790E96A +D1D4D9905CF1233210E607D880DBE8101EE6E00BFEFE369DE911C533D9C5A4DE +727468362CBAB14B33F9791F38B684748BDFC163BE9A859CDB8544F0D39E98B2 +37C237DC3D7B960594D2E5126A22CCBC46080D8DBA29C56754C9D87ACED4D3AC +D0F4EC087D3EE26AF22132923B392B101F38F9FB5287DD80B014215F488F7BEE +3644506279AE1377BBD54631803B4906A8938149C2621D93ED30E0AC2A45FD6E +0BC9880E98922C5AF11631B0CC3FAA8ADE80DD9204090DDB4533E8E84A920100 +1182C2D8A97A202A218BD1FA04370470F43E25DEA8E19E9B0F7CF346BD3FC1D4 +81A3CC42730846515831C6FDB94FCF6C4F557D20986D0446B5F0913C7EE13822 +F1458CFE602926A62D58D35693C43C916AC10AFAFCF6337C52C12A32A076DEA8 +7E880CD509D160CD80E0CA05F6DA3E50EC5ABD0CF1F1CF725B0E07757B789FA4 +83B1C943B039146494101AA9873BB8AC097AF8A1C8664DA5A5A6523FFA705E4B +CCBD20A60264C16F2A7AB67CB2D13BE8114BA90DE976A2762B9A1526643A3686 +08A6693B967C614638A6AAF50FBBA847FD311A50276660C0E6E29B57981909D8 +424589E0C602293053C2BE6A56CF51BB1FBE97A3BB9B1C7C845DD3304D812507 +8FB9D7837593DD0051B5F6EEC11AA80888D247982AE871C4D665F646C216BEB9 +2666546D6FDD4CDD68924259109AE202A79F9E317B7DA63CB83DC8058C99898A +75077910E0A42A1B7EE0E8C6723CF6098EDFA7523776A28D985FC8C46F412EAE +E1F8DAFB90E75B2EAD5D166B03C099EC19DE18BBED2205C21924A6E2E72272CC +C61EB27336E3C5A0848F9845A15873BFEAF4ED8E46D7D1E53641A7C8C83B3314 +6D8D7CAD912E08DCF730A260F1B6A9874B128A9F4E462F028DDE01677069BA70 +85751970D15A28006928FD882041684AB99E9DF145ECE51664477EBE16024C02 +AF4337CD06997B6D4C62808AF0974896FA2FEA86AA3B15235EA9D79FE96E6A7B +3B6DFE839B9C0692BF6C2D216B1F7E06B70F6C848CA93B5F524C4FEBA16EFD86 +A17FC47FE825F00DCE060D1557CF3A60254143E178EBD0462AADA68F6A23FD14 +3E91D6EDD3CC038AE4E7FC74D3A7D198AF912F61F84F44CA7B21DD1004B2FE6F +202D720AFDCFD70868FD70C0EF5B40E2BAD782EA73C1305961A572955A0CF859 +2AD779B170CDCD54FDD5061E5967BB4E62856C7757BFB5F4D52344BB8EFFE87F +9FCBCF9DB6CF9EB008CC37695829E2738A04E6D20E16F7F42BA61422D0BC8301 +9879E2D784FC263A9FE0C4B0F95FB29E919155F787C885DDBD1F18AB49EB3A12 +A1A1A34A389673F41C08490E463883EF637429F094B6013F502AFC084DBFA90B +EE7E8561569D714938F8EDAAAC4339583EA908BFECBF86F56AF4E5BA1D4DCF51 +ACD61EB7FDC8957A0D2485313EEDFFEBED52F519A6C4ABF72AF5EB3EF7813FE9 +5B04D4D4ACF29C3256E2DE77A752B16F905DA2F0E744C587FF36B3E4DF350095 +0C780F7BC60FEFB63B1BF86EC400416A28DDD5460E3D202FECC45A723CAB6D53 +06FD4BA81441B7D8C254F66CD65446924BE54FEB728A78D5776E8A4AF107B75B +D983E3869D745380B7A4904EBB1A9E31410AD52A1337518DD33D9ED47D662BBC +02E293A64D6E4A464EC44AC5EF6FE0BDE53343479928769706D728695E112D85 +522334A6369D4B5BCDF411E01F8462768A73EC1A1EC0EBBF2AB6D6F93FABACAB +DF5202AADDC2E940EED9AB910801EF95DDA016A3DB26621CAB2EE249A540BEC8 +2A95B709DC31F890C82D225E1AC504F74805F663EB4322FDA91EFB556695031A +D65904BAD452B494F6868F2894C4AA3CB8A9F44571FBFDD2B48A331070CB7191 +12B6022A8470E7860589DF6D594D62C88DF7D70FBD19FECDA8681F7C51161D2E +572A100D0B29B3F128AA94B195A41F51DADFF704147E97734E12D09C0E00C375 +74D22B509E9B28AFAB9892D48F8B0AEF0C64E765EB3457C0E7CB8ED7872C6C88 +B0079087C8DA629AFA529AAE62267823F7A7C264BA93AEDE105E8382C4A79413 +12DFA7ADCDCC1A22B722CD23BECAEC2DAA329C8D3D261E6721457AE4D1996F9D +3EF8E9569BC4CDEEFBEAC527C5EE02DBF60C3A5E823CD314862965ACA30B0066 +F69A82B6AF6F4D4FE3364DBE0140CBF62A643550E2C113D52C8ADD97B4CD7B45 +F30365D65478481714B3B35CBD7A90070B2FEDF4BAE6B6E9AA4EEF2415DDAB03 +DD90678CAFEF588BF92270C58BC46C3321921A900626287706575A7F755672AD +1AA6F7015479E26F0FCD3E4CD4F790CE7AEA1765CC4C5960B0F548885C2FC6C4 +F23E0BF2473AFBFCA4ED207456BE63C765B407951A68399F2DA59C1E3F2E6CA4 +8BC2CAEF5AA0A046AAE9414A43DB889881A8C6F3EAB6EDFEABB29F9105147F0B +A9069B65827F2BB5A7A3DAC2803B279F2162354923CAC770CB915162693B4069 +AAD063253F9325ADE55BFA94CEFDF62D6AE0965AB35BFFF883589FDAA53EA0A5 +465BBCF81595BD1D299778B7D5EDF4052E86251081E132AEBE53E7F6374F2739 +702A14FEE9BFB3D374761E62F9043B24DF318F8C78E789AD3299F97113E409E9 +2F092C72B814CA79D1BECDEB2AAA1B8CB85B75B2CA6FB4E882AC118588CFCFB6 +2D1CDE698B9BF277F6ACB296871771A225BF812BA3B3151555BDB5362B1F0F59 +997D295FF00EADBCC528AD6233296DD472013B8190417DF6CCA0A87AFDBAB090 +A4E40383A6D5FD5822313907F710C9F1C844A3CA5FCC568B6F43B38F772480BA +BC64CB822CDE771AE4C9F58CD7F30C31E3DFD21853F9DEFB3F5DE7EA5D1376AF +A6D7DE67B57406C36D2087EA224DDD2526E76640E0ED66426BEA8B26A45AD00B +D89F9D68CE088408D0CD9F56B33BFF120CCC9FFF0F7A4EBFFAEE09D1DF06CD2E +A3720CC3236B28AC3F0F0F74B5BEE74A8F452722B25D4E629DD97F01B829A7FC +1F83D10AAB3D64782C3ABDD32F98CFA8DFA66CCAD02CD69D68E5EE364F327128 +C25E0D860ABA76CABBBF3981F113EC2E54B7A5E829FAA2EFD526BDB6726F9469 +D7BF91B3DF4BBFB61F8FCBBB322AC4C7DB15BF531BAA97E3CB808CF400785D95 +11552504FE80410C0B5B30FE31481DB159EBC4FC40EB6F5C098F5D9001A76B78 +013675B443F3E9D3F1EA30097F01823A2A07C92CE535FF8DF4B1AFFABA291E70 +539A73904631054F9EA220B6206A4F2CF3DC909BC5F3E49035FD391529ED1555 +ACBD25AD0209A7600F05F6E0C7A23509B936A01C40B04F64F7085292468CA32A +DAA568A3AA4C798FFBF122D476FC954F551D9F7AA995939AD401774CF4A217D5 +954556B69BF9AA15962CA3A266C6DC34FE7F21232E07A450EC6E7FDA40C6BC34 +D15E52A2130A321BAC0437C0AE6CEFD3413D19AB436DFD6178D434C759150ED2 +23FCF3F9D2AA7351DA3E841A5BE2CDC0208F69032F04BB157A79A668DCAF6A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -1678,203 +1675,206 @@ 36D7113C9E7417E647E1FBBB332C0B838B6C082598D7C606E50D7E2419EC543D 73E361E9683B599A2C1050C5B73BF815A467CD414AD37F41BA211B4BECC383CE F8FC5696278F0AE855A1101E512572FD3F30D60BAE1A0165A568B53BFF23CFA0 -1CB2B26C973E5A2E0B5FC41C5A617CE7773DDF19EB06A6472357F18F5FB5B813 -9F7D3975EE660040E0A6005FBF0EDAC846F282D26F0017681F4BFB857C85AE34 -484871CF8D84C81D069D8A1E39F4D593987A2310D39647AC136EBD7A3E3F33DC -5D56C33299287F3C7D0185C63C3A461DFF50DDDF11B60C4F5295EAFFBDAC7509 -876C1FF578FF9C735AAD06B20557CE5145E26D92B5D243066B90929ECE3699A2 -42D917A060AA52156666C2EEBC8DAE499A76517D1B446B248A6FC4CEDC702AB8 -1E7EB23B316194FEE46978631540C3E03F894A7B1F455AEF9B68F03B60F65C53 -1D145E11BA5A69005CA707CD5A40A6139F79E9CE2358861325CB6F8A415A581E -17894B6015061EF692007635A2A07B45C5643B472F5D643E9370CA65A9600375 -BD48A9F386D97E7EF73E5ACDF01C002D6EE4DBC308C6DF6A1C245AB275E82710 -5ED190872415C399EC6EAEDFC8112DEAF3A676CF5EA79EF0ECC1D0A282FD25B0 -483A086E80D6FA1FE0667F9966B4F5210F4795109BB464B9D9E65A4CFAD7C76A -65C58E1E17410AD287C718BB31F45CF07DA667FE54D204BB249CA405CE1911BC -DB78A66EAAE856F78B9E845F4A2308F26A3FD357754C7FF2CB3E67620AAC7A94 -D68FDBBB4CC2EDF8A16C1CEA9CFEAB6F365697A2DB8C81EB1AB24AA61B2B9E11 -1F14AF667211FE2EA12A3752961D4703837DBAD5FD3B166360E3030E4551B229 -9877545DEE34797938D735C433F6D1A5DBFE270697080CD2A37A0CD58FDC2709 -2D0C0DE31EB495BA7BEFA3EAC8684AAA7335548B76BBDB4DD582363EFCF31683 -6000D53A40FD1A58DDEF046F0FB6EAB9CC1ABB4EF43BE3290BC5FF3CA697058C -467D8152088D39D43FE419B827E3C871CDDFA5D45D187D06CA3AAA955FFA82B6 -493A56CA4C09B8BD8B81B2708CEF273DC837B3FBCE3C4F65108C3485EB3B1A45 -FD8C8B349DE0E7850A34D6310E51DAF1770D851EB10718FD76224ECBC0743903 -6AC4FC0B2C9129FA25BDA33FC2A4CA79DDF407D6779292C62461E803C999A03B -02FC759C1AC63A85BE4E9777CAB832739FCC2D90E042B0D45417DD1E60A0EE16 -DDEEBCA50554BBE14B80B55FAECAFCBD1D06EF02673AC032D935B86D67EF2182 -FC9EF29733413073B7C8D12B2D8D2946F86B59F4B959AA5B0E67C3466BB68C83 -DF22FFC1A1401E53406F11D1A37871991E653AF8963B7811268DBC09A81C2CBF -F923C5B77FB4154A2B639FE3A2C0ACAF8CE91DA065AF06B5B038199CF7AFDB0C -849F57D9BD583A842EA47DF51A4E55636149C9FC96042B25C1D58862C9A7BAF3 -14E7E9CA614300125C7402CF26EF183AC60B5492C5B0434EA03EA166CC830A26 -341D91F19CE201A56F6C31FBD0099875C164824B4E6A20218CE74E70B924D73F -2597FC32271966F0B0CC099C4D80D291113AF321CC73ED180DB48ECEA10F975D -B6519F1FAA8B24A0851C2BAA1725E3EE1BDAEB900F354179EACFD9DFC4D84C9A -7CC3C400B42725AA7EA24E69C48A4E909E1170A484E8D836EE18B44F765181F1 -240815E42C4FC2ADC7811DC3B4B22450A410DF068FB76354E89518A4C22DFA78 -87CAE6D8FE0AA3C77AE9AEB76FEF037622B7530539FEC470BE8E76087772E35E -F5433A47B031CF604B95085B6DADFAC82391246703B7A34C9A14A296B29D5635 -FDDC90C029E76A042F505114CEDE5172F4261FFF4A4BE84A7A20CC9A9995D292 -0DB8BC24A9E50C0CDF1871074F86FFC52216583DB2BB7812A768C04B7C0C02C4 -4ECED1325EDE241AA7202EE8B39060CB39A29F71444A8296C71BCE0327D4E439 -A3752B13C5C32E88D3E298137A0C7503FC5570FBF79195A7B656485640209E48 -688663702F80021E9BDF9769EB5FB4A3935C5AEFA1F326DFFDD8C8B3FE77F74F -7DD1CB7EA7C30BD10464F5E63333863AA12D70C1CAE49A0741B3A0FF1BBF665D -49A38693258FC9A722DF2EA1E220E66F8225D462AEA02855F32C598BF160643E -38D7AAA68789A9931F015ADACB819F18FF061C136E8BFD9FE028508AE8871566 -646CB448BC49FC14D2B84FD3781870D2F3C78901A8352C67BF2DC8292CB90013 -F9B1BA4458A4A20F119D4BEC340846CA83A57685278E8F864F561C3EDB1D4CF7 -A4E5EA475721E33350EF7C979AF260A0BD6B790A0869D138EB8A730F2D5701B7 -7AD4E3CC0D90FEFDA2296FB036CA35F9BF11DA136DA4FC094B7E2F767B7841FF -7A7C7DDDDC20C43B293EDB47A6F5C6210200B05753B7EF7A6B9F830283A7D7BA -2A86036CFECE1B8DF87A60A920DD49FF9C6D2A74469DE8416FE86B1762DB624F -FB1606998C2301214F13125C3F5FDE94D53BB20ECE1AA75D70CC7BB7A315B704 -4CC3557F9AFC782BF947292D29076A8AE7C52D8F01372FD207CF90870EAECBEC -D9B48039B2D3DA67DC479AEAB7B67D11D4A2712F7A9C3CC81911564F43EF3AD6 -6783FF1DEB9F369208C7DC7C49EDBF9CE337DE885D70F07DEE03239562446635 -4603F240D27BA90774A102D009F77DF7FCA23B447038FDE325DCBE35CDEF04F9 -56075BA6537DABAE012A088709F0186630BB2C756F9AD4826836D4620D1E475E -F441E5EB7C04DEAB39B06ABC33954A261AB1E9282EDCBBA9F62AA5A7096569D8 -3A6A782CD1F7D854D9F98178A5AB443F09EC7A0A8CDE31A9D1F1E1CD92AB3D42 -7E5E2C137397E8E47D182A9462105D10D7F20B57FAB1EBF65B63AA09030C5090 -DDF53E4371462EA3607831D51364DDBF29E9D8B66D0EF27C4F858100D3746039 -A47DB60BD35200049B80782CFD3E156DADA50ABD445B315F26DFFBDCE640A0E6 -EAB0B79BF78D8F32B9BC288FCEC94AD49FE622D24B9C8A7F1921179976C5E449 -601D34C7160B9D9D342E78D0DA3C00ACB48BC78267E2A7D6CDAB86E06EAC9E99 -E97D129DD5798A617E3CDEE079ECDD29D2BBD4548AFBB4F6BD5F580EE5C7C5B3 -15F42A98733F1D10EACE99D9E2E4568C245F3C03A243E7723C875D275D244F86 -97126117319CBF89B6D57159C0C97E4281734C12D6DA5D756E484AE8EC628AC9 -78C8B0E49CF86C2568D6B5750AA9E8B3BFE77B018DF1AA8632302097885F264E -385DB9C64DC178A31D2269204C78875705FEB7D845C813639739023CD378FF6D -28AEFDFB2B30640594E74BAE5D665C7D464D6346C316F2C82DC088A66183DE9A -365F21267322440203E832F52FF1050AD3661B850CDCFEAA89266E2010164EE6 -49B6C049DE557787500AD1EAA3A4FFE04813739B93EAD90D8AF4A901BD7D88F3 -4B57284EC8A9C81DD2C74E8BF9FC97B06FF5885E2296C86D00C7E6C99928E403 -8654E11820AB502B19070D3D4A1540E7F8627E3F1C921427DEED9BB053D34039 -3086BD5D33F1854AB736BA455479D9184DA55660C162E9922FE3C6D332614771 -B50D6CBA54AC8D901BB425A2E72BCF38F406E94A2AC948C9028229C371660FA3 -B2CE5D94D82B5559AA234F98747E60DFCC6CB50074584D09CDC1F122C1A53B12 -04F0E28E635BA0850ED6242200FED58C7E99B8F8BD385DE3C616765B66B7165E -1B088557DC0C20A107F805F129C052CC6EC4654826B6567AB7D9BAC23D343BE0 -E030E86195C3576E8FA2F005843CF59555B7ABFBF05B07D0E34E6C64CDFEBF64 -3147364746BD2083CB68B30C677BE23C278918A73E955DBE0578C42472C4060D -BE090E710A84F29AF4576E4F9E5F324B71B75C6635F52F8E68CC98FCEC5A6392 -8812A856BF3D9975503089AB0277594D85DC4387C3FA402A3FEEA2F3016F0303 -351146DE4C2C05F857A8172E78458C0D906EB513AC04634C1ACD171E09440DFA -BDC2BBCF0BE2F17258DF3E580A4C07EF36A67FEE2AA8CB6F21359B223A3C1F0B -D4BEBC10F1F14FDB555F3889543419CA01CD5FA51AF80BB6F08C67C432880FCA -5C922A7689EE4F6117D5DCD30858B0B9ED62F26167CD06639ABCC6C8452239E0 -C9747A97B023C51579B8CE639DF0B1F932D0E39FE6C0CC8100B21007AD07800A -2A68A95A68DACD1E311952FA9FBC544BC1180EBF3FADA486D8A8FB310183FA75 -A0217363F38D41A2A58B783ACAEBD59B75C9045359D1A42A1821717F7AEBA454 -3CD0289BD7474ADCC2F76EE6A056EE469834A7FBAC024EB49ABC18C1C96706E4 -CA1D426A6548EDA2B8A51DD4DE9F19F8B80B21BD41B3961E9AE59894FAB49C72 -198284AAD6D067ACB681798BFDF4AA25E550EF0E5A1B5E3180643B119E041865 -30E3CBBAF84F339FC734DC002A4ACE57CBA33AC903033ACC2A56319AF2C2961F -B5AA4B4E6D58D86D18EB268A9B4E806C13D9526D00F129E700F7561B1CA11F7F -6D0516B05FBCE8BAE2F29A6E75104061A253CAE53D6E4E6458BB45AE5EC7D8C2 -1FB57B4B2F8D1781808CDE1D549FCDBED939A07BC30F0FBF40C48FD1BA6D4CAD -97707201F0CF12D1B15E5C04F99E37EF95C722343DA6D303D1821DFF3BDA65A7 -1B86B0399FCA317CE0B92BF144515F332A40707676EB91B9E1A8FC283678EBE7 -16E85A8F29FD9197937D5D4900D8BDF772399E6FF176520E0CA4824969979C3D -CFCE27E0B95D9E9C55007626E9BBCAB579F4371932BC707A5E6D6F375449AA71 -3DF51A75DA2F7EACD19FB990CC40428F089364511C47402471E56159F7F20E64 -5DE1BDDAAD025CABE92E9FEACA2EF5AF5C85BF7AE461138EF7FEC3066F42C825 -E0AABAC179F9A609641AB2B1C0DAC92D4C2E8FD882590135233E7BC37CFF2DA9 -622F8B8A0946E32AAC35A3069D0FB90BD7B1ECDFD87D07DDBEE2857C74522BF4 -EAAFE072801F32374D3FB53A99160C3A3027CE745EAA94B3160D2EE677B4DF7F -D51C49063A552B5E6FBD03E78213EE97A394866DCEEEBB6308BB4D34B7F4DBEE -36FA3514D35254AA86CC3EFAE88C3F30D3C38CFEDCDCA8E0CA34C96145729C23 -7A2D623AF4F40A254C1C9DDAEBA83F464B7832423864B63F31AA58837C920804 -011A9768A77E87DD0822CB832707B51E840E13E06E6002DB41A3C9A6B6536146 -62CF68AE69F040A09E09E2AE5ABFF2A26D606CD08E1A180CDC1E439CB5C10B98 -1C6117987410DE057BAA2E7FCFB468F7115BA70164DC1DAE8EEB95C46C65BBCC -A63461B170D55832036A9CFE1333C56BBEFCAFDBD1EE68E5BA97E80C3587910C -47154BA2D06EF77AE06CFED0716D0F4A82932AE35AA4724C069C718E7A974DDF -386016899CB303777F997EFF71A1957B7BF017266C49AB7668C570451C1A8614 -0E4741C7A8BCA2078463A1D131F3E75CBBB575AC13FB139D01097C32FA14DB10 -798B803F36C905A5434E3201AE098FB39EC87294676C015C8F1E682C4499EE47 -7715B8F336DFA57D50C6C307006A9B734F936A6AE904B728829B3800D08EF5AC -99A90FD030FC88053E218989D6914630F711CA04FF17790130953C2044B3B51A -19CB91E5C6F671FE54BE8513389A681A32BA96A2184DAE7D7EA2770FF366CA22 -8536CB888DB331F9C069196BDD7A24F51A1C08693BCA30398008FE06FD01F251 -858D94FCD90870940E02D5CBD987596D82133D0732D12D62FAEAF6B27AB3839E -3BD4D724B33D4C2A5B400E929E6292EB3D54C7A256D7BDD7E5FBBE4C48D59E75 -585F946317FE740A4C835EBE7A006E74FA3B81D971104E6E87FE06B2DAAB9978 -35F1A8410A92ACA69548E84FB24970BC74D751742E8839C8E048462C38467064 -7242571A5804C1E69A090810A28642C144A6237776FF83601301B56E56C25FB3 -433DF2B03C8FEDCF6B0CC6F303F0C02E5F680A909A35C9BDC54BA2FE743AAD43 -30F9FFA5B9D073D840725B4C4D20FAB7B1C1F1AEDD9194DA893820C7F7DAA694 -68704F954ABDB8F27BE1E500E054F7A39A6433A2EC8B0ACABC41C07B902BF4BF -CC2E9F151C9B2F422077A99AA9E968C5438D4A1B11A55F8A1AE2633C998D6ECC -2388A7EBCE3C28147E8D867C2BA32D05C4CE3956C2093045473531C423FD4767 -BC1E5CC4F5742D262FCF797DDAC8CCF9D93C226C6E4680E614D7AE7D455B3632 -712DE0B77A46D6D634EE59B47D332766B8C2CAD4EDF3E30A3383A65A99CDDDDF -FA835C88D4CB7ED8FA11C3915B3DDD2375164EB617C1B14B019017BDA88F33F3 -97E717C7F4C415B1D7DCAADAEA62FEDD19ADD6BB14419EDD81740CDFB4AE3976 -F0013BC0574AE73178CA81CEBE438A847A885E9FF066FDC7C1AC4700283F404B -3869A901B2DBD29BE3E406922FD161496ABC3C17A094706517B2CA7F37DE0675 -4A6D6B9B893F98BF45137DBB898654F9DE9A4DD0CBA62BF3D3BB64CA731D075C -91F0573471AB57FA92350C5C685AEF0832AE4B2B6505C1361D4664BB37FEB482 -79B3E073D9CA0018C658E29E6C453ADA6A09B83D85A7C69814F439C96899E977 -8D66E375ADD165785106098FD562E204D9BEE5720D7AA0945DCD54EC39B0FA45 -F22CCDB717B137AF0472E1574CE886A6A536ECF5D6E56B02B1C9E824D66FC7FA -3F19BC401D3B79303B140C57775A3ED6A2B2731901F3B1DB215E6FA70BE03E7E -AAEF27B80B1C24523A3FAEFE16E510C1CD4BBA185D6817494946B997490420FA -A0F9868A42BEAD43395BD3D7AD45FD9CD8C7A4B8564587D3A0BD81D9141C5CF7 -D926334CB619FB45AB3E7A6D8BA9EEC58D5DF5DCB390D357DD439821E92B499B -868141358B5C0B99849BD7DB88F76119C83CF32D1F401A04C9D64722F3CCD410 -8AD0354234DEAC8916E88823FEA829F495F9AFEA7B78DE1C8A8FEF579F4976A2 -DE3F9F42B31B0866993643D7DD004D77FFC8D615B189B0A7BA4B11C0639C19A1 -ECA51D8C703FC01C17EA58621AF7815C1516216A90D4B88BC695547F7523DED5 -E46C085230B299992D46DE6CBAD5E9C095C42EC4F0AAFCC92C829758D4B76884 -27E48604749D7BCC57773D42AD2A8B759890536277A37AF23F261F3DB229E863 -9F4F4BB7E6AFC22A24ABE77886C05155760443A474D462377002F899328B8777 -1EAAA7809D6363F9BCBF1FC07A373829214BCDBB0902C1E65769F300D48A647B -A4E6DBCB93AFEBB315CE63072C4EC02B77CD57501135B8660554E51D18A08D4B -A2E78E3325AD08C8B0A24F6184ABD29242F05594C8A15D9E29F94D9ADF24D314 -55D407AFE4BD54B30EFB115091B1C261A2C3B504F1B47BEC757590445255B48A -D6F32E37444ABB5A63F5416423DBFB1F272351426B6E31CFE2E9672B83DF88F4 -0AF206849A3706D23B2AEF8235FFD2B48A31403F0AE014FB71ED0ADDD536C82B -A0A1A735423F1EF228DE2DDB3528D8DB5E5F501CFB13013CA491AD85E634DEBA -6AA2E2547ABE84FE25109997224EC3C8480D941521FBB5AC610963A9B2D60D38 -02993AA55ED964B4D6672A08343292D75F52EE8C6F2797F25C5DB17ACB8805E0 -5A4194FC3FD5529FF27CC9C2710B9BC8574220729E4E2C530D7817D814839FC2 -677720259841D034E5C449F42C0A5183B64A9DE959A40BFC7E76A480F65EA665 -2EEE2E558893A536A4F1E2D20B905943AE8CDB2BDC5D2FFD010375AA4337A75A -4C5C4A1BB5792E33AEDC93FF050802F521805F14D6E37365A0B3DA848BF18DB8 -77C99B5971F4B55E3F342DC7AE1FAC79DF955827876C5237FE22449DDF27A26C -AE32A85D051D4FF70DCCC70DF46985613E4864C9874B1B747550D455F133126C -BD3CCC12CE621638C42661EC231CE8D2CE153E143838C54C6F90D514E2D671DC -CE713CA984ACCDCAEA27F59B1AD73722B4D572784973E835577281A4C48ADB3A -D028D22548112083B6CBE43E6405158D3D0C4BC6C104BA72D382E96096C2BC67 -BD61A30CA0FB181D7C93782CE53DA7AB2DE1C1290BBAAC579A116137E9278245 -8572B1D5B9FC7A0ED4F3F55B79094A76A00EFD7AD167EC7DB148DA03E67C80B1 -D3D202E1C96B9F94499D896F8B975C07A25F1E75D7C69292C4F071439D52FB5E -8CFF4E333A9144F713F8D013828992D12CD0342F9E0701CCF52FCF584F8420AF -75EA7B4BFD6B3E9D8358AAC14CDE6A35D5C80E50EF63E1FE616DE7DC0657C1A7 -E0237C1487977880A4BA55F2A77A8723076844469F278228A4550C7590626C5D -15A8A0817887D3A07831CC0ECB5698AFB5668BA61AA099B573D87CBBD6F1C293 -ABA99F331285C688AB7DC85E3D25D39B6A5AA6A18699C0398C00AB0A65F0FA03 -2D996D834B88915F2B7225336A052FDE88AF0E4FDB08F959664C7647AB62AFA1 -0E03E94D1111CF809DD4464E663916C8E0CF5F293CC307D8CD1FF2719F26081C -8E523EDD8CC5FB2F8FC2395802440FC0EC2ADCDCAA72A75FBC011659024B4F85 -FEE2880A7E80F8BE4C538B404DF81A2122657D4D07A9EA53F6660FF757C377F7 -B7281F501EE7C71E486C8AA6AE5A22F7694F08E8593E926FB5CE60132DBDA6A6 -8635654FBD68B9B15E5183B08F8BC9C57F87F37B627463094A4C1597A40FEBDA -CEDF9F0FE9B7C34F67D477ED61DDE142B94AE7EE452C0C4FECFDE7103C3D4567 -68DF28E6CE328CB202230BF8D10691C0F0B42FFC2595B29F125B816EE0DF694B -DC0CDDDAE09586330591BD4E9C7F515F11B86C06C44BC13A79374771448DE9CF -829DB77BE22376CB5720938D5B16ACB959C52A2BFC6ED2DE07ED182F63C49562 -6CB2834F8ADD0B532B5E91F67F1A838CF979520485D605F684DF9D03FEF75721 -2DA53BA7EDDE557057D5B0EF4F476C8BEB7CB2CE930129EFB00DC86D101C0633 -B77585B6B42ECC2CB62758CF0833D9B941E9D46EE0CAF36F3503BCDCC7DFD183 -7D1372B9C53D56D98D1D04D85761E9DA026DA6F67A7821F9695C36185C577079 -2750DEF13CBC790A6CC6D26B20C3AB1ECFD15A376EC0388E2B21E9CF5EF4EDE8 -0637F7F0B069C910B7A8FB4A7A304791E9C7B235C3BEEC57C65DD6F0276AF51D -C7C4269504C7C176A361B468527DE2A3A705AF9697E16DD50ADBB0E84124E80D -67775545D05A +1CB2B26C973E5A2E0B5FC41C5A617CE7773DDF19EB06A64C2CF0F0637D8B84FE +FBEB8BA8C755AC8302734C06746251B8A35DD4CE918073012A3AB930615D39AB +9A6D39DFB9E17975CE7E0F2389D13BC641F3AF66ED0B4B6D62FC9184F48F8015 +9D4D51A51C6AC5BEE340ECBB958B0F757339CE59ED8AB0761E98FF7B02E0DDE3 +C4E11BD53D1841001683F4A918BB80487AA12E23975E000D8597A4B72AD70EEC +13A14F6C41973A73DA97F1077508F95C54B0742282F8368AB9B4FD77DFF97B9B +27BE5DCE47E49FCDBE2220494A0C4FABEBC926DE359660070BBB1FE92B0F6EB8 +5799877A9682068BBDEC79A122412E529076DF3FFF89EAE2C76F4E9F83D1B1F6 +B394E5F3A25A6CEDCA2193ED7D5831A898DF3B077FE4881792BE4F1191844BCB +419CBE04D43E8D1ED531CC7DB4D033B07DA64BCFDE1D3D9FC2CC33932EC2F715 +3A2D424CB60C4C4209091ACD3A0E12E39EA19748C5FB15BA2942F329E9E98BF5 +B97169BB6B8DAE6BB288142A074627C456D3F4F23539D309E4FC50D848724F02 +FBFBAFD4191C86E720AE8EC14A1EB8438EB057792443CD022CC02ADF3E2EE706 +A83A2B1EB430F3D6FCFC76C5A6CA1FD397EBE513872D78B38B21F638162175CC +21434D7045DAF1504B168D373EBCF3AAAA731D3F5F7924A372EF9874AD440E88 +59FAF76C354DA390063D037CA20A40DBA216F1C2C2E4F3409830E8C89EC0A471 +1A165C821421933BC4EC9389803D648F4694EDC56EF123FDEFC8BEB2EE2FA465 +DB359CCDE2EDF4CBB8A3AB9B0ED4EA8AB7B76AD9ED10B755BB6E888741CFB074 +F186B4BD5E25F58D77126B2E867090A02558950E0FFBAE05C61DD8C35281311E +6D5FC90F3C19BF6AAC7852ACD7A6C23BB7425CCEC4CA6BEA6E483CBA2EBAFDF0 +E83A82E10CE86CDA7C8CD4775665A7BFFAFE3BE4A853300D07686E90BD38A0A8 +82DD035DD61836C8CE369B2FE936880483554EC570A5FF29A0F723944E63E90A +5127DFE8379D9F1371207FD0A3F295F317F3F1F6799743BB48484DF585F2D3ED +BEE95EE42EE02F75EF0119F4C61C520DE95CC782DF9488B75C345F73C3860FF1 +55F3D51A6FEBA24EF9237BA1D85AC16E4ECB66F38D9B6C9B25EF7127FB458496 +7757AE47711B48262210385FA123AA0CAEB9AB37C78E34907285F930B9A523A6 +362DD5415C71A001D9E7C03074DAB5D3B3BAB45659C13E20093D0F56B2D3F889 +9445BEC3182112CFE9E43CA358C4DAA24F1E84F3FF28650B4CA7B1F36DD5433D +32E60A285B84505AC5FD4AC687BD4FA29E2AFDADEA3707ABF193F87C7C1CC2A6 +5D0068901129BBF5B5B33452C69796C3B3C00412D2174CC03131DF534C0913CA +0EC32A7D34228E1CC2A90732AFB04BD672DA8FFFDA3A0CF66A3B8352D98621F2 +0806915D35A0F1A78DAB265214A237D0A0FEB6FF4888CA17F160537FF4D57F0F +E0F08918E7234D7F55081CDB69ADB7226C7C93968F53787D479CCC0189E53E43 +470B5B026C648BDBC68A7DFCABE460EB7439619DB8DD7F4D805A9E9F32DADF5F +FC907E933F4B2372AFB4A0E71B6C99F8FD070B8E404803DA04BA304BACF7E9D0 +3998888B10A013350EE8544AB2CB0A86FDF50DC14DD4C7B12508B9B3C699F513 +48664BDDD1B59D91FD20002A20C090AD0C36F80506580DBE01B310FA8DA9648D +2542A7C69CD24596BE9EA340EBF1DF3E3CD5F69F97C57422FBB6E833EF8BC8A6 +5B9E26A6B39B920E728EEA4496D5510E64573EBFA197BCDD279A8FD920673EC4 +F2C4DB29637CA85825376AF0E6A9BB42306D8C93204350DA9E6EC7D905A688A1 +B210800833967CC378B622927EFE45AF7E340A847BF5E5BF6A0843D326243F0E +CD8C53FF338BC9EF15560E58923F49975F4DBB80FD0419B234EB17A02C82D716 +36375B3D95603022C11CF8D3E849007DCFEA3F96EC1F805EBC432489CDB08C0F +74ACAF542827FCCE89AB24BE3A3BC6E36A466A33E1DA928AA4EBB2AE55F6CFD9 +A06332B3996C282CD288D5A6AAE071FFA5388AB8D88D65A7179939337DB7F57C +315DFB81659842D3D1E4337E88B9DF0228464527D62C1AF0159037D454E82236 +B647F119C7A0C633CC4F2F6D07D5BBC3E5565CEF71321A1AC4915AA8328DF6B3 +2D091D8BCF4B3DF434681D45568C86A9026449CF2C3267F9812441D98607A6D0 +36FFE0C91A1639BD66158469A2359A626C5E0549FD06BAD1D0EBC6321349CB51 +9258A948C22937C2CB277A99AAF997D31B7732C5629D94AD7866B704B4A09097 +1DF661025E2F3F37BB52ED116A019907E76727279FE9F674F0A267C7D7AA28EC +73559ED90501AF62F9BE0A8D4B1E5A8A970709160F12FA954601BDA2B090D459 +EFE8A877F135837F11F20E2D298B25500B733FFA1357895E8F767B5052C6239C +E72ED4F5101C2F649F31EBF2052235571244E1B20A6781C10A8753E85C25B717 +9850B987DDF220F39FBCFDB7C8C669C136C563C3ECCF41C1475809497BAB2CBB +B8C6E1976CAB82A8CF9997FB5FD7785BA3E9F5347E6C2503A58369028FF11A47 +B28A93C32B6410F30FA15F796FE9306383D42E356DF6A2269E4E651A7924F0E1 +B3D38215C520E17ACE24548D699AB625E232BADF189541031D54E7A9B305FCA9 +EF39CB6EC17DF3744C9A7E79BFC5750B45AACE041283C5E4B9888A21F7B179E4 +387B7CF66E0AB6DF0116832A6DFABD025D9D46038CEB07037B622BF351AB9935 +F90CA5C8AB11A973BE4794777C3DD0B372209C852426E1A1C8A40E6CB1754DCC +83010C1510774304617F29316AC4337F46AC343950E39774D5C61317D1A2C058 +67230E537A6F9DAB0273E0329A0828F6283265DBFF465FD7D01DBE88AE5C52CF +1387BAB74BC7DD2090C4AFC2BE6724CA52960873549E9E0CC386AA5B8E52A8E0 +1E364F72B10F03CE93DB4AE6CD7BDFF8649C22C94872F3964788F42A15553424 +527127A604B0EF454F01D5BDF29CAC5930541320C4C583496516DCA2D0FF32D5 +64A72056E76441A491FCB90C796C344E44BA404CC102D5AB0DBC021C3EACC107 +51087904CD30DFC1D4833A9F00324C965AC7585DBCA4E59E0D62700B85C60599 +CE83BAB651911EADE0A721E37FDBD65D9934B8500988DD20132DBEFA6BCD468A +B082BF665635690E2FF0F9817E672AC48B444BFA860B8186F4E0E31FB6824C82 +BAADC89A3438CC49A2FC0BC7A943D4CA2573CC0554B200981EE2A353B664E09A +FBCE84F40F4272B5F49A20B8A6B72FC8DC0E196B682CEE6D44A998C8F9CA8952 +0F69044C11100918F65DA1FEC6ABDD85DE905992ADF98671B2ED928A3D4172B0 +0264DDA8684C83B65CC65AB6BB4E0EE8F26EA57B93C3832B3147BE52A414EC2B +A8D82D47C2FE5C2C9E56328E0720E866F1174D6C6F01C6E67D364C1E03F328AF +3A332CA201854F2FBC62D00809DAB87E8F9B9DCF53F91A8BF0837D519669918D +D8075B96537B2934B07EC5E620243FBD5C6C33D70D57DE6C2C2CC298ED36813B +4BA99A4395DAFD7B4CDC0BA6DFDCA239A3C867A2875C0CC515FEA878222AA1F7 +070F30B12BE68797D48EF5E9D526583969428A1CA0EDF80163C1249D36864BDC +F4EE158716B5A421FB6CC73FBE47F5066B2F7B7F8A201B7C9B6C6275AF9AA9C8 +7AD9AA8F3D6E3C0B6E8977F377B5619815B15399AAADE8DDF9FF70A5D57FAE03 +91E52CA6AD5F9974FB6CF04C55965C26347EEFAAF6DFC61F373F0B8C5ED90BAC +D772A578F78914E048B04D1A29DC16E5EF5CC82AAED18AB74B03386187406661 +BDE37772FDDC4C406B57D7D74B1FB9A9BB9707E57B08B89AD548BBC72211E8DC +9324DB884C5F51F372187F3FB62D43C0930FD7F42F9E3562F9262AFE066F42A1 +5B5BCE7FA7ACF8C2E86A6AAE912B747F2044756E3E7C376A583B7B5F83EA0627 +6822BEB77502C8728E150E66804A8DC068B8EA3C5CB1732D39EE9FFBF4416AE4 +65C1431836D10290D42F8373C023A36F653C0B41CE1548C45DA3910F808E953D +B5BDF8EAFE726924D6A8707B9B82DEBFC34BD631B35E11632E55F6936F56E9B5 +0063C3E80E6793EB6CBD841E861AA43E191AD19A26DA142998BB77A2D37BC88C +0F6A56ACBE91D0B5D82E109D716D369B3C1EF8A9B22DC775AE9C5E6E71CD6CF0 +49D5E97EED830BE3C955920572E432D2FA90BAD0F649D9C980C99F5B28DF8205 +E60564FDE8F48A514559BBC884DFEAB47D9A1946FF786B5C82AA1D7C7D9E08F7 +F9310207EAEA612A399008C7702C2B962D125DEA17269BBBFF98D855E18B84C9 +7DFD438D1233E1C88C594EB0020842DAB034810114C7C48E7903D07CD740391B +659EC0BF811675563FF364DE1C8AECEE02A0C957DEA2A75A124BA6240488983E +B5B1B80038BD61588D70F3AAF332CF8162E0B55D0E8FBFC4550F28DC1DCE8A9A +2592AC0069D438ABEF211683828B6C22B3081C32BE756BB5AAF5F39174D7C41E +B7BA14F6DBD1D25A9352BC4122D4156F5977C9925326C37A2DFAFEC143CA7686 +147F2E22531EAD1A2BC6E50D491F7D6AC58650EB6433C93A951E46AA75F042E5 +5194CF99C5C78FF1E057220A991790CAE9F3944923FDDF1A788CC80E2C932D8E +B488D47F6C1522C0228FCE8B075622AD4FC62DE29F830D136BD28BECFB0767C8 +1B6DB6215369A16E332AC5B78FB5082DBE0D44A86BB94B4C4E59DA66DADA9BCC +8651E547BD3414E29898862DD24F2E4A1335966313B9A4DBE63AC6C6E55A52F7 +A29F5BD06AC40035C29F3515FE9D944CC8EA76D358F106C5C9FCF093830CDD69 +163FF45E2E8644B6D3AEFB8A7894859BDE40125B3454C505DF2CD7D45188FCF7 +98B83AFF66C94BC4E1E9F8BEBB6D1038B79213742987C5D6BF6335289A9E3CBD +A505AA920BF1375EBDAADFBE7A39CEB4577C103560A54891E5442C46775ECE1F +91C294BB654AE4F2E027D84B3BB1977491DD0FA21E619F70874AE1FAA82AA0FC +90D6B7F034A8B7073B36D1FB79F5F643D41E321AEDE6122E2C878B1FF02FD3A8 +48733D44BE8A84F221163953E56D723B1AB7730EB990B5BB0E2C3A5D6B77B3D3 +882517CB1AEB63C18106F3A6066F0F061C875D3517413031AA6F3109145B7550 +A90F887B1AE441E1549333A77F17A9E995485765C2E6D14129CCEA30BCA1B9A6 +7CD0EF171E0D2C04CB1FEF06CAA50D8F2720CE534B894FFF9C78E693D636466D +8B4D64285D6091859EE7052FF54113B8E772F9F8A78B5C8FEB72B9FE40AB5444 +DB99C680BB9F9309998A4488FF6777314C3A7CFC6D90D05D09CD5F437BB19350 +9173CB3943D0E414F162E06FAB9B61FD06D11FF90542858BBBC657A0624406B9 +9C5D3DDB47A1FB8D8BB7439E94E04324C3E76712B752E8D766586807D919146A +7181D764EE93D33C49070B824337D29A6F117CE52CCCD588ED94E25C8014EA71 +BE4FB1D87EA3097018432CA89320ABEA25FF5F7A649B0FD13A333E214703926E +7384698F95846C1ED1309F08467FD2A739111CFF94DBCAC0A75A9EA78E535634 +26239B4B15BE952748A0DCF78BE79DA2D130ED71086C55FE8B70E174596AADA6 +6C14CB53504D0474F318D11F03EDA4AEF8DEE94D1C105D94475954680EC8F6D8 +2DA09729EAA4011808A5597F3E7F771622B7B5E3D57768E2071535D000AE2CA9 +E1305D52C062CD6E1831FD71C95BD59ECDCFB2F3D87844253F6672D434245ADD +FCB3779CEBDADB884281B83FD0036AA29D55FB7ECC77FE1468648F76367683F3 +90FCB4EBD75A77D9343C87A59B29E03F9662F2914894DA25FF0448B0DEADF00D +48DB75ED9532CCD51F6CFF0F99AFCC16675B5D73BB355B2F2714B8C72C34FE81 +B44E4ECFA9568849CE91B72AE08A5E7D0792E25AFBE80C2774FBECFA2646EFC9 +495CAEEE7CB37055439E826AD42B0DC950EBB34616471387549D0DE5EFF2968E +47D28300F14363073A82B8DCEF84B26CA612ADB6DE0971B4B7B2BA4D398AF060 +8BD425CB84AD2E5281EFA4B3E86338925E357A935B262A2BB3A00B558DF8EFC8 +DA18D7CD172E8967F42B7B0434186008FC5F4FC485BB3154928D0FDD01BE4EC0 +7C44563E0B1C6AC21C2D9DF23FA5E5964E176DCEF861D61B305B71DEA6416566 +B379473987F6ADEED63DD10B109C87BB30FBE964BF8302D613B019DAE722C332 +6AE4C6E1C2FA92CD50F61A448E8751ED0693257749DE7669D41C7E4C68217C5C +FA3083785DA9B57740B2BFDFE63D199622676C78C63A918FCFE3490ACE7ABF41 +85B00824EE2E9769EB021D73CEBA4591C90C21A76E41E3A59C9F42D33D8E79C7 +02B5BB6308A3452A178426031D3C9E49FFDC21D24CE28B5DC824783DD30D3570 +F45D35EC05C0B409D96446B409203B52D1B9AE60ABC839E77D437388643039ED +68BD2864BFB75E5D50B1297B0615DF446C1ACA4CBA029E1B788936A553651FF5 +525E05DAAA3C0E7126D2A27F1B5F3BD92320B91DB1A53DDE5B11977CB68E5305 +5526278A91F63B67BF1028B1AA6BAD92313063917C22B5F595DDFA49FA8E27B9 +B3BDF45B0CFA161CC0A511D1B346C8C87B028F55E6ED02FCC8612812BC51B496 +CA0D181E557306453D9E2654EAC28E525B996EA79DFD1FAD31BBAB4B03B877A1 +4AE97382367084A129B213433070F609C50FD2322F5EDA4C62257FD516E978BE +2B9B2A93BC13169A3582669EBD9B12F85431C09D4917B6DE8EA37F8FF178D05B +310EFDB570A41E1A8787DAF20066F21C146AC79131461F05DF3A433545746F0B +179FDE9774C5EC24CAA13FBBE3678889F4B8B496D853B3608B9B311FBE6BF1F3 +8235F18B1239FEDD8F0AE08F87080984E120ED49926C4A509BFF8DC8A7F14758 +9A29003875FC10F64C7BCDE95E74BC336C5FA251384E36242827BF4FB53F5D1A +3FEA7477C9C7EBB48EB692C128BBF8ACF196E954C738E407256F47BD6A32E787 +1304BD2D591BFD192957CD07F9859E7E575AF2FD01F398E735A445C9C1518C15 +0B6F7A522EC0654EFA6391521489B0FCB80EA988FB6B1447DA2AAA4BD49A37EB +3894879736562C8202DAA48D6A709D181547FD29A8A5A37273050AE8C79FE880 +A989DC8634B9DDF5601D7FD9FCB22694BAAC6F4EF277E7B5C5BA6D035391951F +8B0563B747B35958FD439298E17D77B91E40783B3B4872B0BCD3C97D3AF55E25 +CDDBABE2A1B995AB5F8FD40E98D483CB5914D82F4B0EDBA181B19643DE8E3A67 +B962755186D2808CD4831A1B335B56757A39AD89884DBD60AB8EDB4D8D5A9958 +B96C523A02CED21E213A19AC1B72503B5F64F4A9461E506A2486EB42A46DF49F +24576FE9694188DB022B99DBA921D03B0C81C07C209DC9E35700E780A9D2AB41 +7102576C16D9EC06A581B4FDA804EB4546D007AF1E4FAD2E325D6577CB010119 +EE27B9BB5D50997910241722DBFBA4C84CAF2F89AC9C8A4AA7B7A57EC31BECF8 +923E0AC67A5A4D89C71E3EB35AEDDEA8CA2DAC4CE8F7348401BE8713738CB715 +EDFFC05B14FD2D2F36781482E63C1817EA9D3B9EBE46D396BDB21CEDD2CDBB04 +9FE5005A739CCCD7766DB4F59A97C095C9F0F9DE3FB26F35760619E3E496F3E1 +ACA51F0862957BE2EBAE58316B4C581D042E234D9E5F61CD3D91C70307CD9E3E +A642C76C48076887D79888FEABA3C6CDA215ABEDC1EC16724661BC2550D11CA0 +C04B8E967DE46DB61FC1D20C88A4F93D294955E9D7D47431FACB1437808AFF3A +933C2C6E8DDACCF3BCFA7E20688885952BBB925503A8A266138F3C87E7D92885 +BB56658E18B2B043F12BC97B5011829CEDB1076A62E93C63A26C3B41D2C6D3E4 +F282F77723B833C28BC21B64E12778CCECA4715C6FB780599DEB8555767CC5D8 +12A830DD1F5C0464F6C08CB4AA240C08734AE4FDC4A69122248489A14DE744E6 +A8B6354516EAE77FB0430D847BF99B2C116AF7B7DE588168CB706C370D3AE925 +04F7284A1806F5926E01F4B1E0C034F203B99EAEC6DC2707FDA16F8A77CFB733 +0C3EFB883A4A12511975CF2A516C282E64A0B5837CFB13CD1EFF132EE853A732 +3EE2B424B4F503AA5BE4A897B3A1E3D6CF48E662E2A39B27334809B079B02BC8 +2BAF9FEE5B0DFC858B4473CE0ECA9E7F45BD9AF29BAAC5905D7E7E95206B1687 +F7EE99AF79439CE8D288255268C28908A5AFC84F025B758E498483DCDF4EA4BD +B8F3DC4573BE7836E70D2640CC16D054EC47C9EC99AFF4CFC04E34D1229BC683 +11D9C38C53A0FC38C4A1BAD15651BD87E1961077DBB2DA195CF8073E6BAC3EAE +7EE00FD2DA5A92DB75BB509928A628A213405A293E95419C8CA60310623D7A97 +A3DB96F906FD9441DAD0CC4B8E0669E7DE97B6D3982369E8A05E537398FEAB23 +026A5E404B612318FD4DBDFDF362D90BE50825D7204CC0EBDE8CA985C28D40F6 +6FC80D07E063220E1389C8B4444FC1EF173216223ABCE97E83720B3ADCFF1BC5 +239A2E76DCFCCE991AF43DBE0528C664732101400272ED37F7051B5018A4EE62 +BC1B5D636E58F8FC1337281A35577CD3EEB9DC85006CA82BD92F20CB63D40AB3 +EE2B9E19873C783880DB864E1080BDE6116B499E08932AB7A4B84C71FDFB483A +8F06F63BEE22D5E61D69259A238297CBDF6D21BCFF7D823583F9854616A41D6E +2026C604F4646251400B83FA000C9C7EF7D8AF6776769D4BDE3541034E56FD8D +5361EA706078167AD33B998E03B2338A0BF623BD369B6435007C4FA7BABDB516 +4CB2F0F87D2C3A116D572E7F5BEC50699CFE0F196DF0065F1D5BEC016B931C46 +F3967C5500B941F43E312B27CC723DA1FF28F7B8E7BD6D9B944E33F268A81A71 +4B60C7BF5ECC9AB4E763612D6A1014D1D8A5F272029C9AB2A08971F1393560D7 +954D770FFEDFCF9BA7AA4DA2CB76489B413A783DECB9234663795CDADB7A8A4F +3B8735CB8719A9CAD9CC84E878752E1445F6615C5FCEDF8828E7E4D96C8B5740 +617CAB61DF4D397B56F72189198CA66BFF231F6811962A762EB628582B74E528 +A55568A99B341ED6C2B7F5020938E023A17782E73B1513E54A9D5A293FCC9C64 +2ED629980178458876A7183DE309D9841BDD95B9B01EC9BEB82E3A1A0861628C +A556F9EF08F8FBCACAC2A2BB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -1937,353 +1937,362 @@ 23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413 19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42 1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39 -8BF32C1F1BE935F51A1E6A2B3EEC69C02A0BA8F2CB4A4F68FB7896DC43147822 -7617A156AA00BAB69F17AB7D05874335CE3C819E21DB0FEACF1E752980A202CA -BB393069D59FAAEA4B47BCC0FB9C4DAF2FA0710A8A3DF10E3300A162A988FD1B -D02BB074BC5A4AEB6F0F3F89B3D68E9392AE07E73D7B8D18FE83564C52823804 -979B6136D35154A701E9448881565857394B0D7405004459EE0C68EC17802041 -03FCE184AEDD76833090A32DAC65B34FB1BCDC136D12DA0D6F734F09A5F87BB2 -5407964AD8FBCA56F0CDF8AF907AD5352E4D93A6386BB2006E0FAF74AA8D548D -FFFC997F92F929B794A07CA8848DB5EBA8BA904DBE1AE6DB74FD125E11D39FD2 -293ED39ED1780FDB87D969679CD590297FD9939ACC30B4728227077FD6353E98 -9E62CB8E355522861928A6A4C4747D5794F4DAE08C94FF902D83E5C9FD260800 -FAF713E15B90131C1230A572514B78C4140A3BBE1C1A394F4C0FC8216C9A44B6 -56C67513A4D15B6FC3997D906F69BD022A380D1E6DEAC37434EEC14CB066C7A5 -3EDB6E01DEDF4D58FDAB5A263115D8DD8467F551283B349D0EDCD102A4CDC4DB -6133E4F3942264E0BC3D4FA9F42C3EA90B4FBC54DA6CF0339D0EB1B1BED4D7AB -86DFC6133D38627E2BF545E123B6B848938B4987D5C793EB031AAC98482B242A -B4F9662932E171F439CC1F75B38084F9460FAEFDBA8FAEC336348010BE72BF3C -B481A0F628CA6A15602A648DEFA045F796473FA9D1D1838128BE6AC22EE49445 -14C049A7DDF8CE32418992973BE5A03C61CB64088DD227CE312A802C34FDB144 -A48C3F4A2758D0A547693067D9FA6A36FF3F6349791133C440B1A9D3CCEC40FD -0449009528C4DA20FDB85B57F30B9941D61BD6C722E4E42C243BD21AB59CF8B2 -461F44EC175031BFC898F198D9453F580363DF0C4CC10245A23FEF9FBB5E7AE4 -7EDD08A647BDF27390BE255F3C5E9590CC56B68BF26F97463162A601F6FBDB73 -6B9C7E6B0C9944C91F24FB36F87C737E4A30F3782AA2237EDD48A259D283515C -030E4FD0F67BC97E1C2E1F82761D4AC4E0F19D5BCE52F69C4698376EFADA56E5 -A7540CCABDCD035DD158BF6EEB97E4E491AEFA346B5849E8841E1C512926219E -3D3F1C444D1CEFB2468DB2AA00708A6CACFCEAA65D922EDC5D64A9A66B17C938 -BC7CA14D2EC98A72C976F149DFA98DE557C4A52700856693C7AB5D80151B1C95 -663D913F0AE40F67F2648524E6B06B379D9E0E2EB8E4CCE6B026E7AB5C3DBB48 -B3F6963F58A66C267252AFF7CF2391D350A43377DF8C3E08E6E8DB5E0D26C996 -441A716B3DD2778E2067A37E6F1A9887855A539CC282609A42BE27F6F815B064 -A27B8CE2EF121386E670AA7442B14BE8B66530094EAA93E3FC6668A567F760D7 -D060D8605CDAC6440F2CD8F24493BAC8104211B03A4A115E78DEF16372A1EEA8 -840A5AD4E050CE415A938D1D9E9F0286A8E6345BF7EC8D096833B2BFC9E94C08 -D2927028B30C62D9F95E9FC78FE7D598799CF3D0D24912899DF0A387FA5EADD9 -F3D617D218F949AC82BDAA67D3D2863C5B7311E63CB1FA6C633254477A570DAA -E98E2E08BDC5F85AF690C3E71D958F9F63373D9D8AC9A52B4B89F3DB04B87131 -E3123D7D06FF0B20365F0FF541AB3440579A0F482E74ED7331CE040BF5ADA33E -5ACE0D28130EDF1683C60D79B25103C71AE56B87006BA19C8EC3CE08EFF66FDD -C6B4551ED82322C9089FF612381C320B3792B66B952062FA2971ED005A468FA9 -F9CA87E42DD3F8D610E10824986E9A83961009759E216532ED5BB5A8C27EACDD -A83660DEA812ACDB82271E1BF1B15D020FF800C8E80D0DB2A7793D85F124E4FC -C89268A6159F1734E97AE92022955D040362EDFC1A2F77954B35840B42996675 -00F6A0C6283059263244190DF799E158893572F2650A0A27AE03BBE64ECCE095 -BDCC8924567A84E89A7AE812ABBB82A4D0526054BDBD6A44C4A86DCDFC76397D -B49C98C5ACA66CB80CF32455348D9968E19898677D6AC6C22FAE5747D8C6D9ED -424A9D671130BA557F0BE38972CA0B6F7439F630FB07C409CAA8302212C426D1 -77859925DFF96F842FED263912E6AEC336B99FCDCAB61E8E3BC0C6D7F760FB74 -051321626865771FF83BB6DFE1A9035BB3ACD54836B901CEC6F3AF5B6603E31B -864BEB1C6DE0AD60BDB42508105EBA426E0396B19EE14B539BCE68853929A63D -8B27167E4D43F5502AF30B8111E42A0A593A0AA52F3EE42C23486B16BE004F8D -93BDA3EFB798A58D10F79E8EBAD6DCA69D8CA91C1D6ED75036066D153C6057CD -CCCCF40784B26F87F27345FBCF45435223490BCF6B84B4CFC5AB7B8B9FDC5F60 -EF9A3F0B60A6560C57E71BE1557C5466EFBE1AD76CD5D59681C6164FEBAD21D5 -D93E01DD9A881648CFD245E8F0791B361D64B0DD8BA93BC783B4F1403E002676 -9A4DB0B69E646F4D4497EC87CA672056CA7BF0B5AA0BB7CBC8A93919A1224757 -1DF0AFABB5F2013DD3FD67132BCD5D30247C329BB6B13BFC3E683DCC35026FC3 -515DD8A2D629818A9A9C9AD3263D781B86F52F352A3A0FD0A4F74E5BA65FE64B -162BBE0E843C31BDFE4AEBE3782F85C423DFF302D4F4BB3FAC7C6FAE7870626D -4C118C4885ACD643DFFD9DD232309AFE871E57CE81EE352EBD82A9769542E5BC -E3AE55CEFC790B1744D6B09535CB1A17AFEA289295A88F08A607F28E2D6D229F -6FBAB27397A3A3266B3FC952538A01E066EB51AB2AF4C13790BDF92977C3D4FD -8C76653BEBFB42BF5A93AB343CF71E006CCB1AA6DF07C3BE55DE82D86552ED2B -63A25D1B3D892EA7BFBA8401BE87F7D3C0F70BA06D0806D418DE025AD2A44BE9 -B0576406EF122471F4080B32FC8397C12BC550BBEFE63B119210CCF2856BDA5D -881DE21D34C7BF597ECBAF72DE16E2443932C864AFCDF2FB4C233D510176AF0E -E6B9C20EE11CE7A78BA76F19F2C81BD3F5ADE5A47C74D77B6E1BA858132FA09E -44D167069ECF433A3F5B74AAAC73E1E95EF7D983ED370B4C2287FE814154FF33 -6788130449F5536E305865CF8C513E9351A5103A3F338082E4F1D5F0C3D4F5B4 -E20EAC7BE2F363B012FFD806C5D2EE99F48B92B41019E794C7BF7A410776234F -26459D88A4D68494BC281E57C8C2CDD5DCBDF64E9E4B184AEB5C94D09305C0A8 -72835A6F6DF44F2A7B1848CE38EC6E938E0185988F39B9BC62D4BA3071E7FE54 -6DC79B49BF6A42756F398ADD8156F322CAE4AB583A9E47A1453F8410AFDD420E -5D32F0408E7BA999F52FAEA73DEB5035F083472D1C4EC6FDFC6E029534749597 -6037B0C4D49484DC804B14C87D708242AD05536AB037BCBDADBDDA4226E85F98 -A5BB63E8885348722C0938FB9EE57CA792B20F06280969D8C231AB8090BFD160 -0991D1DF5F89432045D3A0CC4E361A2AC466A402F89F09D7238900FD50AD0DE0 -46D8749949662F5FFA5A2258E5D35F4818E107EF5010A9720B63BA107387EE37 -A4448F122BD880D288CD50DD5033D06A2983F7F62D5A93CC12F9CCAB25654688 -50C5E7091FEBF634A1C2E5DA4C8CAEF51F9D9BFE236DA6958759B19CDD522947 -C4E74F63EF468B19ADCFFF7E6D44EC6406C4F70D11575793D9B783B24528C867 -2A4629BFCB1DDB087888C5625B4B552851BE71E5642FF42399B0A362ECBF34EA -EC45113E3A978EA6C403162C496B3BE73E5C67B9D0F8559B189ABEED9EE5B5BB -BA5D9F8EEC40035F176D7E445743979CB013ED191F3C1D4D7ACCD8BF0F2BD9EE -C34DEEC3F2A88547A7E7910C9586AFE4FD55E41422CD70AD0A55C27A2DBF267C -60FCD61946C94894CEADC4289799910A0E8FEFB941E9492610B6006E19748779 -5D3D455A46A6633EF137D10AE2797B14F9624CE9380ACBDB482F729EC8171913 -C24781311366642B79643C88AFC58457B8753B2842F16DEF21FC2FF03F0184CB -83DB0E89B74A13EC0DCFB29D435286FFD9B0B5BDF3B844E02EDDA76D3E0BD977 -A86F8F2BB836545B3D7D8793D5D327D32E5FF48FCCB7686104A851501D74955B -2C1CEFEF59B031487C246BDD6DB2299645286233B0885CCB51F1E600E6C90151 -CC1DABEBB50A7BE6F66B06D6340EE795C53CA2238E90281A26D09BF60E8FCBFE -A3A37C91DE4974908657F5805B1B1567294C155DA7FAE5E434A371BD9592A4D2 -CF57508CC3EDFBC11EB406E668B8F1204282E2A9EA9173D983A6CC7F2D3F578A -3904E5EB22C286B7930E5519F6A40A23DA7A3088E274284C1F640D2773D1028B -D299D969145FCC9B5F89DF1D5BE6F847F9F49326CBA4835EF03D1819045FAE5C -72895A3D0828BAC414291F042334B17EE49D849928E39BD9A464D31346BA4D6E -03DA880AA0C3C78F283ED687E2F70DC889A7B9D777845F1097F520704CE81333 -9B6EA93DF1A11ED41F821A831C0BEB917FABC8F68AF945E95B0BC9B883724BE2 -BCC7CF84650B0D5B43FCA10052093E832AB862B354EE89129CDE68C7364BFF6E -3B93F0CA5D19228F1F44E015B4B8E8DABE4229560E89589F11BB46E0F42BC64C -273CD536BAF00DF26FEEBF9EC4300DF01B221FAE541132674E6D16F43AB98040 -4CB4D0A72F272FC3320DB8B4B9BA8161B4895FF9EE2B18EC90FE9C5FD3F40622 -8E510CF33BF664475ECD70380164A55ABB43734650170D44B9B9BEF6FC727984 -975D5053360ECC7C0A375215AD4AB63DBB7B2E3F75AB136F6BC002D029A9AAE5 -05671CD18D26006CD662C47A4DA9E7FA08CD9C9EEA9ECD2B31FC65D7071F0B76 -BA692C320C49910F61B1152D71A36AD4B10D3C80AE250F50156ACDB218F59CA5 -028E43917181FBE4B062AD0CB441A0DB976C2F7D09C30D37B09C55C4F5C420E1 -887B196B4468A42AAFBB95F69C79EC97B378148A3DB04011C7F33D9662C89D6E -ACD69C757851AA44F830EFB11C1D259C041E9B56924F84CCEBBCE6AA0D10E45C -73E191726704188DC82FBA0AD70B98C7B183C9C529B145C2DD63E08393185543 -1894E2588815FA14DCE9EF5BABD58AD3D798F64F9418B62B2E02686F8B8D962A -CB20B6B04E581B9DF6C52F544BE97CDCD2F2740A92226D97211DD8168AC3D13C -17360807EE886289C78768D1116E3EBD682120FB6F90278CB3A70503A8B8CD28 -4E0F7E5A3BD6B7CF63B5B6ED9431D8E1434587EB4B74EA388FA301896F3E0FF5 -2CAC688D84B0B33C87AB1A7DF3D90792E9B7442AC5B1A450230A9DC514D3ABC4 -C6A7EFAC0B18488844946BDE5DDC18FCD3D832C1D6C62633D6E46F3D561D40EA -2A3B225E71717A2FF5E6DFB29FB611FA3122FC60364104458D9CFA6F5BC74117 -5582AFD3A15115290BD8F966176DE34A62173844D79EC73FE81EE77448AF1A35 -5F4AA813530949CFD5E53F5CED0323292DA6B28EC13C2B35A3B74165A2CE729F -F9C7EB1A728077725790A4F0FDA6AC9D9942D52CCD8652959E0BA58EFA5BE6CB -B07DCC2FD207F400F01F7D910ACB7CB87ED3FAC751A8DAF3516EA71AFF38EB27 -705217106FD0FCA158063E80FCF454444A5C16DC12FFD5EBCDF0F70C1E5CCBE2 -ED0A6270E1BA271989BCBAACF6085AD252AD2137644450360934D03D6A014150 -FD21949EB35C0F2104DC44643C56AD864CDD802D6BA57EDC7F8263A86DCFB0EA -439875AF0EFBAA5CA147B7CF6DBC691E32ECB2432328FD3B0C7AC5E3058FF419 -2F629075692FBAA974E2071E798EE81CE61545D6BCE7B40DF72416DD3161CCA8 -EE3F294DD3C7C61CCDF78F69C1AB0B63F4EEDBC01372D240268F2C60AA62E8DF -EE52909ADCC47044BA3BEE85D077986F179CDFF53AD8F9F22B1897C7C5D23B5B -A8C26584116FEC0E562E688EE078FC2D0082F92090A8585A8178102D22BED49C -62C9F7B589F105541DCDD6A157AB685699C580C282A5BA26126FB08FEEEB9CD7 -71781251823AFEB12F5B37DB4CFE59D5B23281D33911416D8EB55CF4DA0CCC88 -E380CB53BAFF81CEC5F29FB54DA3B66231E0A24BE4EA672A08F9E2046AEECF4C -B9AE458E76A3FDBB1A1BB37BA2F8E756D5E3D96A97750B0974D67EBAC26D6C17 -823A144AB04D93D93ABD0FA46E52D4FA04504542C6FB9ED028297D9B22F6C1BA -2FD3773F1E71E4BA936A4033351E12F48CACA9137BBA250D145D5A3E4B9BCF81 -F3EFFCD532FF2DD2085AA5F8259393B316EE9C9E3DC74C2B0015B018D1DDA120 -BACBEDA6E0BF7D91DD13E0D6AE3000E03E9FC0A2871C909476D2FA8B1E852E68 -2A20EF414950FE7D899F554245FB6E041723FFF36FBB0CDA14BC162C81884487 -A255D99BBA35BCBFED3369730FC89EFF68B64C5E84B007230368B32A7B2C3476 -6C1CC1F41A951D9D84B796EDFF484106F7479ACE356EB889453E138A98DE20F0 -F10EA068AF4B2C67F877AF2FC067669891F7EFE3EC3AD48A61CCB907C6573868 -0A47DD38ED7A60BFE77ECF4E6DF3DFA70E5217EDBF20DFC9F5B707665AD365E8 -F225B0708F9877CA0D27F6BF42250854129AB0F0096B03E653C83D65B03C4E4C -4B5B2B2FA881E58D94813A0C82B4BE017D7FE636544E7E698ED1F229372E856E -5A9D61BA773D85DB651D44FE34B770D37D6AA24B011C27A421E12FE0DAEEBDC7 -4EB72CCBDF1C68968DDA127416C7508FB39F3CC98DA18D3B00D083BBB9092413 -05582D08F7AEE5866B030F3000E08C4B18C3798B64511EC0B8C5F64625445609 -EB750668DCFC76A6CE41F18808D4D59CD8C4DCFEAE74E4AE9B5526774484C928 -3EDD497B94E12A6B8AA151BA9071A8A6F6B842C568C2FB1B9DA2668928966A71 -1FF06469F4EC05524A59683E4FF003D0C1D8501B35172985D3AE7B0104915E3C -1CDA23EFEA6702D67A2FE1C37EAB2AFEA5B23FFC3146C0AD143FD4B67E240A12 -A9FA5BB54B85B8B0DF788A9B6D70375D293BE862A648BA03620BE3D00F5DB2FC -2A5CB1CDDAC650FE19E4E67BE94F6D2C0CA491CF04736F001E8A440558D7630F -18B6F0C51A7A88D7DDF3B3E0B356CEDDA2DD90F1DEBBC2E0A00D356240D95D3D -8804DDB50C087DD7D743D37F787D519FF0E5331E40FEC71FC172B7B9FB4BFBDD -A9E4ADBDC72B68AE0B906EE04566DE98C2142137787C6FDC6959BCFD5DAFED7E -745ED34DF81F2BE2BA71FD29ABD9F9EA2EE83188B3530D0BF75A8524CB3B74B4 -8894B558118BF20CDF56AF809295491269D2103B8EB87B7B1E9FDC515E1BB263 -7BC9148A7EBFCE70188D0B1A17B7D658DA1C68718B5D877E766ADB4F9E1D2CAD -09F2D2A0BEC2AAAF29E2CE02D92AD9D69EA3B82725A81B66E6D7DFABEA83686B -43DDE5495E14ECDFF314283FEE34E12304720E21AD065ED65CC4927B2CF19F19 -7BFADECEB4AD2A72C922F275841A9A32B7F59F9CEC85993119EA5D84960A7E16 -A78AAC396EF0E30C9EA0F14FCFCF334B2784901240F83DA2D65116EAFC92AB25 -AC4E2BC6A2C67258CA0D0C97E5EDAF526293704A8F30231A677CAEA7CC36B6A5 -8BBE2CB635D030C8C189600BEB6F248862505AADFA5987F9B2FFD9E65C475FD4 -66181794F9F982943E3AE3FDFFF95E718499732568399B5E09D8D5C7452212BD -53421EBCBBDA4E61B97C6C85202EEF7891A2622566D4896702D004BF66CE8D79 -2EE381738D33D21B9EBC0B38CFBA58BAEC3A5195FFAFEFD39494FC304B540FE1 -079613FAC7D7CC0C1785640104E8A3AB50AE83168FCA02B4B26315EBAA7BC21B -CC30F1CE54F9947B32AADDBF8BC40A820A69B1508EC0C5E58E6453F95734094E -47089BC8E7491769E9C2D90AC2A35D9F4ADC88108863684DB8BDEEEF54BF923B -02AE114B153494AAD20A984AF198941C64A5A7DD2EC3EB037FA8BADACFC42754 -017BDCFD966710A88D82A1E9351543573607CCFCCCC3FFB85C40AF2F8EA5DD8F -C5261348F689AC3936833AA9F3A61C344444DBBD6635F920320D4E8A4A5DF1B6 -CD5FC3695819DE927A2974102499CC0145FFA6C52CB1F2B93C3C83249C780C94 -BD8D968A41F35B333DE07CDB261D0ACD1B2C95A2C87911B6C31C14196010ACC1 -CD88179FC58B95DBA799A38CB22DE08C4BE0B3FF4BC6B7BFC4E36F70C5E28C4D -791A6CFF8D40B32829C2D7083E25FCE1F58969353DDFF9FDB9290C530FC5E907 -2543ADEFC8D6675476C8ECE2D56E79F51FE9E0C5581D6F2AA7BB8AAE16563092 -7232722A00D49142B0421EFC1B648980ACFA873656615001E39EADB5C2BE4668 -66BDEF21952587EDF9C2B0087924EB9E312D59A1C918833AFE94ECEF30C2AEAB -AC5A38B2537D033F9B400FEAFC3DB5BD5DED92A10E74FA6BC97ED38E3F7F0755 -3C4319A7CCB2338580EF7E944FC98C621C049ED5E53CA6750E57AA903C05E3D1 -D5B5E1512D1AA6D7572192D6A395EB192A52499749858256BBDA1CE13DAB0E8C -67DE9632B8A19DE09A899596614DC6C509F1C851681DE8F1ABB93BC53B04DB7A -1E3120E0A2035141A410F18CD592CAF1C03EB8A6E642A560606B5CED064496C3 -055A97E4FB2211478ADE9DD8A53CC505B7ADD6411B343B0B09FF0F83B5BAA230 -39BEAEC22943DA553BA26E6DAFB61BB3377A2B3204A47097A5C3AD274C13436E -4C4E602F6899162FB5546E16C8D1FB5DF0AAB4178A95666BFA72BE46624C859A -ED91BA5035232461F7E513CA17C4E888097A00C9393A24E35B0B527E152ABF5A -D8791D481D237DDBBA411729DE4DC1A0466DC8F226569D941E88AD50722B32B0 -A368691B04E91C480F7DADD1D98739136FF55E3EA6284EE4A6481AD1E4C05362 -4550DBD19CC0D3443B88461EB9D686BD4E06E4E95585F88B54B7A49C60100EDC -39DEEC2C7C89668A546C3D3824C1A2E93A621D4E6ED4DD5D47151E240D00E30E -77CD08B5A15EF03311FAD97D4748CA80E03FB945B750E2A371EC67FF8ED0DA4B -45295D022E604D6BA9C9A2F82588375177D470D6D1221118DC147FFB77815771 -52C863DABA9F323FD85F0FA14E50AF8432AC0E490290F944A92951614606049C -C9EAF7132B9B96E79EB210A1EA3FE119F0417F99A69B319394357CED4ACB1CC5 -4D3FD5A27036E1AF8FBE81745BC66952F9B8327A80AFEDF31284CDA472A5D541 -5B0CCF34A0E0552037C297482C0424B08D4A865A3857E842B11E2CDF5D95955B -6603751890D83E8A9E37A04BE5C63C2DB06D6CDEBB6814E3BBCF77AC7BE65C84 -D6C0BC053FAEE8D3903D344FD6CC6929DE351B1382D334CE8FEDE5F0C489C948 -3123BE9C7385219A39B31BBF6E3D11BDE47FA99D56DD91D667613C87349DC66D -3687676D7CAFC723B694C106BB4D27FEB329B751A0EECB8A816D816010C073DA -F5BD48098375827561B1B7A9CD8A1BF6AD13CE823CE3CEAAE35C0B5F70CFBA7E -78922CDCF4BEDC0EE6C19260E9FF82310CAF25C609C811C685BEA557EC451E3F -65244B6424D6EF39A76758F934FB02C77FA4FA37F06D91B20711749962867B3B -5564EF4221E66F66D77ECA275F3E8BF7976DC2D0C1EA8CECFD50CCD12E183126 -A9418AD9D601865A5D168E2298E6B99F9C8C789477CCC8D607F0C3B86263BCFF -A42723F7F98152D8AB8BBBEDBAD28939A5F411D4B36ECF5068569B365F72A205 -8F763D8F968B1460A46344F77218A93FD44FFF5C747E9688E9DA572619CF0A9E -62E76C7EEC4A65349874F264B09A9E440F2F378F370E0337007C31F1DDCD5A8C -7D6BCDCC0734D316ED13ADCDDF39BF2DFBD6991C5B98027313DB8AEF1F3D5413 -D780EE5A3720B962FFA586966E75E4F064BF6F377CD1EC36A3D214D4F937F7BF -5D468B82993260D67878443F6D62F0E66BA31662DC26B77A9BFD958581C12158 -3D4490543A8EF43024BDD308DC03758DB8AFA6BD3735031D6543A93B03C07615 -7254F6E3985322D236C254B2170A5F058B27805DDDEDF15F322B6B83353BEEB6 -3953CC1EF2AD8BB529A0354CD6C6BC8DA275B2B5910AC60EDDAD63AFAB60B91E -FEF7CF4E1DE505F151DC34B361C8B28BE592C85F70CEC2A5D2E1212A185AFE8D -17E050A3386D95622ADA81CF1B49F441C45F6D3BAD328CA8B44FF892DFDA6BC0 -AF955998156294AFBF076489E21B33548DA4D48296545AB76C8EDF5A3CC623FF -022BE68E289615E6BFE4762B512E859F6C675AA6AB15C6EA447680BEA8623A17 -A7B75EBC69D9FF42B1441D61E57B563F152458E0224D1C0A05281A34BBE60B50 -2538A62D83DC2A5C3861330C2E9F6F645986B0429FE32D6BE27CCCFEC7AFC0E3 -E88634FB1B8E1043B4161D511AEFA2529EA0A334901D424518FEC1091501D35B -2C01F98DD44DBE964D669F975646D70F8871C6C6E357C4A368F32EEFFCA56B5D -95D40BF5E52A6FBEA4D1520DAB2241BBBBD19A517EDA5F2C5773D822CD8B8BF5 -36C1C62F3E23AF4AE255AB0AB66513984AB9F37F28EA9E11DAB0C59526637909 -BA89D0EDD0A3E62CF280D02F5A4FC8BD063E33669C4EC6F5FFE998CE424AB8CD -2224A23F41B3A2FF975C5C3CD8A2E179436BB62D5C228C7D02129621FB630A2E -477D64BD2360F28C1DDCFD43CD261008E5EE14AB3AE73387D76E0E7FBB49AE1C -3892FE09A397C35740E6E2EF2B783EB0CD2A2A8F01642CF988C8C2F01D3CB208 -368A37F2CD356AE129E4BD1DA5B4224DB4C2A3F6EF43ABD3127F119CE59AAA50 -7F3FFDE5EE4DA7B5DB7E2237C9C612E88F65D6AF84E91E3DA6044A6E4E685F4C -9B657AF9488E8F07DE024B6A2A111E33CD869D4EA16212970DD7B14502858F7B -4906040A2447BDA84B192D46B4B340DAAA674B9DA36A8301158C9745CA11A95D -3EA301E6BE26B103EAC473509DBD45A3405AF556DA77CC42E1A8F1C88C71B038 -E78FF38FD862615B27625561B4410FF6B00088E296F430A8A57C54D0C8E35C14 -561FC0471EFFD7D910D63F173BABD8984CB24B501E18548C54E89D7FDB9DFC65 -59B355C6AB5D412F8F91A82386CBA9AE283BC49058462580863A753C45C75C94 -1D889DAB030888A3A70167CCD945D35F396391724FA5B1637EE1CC8C24D53B93 -B95EBB6372F30CCF5A54305030936AC183BE80E5BB18995D6F1A1D9756C995AA -BA4272B4AB2F4D29A51F696FC75BBF78FA5524FFD2257701BE792D3D531515E3 -6801ADD6EF27D117C713AD79C7D9E6DC9BE752D2B731187834177BAD1E5F2710 -ABCF2A3FF1DE206119779C50BCAB175C0316D5FCF0156C344C10A7BF825A4470 -0E9B34EA7A0EBA52138D61D7FB0449B5E281929542138D2698E2C88AF1E0E247 -96FEBAF1172142B8103D3E28BE5CD34E0AE26F915A347E4F6ED3474EDE940522 -D58B3354246A05485B51DC53AAA7FF1EB279C1101402A240EB38621A8B8844EE -62D7FDF10E63353A904A834BD3CF1C84C235C42D636BF73A2832063B815E13EC -72EF0EC7EB877AE7A911CD28638F55186047AD33A536F54A8129AF42B8489D88 -EFB733B34695764CBF01E4C59C577687CD3F8A5F6A69397235EC71A85B30C5A0 -6D7B9E31DA11AC45D5FB9E133E124C95A7910C3D66CCDAE747EC6013F4D22DCC -A381E3EB9F359CE8644B13ABDC73F2CB6CD44F07F711F2E64861F948140EC6BB -4CF29D5532F62CDC98490A2A8F85A87F57E10F64E47C817E9FEFB2668C2D0010 -DF16161E7A8475F6BCA788A07A9EBC81B811A24A485FB532E382579329CCD64E -2C1FBBFB65E58223F1E33A18C4FCDE84B0C60A0B3F6F2E150570DA33EEE3FAEE -35DF52573E487223A23705176F5818C1E30F199EE005DBD1B0206F9CCF26C3F2 -C219BD50EC2E351D915096EA7B505CD5B7D3123C3E82F00E3313DA1D6128897E -5B2EAF7B8A48F75FB143E4E5AC63CE4740F30A0A8EC555986CF2A93016F4EF3E -C40DAF655E9CC9168F5A9A13729DB8F2FFF4086BC2FBFFE3E15F4077DBD07A3D -6337D47B8CFDCF2B2DC2E63A04C8E7E7DC9416DBE7081C27BFB67D33BA154B97 -8DAFD7F12C3F3E04F52B87B340B6EC8BFC2DFE2D176EAAF507C109FFB78C18DA -6703BB0301C804535E20734ACA8C1F5CB43A5648115175B63DDC626CEA6B4F52 -50BB6B0BD14ED98CA678B1451E549B73BDFC7256B5311909AA4744540E2F4AC4 -D6C42C010D47E5A526D39CD5FB80396954B7217B553E9843D525FFFBBDC9A2E2 -B39A877EA50449365A36A8C8D4D8EBDCFBE617C941AA71D8CC5B09E36734B014 -9645CAD85987BA89803C4ED19FCAD46000C9847D5618606574B41BF9EB9E64A6 -A2C313A9C25F72CBB1070E25DC10AA059A0910ADE3FB78AC91EFA287D4C77975 -1015B7F264C4496EBE54CAAE1A859E63B37006DDB51BB03641C0693CB91181D5 -0786709EB0A3C8EBFB1A6D2E0BA2C804B3A790B22E6C2C5C4CFA96BBB1C6BD4F -6BD98B17CE59D6506FCDF158B7E06283BE21E94041F97A14979358FA8D043AAE -6C61F6757F066EAA1DC9971307AAFD7D67F7B93F32F1AE6CD11E48A786BAC474 -B9465F52711DC08721FEEEFCF725CA4918A83922058BF7CAB2BF5720D2EFFAFC -0D7743CEE05135C1A172B74150B0A256A32BCA3F654B294DF0B29F777752EDE4 -A2F18B4D92F7CF38525E298E04299849CC535F405A61A20C5C50A1968B753CAE -07335CBD535D3C72449157ABCE83F8522EDA7236C089498F8C44C9D850775E97 -FD43E40726AA6AEADDE4379C38350D54893D238974FA31BD65DCC411F3E4F01C -AF47ADA23F44DEB5EE1D90B0129E35F6A141738B8E939DE99AAC5D94BE68802F -902BFD4FDA6EDDA70F1D4E979D9BA77E4427CEA58E42D87899DED7F3D5679E71 -F88C0366AAF9ED39D296132BC2891E97923C9FB8852E2F56914E1AB24F2A07FA -64C4CFA4B3207DD4990C1290379D5DF541A491A05114927BA77B20CA345A6F5F -865D18190DE6D6EB079F7CC6F56B2A082D7847C00B521563BC5006F96EB83F6A -DE78AC3F7034C1D434DC620A7EA95AB2EBD9BB94BDDBF0B5722B2148E7B4811E -C8CCE48DC8109BB83C8FDF41DDAFDF450B55A9C310C179427DAD501FBC1FE7DD -0349E94582C22F915664DD9C4963EF1792C258A138DC83F96333789684BA1181 -D58995ABBC3515628AD5BBD3F2979AE30D9B13E290137E54F21AC5408C5DC3CA -CBE34EA9E903180D81E9DF0ADDAF6E77E9E554EC557CDF93A65B87F2B2FC8C8E -EB7D90081F0218E41A869E2D5B2B0392D2F0FE721F050DC8683D75DE82E94C8C -1EFFD4CAB2698F65741E7BB37DD54D5599016B5C7D42950520C7ABC612442216 -9E90D84D0327D21D47C4EB5D10278ABF5D52C94021181299605576BD4EC39F58 -095B1062DA895DC8DF983862CD1CB24D8472970CB49BB77908CEB0C512A6AE51 -7A3F69A07DAC220975F73FBE94F82E29A672D5CF65C84AED4554650F815571CA -3A98619E103B215968EEDB12819AE6BC3F6BD6073F4C33931A9AA0D81134410F -46C6E5CDDEFFBB1BED5B924FE58502FE97DCC973C8BAA80F42546E3780436370 -637457C82494804B89E859164F404B67705C7D5E7EE5C8B72D454D85144C1BA5 -9B73B73014DD989761F1AB5015273B4EA9F7FFF87ADDD9929F8A5705F49BA3B9 -67BB0F491AB22AAFD699DD53093DA73FB1D2292059A31DA303D91C0AE99B4DF8 -20A669A9C8B307C723B4FF305CA08DAE05BCEEAB0EBAC5EAA2941AE37B5C1C6D -B906EFE67349DD3C808F1A58E468C47D7F9467D5B163E7807FD8934389307CFA -CD72F3C028F458658E0EBF3212CEF2DC57CC1569090E808F544A1F8C01268F9F -6CE1305CCA58376661553807CE98BD64180791B6053E5F5B8DB33CCE3A5474D6 -99A6269656E260E9E3CA51E549A5123C90FCAFB01DC0004322A149D1910027A1 -59E71BDFBF8DC2FCDF730747F89F1624BF608CEB937107AE0C0D4B92B13D1BE9 -7C77EC964D69EEEC02EE6EC06EF646B69A7269D49BAB698A8E7BAE9F61E875BB -1ED47150A53983FB314EFE6C345667701DFDBCC60566508C8264A929224E46ED -7D5091F7A563A97516E885F8702C9C693CBF361CE8503E86BBF983E826BB96EB -2AD5B07CDEE47E1F392D34CE14D44A167C3357FE6B7B760C63F78211F182854B -8D2BDFB4C910D6D36FF2415294AC84F7CC5DBAD89887CFF021B6C8DEC98271AE -386245779B38830FFDF6CFCC72F0271337E660BA96B6A9EED2CC85452DCE553B -21003D3890638C55EC3F372DCE3F78C8ADD68978656BF5D5ED1833EAC3156809 -3D779953B778336404BD7FBFDACD2B40169B30BF27F81ACE3F556B0E57232840 -9915285AD0A76E039E1B27A07536EEFA7554FB80E138D3E4288A554A775B98F4 -A3A97AE47F71FD60548FB927C3617D133F1AFCC01530EE36E284C5F60B319858 -9B79B63EDB1176DC1D3089661AFB824971F4EE6A7422C097A2A02C5B715D1D06 -F4AA09383337FD604D7EDB5060E70AF6BBE6F506FAA0EFCD79D3A4C12B4B3A20 -52152342C367691CDE79BA8CBA7C3EAC35AB75347A12C219BDFAAE94F5E51605 -D7D13A3EFD3F4526E705A3FABB1D1723FCB23FBDD72377BBF894FA19E9C6A52A -140AC6194B7DA07C4B99B67EE9A5AC5E179CDE082C086F1DC4D15A2B8CDA1CB0 -0A6D15FB974B17189BEFD09A4AA5D1B2D496318A739E7CCA40F711AF7D0A144D -F8AF19EAB4AC59AF5B3FF3315575869BE4E4846FF09D38CF28D4A72E9F64C3C8 -06BB5288EC2D86C5B1D775D2345476CADDB937BA6D510EEFF9E9A3BEF08872D0 -BE4AB08CCEEC207B26C215046D728E9D8F4332BF4CFFED2EA7685270AC0A65B8 -0005D013F1E7A5E180D595D5F0F622A8E25C6C65B0EB196B8B3194F49677AE27 -D3E64995EAA829AC57BB6378E2F0444E0CB4E3DBCCF25DAE6EAED6965FDDED94 -5384D050B567494E0E89F3F270F894CDD5E2231C4168D56A757F04D97FF4BB97 -FD46A8FE6ADB66047FEB3D034F1FEA4CE01653F31CA726ABE43109B01F143FE2 -CEDFDB6CC45FC0F63AE96C7D06FC3762F2BAE65942403D910F670ED2C1A34021 -E8461A5948DFEFC28F74BE4BABAB17BB515953CFE02C0DA932B7FF0449A8D99D -A6441306D001F676635E9251018F94556FE21A251F89882FF6ED05031786F1C7 -C056708BE36B512204106C2AF121A0FCD617A4410F9E2622C6DC6EF40FEA93A1 -875E53AC60C5B29A63DDEB693C3AA9DBBAB53A78D44F1896986D9ED77AE81819 -FC04C5E794FE678BCA5BD6F831AA362CB56CAE3FECFC661E5D8E672D8E6A9CF4 -337D177B73BBAFF89E0305B611952BA06488FC52782C1CE5C7CF2CD9ADC85888 -DC3F62DA0C90525E29935F3AD78B14A9D697EA0A4EAD9DF0D8B424D4D7EC3400 -0F1C4CE7BB586A75BF07A30729BE3C72E602C0628CAB7B1EE1C1EC928F7E2CDA -753BE0A5675C210C075654B58E9124E466B78A5935D6FC8C65C3417DB8504D00 -2255E63FE52069E2F15755764FF266D9F0C56D89743F2A8F349B1FFD8A91C5BE -F1F7933123CFAE944BDDFA98F4A8C702A12AF4777BCA487FF31060E8C58DC6B0 -4592DEF5D209518E88EF4783F0EF66E9DFD58D5AF8A56D7FFFF9BF611BA5EC33 -72A063A982793C163ECE15E824DE2D13E49C40529AAC183543DFBCAD1CEABCAB -CC31ED9C472D76616AF72705D42E7642F060EF3E4745CB3C8C6A75E8FBCFB7ED -18676984F53F4486CE489A4A66FB34D7437FF12B90B8A5EB7B04565FBD465DAD -E3CC75F67A7E774C96204A3E01E1F6DE238B90808B33B5F13ABD73EC4E594202 -768180D53CC11DFCC77B4C56BC06327F56991DD50777486BC4C2C3ADA85D2089 -DBFA423CE52A214E162FFD087244B16C9422A86B4508EB8FC692D507CB6C1625 -4B74A1617A2087327A369D894ACCA16797B210DA13C8C47B71E286C0FAC082FF - +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 +E8D3AB2C3263ADAB024A24C7FA0A97A999CB15CA3A4F1004B891C3B1A61C93AF +DF660F538AE9E9AB3100AFFDE1C2FC0A20BEE9D615E3CB4B53E5EC018D155C38 +A5EBF387580F8DABA8EBD854D110A3E26E68AB1864DEE8B0761BF79929D00B4A +D5C678B3554FDC5F3FEED2891CFE346738B953755CEB44F62C30CA29E67AAB6A +2EEF052589E23BD9BE75BF55C20B2445275E393739B07F99237821B0A5E1A20A +CDED05F6F8E3A71EC35CC05B292A5BCD00DB9E1AF709B534B6444DB05E3DA8A3 +96AE55C605561C0B6A7554B15E92449EE11B8F7E89CD9A70AF84CF6C7BA04657 +F0B0852885895FB5CF40A784616C4D188608E0A05042F12266D8DAC41A327E27 +0E2E6E10B4B3C0476393A61ED9DB1EB1F176E928D6238A3C0D2539A959EBF5D0 +3BCEBB0322860527950C55ED2D4C844044F7F0BB337904F99EB74F637236DF00 +F90DE9DE52149E7C6D0B6D6D36AA85AD970C18F322EE75462A2C52DFA781E734 +2BCBD96660823A6DE010001EEEEC1926B947F9E9CDFA883AB9925780381C1DBC +3417EDD970BF8482C8155C73A02422F562D9D9F56606E48D627E802366DDC1EE +B7331E7FCB55728B01F0D97C23253E04C626AEAAC55F4EB216680674BE270602 +B80192CB609109F0E350C48F3E20D42B05F067FA0AB18037FD0E732B296CC768 +BF3539030639D6D8ECCD940032995291AE1FBD9D421C673F4FA9D34AE63D2DFC +AE03320CB59D13D6B5E4E2A3E333529185F0E23874B114C8F4387EB59B475109 +E096277C688277DD584572410DF275621E4AADFA508CF5A69B7974B30178E2AE +31ADE87FA201AF5FE922D53234D351FEFD9DFF562E1B281C7E2A68CC085DE9C2 +AE436D46D43CE94C523CBBC82D96B7E76F8322A4E19A8C6CF241B2BE49D38DCB +AAEAF2B26D1DF4E888795CABFC02D2638D1FC37C2F49A3C83DA895A8524FE67D +4F4D0AEC23A47590D0E57366131C7FF955ED112801CF5BBBBC10E4A0E6BA5411 +2CB485EC1ECE33939A046FC36465D7329E68C0B2078987880AB7591186C754CE +4BD0B637C0261F18F73629BF0ED66CBB9FC3067856D540C247237141A40E6CF4 +26B25A14A384EFA64ADCBBACD45A4A939F46EFCEF30FECCB2FB3F6BFB718CD4B +E3246CD88174AE242FF36A1C6E55B84B9C71E3654A6EBC1ED4F46A712F910D03 +95E3D9029777525353380EF5ADCD5E661222EB84E393B6B0C45D8C84BCFD273B +5C35E2F3952878A95BE4C3AD957A6544D243BE39B542F1360026AB11ED702D3D +293BE40D768BB9D1AFDF023222AA2F664F4394C9ECB6CC52385AC5A0994C98AD +B23FF9A62CA38148761EF2BA540A2BC108B43D3022F63BF382240B385F897E70 +0420B27358E70C984AE457B3F9F7FA3D1934303F0CF8859F565B6512342A95CC +2D5CC1676C56529ECF3F17EDF87C18FD2503458F243F30F6CDBEC993DC57F4C7 +223C1F1283D57CD45061C068EF11CE821FDAFEF0C503D5EB4DAAFA01DC78A5B3 +0F95993DC0278379732CF674F6F5678592F1E6253DA074FAD85701522A4A4344 +BB087766467B1092E9E39F17E102A14DA28712591EC460A8D402D929035A469D +1B5D098190F4E61664C8A63BBE334ED5562441877A99B0D200AA114E2D03DE97 +130D476587CC81CC5704AD0D9083CE2F5EBB6CAC4CB03BB40D8BB8920C84703C +CA4EEB8F33911588241A4BA02A2E1A5C65B2F5AF7314C09416B20EBC97386D90 +EAB27919C307D3BCB700172A99B5BF37CABB3CBE3F1B075287D2D03721496D22 +DA6BD5BFF4E5E62611A0723BEFBB65797C88249C6804B6E93ADF3AEF7ECA513C +CFEEB66F779878BAAEAA20EAD7056B0F51F95051B6190115F4A447C53815B4EB +94B7900E623A1C41F9CAC0C7D65C2BB54EDCE5B9D76322903BC48DD047537D06 +46395296EC3E4A1BB6B153ECD9D36B9095C3123BA5B32BB8646698E8BEA95666 +F9867DE4ACDFC7CB44D4DCA8B3360E73F6D1EF7DAF326A9DDE9EC22C0616AD99 +5ED955DB0E578E7AA0FE141F3C44BB37CCA9955003FA5D945F4FA44482D44475 +0D9CFDE0DB6E3D7156629283E945C7DC35007BB44ADC0C29421551B4793C48F2 +9BB25FE573EB17CEA97DA58230B1286AC7CC5179C1E339C6743A0CC72BED3975 +1FFC2313864BA71AB5A722C00E0BBFF356348B9EE6D6F1A5458FBD460641DE67 +6E974FD89E45F9CA10F7E72AFE0343B7A8F5DA0495D358D702B8CBC79F9B473F +A8D9C902EF7F9B59C8CCEB6299A538909BF4FF5AD9185F99F14DA45709317129 +462012B5B4270A4311B7B6FCB7D3EEC1E5FB3ECCBE388630AF64D4156DCE0D03 +A26F66AF81AB3F8AFDCE48BAF70E9E4861737A012DCF2F8E77967F72F043795E +5C85DCA9BC49BF7A7E0C4522AF30FEA52A9C52C7E4D7CFA537B3777B782BD2AD +2BE35F22500446E1B61E594E911E488C18165AC0B01A7FE1283F7AFA381EB811 +F864B5DC6A4925609AF5039104060330DA2D27A5E2C8F1DF8283BD589056C0BC +6A02AF9989CA7CCF94C6F3D1473D196386A074428FF7583A3DEAF5A8D9B5D12D +ABDDCADFE4EEB2DF9A053FAAE82010A879995E8F9B2AC572645E8914165A1449 +44267068926D2CB31B354EA384DC109EE9F50E9E9E49826F205189A5BE89DE14 +AB5CA988D880CADEFB2BA5AC078A4CC2F33CCD0CA27C657302479A9D1AECE955 +4A7160DF4570E35B26DA90E9BA20148F729C24D7E74C8DD3DF4B207B32304280 +0D5F9406BEE42AE63DF1E5BD68AF1DF7DAC4602CFA999736A786ADCB18A9046E +3961277C68E81EFA14800841E91EDF1C77B00D3BBBECE7F9FE58591E1499715D +BFBA69ABE2FDD2B1E248E2D6DACB125EA43880F29C5A9CF3F0C7DCC43C354046 +8F93F19F6F594ADBE1E3EA938FDC047E52605E4742C428A67E9B18B76BA5AECF +B4AB1E00A48667BA44E189130C0C189D3F977F247164FE5A3A485B52541429AF +E9C1B32BDB3A2D014833FF94AE8EB067DD84122F7D2B51A21A62197EE11AE7C3 +AD85DAED544D576045F6F1A6D1FA0C972562D763104421F30841A8546B4A66C3 +CFBF5DFFEECC61140838C524385E9F7AEAFF5D1660C4359CE2E78CB8C005DE8D +C129827E86DAB8B1F9C5232D97EAA97AF610E3B44166E90224A0A91A43B02AED +B9E2BAFD21FE9DB02D9A9B22294B4013EC8EE266A787A8ABE1E628F72EBDD2A0 +AABE63827965B3200B83B5059D833A971F9042AA546363A80E62311D1FB318A6 +1188E0BCF3F2BD0FDB4F2263C121AB8A07AB275D0BDA536B6CC142B767925465 +964B038F7BDCB7DF5EEB740CF338527D072EFADD16DB5F6BA52A84479542AA51 +F28190FAB15EA23C228A61405811005C7CE0E21EB79649AD6289849F053915FC +5B8555D2BDE28735312FEFFFF4E23C2C2404934D9F7D885F1EC3BAEF0E289CF6 +ABA21F54E0702408F4AAE78D411848AD2830BAE81CF1431011B59E329E07F51F +051FF0C40A804A67734993DD8314E20219933E4711DCB5EDDB90EDC9FF0BC30A +263ED16549BBDDBB3C0898B06E5C52040D544324A7256E5805B68BE8EB1D54E3 +D5BF297005EC34D5BE3FD5C82C19F4E76379BF69EFEB4974D13AA7AC11F43AAD +992CC85847CB09275E8EBE85EB0C7CD557230C3A577BC6B4C2E195D2A5A374E9 +2AC334058123AD77C8B99DA9352A48E9E21E469EB42F554917178E8E63DE7067 +01B3794E24F711FF339AD59867FD694ECC777F6BD608E585DC55A46C10A42B85 +3FAAD25C96BAB1276EF252893DEF6AFB30922C5CA9330DD27385172A9262E84D +641317296A63FFCBF15238BECF67870A09151F99F4CDC061431FCCC3A59BE037 +38A8BFD875CF1475184A3A1C1AF840ED0A6DB62D3FE280A22E4A6FB5A1602ED3 +9FF7F89C106C69F1E4685C7973D284A2468E5B17DEC92AC3DC98DD86308956C0 +DDF05947422148CB98E196ACD07691CEE317FBBF893D19653CA5BF9D3E5E3B31 +8D29FF62600A5C0AFBDB300B186A925784BB46151968E1CB6CBEAEA939D245BE +ADDC77901D84547E0AFB043962B83CC3C741B4B6707FE0E90B5602E4D6793790 +BD15A6522E1D9CFBF761A99BFEC1E7F19BA9582DD6EFD5A9FED8C3ACEB794B62 +90692AA1C5B60032F51633726FBB9D0214F1D67F6FDDC2C84893E2183E1C697B +66D747E980599F5F210FD58EDBC690A062054BF232C89F7035796A4158E142F2 +7421B25DE02811392DE83040DE3BD824F525CBD1FE2570384488DBFE213DA394 +B75D8CB9AB47589F6ADD12F5AAEC6FF5D40CFBA3F9A960A55D07BF742002CC22 +D8018F0AD5FA0F2E220190F6067E08EED313089A2C3EF70B3BE3C3A1A5355EBF +70534AB7B3970DC59493CB1EEAE581219911505BDA51F935D2CCF68DABDB3FD6 +ABCC410555D070321F4239E4BD67BFDFF52527C624694115672D0CE4FB406BBF +09535C981528C0CD78DDDFC9617FE2443B77FFF4CA6D0D6D07EB6349EF42591D +53866DB3B1C7B339613B4ED674CFF7E54CA0F7A50B22B4AA482F15251303857B +EF072F6ED2F967AA49396FC347E94B2DE393BB65F21606C540D0274E2E873201 +9E683958FE822DF272E5D5982EA16764FA0D5224C28237F77669875A5F2E5A5B +B4E303D11D4CCCB2A6F752CF2A24ADE9B924DF6A4267F51C6E4EEC44B54A8E1E +8A4953D50BAD05CBC973541784BE5B7824F8C286F3E9E15FD0AC0FE379F65526 +0239AE2288A59FC5A5D21EED17A5AD8026D15461D07035F7E07774D7AB38C184 +7CF07B72515656D190F5AB8895C978861C89ACBD621C656CC60DBD68F0B93718 +7DF9CC87B75A7C671181321A0B08386BD32C46B66A4652B38C1D022B29E3FC64 +B9E3CA763C617BED7C6553A4E3F8E3B96F46E8D8C959CCB54BF082E87C276ADD +12C976EDDBF1D4567688CFFE8C87A26A467A3F0AA27C168B5D9EB2E8B3A9DCE3 +435445740639263C7F73C35BD8F94EDA59EF7109DB8CFC538D7CBEB46FF779C5 +67B6760743DC1FE4EF1C4BA2485546139259A0390E1E754AD592F94740A3FE5D +6A23B53E7B56F160D45B7FC5D6CF514A7133A97F94AB941E586A184B84885690 +AF9BB6BA97EE23D47EAF47002271BED4285C291230DD7FA1192B7095FB192FD3 +598AD508F9488DBB15D8FB8737D9A6F92BD67C6137C0F7B4E5BA87AF4E70CA94 +FC4C6B1623F3241A95B5DBE3F695F3832D0C4534131FF5CBC576E5C555276C39 +B417935D5597C5A8D5911B83B57EE28DE46D499FBE3B9E9532EF1C67161BCD3F +27DF27B347FD143E742F3D2705A244F732704DEE5B4A8DC6258E2AB3DC113DB6 +A08C1604CF5961159E806FF8FEA1D999C484731B1F05CB62A54CF6BE2D51C232 +3766419DD93FD8A39014046FD92D04726692B6EB2832EBA553BE71782D70A32B +D5C1CB8DF387BCE5C635A19AABA0435547D85116408AE2B783549D8A3A029374 +9DB669DCFDA30485AF3B79B2173F28CB28245F2F5F68F48D08BEBC6A8FBDFA47 +6C98B7FB2C42C8666E5F2D7D37CF8959F1C98C4EBFD3CC7A4E867444A6AACB51 +0153C40A874BEB0BBD655695D234D85F434388FF33CCDA1DF7CB5537CEB03DF0 +40F1697B84E4E7B63825A47994C4E2E9DCB45E77D42732E699BF16ADADB39555 +17D808354D06277EF766613BDE1A622AE94447F342FEC653F142EC2797131C72 +B3C8CC6376150E1556CE2E35F3C20FB154FC2ECFCD630D5BF852D4496BF6CF5D +9E33D3481E968DEC65D1246FE19678C33ADF6009477CED02190076D4C08732EC +F6144083DD3BFC5763CBE8A747F163531CDE873129E314F30596C2C332D5D98B +0FE07C0364B76718CF58FED0B123AB7B217F503BF637A8D9C41AF071B7DFC954 +9C4B6ED150F7DC41BC7F94AFBDB81F367143567AD4A5DA72D82EB109D126004A +4EE29C513E0FF34DF8C77B002E1EA48AC0D281ED349C7F187B842B045635157D +E6C89926E90AB4B066E30C81EFBCE680ECC7191DF3DF03EA1D21EEF9DE3500F7 +4280682B7AFEBCD882E5D682121C807F147029FBE12D6F4F26F2ACB5BB140AC5 +B2F80BDB64B1F9E30324838562B3B4C3B36EA748FA54BC1180BEF7596D9A387C +A057B81EA7CAED9604B7AE6725D31AF3F68BDA19D38E3A48DA9002A2A03814B3 +21A422FA3428E1B2DC2F91F7FC2788496853FE5DFC08CAC72BE1E9F21B54D250 +1BD632321EF35F8A6BD9B90FAD3AB00D0DED3115C757D0D7838AA4483FAF3260 +F36FB719D17A71213F6D77AF59B77B9B5C0EB83C2CE63C868DAC1A5783FDADA1 +CEECE8B6C64034CFDCE117CC166AF4756E7D597EE125FDD6CBC62C9C09387E78 +82BFBE125C7758F69C59938A25B9D92319E16FE252E9B80E8AC99F99E5517537 +C2326EEE1175EF35D500B0FBB677117531E81EE0C4A1EB80C3BAC6D34728FCF9 +165554718D6DAB4E35FA736DDBDD5FAEA6C45664D966DEC76221664C90BC9CB8 +B6D14C5A98204FB1A03B3040B1BFD03D5DE85305C82C0F810A41697C0F98EBE8 +92BA17C8088F8F17BED5E28DCDEC2B30E04C9EAF1C2FE159FB36A451AA188F66 +A1380CB589FCAAD963ACB42BFF3A692252235BC1ED6D88607C832D1FFAD29CA2 +4C5E8BACE100E5ADE2D90A6F0B4D6BAAC9CC1823F7F57EAC3B6491F3DAFD27B1 +0CDD9EAC4E7EC8EAF0BAE3A264C974207B9A1547F1AA810BAE610269E30427D6 +33CEDD3367F63A0F3E9750C0B81196D22707CAA85D1D8367B962BDF8371035CD +5F8808BA6E59E9697762B35507892B967ABBF2D23CC615D6879D08E758DC056B +48403AD1F51EEB69C715B93EB220E8307239FD7EB6EB50BF5C303234CF5D2D38 +068B87644EDD64FF1BC9D21A25E19FBB06497B8311BE186600CB435A4A8DA958 +2B8B5DC45C17A366C3CCA1CE7BFFE2CBDC981C770296996CC04A3CEEA54F141F +C27DB1A955FFBEF340ED8359D2ABA8902D422DAB429989186DA433FA6CEF749D +83ABCC919D81270F423AD0B5B40BA5A46CD9E64F7D257957506EA444BD3C24BE +C5FBE4AFB68423075C039B0AE4B6F0FD79C2E4E5CC67127DEFCD5FCAD83BBC55 +315B1C1CF70C1CD983192A60C7810AC6BFCB349EC9E804686842CA2CC18E8E2F +861C4F72527DAB3C17D079C539237E16F17A04A8B041D9260F27586166FA1817 +8D6F992BA28F34EB93EF5FE24C8D785A0B1E46BD9FACA23BD95C52969C04EF85 +12E996408FD067B7355FE30052CA982120C96F7AFB1B7E1B166F0C6CD4658AD7 +2475A208BE31B8B78EE92FD854555CF55F9BEC2C1EB357D2F47A2335020AC69A +26302B929478B5DCECA0E02B4A5DE4D11832C2BA21D1D930A95DA2A5C0C10C0E +95D576CF25E375B13552FBF981F4E59D2CB54E20FD13DBBA5A5521A056D0ABA7 +4664B33CF7AD67E473AC828D6AF28C20A56195512DB755A1041E909087287AE0 +83C273A01698A56B57C9EC85F00CBC98E6032FFAC3B59F900C2379D79E7714DB +0A4479222B1C39C226317B8258EA2C1EA34D41C4A02DE08920CEEB43EF79BBB9 +CFF64F081D06ACC28A74F3250E97BB922D72526D59437ADA5A89327FAC99F199 +4627F2648BF82DB67C58A296307257BA244E4A62F7F91C2F9DCC37891548304E +204BFC66AD1B0ACC856F3758620C40DB20B801C717B41384FFF5A8A3D4F7DEF0 +4A9F06DF41AB92E1CCE74A29C2619AC2EA75E7CD1B5F0E3522616F8E88B43F2C +0ABB6F5102739C2DEDEBB504FF3C4B0D9EB700FA7D4D4226C87F3240376D1287 +A34FD6C9C98AA1EC78917790B2A02D9282A06DA9ACF175FF68C544D8592F27D3 +AEFCBC1D51420E74525759C9373B96E48052E307064B6D35803639833C09025A +4D8D3173A866FC18FD5D5FF9144DABBE9F4669E07B378787F5F789B60A45FEB1 +A9189F23235959D020AAFD63D21F084A85BC7FF55D3AB19A586360D32BB11AB5 +6F2DCD917C772C360832722C30A2113E79B0C5B2E89FCAFF5E1A5F2286BD6692 +4B3072D0ECF3E68A360F6BF3ECAC4DFFBE904A5B9F61DFE111231291E1A53319 +D76434C10FFF82D29B991A0C4B88C6959706F9CEB453F8F36575FCA16A65DE55 +41743A97917D1E0B3573D424495B4720BBF0195C8E2E5EEBFF712320B75139EC +26D99B1FD3824113C4E1F14C5CC8FB933F7F89F5009BF6B6D73070EFF2032CE7 +CF529F556978A5AD9ED47392F3600F35451BAF5AFBF28556838F5029A02DFE6E +3B2AEA21BC5BC26A2B1D20F2231DA6DA0D248F15112BD91F7F8715129ABC72E0 +9B03A531543D714C7DFEB598411FC67A646A02C6041BF8083EDFAC7278FD3CCD +BA19E4B8FDF9D0B33E12659046184D4003A1D2FC611E5B8785C32DDA2BDB7051 +D99131B4B416224FF72598DF55E1A64D1808C3D5C48AA89D2AA73B043A41292B +BBB5EB3117F3D22B114C9FAF5B2F3813E95CE185893CED08206497F88DCEF5A3 +D0601E389CC7D36E67B356F7CCDF29B9CE66FC9F10426C68A307678E732E65B9 +AE1DE33EF0D72B53232794EB0998EEBCE8E942211277B23F9753DD001057E6B5 +8B05762EC008B3012557755DB6091AFEBD775CAF80E74D46F710FE94260A9699 +73F38BD12173F7D8B988CBF5FC717B0F0EF86C9A16F862ACACAAF357BC227B79 +69318CF0FC41E025FE8CC20E8C283FDC4C2E0A43368FE776B3014087057383C0 +01356B19E0EC1B934641962B3219B455CD0886428868F847A53FEABCEC007CF7 +FAA7B412FDBB5D499A913802B5B47E1C6620AA69C08A3C2011CA4BF5BFCC5A7F +F67341F5815F54966D7A705F218F1CAADB1F6C4D995CD2DED42734195A5778F6 +F08F21A8B1A6AA94EB985FC5ED097E0C6EC6B64E7753F7F47174A76F6C83C5DC +5AFDCF3542C5789D6FC1E4C3AD4A002548E2AA1B58B4B6377A63ABCA36EF8503 +E2A5E671721ACF08EE114B15DD3FF3432AB5A3737038E206B3E41154143C31CD +19F0A836059717AD52D234E80728C45E9C5AFE77336EFCA03DC17DC220387D5C +746FD91FD9134C7746DE781EF2CBCCC7B23513F5FB378208EA780240984E5F64 +B16A28AC72B6EDCADFB7F8A74CA9B2046BF517D240017A0D7599E1C438672CEF +357029DEB184F858587692D821F35F4323E719BC536E79E08B4A029A904CE5F7 +E69EDF9165587E6AB8BDC5B4C97DF4FAFD1BBCF5FBDEA08666C1581E81CD1CAF +8F97DB072C5DD844F926A9EB97C4F61B08E9444E499B766A006BC862A33DA6D7 +9D4B06F45C41BDBB88DAF955CC81A1B4E0C01E4C4041F55F0301D96264CE2DB3 +BD97705F38D5C5F91E1137AEA6D1CF25BA796125281D860778493AA4AA987209 +B32193D51DB37146B662C28213DC739348820EEBF40097E303F336B0E5452714 +BBF9347A3A6208F7A99EBD2A2A30A2AD1ADDE453E1F8DFC3C88D701139BC9AE6 +AA2B1840BA8076C46B0F9E78C2C2CC0C921140D74566D73368F000AEED735404 +C9679310E32A8EDDC903BFEC1E9903B392F9DDCAD95A9BF5613C9F32922BD984 +964C315C82D055790ECF0C2057BEF86680223FB6706382EF3B659275EF2A8CD7 +7A76B74E385D03BCD85965E8572886C60CE4023DF2C0697DC392EB3A6C00DDD9 +1E6E45BE9F53A9FEAC947D3E096B7961AF91565440E812C5A7D83969B0BE6771 +CB1909DE54124193C29C4B645CFE6402D61F04AF66467C3D17FCB62BB94E2EEF +008E41CB7D3ACB8F32D9CA072AB43EE1C1685CBF833E9F3F3A24F5D393928BF1 +F5259F5C6E43B330D16E57E380831CF8DF91A88FCE3B3D8418DBC66BE11E997E +DE181B74BD20E58292AA0F246A6B362CF8AB7241A14140B5E8491746B82DE8DA +AA47E19C60A9A639B86F889CDBA8F97B967C14B6C44DE3741377A91D982282A9 +BCEA2A6835AA78E9E2371BEFEAE20377D99A334674D8947BB31F1430D9FFC575 +70F8FCFA82C18F4DCF95A43D5802F5B36E35A2C35DE1CC682AC18599FA3012F4 +581803716FC5CCC1A07E969455E0C50E11F93A488CEBAB334DB25B261CCD0689 +7581387843A6899B24F56923EF3585087A6C8B72A64D8641DA5BB5EF06A6C152 +4E984B362F8A6A5193D577544914B99A1C6BEA7BF81994C5349F492B2CD24524 +81A2BF350C6731AB45269AE09876657704EF1B79AA97C4F7BFF4B37C8D13C925 +4230CEF025F3D4BE4C7305FEE0706E98DA8FD8A8B15C73F70511E6F087F6099B +D3B611B155F44498112DC5135F160CA8AF802C340AB6F9D364B4816C7F27AC1A +C2EDADAF9D08D6DA6665857FA624F9446F0857E55E7FA0B24962077E28BFAE21 +CBA750E25DFEA6866AFA16831BDD379E9023855E10998173EFA0D6EBFAA50DC6 +186F818E3BCD1D28CD26C4A765CF910D732143849A07341A74D7CA02A189D7CF +06D1A300E4395AE338F82D7CA2FC1AC2BC97C55F12CC9814DBE0E63E6324F1EB +B26D42C3A6301E62950E95DDD77B6891F32A52E1C32A62F818076FC2597B35C8 +5047DF2A617E406535CC9131A752D72CA7DBAE21FAC20F0F8AD0A5E178F6866E +31F47985D2BEA16113C565282B95773F442BBCD93DB8796ABA334B2AC2F44820 +94DDB75A09865085A431C30297136A9CD11606DB96D23BFB4CDE7E86987EC23D +CD8DC5DBBC0AB039AAE122E4022563EE9F42550455D2DCDE252446A840ABE95C +83D0C08C742B07E0F60E0AC814484FB923853BA86BA0263F33B8117C04A032E5 +19C31DA49C415A88D571683A9DD71B0CE768400A38A0598868C5D3EDE3ABF457 +1AE5273F0C938CA9972A824F1539561B9E1902E084B715F91BBFA116B69D3863 +4C3BC54790D765950E4E265B401FAD2CA1A9C4C403836D210F0ED3F49F9238D9 +E807D20B45253E9DA6EB5F0C62DD28C45E97F9A156E5CFCD917BCC2C5C6C4D0E +E5EB5951A5224CA5F3409BFE141B39411BC4AE9D684BEDB184D142166921BC37 +A5A8AB55A5E4C880E11712FE426387932E81E4397369FC3DDCC2FC500D3369F4 +DCF3C7D41247C64DB135FFBF902278915072F2429DACBA13C4E5204DB0A95E08 +B27AF658C0A89FD06CC480FA06CB7A9AE207A03246506686614CBBE0337879E0 +5DACB5F87D683B5743F51222AAEA1825904FAF8A06E0C211AB4B1CABFEB9024F +BA6682E084DEBAB5B07F87E1993D099239DB4160A13083F594A7137C6C5B75FF +B7598EEC6237290289717BD0DEA47D8BC6C9D1203C9F1ED41AAC61BA7ADD08A6 +479438422AA797B425D4FE24FD73A40C49939BEFD3ABB6DBD0E4F1BE0C97E48B +90353410115BD78333121A077F3D5F3DADACBD245D3DE1CC49B7B03D27BCE112 +182C43F6DFB5D469647F516437CB919680840BCB0B2606F5CF193AE1DDCCF1F0 +7642F51EF18D9464624FE91B6742B3DE13C80055AF147FB4AB3FF81CF54706E5 +26B74D1F67F521F1BC12786269D1EDB56995883B70D4A6DF033E8DC00881459D +9EF961015EAF986BA700B99E7320CCFE1DE94318B2FDAE5FE89E3A9CD88CED01 +131EB3150A6F1CCA297A400D76ADAF034223D297D40D5ED09DA675FDB648A9B0 +504D1FDF54F7CAFC76003542F8FEF5FA5A4031DF659738C2ABC150D4C3BBF919 +D12E35E53E88E8E51611F98882B3D19DBC1B01609DE1B37EF23916CA1DCF34E4 +F2CC8EA132A8C919F759FF9FF4DF5F357ECD9BE2B59917ED26EDFFD6117749F5 +1AD83D6CE0EF62BE8C5BA0C9CD02FD289128B780BD3C9E9D36A6060ED7C361BA +235D1053F3A89BFC628BC29807341923FA1131533B3385323B0CBCF3513EC6C9 +DB1C6610173043F2B1B046A87CB974DE2111867EFF48744B09EE03E706B2349A +DD46B166EB34A1E3B9529D93E3490DD59252986E31DB190BF7181B0BB2EFDE85 +090BC6D860602812B7E427676AEC0983657FCB078A5E109F2EA6CA54C74CD6FF +BDF265D4DF1C616D4D38D4CFA701F4D7DB4E5F5A71FF49F9B803FEF48FB7A12A +47EA1BF744CE1EBE1ECB03082A5A4AF48F51565D3A9AA75DDA3A8A9F07E338A3 +D1D7FD05DD6E5A414BADE9B85CBFE248A67405355663133FF258751B870D2C67 +027F573EDEE10A063527D463E56A915FC85BC040BE2CECE5FC24091BF4032139 +D941E3E2AE0AD04F7F015B74F7E13F8A27122838E5CFC2D7D9616F4BDB8C9A9A +5FF5A0695E27BC9FB79644D78257E15AE2913E85FAA7D8B49A7F867A3FFC61CD +F25A67ABA72FE52DD506104E240301511090E98F3004035C77265A717EE404FE +D8353A33FD271501FCA17BDEE34FDDA68062C5E4210C7F0F3E757BD73F9B2148 +FAA02D5155BA5B2D9B5E8026F3736549327A7878E3E7E3DD58F762A16CFEE342 +563C25EC491CB163FB913CB8174B36CBD786774D326CA5D5BA9BAA4D90B5BB36 +8043F03E135FA03C28F0C0D4661DBD7F183836657FD5DF788D848102C7B1A90E +2E503439DBAA4C9A85526BEFD195309C2432179A8BA015E02E4BBB76D83F6B8F +B79769352A7DB5ABE7B9BDB43F1521489D82406DD6FE62648BB112889DE7C07B +6002D11B70359EFD4AA14021CF2FBC288E8176DAF838D6A77D43A5E1289730F0 +1756B22B134D684DAFF8C0F5A3446EFAD156DFD944DFAE3CDAA5EE535BF135BF +1C64AF97B41AAB3347415DBD952D7338B24F9883ED1AB8B14B8AEAD004A7B884 +C2FC9A2988A5C6B7F4D8275046A14C0EE040CA7E8892D45CA9E7918BFB411858 +F76CF5D170A8C48F24789CC75530198DA4C06EA8F1D619654969A56B76B36278 +B5C4DD208B1D8CE49EC1C0A1742A65DE1B67BA78BA700E3264406B44802F7BCD +A31AE48FC019CBCED968544EE30ED08FF895B66DA547E9027CB8D833518859FF +CE2E34E451165F1D59AB38 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2298,7 +2307,7 @@ @start /Fa 242[61 13[{ TeXbbad153fEncoding ReEncodeFont }1 49.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 -1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 4[30 1[30 30 +1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 4[30 30 1[30 1[30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }40 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 @@ -2315,15 +2324,15 @@ 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 3[35 1[35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 33[{ TeX09fbbfacEncoding ReEncodeFont }86 66.4176 -/CMTT8 rf /Fh 134[60 60 2[64 45 45 47 1[64 57 64 95 32 -60 1[32 1[57 1[53 64 51 64 56 10[87 88 80 64 86 2[86 -90 109 69 2[43 1[90 72 75 88 83 1[87 19[38 32 44[{ +/CMTT8 rf /Fh 134[60 60 83 1[64 45 45 47 1[64 57 64 95 +32 60 1[32 1[57 1[53 64 51 64 56 10[87 88 80 64 86 2[86 +90 109 69 2[43 1[90 72 75 88 83 1[87 19[38 45[{ TeXf7b6d320Encoding ReEncodeFont }37 99.6264 /CMBX10 rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 20 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72 53 53 51 39 52 2[55 53 65 44 55 1[25 53 55 46 48 54 51 -50 53 6[20 6[35 35 35 1[35 20 24 20 55 35 27 27 20 2[35 -59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont }69 +50 53 6[20 5[35 35 35 35 35 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 53 40[{ TeXf7b6d320Encoding ReEncodeFont }19 119.552 @@ -2338,78 +2347,80 @@ %%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.23\))-150 -36 y Fh(Getting)37 b(Started)-150 96 y +(4.00\))-150 -39 y Fh(Getting)37 b(Started)-150 89 y Fg(\(add-to-list)i('auto-mode-alist)h('\("\\\\.org$")e(.)e -(org-mode\)\))-150 179 y(\(define-key)i(global-map)h("\\C-cl")e -('org-store-link\))1504 155 y Ff(2)-150 261 y Fg(\(define-key)h -(global-map)h("\\C-ca")e('org-agenda\))1364 237 y Ff(2)-150 -343 y Fg(\(define-key)h(global-map)h("\\C-ct")e('org-todo-list\))1469 -320 y Ff(2)-150 442 y Fi(F)-6 b(or)23 b(the)i(man)n(y)f(customization)h -(options)g(try)68 b Fg(M-x)36 b(org-customize)-150 511 -y Fi(T)-6 b(o)24 b(read)g(the)g(on-line)g(do)r(cumen)n(tation)i(try)111 -b Fg(M-x)36 b(org-info)-150 716 y Fh(Visibilit)m(y)h(Cycling)-150 -872 y Fi(rotate)25 b(curren)n(t)f(subtree)g(b)r(et)n(w)n(een)i(states) -291 b Fg(TAB)-150 942 y Fi(rotate)25 b(en)n(tire)f(bu\013er)g(b)r(et)n -(w)n(een)h(states)384 b Fg(S-TAB)-150 1011 y Fi(sho)n(w)24 -b(the)g(whole)g(\014le)854 b Fg(C-c)36 b(C-a)-150 1195 -y Fh(Motion)-150 1351 y Fi(next)25 b(heading)1043 b Fg(C-c)36 -b(C-n)-150 1421 y Fi(previous)24 b(heading)921 b Fg(C-c)36 -b(C-p)-150 1490 y Fi(next)25 b(heading,)f(same)g(lev)n(el)685 -b Fg(C-c)36 b(C-f)-150 1560 y Fi(previous)24 b(heading,)g(same)g(lev)n -(el)563 b Fg(C-c)36 b(C-b)-150 1630 y Fi(bac)n(kw)n(ard)25 +(org-mode\)\))-150 172 y(\(define-key)i(global-map)h("\\C-cl")e +('org-store-link\))1504 148 y Ff(2)-150 254 y Fg(\(define-key)h +(global-map)h("\\C-ca")e('org-agenda\))1364 231 y Ff(2)-150 +352 y Fi(F)-6 b(or)23 b(the)i(man)n(y)f(customization)h(options)g(try) +68 b Fg(M-x)36 b(org-customize)-150 421 y Fi(T)-6 b(o)24 +b(read)g(the)g(on-line)g(do)r(cumen)n(tation)i(try)111 +b Fg(M-x)36 b(org-info)-150 622 y Fh(Visibilit)m(y)h(Cycling)-150 +775 y Fi(rotate)25 b(curren)n(t)f(subtree)g(b)r(et)n(w)n(een)i(states) +291 b Fg(TAB)-150 845 y Fi(rotate)25 b(en)n(tire)f(bu\013er)g(b)r(et)n +(w)n(een)h(states)384 b Fg(S-TAB)-150 914 y Fi(sho)n(w)24 +b(the)g(whole)g(\014le)854 b Fg(C-c)36 b(C-a)-150 1095 +y Fh(Motion)-150 1247 y Fi(next)25 b(heading)1043 b Fg(C-c)36 +b(C-n)-150 1317 y Fi(previous)24 b(heading)921 b Fg(C-c)36 +b(C-p)-150 1387 y Fi(next)25 b(heading,)f(same)g(lev)n(el)685 +b Fg(C-c)36 b(C-f)-150 1456 y Fi(previous)24 b(heading,)g(same)g(lev)n +(el)563 b Fg(C-c)36 b(C-b)-150 1526 y Fi(bac)n(kw)n(ard)25 b(to)f(higher)g(lev)n(el)f(heading)424 b Fg(C-c)36 b(C-u)-150 -1700 y Fi(jump)23 b(to)i(another)f(place)h(in)e(do)r(cumen)n(t)350 -b Fg(C-c)36 b(C-j)-150 1905 y Fh(Structure)g(Editing)-150 -2060 y Fi(insert)23 b(new)i(heading/item)g(at)f(curren)n(t)g(lev)n(el) -195 b Fg(M-RET)-150 2130 y Fi(insert)23 b(new)i(TODO)e(en)n(try)700 -b Fg(M-S-RET)-150 2228 y Fi(promote)24 b(curren)n(t)h(heading)f(up)g -(one)h(lev)n(el)285 b Fg(M-LEFT)-150 2298 y Fi(demote)25 +1596 y Fi(jump)23 b(to)i(another)f(place)h(in)e(do)r(cumen)n(t)350 +b Fg(C-c)36 b(C-j)-150 1797 y Fh(Structure)g(Editing)-150 +1950 y Fi(insert)23 b(new)i(heading/item)g(at)f(curren)n(t)g(lev)n(el) +195 b Fg(M-RET)-150 2019 y Fi(insert)23 b(new)i(TODO)e(en)n(try)700 +b Fg(M-S-RET)-150 2117 y Fi(promote)24 b(curren)n(t)h(heading)f(up)g +(one)h(lev)n(el)285 b Fg(M-LEFT)-150 2187 y Fi(demote)25 b(curren)n(t)f(heading)h(do)n(wn)f(one)g(lev)n(el)233 -b Fg(M-RIGHT)-150 2368 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 2437 y Fi(demote)25 +b Fg(M-RIGHT)-150 2256 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 2326 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 2536 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e(up) -642 b Fg(M-S-UP)-150 2605 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e -(do)n(wn)558 b Fg(M-S-DOWN)-150 2675 y Fi(kill)23 b(subtree)1097 -b Fg(C-c)36 b(C-x)g(C-w)-150 2745 y Fi(cop)n(y)25 b(subtree)1052 -b Fg(C-c)36 b(C-x)g(M-w)-150 2815 y Fi(y)n(ank)25 b(subtree)1046 -b Fg(C-c)36 b(C-x)g(C-y)-150 2913 y Fi(arc)n(hiv)n(e)24 -b(subtree)976 b Fg(C-c)36 b($)-150 2983 y Fi(T)-6 b(o)24 +b Fg(M-S-RIGHT)-150 2424 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e(up) +642 b Fg(M-S-UP)-150 2493 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e +(do)n(wn)558 b Fg(M-S-DOWN)-150 2563 y Fi(kill)23 b(subtree)1097 +b Fg(C-c)36 b(C-x)g(C-w)-150 2633 y Fi(cop)n(y)25 b(subtree)1052 +b Fg(C-c)36 b(C-x)g(M-w)-150 2703 y Fi(y)n(ank)25 b(subtree)1046 +b Fg(C-c)36 b(C-x)g(C-y)-150 2800 y Fi(arc)n(hiv)n(e)24 +b(subtree)976 b Fg(C-c)36 b($)-150 2870 y Fi(T)-6 b(o)24 b(set)g(arc)n(hiv)n(e)g(lo)r(cation)h(for)e(curren)n(t)h(\014le,)f(add) -h(a)g(line)f(lik)n(e)1495 2959 y Ff(3)1533 2983 y Fi(:)-150 -3057 y Fg(#+ARCHIVE:)38 b(archfile::*)h(Archived)e(Tasks)-150 -3242 y Fh(Filtering)g(and)g(Sparse)g(T)-10 b(rees)-150 -3397 y Fi(sho)n(w)24 b(sparse)f(tree)i(for)d(all)h(matc)n(hes)i(of)f(a) -g(regexp)92 b Fg(C-c)36 b(/)-150 3467 y Fi(view)24 b(TODO's)e(in)i -(sparse)f(tree)580 b Fg(C-c)36 b(C-v)-150 3547 y Fi(global)24 +h(a)g(line)f(lik)n(e)1495 2846 y Ff(3)1533 2870 y Fi(:)-150 +2944 y Fg(#+ARCHIVE:)38 b(archfile::*)h(Archived)e(Tasks)-150 +3124 y Fh(Filtering)g(and)g(Sparse)g(T)-10 b(rees)-150 +3277 y Fi(sho)n(w)24 b(sparse)f(tree)i(for)d(all)h(matc)n(hes)i(of)f(a) +g(regexp)92 b Fg(C-c)36 b(/)-150 3346 y Fi(view)24 b(TODO's)e(in)i +(sparse)f(tree)580 b Fg(C-c)36 b(C-v)-150 3427 y Fi(global)24 b(TODO)f(list)g(in)g(agenda)i(mo)r(de)389 b Fg(C-c)36 -b(t)1466 3524 y Ff(2)-150 3617 y Fi(create)25 b(sparse)e(tree)i(with)e -(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)-150 3687 +b(t)1466 3403 y Ff(2)-150 3497 y Fi(create)25 b(sparse)e(tree)i(with)e +(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)-150 3566 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 3767 y Fi(agenda)25 b(for)e(the)i(w)n(eek)823 -b Fg(C-c)36 b(a)1466 3744 y Ff(2)-150 3837 y Fi(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 b(C-t)2046 -145 -y Fi(view)24 b(TODO)f(items)g(in)h(a)g(sparse)f(tree)380 -b Fg(C-c)36 b(C-v)2046 -75 y Fi(view)24 b(3rd)f(TODO)g(k)n(eyw)n(ord's) -h(sparse)g(tree)258 b Fg(C-3)36 b(C-c)g(C-v)2046 22 y -Fi(set)24 b(the)h(priorit)n(y)e(of)g(the)i(curren)n(t)f(item)369 -b Fg(C-c)36 b(,)g([ABC])2046 91 y Fi(remo)n(v)n(e)24 -b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)j(item)179 -b Fg(C-c)36 b(,)g(SPC)2046 172 y Fi(raise)23 b(priorit)n(y)g(of)g -(curren)n(t)i(item)557 b Fg(S-UP)3626 148 y Ff(4)2046 -252 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n(t)g(item)538 -b Fg(S-DOWN)3696 229 y Ff(4)2046 384 y Fi(p)r(er-\014le)23 -b(TODO)g(w)n(ork\015o)n(w)h(states:)33 b(add)24 b(line\(s\))g(lik)n(e) -3505 360 y Ff(3)3542 384 y Fi(:)2046 457 y Fg(#+SEQ_TODO:)38 -b(TODO)f(PROCRASTINATE)i(BLUFF)e(DONE)2046 537 y Fi(p)r(er-\014le)23 -b(TODO)g(k)n(eyw)n(ords:)32 b(add)24 b(line\(s\))g(lik)n(e)3314 -513 y Ff(3)3351 537 y Fi(:)2046 610 y Fg(#+TYP_TODO:)38 -b(Phil)f(home)f(work)h(DONE)2046 799 y Fh(Timestamps)2046 -949 y Fi(prompt)24 b(for)f(date)i(and)f(insert)f(timestamp)266 -b Fg(C-c)36 b(.)2046 1018 y Fi(lik)n(e)23 b Fg(C-c)i -Fi(.)31 b(but)24 b(insert)g(date)g(and)h(time)e(format)144 +b Fg(C-c)36 b(C-r)-150 3765 y Fh(T)-10 b(ags)-150 3917 +y Fi(set)24 b(tags)h(for)d(curren)n(t)j(heading)589 b +Fg(C-c)36 b(C-c)-150 3987 y Fi(realign)23 b(tags)i(in)e(all)g(headings) +613 b Fg(C-u)36 b(C-c)g(C-c)-150 4057 y Fi(create)25 +b(sparse)e(tree)i(with)e(matc)n(hing)i(tags)285 b Fg(C-c)36 +b(\\)-150 4126 y Fi(globally)24 b(\(agenda\))i(matc)n(h)e(tags)h(at)f +(cursor)243 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 b(C-t)2046 -145 y Fi(view)24 b(TODO)f(items)g(in)h(a)g +(sparse)f(tree)380 b Fg(C-c)36 b(C-v)2046 -75 y Fi(view)24 +b(3rd)f(TODO)g(k)n(eyw)n(ord's)h(sparse)g(tree)258 b +Fg(C-3)36 b(C-c)g(C-v)2046 22 y Fi(set)24 b(the)h(priorit)n(y)e(of)g +(the)i(curren)n(t)f(item)369 b Fg(C-c)36 b(,)g([ABC])2046 +91 y Fi(remo)n(v)n(e)24 b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)j +(item)179 b Fg(C-c)36 b(,)g(SPC)2046 172 y Fi(raise)23 +b(priorit)n(y)g(of)g(curren)n(t)i(item)557 b Fg(S-UP)3626 +148 y Ff(4)2046 252 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n +(t)g(item)538 b Fg(S-DOWN)3696 229 y Ff(4)2046 384 y +Fi(p)r(er-\014le)23 b(TODO)g(w)n(ork\015o)n(w)h(states:)33 +b(add)24 b(line\(s\))g(lik)n(e)3505 360 y Ff(3)3542 384 +y Fi(:)2046 457 y Fg(#+SEQ_TODO:)38 b(TODO)f(PROCRASTINATE)i(BLUFF)e +(DONE)2046 537 y Fi(p)r(er-\014le)23 b(TODO)g(k)n(eyw)n(ords:)32 +b(add)24 b(line\(s\))g(lik)n(e)3314 513 y Ff(3)3351 537 +y Fi(:)2046 610 y Fg(#+TYP_TODO:)38 b(Phil)f(home)f(work)h(DONE)2046 +799 y Fh(Timestamps)2046 949 y Fi(prompt)24 b(for)f(date)i(and)f +(insert)f(timestamp)266 b Fg(C-c)36 b(.)2046 1018 y Fi(lik)n(e)23 +b Fg(C-c)i Fi(.)31 b(but)24 b(insert)g(date)g(and)h(time)e(format)144 b Fg(C-u)36 b(C-c)g(.)2046 1088 y Fi(Lik)n(e)24 b Fg(C-c)36 b(.)24 b Fi(but)g(mak)n(e)g(stamp)h(inactiv)n(e)322 b Fg(C-c)36 b(!)2046 1158 y Fi(insert)23 b(DEADLINE)h(timestamp)516 @@ -2549,66 +2560,70 @@ %%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.23\))-150 -36 y Fh(Timeline,)36 b(Agenda,)h(Global)g(TODO)h(List) --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/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 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 427 y Fi(cycle)24 b(through)h(agenda)g(\014le)f -(list)551 b Fg(C-,)-150 508 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 485 y -Ff(2)-150 578 y Fi(agenda)25 b(for)e(date)i(at)f(cursor)661 -b Fg(C-c)36 b(C-o)-150 658 y Fi(global)24 b(TODO)f(list)899 -b Fg(C-c)36 b(t)1466 635 y Ff(2)-150 791 y Fi(T)-6 b(o)24 -b(set)g(category)h(for)e(curren)n(t)h(\014le,)g(add)g(line)1082 -767 y Ff(3)1119 791 y Fi(:)-150 866 y Fg(#+CATEGORY:)38 -b(MyCateg)-150 964 y Fd(Commands)26 b(a)n(v)-5 b(ailable)25 -b(in)i(an)g(agenda)g(bu\013er)-150 1062 y(View)g(org)f(\014le)-150 -1161 y Fi(sho)n(w)e(original)f(lo)r(cation)h(of)g(item)524 -b Fg(SPC)-150 1230 y Fi(...)30 b(also)24 b(a)n(v)l(ailable)g(with)781 -b Fg(mouse-3)-150 1300 y Fi(sho)n(w)24 b(and)g(recen)n(ter)h(windo)n(w) -626 b Fg(l)-150 1370 y Fi(goto)25 b(original)e(lo)r(cation)h(in)g -(other)g(windo)n(w)260 b Fg(TAB)-150 1439 y Fi(...)30 -b(also)24 b(a)n(v)l(ailable)g(with)781 b Fg(mouse-2)-150 -1509 y Fi(goto)25 b(original)e(lo)r(cation,)h(delete)h(other)f(windo)n -(ws)91 b Fg(RET)-150 1579 y Fi(toggle)25 b(follo)n(w-mo)r(de)861 -b Fg(f)-150 1677 y Fd(Change)27 b(displa)n(y)-150 1776 -y Fi(delete)e(other)f(windo)n(ws)791 b Fg(o)-150 1845 +(4.00\))-150 -45 y Fh(Agenda)37 b(Views)-150 102 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 172 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 242 +y Fi(cycle)24 b(through)h(agenda)g(\014le)f(list)551 +b Fg(C-,)-150 349 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)g(a)1537 325 y Ff(2)-150 +429 y Fi(compile)24 b(global)g(TODO)f(list)640 b Fg(C-c)36 +b(a)g(t)1537 406 y Ff(2)-150 510 y Fi(compile)24 b(TODO)f(list)g(for)g +(sp)r(eci\014c)h(k)n(eyw)n(ord)218 b Fg(C-c)36 b(a)g(T)1537 +486 y Ff(2)-150 590 y Fi(matc)n(h)25 b(tags)f(in)f(agenda)j(\014les)637 +b Fg(C-c)36 b(a)g(m)1537 567 y Ff(2)-150 660 y Fi(agenda)25 +b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 b(C-o)-150 +730 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 860 y Fi(T)-6 b(o)24 b(set)g(categories,)h(add)f +(lines)f(lik)n(e)814 837 y Ff(3)851 860 y Fi(:)-150 933 +y Fg(#+CATEGORY:)38 b(MyCateg)-150 1030 y Fd(Commands)26 +b(a)n(v)-5 b(ailable)25 b(in)i(an)g(agenda)g(bu\013er)-150 +1126 y(View)g(Org)g(\014le)-150 1222 y Fi(sho)n(w)d(original)f(lo)r +(cation)h(of)g(item)524 b Fg(SPC)-150 1292 y Fi(...)30 +b(also)24 b(a)n(v)l(ailable)g(with)781 b Fg(mouse-3)-150 +1362 y Fi(sho)n(w)24 b(and)g(recen)n(ter)h(windo)n(w)626 +b Fg(L)-150 1431 y Fi(goto)25 b(original)e(lo)r(cation)h(in)g(other)g +(windo)n(w)260 b Fg(TAB)-150 1501 y Fi(...)30 b(also)24 +b(a)n(v)l(ailable)g(with)781 b Fg(mouse-2)-150 1571 y +Fi(goto)25 b(original)e(lo)r(cation,)h(delete)h(other)f(windo)n(ws)91 +b Fg(RET)-150 1641 y Fi(toggle)25 b(follo)n(w-mo)r(de)861 +b Fg(f)-150 1737 y Fd(Change)27 b(displa)n(y)-150 1833 +y Fi(delete)e(other)f(windo)n(ws)791 b Fg(o)-150 1903 y Fi(switc)n(h)24 b(to)g(w)n(eekly)h(view)767 b Fg(w)-150 -1915 y Fi(switc)n(h)24 b(to)g(daily)g(view)822 b Fg(d)-150 -1985 y Fi(toggle)25 b(inclusion)e(of)h(diary)f(en)n(tries)473 -b Fg(D)-150 2055 y Fi(toggle)25 b(time)f(grid)f(for)g(daily)g(sc)n -(hedule)388 b Fg(g)-150 2124 y Fi(refresh)23 b(agenda)i(bu\013er)f -(with)g(an)n(y)g(c)n(hanges)239 b Fg(r)-150 2194 y Fi(displa)n(y)24 -b(the)g(follo)n(wing)f Fg(org-agenda-ndays)221 b(RIGHT)-150 -2264 y Fi(displa)n(y)24 b(the)g(previous)g Fg(org-agenda-ndays)238 -b(LEFT)-150 2334 y Fi(goto)25 b(to)r(da)n(y)1110 b Fg(.)-150 -2432 y Fd(Remote)27 b(editing)-150 2530 y Fi(digit)d(argumen)n(t)984 -b Fg(0-9)-150 2629 y Fi(c)n(hange)25 b(state)g(of)f(curren)n(t)g(TODO)f -(item)333 b Fg(t)-150 2698 y Fi(set)24 b(priorit)n(y)f(of)g(curren)n(t) -i(item)612 b Fg(p)-150 2781 y Fi(raise)23 b(priorit)n(y)g(of)g(curren)n -(t)i(item)557 b Fg(S-UP)1430 2757 y Ff(4)-150 2861 y +1973 y Fi(switc)n(h)24 b(to)g(daily)g(view)822 b Fg(d)-150 +2043 y Fi(toggle)25 b(inclusion)e(of)h(diary)f(en)n(tries)473 +b Fg(D)-150 2112 y Fi(toggle)25 b(time)f(grid)f(for)g(daily)g(sc)n +(hedule)388 b Fg(g)-150 2182 y Fi(toggle)25 b(displa)n(y)e(of)h(logb)r +(o)r(ok)g(en)n(tries)446 b Fg(l)-150 2252 y Fi(refresh)23 +b(agenda)i(bu\013er)f(with)g(an)n(y)g(c)n(hanges)239 +b Fg(r)-150 2322 y Fi(displa)n(y)24 b(the)g(follo)n(wing)f +Fg(org-agenda-ndays)221 b(RIGHT)-150 2391 y Fi(displa)n(y)24 +b(the)g(previous)g Fg(org-agenda-ndays)238 b(LEFT)-150 +2461 y Fi(goto)25 b(to)r(da)n(y)1110 b Fg(.)-150 2557 +y Fd(Remote)27 b(editing)-150 2654 y Fi(digit)d(argumen)n(t)984 +b Fg(0-9)-150 2724 y Fi(c)n(hange)25 b(state)g(of)f(curren)n(t)g(TODO)f +(item)333 b Fg(t)-150 2793 y Fi(set)24 b(priorit)n(y)f(of)g(curren)n(t) +i(item)612 b Fg(p)-150 2876 y Fi(raise)23 b(priorit)n(y)g(of)g(curren)n +(t)i(item)557 b Fg(S-UP)1430 2852 y Ff(4)-150 2956 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 2838 y Ff(4)-150 2931 y Fi(displa)n(y)24 +b Fg(S-DOWN)1500 2933 y Ff(4)-150 3026 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 3040 y Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h -(earlier)315 b Fg(S-LEFT)1500 3016 y Ff(4)-150 3120 y +b Fg(P)-150 3106 y Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h +(earlier)315 b Fg(S-LEFT)1500 3083 y Ff(4)-150 3187 y Fi(c)n(hange)25 b(timestamp)g(to)f(one)g(da)n(y)h(later)367 -b Fg(S-RIGHT)1535 3097 y Ff(4)-150 3190 y Fi(c)n(hange)25 -b(timestamp)g(to)f(to)r(da)n(y)598 b Fg(>)-150 3288 y +b Fg(S-RIGHT)1535 3163 y Ff(4)-150 3256 y Fi(c)n(hange)25 +b(timestamp)g(to)f(to)r(da)n(y)598 b Fg(>)-150 3326 y Fi(insert)23 b(new)i(en)n(try)f(in)n(to)g(diary)612 b -Fg(i)-150 3387 y Fd(Calendar)26 b(commands)-150 3485 +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 3555 y Fi(compute)25 b(agenda)g(for)e(calendar)i(cursor)e -(date)180 b Fg(c)-150 3624 y Fi(sho)n(w)24 b(phases)g(of)f(the)i(mo)r -(on)669 b Fg(M)-150 3694 y Fi(sho)n(w)24 b(sunrise/sunset)g(times)636 -b Fg(S)-150 3764 y Fi(sho)n(w)24 b(holida)n(ys)1014 b -Fg(H)-150 3834 y Fi(con)n(v)n(ert)25 b(date)g(to)f(other)g(calendars) -478 b Fg(C)-150 3932 y Fd(Quit)27 b(and)g(Exit)-150 4030 +b Fg(c)-150 3589 y Fi(compute)25 b(agenda)g(for)e(calendar)i(cursor)e +(date)180 b Fg(c)-150 3658 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 4100 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 @@ -2680,18 +2695,19 @@ 3585 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285 b Fg(C-c)36 b(;)2046 3763 y Fh(Completion)2046 3897 y Fi(In-bu\013er)e(completion)g(completes)h(TODO)d(k)n(eyw)n(ords)i(at)g -(headline)2046 3967 y(start,)28 b(T)-6 b(eX)27 b(macros)g(after)g(\\)p -Fg(\\)p Fi(",)h(option)g(k)n(eyw)n(ords)g(after)f(\\)p -Fg(#-)p Fi(",)h(and)2046 4037 y(dictionary)c(w)n(ords)g(elsewhere.)2046 +(headline)2046 3967 y(start,)19 b(T)-6 b(eX)19 b(macros)f(after)h(\\)p +Fg(\\)p Fi(",)h(option)f(k)n(eyw)n(ords)g(after)f(\\)p +Fg(#-)p Fi(",)i(T)-6 b(A)n(GS)2046 4037 y(after)24 b(\\)p +Fg(:)p Fi(",)g(and)g(dictionary)g(w)n(ords)g(elsewhere.)2046 4130 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702 b Fg(M-TAB)4242 -364 y Fh(Calendar)36 b(and)h(Diary)i(In)m(tegration)4242 -208 y Fi(T)-6 b(o)35 b(include)g(en)n(tries)g(from)f(the)i(Emacs)f (diary)g(in)f(y)n(our)h(Org-mo)r(de)4242 -139 y(agenda:)4242 -40 y Fg(\(setq)i(org-agenda-include-diary)42 b(t\))4242 -58 y Fi(T)-6 b(o)24 b(include)h(y)n(our)f(Org-mo)r(de)f(agenda)j(in)d -(y)n(our)h(normal)g(diary)-6 b(,)23 b(mak)n(e)4242 128 -y(sure)i(y)n(ou're)g(using)g(the)h(fancy)g(diary)f(displa)n(y)g(and)h -(in)f(y)n(our)g Fg(~/diary)4242 197 y Fi(\014le)f(add)4242 +58 y Fi(T)-6 b(o)33 b(include)g(the)g(Org-mo)r(de)f(agenda)i(in)e(the)h +(normal)f(diary)-6 b(,)34 b(mak)n(e)4242 128 y(sure)29 +b(y)n(ou're)g(using)g(the)h(fancy)g(diary)f(displa)n(y)g(and)g(in)g +(the)h Fg(~/diary)4242 197 y Fi(\014le)24 b(add)4242 296 y Fg(&\045\045\(org-diary\))4242 394 y Fi(to)30 b(include)g(all)f (the)h(\014les)f(listed)h(in)f Fg(org-agenda-files)p Fi(.)53 b(F)-6 b(or)29 b(more)4242 464 y(selectiv)n(e)c(\014le)e @@ -2741,7 +2757,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.23)h(for)h(Org-Mo)r(de)e(3.23,)i(2005)4912 3882 +y(v4.00)h(for)h(Org-Mo)r(de)e(4.00,)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 diff -r e26e2265dcc6 -r 14a4eb789b45 etc/orgcard.tex --- a/etc/orgcard.tex Mon Dec 19 16:13:20 2005 +0000 +++ b/etc/orgcard.tex Mon Dec 19 19:57:22 2005 +0000 @@ -1,4 +1,4 @@ -% Reference Card for Org Mode 3.23 +% Reference Card for Org Mode 4.00 % %**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.23} +\def\orgversionnumber{4.00} \def\year{2005} \def\shortcopyrightnotice{\vskip 1ex plus 2 fill @@ -283,7 +283,6 @@ (add-to-list 'auto-mode-alist '("\\\\.org\$" . org-mode)) (define-key global-map "\\C-cl" 'org-store-link)$^2$ (define-key global-map "\\C-ca" 'org-agenda)$^2$ -(define-key global-map "\\C-ct" 'org-todo-list)$^2$ \endexample % \metax{For the many customization options try}{M-x org-customize} @@ -335,8 +334,15 @@ \key{global TODO list in agenda mode}{C-c t$^2$} \key{create sparse tree with all deadlines due}{C-c C-w} \key{time sorted view of current org file}{C-c C-r} -\key{agenda for the week}{C-c a$^2$} -\key{agenda for date at cursor}{C-c C-o} +%\key{agenda for the week}{C-c a$^2$} +%\key{agenda for date at cursor}{C-c C-o} + +\section{Tags} + +\key{set tags for current heading}{C-c C-c} +\key{realign tags in all headings}{C-u C-c C-c} +\key{create sparse tree with matching tags}{C-c \\} +\key{globally (agenda) match tags at cursor}{C-c C-o} \section{TODO Items} @@ -516,19 +522,21 @@ \centerline{(for version \orgversionnumber)} -\section{Timeline, Agenda, Global TODO List} - -\key{show timeline of current org file}{C-c C-r} -\key{... include past dates}{C-u C-c C-r} +\section{Agenda Views} \key{add/move current file to front of agenda}{C-c [} \key{remove current file from your agenda}{C-c ]} \key{cycle through agenda file list}{C-,} -\key{compile agenda for the current week}{C-c a$^2$} + +\key{compile agenda for the current week}{C-c a a$^2$} +\key{compile global TODO list}{C-c a t$^2$} +\key{compile TODO list for specific keyword}{C-c a T$^2$} +\key{match tags in agenda files}{C-c a m$^2$} \key{agenda for date at cursor}{C-c C-o} -\key{global TODO list}{C-c t$^2$} +\key{show timeline of current org file}{C-c C-r} + \vskip 1mm -To set category for current file, add line$^3$: +To set categories, add lines like$^3$: \vskip -1mm \beginexample% \#+CATEGORY: MyCateg @@ -536,11 +544,11 @@ {\bf Commands available in an agenda buffer} -{\bf View org file} +{\bf View Org file} \key{show original location of item}{SPC} \key{... also available with}{mouse-3} -\key{show and recenter window}{l} +\key{show and recenter window}{L} \key{goto original location in other window}{TAB} \key{... also available with}{mouse-2} \key{goto original location, delete other windows}{RET} @@ -553,6 +561,7 @@ \key{switch to daily view}{d} \key{toggle inclusion of diary entries}{D} \key{toggle time grid for daily schedule}{g} +\key{toggle display of logbook entries}{l} \key{refresh agenda buffer with any changes}{r} \key{display the following \kbd{org-agenda-ndays}}{RIGHT} \key{display the previous \kbd{org-agenda-ndays}}{LEFT} @@ -561,17 +570,14 @@ {\bf Remote editing} \key{digit argument}{0-9} - \key{change state of current TODO item}{t} \key{set priority of current item}{p} \key{raise priority of current item}{S-UP$^4$} \key{lower priority of current item}{S-DOWN$^4$} \key{display weighted priority of current item}{P} - \key{change timestamp to one day earlier}{S-LEFT$^4$} \key{change timestamp to one day later}{S-RIGHT$^4$} \key{change timestamp to today}{>} - \key{insert new entry into diary}{i} {\bf Calendar commands} @@ -658,8 +664,8 @@ \section{Completion} In-buffer completion completes TODO keywords at headline start, TeX -macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', and -dictionary words elsewhere. +macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', TAGS +after ``{\tt :}'', and dictionary words elsewhere. \key{Complete word at point}{M-TAB} @@ -672,14 +678,14 @@ (setq org-agenda-include-diary t) \endexample -To include your Org-mode agenda in your normal diary, make sure you're +To include the Org-mode agenda in the normal diary, make sure you're using the fancy diary display % %\beginexample% %(add-hook 'diary-display-hook 'fancy-diary-display) %\endexample % -and in your \kbd{~/diary} file add +and in the \kbd{~/diary} file add \beginexample% \&\%\%(org-diary) diff -r e26e2265dcc6 -r 14a4eb789b45 leim/ChangeLog --- a/leim/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/leim/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,10 @@ +2005-12-17 Eli Zaretskii + + * makefile.w32-in ($(TIT), leim-list.el): Warn that parts of + commands enclosed in $(ARGQUOTE)s should not be split between two + lines, as that will break with GNU Make >3.80, when sh.exe is used + and arg quoting is with '..'. + 2005-11-03 Andreas Schwab * Makefile.in (GZIP_PROG): Renamed from GZIP. diff -r e26e2265dcc6 -r 14a4eb789b45 leim/makefile.w32-in --- a/leim/makefile.w32-in Mon Dec 19 16:13:20 2005 +0000 +++ b/leim/makefile.w32-in Mon Dec 19 19:57:22 2005 +0000 @@ -163,6 +163,9 @@ .NO_PARALLEL: $(TIT) $(MISC_DIC) # Rule to generate quail/*.el from CXTERM-DIC/*.tit. +# +# WARNING: Do NOT split the part inside $(ARGQUOTE)s into multiple lines as +# this can break with GNU Make 3.81 and later if sh.exe is used. $(TIT): $(RUN_EMACS) -l $(buildlisppath)/international/titdic-cnv \ --eval $(ARGQUOTE)(batch-titdic-convert t)$(ARGQUOTE) \ @@ -177,6 +180,9 @@ $(RUN_EMACS) -l $(buildlisppath)/international/quail \ -f batch-byte-compile $(MISC_DIC:.elc=.el) +# +# WARNING: Do NOT split the part inside $(ARGQUOTE)s into multiple lines as +# this can break with GNU Make 3.81 and later if sh.exe is used. leim-list.el: $(SUBDIRS) $(WORLD) $(RUN_EMACS) -l $(buildlisppath)/international/quail \ --eval $(ARGQUOTE)(update-leim-list-file $(DQUOTE).$(DQUOTE))$(ARGQUOTE) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/ChangeLog --- a/lisp/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,349 @@ +2005-12-17 Eli Zaretskii + + * makefile.w32-in (autoloads, custom-deps): Warn that parts of + commands enclosed in $(ARGQUOTE)s should not be split between two + lines, as that will break with GNU Make >3.80, when sh.exe is used + and arg quoting is with '..'. + (autoloads): Don't break the quoted --eval expression between + several lines. + +2005-12-17 Chong Yidong + + * emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture + error from printing circular structures. + +2005-12-17 Martin Rudalics (tiny change) + + * wid-edit.el (widget-checkbox-action): Clear undo info. + +2005-12-16 Bill Wohler + + * menu-bar.el (kill-this-buffer): Set a good example by using menu + bar, not menubar in comment. + +2005-12-16 Stefan Monnier + + * progmodes/cc-engine.el (c-after-change-check-<>-operators): + After-change-functions should not clobber the match data. + +2005-12-16 Juri Linkov + + * simple.el (choose-completion): Use `buffer-substring-no-properties' + instead of `buffer-substring'. + (completion-common-substring): Doc fix. + (completion-setup-function): Use minibuffer-completion-contents + instead of minibuffer-contents. Don't set common-string-length + initially. Remove special handling of partial-completion-mode. + Move computation of completion-base-size into one cond. + Call completion-base-size-function in mainbuf. In computation of + completion-base-size for file name completion don't move point to + the end of the minibuffer. Move computation of common-string-length + into one cond. Start putting faces only when common-string-length>=0. + Add condition to put completions-common-part when + common-string-length>0. + + * complete.el (PC-do-completion): Remove `(equal (point) beg)' to + place point at the first different character in the minibuffer + even if this position is at the beginning of the minibuffer. + + * info.el (Info-read-node-name-1): In completion-base-size-function's + lambda return 1 if common-substring or minibuffer-completion-contents + starts with (, and 0 otherwise. + + * emacs-lisp/crm.el (crm-minibuffer-completion-help): + Use `crm-current-element' for second arg of `display-completion-list'. + +2005-12-16 Klaus Zeitler + + * files.el (set-auto-mode): Look for an interpreter specified on + the first line also if search for mode specification succeeded, + but the mode is not known. + +2005-12-16 Carsten Dominik + + * textmodes/org.el: (org-tags-match-list-sublevels): New option. + (org-open-at-point): Implement tag searches as links. + (org-fit-agenda-window, org-get-buffer-tags, org-get-tags) + (org-make-tags-matcher, org-scan-tags, org-activate-tags): New funs. + (org-tags-sparse-tree, org-tags-view, org-set-tags) + (org-agenda-dispatch): New commands. + (org-use-tag-inheritance, org-tags-column): New options. + (org-tab-follows-link, org-return-follows-link): New options. + (org-tags): New customize group. + (org-start-icalendar-file): Get local time zone. + (org-tags-completion-function): New function. + (org-set-font-lock-defaults): Make sure links will also be + highlighted inside headlines. + +2005-12-16 Mark Plaksin (tiny change) + + * term.el (term-emulate-terminal): + Let term-handle-ansi-terminal-messages override what Bash says about + its current directory. + +2005-12-16 L$,1 q(Brentey K,Aa(Broly + + * bindings.el (last-buffer): Move to simple.el. + * simple.el (last-buffer): Move here. + (get-next-valid-buffer): New function. + (next-buffer): Use frame-local buffer list, maintain buried buffer list. + (prev-buffer): Ditto. Rename to `previous-buffer'. + + * menu-bar.el (menu-bar-update-buffers): Update uses of `prev-buffer'. + * bindings.el (global-map): Ditto. + +2005-12-15 Luc Teirlinck + + * cus-edit.el: Introductory comment change. + (custom-magic-alist): Change message string for the `rogue' state. + +2005-12-15 Richard M. Stallman + + * tooltip.el: Delete defcustom variable :tag names. + + * complete.el (partial-completion-mode): Doc fix. + + * textmodes/flyspell.el (flyspell-external-point-words): + Use save-excursion to ensure we don't move backward in the + search loop, not even one character. + (flyspell-delete-all-overlays): Use remove-overlays directly. + + * textmodes/ispell.el (ispell-current-personal-dictionary): New var. + (ispell-start-process): Set that variable. + Clear ispell-buffer-local-name. + (ispell-internal-change-dictionary): + Set ispell-current-dictionary after killing process. + (ispell-buffer-local-dict): + Don't set spell-personal-dictionary after killing process. + (ispell-buffer-local-words): Don't clear out ispell-buffer-local-name. + (ispell-tex-skip-alists) + (ispell-html-skip-alists, ispell-skip-region-alist): Mark as risky. + + * net/newsticker.el (newsticker--retrieval-timer-list) + (newsticker--display-timer, newsticker-running-p) + (newsticker-ticker-running-p): Definitions moved up. + +2005-12-16 Nick Roberts + + * progmodes/gdb-ui.el (gdb-many-windows): Echo new state in minibuffer. + +2005-12-15 David Ponce + + * recentf.el (recentf-dialog-goto-first): Fix missing error condition. + (recentf-edit-list, recentf-open-files): Signal an error when + there is no recent file. + +2005-12-14 Lennart Borgman + + * textmodes/texinfmt.el (texinfo-format-region): Set buffer to + read-only except for texinfo-format-region evaluation. + +2005-12-14 Richard M. Stallman + + * vc.el (vc-default-previous-version, vc-default-next-version) + (vc-do-command): Doc fixes. + +2005-12-14 Roland Winkler + + * textmodes/bibtex.el (bibtex-expand-strings) + (bibtex-autokey-expand-string, bibtex-name-part) + (bibtex-entry-type-whitespace, bibtex-entry-type-str) + (bibtex-any-entry-maybe-empty-head, bibtex-string-type) + (bibtex-preamble-prefix, bibtex-string-empty-key): New variables. + (bibtex-entry-type, bibtex-entry-head): Match only valid entries. + (bibtex-entry-postfix, bibtex-known-entry-type-re) + (bibtex-valid-entry-re, bibtex-any-valid-entry-re) + (bibtex-valid-entry-whitespace-re, bibtex-empty-field-re) + (bibtex-field-name-for-parsing, bibtex-remove-delimiters-string) + (bibtex-beginning-of-last-entry): Remove. + (bibtex-parse-field-name): Use bibtex-field-name. Issue error + message if comma is missing but buffer is read-only. + (bibtex-parse-field-text): Handle whitespaces at the end of field + text. Return 3-element list with beginning and end of field text + and end of field. + (bibtex-end-of-text-in-field, bibtex-end-of-field): Change accordingly. + (bibtex-parse-field): Remove arg name. Use bibtex-field-name. + (bibtex-search-forward-field, bibtex-search-backward-field): + Search always delimited by limits of entry. Use more efficient + search algorithms. + (bibtex-name-in-field): Use bibtex-start-of-name-in-field and + bibtex-end-of-name-in-field. + (bibtex-text-in-field-bounds): Handle BibTeX strings when + extracting the content of a field. + (bibtex-text-in-field): Use search limits. + (bibtex-parse-string-prefix): Handle empty string keys based on + bibtex-string-empty-key. + (bibtex-parse-string): Fix docstring. + (bibtex-text-in-string): Use bibtex-text-in-field-bounds. + (bibtex-preamble-prefix, bibtex-strings): New functions. + (bibtex-skip-to-valid-entry): Include preceding whitespace in + BibTeX entries (consistent with other BibTeX functions). + (bibtex-map-entries): Use bibtex-skip-to-valid-entry. + (bibtex-search-entry): Fix docstring. Simplify. + (bibtex-flash-head, bibtex-complete-string-cleanup) + (bibtex-count-entries, bibtex-sort-buffer): Simplify. + (bibtex-beginning-of-first-entry): Use bibtex-skip-to-valid-entry. + (bibtex-parse-entry): New optional arg content. + (bibtex-format-entry, bibtex-autofill-entry, bibtex-url): Use it. + Use bibtex-text-in-field-bounds. + (bibtex-print-help-message): Handle BibTeX strings and preambles. + (bibtex-end-of-entry): Use bibtex-preamble-prefix and + bibtex-parse-string-postfix. + (bibtex-find-text-internal): New function. + (bibtex-remove-delimiters): Use it. + (bibtex-find-text): Use it. New optional arg help. + (bibtex-complete): Handle BibTeX string and preamble entries. + (bibtex-Preamble): Fix order of closing delimiters. + +2005-12-14 Stefan Monnier + + * vc.el (vc-default-revert): New fun. + + * vc-mcvs.el (vc-mcvs-revert): Fix call to vc-default-revert. + +2005-12-14 Romain Francoise + + * font-lock.el (font-lock-keywords-alist): Rename `append' to `how'. + (font-lock-add-keywords, font-lock-update-removed-keyword-alist): + (font-lock-remove-keywords): Likewise. + +2005-12-14 Juri Linkov + + * log-view.el (log-view-diff): Doc fix. + + * isearch.el (isearch-query-replace): Use (mark) instead of + isearch-opoint if mark is active in transient-mark-mode. + +2005-12-14 Aaron S. Hawley + + * isearch.el (isearch-query-replace): Check for isearch-other-end. + +2005-12-14 Per Abrahamsen + + * progmodes/cpp.el (cpp-face): New widget. + (cpp-known-face, cpp-unknown-face, cpp-edit-list): Use it. + +2005-12-14 Juri Linkov + + * help-macro.el (make-help-screen): Bind `inhibit-read-only' to t + around `erase-buffer' and `insert'. + + * descr-text.el (describe-text-properties): Replace buffer name + "*Help-2*" with "*Help*<2>". + (describe-char): Add functions print-help-return-message, + toggle-read-only. Use help-setup-xref with nil to not store + describe-char in help-xref-stack. Use help-make-xrefs to + make [back] button. + + * desktop.el (desktop-minor-mode-table): Add vc-dired-mode with nil. + + * wdired.el (wdired-old-point): New internal variable. + (wdired-change-to-wdired-mode): Set it buffer-locally. + (wdired-abort-changes): Restore point after aborting changes. + +2005-12-13 Stefan Monnier + + * vc.el (vc-do-command): Add a new value t for okstatus. + + * vc-svn.el (vc-svn-registered): Use it to avoid popping up a spurious + frame in case of errors. + +2005-12-13 Jan Dj,Ad(Brv + + * menu-bar.el (menu-bar-showhide-fringe-menu): Move "On the Right" + so it comes after "On the Left" in the menu. + +2005-12-12 Luc Teirlinck + + * cus-edit.el (customize-apropos, customize-apropos-options) + (customize-apropos-faces, customize-apropos-groups): Doc fixes. + +2005-12-12 Bill Wohler + + * vc-svn.el (vc-svn-registered): Fix problem of visiting + non-writable Subversion-controlled files by saving window + configuration before calling vc-do-command. vc-do-command calls + pop-to-buffer on error which is unexpected during registration. + +2005-12-12 Jay Belanger + + * calc/README: Update the summary of changes. + +2005-12-12 Stefan Monnier + + * descr-text.el (describe-char): Rework last fix to solve the problem + is the same way it's solved for everything else in that function + (i.e. by extracting the info before setting up the *Help* buffer). + +2005-12-12 Kim F. Storm + + * subr.el (version-regexp-alist): Allow space as separator before + non-numeric part, e.g. "1.0 alpha". + (version-to-list): Interpret .X.Y version as 0.X.Y version. + +2005-12-12 Carsten Dominik + + * textmodes/org.el: (org-agenda, org-timeline, org-todo): + Implement Logging and the keep-modes setting. + (org-get-category): Make sure a string is returned. + (org-log-done): New function. + (org-log-done, org-closed-string): New options. + +2005-12-12 Jan Dj,Ad(Brv + + * tooltip.el (tooltip-y-offset): Change default to 20. + +2005-12-12 Richard M. Stallman + + * mouse.el (mouse-drag-vertical-line): Use adjust-window-trailing-edge. + + * frame.el (display-hourglass): Doc fix. + + * help.el (help-for-help-internal): Simplify entry for `a'. + + * info.el (Info-on-current-buffer): Doc fix. + (info-insert-file-contents): Don't test (featurep 'jka-compr). + + * startup.el (inhibit-splash-screen): Make this the real name. + (inhibit-startup-message): Make this the alias. + (command-line): Find only simple.el, and use its directory + to fill in other preloaded files' names. + (command-line): Deactivate the mark if deactivate-mark is set. + + * international/mule.el (load-with-code-conversion): + Bind deactivate-mark. + + * progmodes/compile.el (compilation-error-regexp-alist): Doc fix. + +2005-12-11 Luc Teirlinck + + * cus-edit.el (customize-apropos): Avoid listing an option more + than once under different aliases. No longer list user options + that are not defined with defcustom (unless a prefix arg is given). + Doc fix. + (customize-apropos-options): Doc fix. + +2005-12-11 Juri Linkov + + * frame.el (set-background-color, set-foreground-color) + (set-cursor-color, set-mouse-color, set-border-color): + Add explicit prompts to read colors by `facemenu-read-color'. + (show-trailing-whitespace, blink-cursor-delay) + (blink-cursor-interval, display-hourglass, hourglass-delay): + Remove tags. + (display-hourglass, hourglass-delay): Doc fix. + (cursor-in-non-selected-windows): Capitalize words in tag. + + * faces.el (frame-background-mode): Replace `choice-item' keywords + with `const' to not make [default] button. Change default value tag + from `default' to `automatic'. Doc fix. + (trailing-whitespace) : Change group `whitespace' to + `whitespace-faces'. + +2005-12-11 Richard M. Stallman + + * buff-menu.el (Buffer-menu-sort-column): Not a user variable. + 2005-12-11 YAMAMOTO Mitsuharu * term/mac-win.el: Create keymap for mac-apple-event-map. @@ -19,8 +365,8 @@ 2005-12-10 Johan Bockg,Ae(Brd - * align.el (align-regexp, align-highlight-rule): Use - region-beginning and region-end instead of point and mark, so that + * align.el (align-regexp, align-highlight-rule): + Use region-beginning and region-end instead of point and mark, so that repetition (with `repeat-complex-command') recomputes the region bounds. @@ -40,8 +386,8 @@ (hi-lock-archaic-interface-deduce): New variables. (turn-on-hi-lock-if-enabled, hi-lock-line-face-buffer) (hi-lock-face-buffer, hi-lock-face-phrase-buffer) - (hi-lock-find-patterns, hi-lock-font-lock-hook): Replace - hi-lock-buffer-mode with hi-lock-mode. + (hi-lock-find-patterns, hi-lock-font-lock-hook): + Replace hi-lock-buffer-mode with hi-lock-mode. 2005-12-10 Kevin Rodgers @@ -65,14 +411,14 @@ 2005-12-10 YAMAMOTO Mitsuharu - * term/mac-win.el: Require url when compiling. Call - mac-process-deferred-apple-events after loading init files. + * term/mac-win.el: Require url when compiling. + Call mac-process-deferred-apple-events after loading init files. (mac-apple-event-map): New defvar. Define event handlers in it. (core-event, internet-event): New Apple event class symbols. (open-application, reopen-application, open-documents) (print-documents, open-contents, quit-application) - (application-died, show-preferences, autosave-now, get-url): New - Apple event ID symbols. + (application-died, show-preferences, autosave-now, get-url): + New Apple event ID symbols. (about): New HICommand ID symbol. (mac-event-spec, mac-event-ae): New macros. (mac-ae-parameter, mac-ae-list, mac-bytes-to-integer) @@ -84,9 +430,7 @@ 2005-12-10 Kenichi Handa - * simple.el (zap-to-char): Translate CHAR by - translation-table-for-input. - + * simple.el (zap-to-char): * isearch.el (isearch-process-search-char): Translate CHAR by translation-table-for-input. @@ -3016,6 +3360,26 @@ * replace.el (occur-engine): Add marker at end of line, too. +2005-11-04 Ken Manheimer + + * pgg-pgp.el (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region) + (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric) + (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt) + (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase' + argument to all these routines, so the passphrase can be managed + externally and passed in to the system. + (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for + pgg-add-passphrase-to-cache function. + + * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region) + (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric) + (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt) + (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional 'passphrase' + argument to all these routines, so the passphrase can be managed + externally and passed in to the system. + (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache + function. + 2005-11-04 Dan Nicolaescu * font-lock.el: Don't deal with font-lock-face-attributes here, @@ -3301,7 +3665,7 @@ * mouse.el: Fix special handling of DEL after dragging a region: (mouse-drag-region-1): Treat mouse-set-region like mouse-set-point. - (mouse-region-delete-keys): Add [backspace]. + (mouse-region-delete-keys): Change to defcustom. Add [backspace]. * mail/feedmail.el: Use insert-buffer-substring, not insert-buffer. @@ -3595,6 +3959,76 @@ (jit-lock-deferred-fontify, jit-lock-context-fontify) (jit-lock-after-change): Test memory-full. +2005-10-29 Ken Manheimer + + * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right + part of the decoded armor to find the key-identifier. + (pgg-gpg-lookup-key-owner): New function to return the + human-readable identifier of a key owner. + (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the + key itself. + (pgg-gpg-decrypt-region): Prompt with the key owner (rather than + the key value) if we have a key and can match it against a secret + key. Also, added a note pointing out fact that the prompt only + indicates the first matching key. + + * pgg.el (pgg-decrypt): Passing along 'passphrase' in call to + pgg-decrypt-region. + (pgg-pending-timers): A new hash for tracking the passphrase cache + timers, so that new ones supercede old ones. + (pgg-add-passphrase-to-cache): Rename from + `pgg-add-passphrase-cache' to reduce confusion (all callers + changed). Modified to cancel old timers when new ones are added. + (pgg-remove-passphrase-from-cache): Rename from + `pgg-remove-passphrase-cache' to reduce confusion (all callers + changed). Modified to cancel old timers when their keys are + removed from the cache. + (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in + XEmacs, an indirection to delete-itimer. + (pgg-read-passphrase-from-cache, pgg-read-passphrase): + Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so + users can only check cache without risk of prompting. Correct bug in + notruncate behavior. + (pgg-read-passphrase-from-cache, pgg-read-passphrase) + (pgg-add-passphrase-cache, pgg-remove-passphrase-cache): + Add informative docstrings. + (pgg-decrypt): Convey provided passphrase in subordinate call to + pgg-decrypt-region. + + * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region) + (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region) + (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional + 'passphrase' argument, so the passphrase can be managed externally + and then passed in to the system. + + * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache) + (pgg-remove-passphrase-cache): Add optional 'notruncate' argument, + so the passphrase cache can be used reliably with identifiers + besides a pgp packet's key id. + + * pgg-gpg.el (pgg-pgp-encrypt-region) + (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric) + (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt) + (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase' + argument to all these routines, so the passphrase can be managed + externally and passed in to the system. + + * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional + 'notruncate' argument, so the passphrase cache can be used + reliably with identifiers besides a pgp packet's key id. + +2005-10-29 Sascha Wilde + + * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for + symmetric encryption. + (pgg-gpg-symmetric-key-p): New function to check for an symmetric + encrypted session key. + (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted + message ask for the passphrase in a proper way. + + * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region): + New user commands for symmetric encryption. + 2005-10-29 Roland Winkler * textmodes/conf-mode.el (conf-assignment-sign) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/bindings.el --- a/lisp/bindings.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/bindings.el Mon Dec 19 19:57:22 2005 +0000 @@ -338,29 +338,6 @@ (defvar mode-line-buffer-identification-keymap nil "\ Keymap for what is displayed by `mode-line-buffer-identification'.") -(defun last-buffer () "\ -Return the last non-hidden buffer in the buffer list." - ;; This logic is more or less copied from bury-buffer, - ;; except that we reverse the buffer list. - (let ((list (nreverse (buffer-list (selected-frame)))) - (pred (frame-parameter nil 'buffer-predicate)) - found notsogood) - (while (and list (not found)) - (unless (or (eq (aref (buffer-name (car list)) 0) ? ) - ;; If the selected frame has a buffer_predicate, - ;; disregard buffers that don't fit the predicate. - (and pred (not (funcall pred (car list))))) - (if (get-buffer-window (car list) 'visible) - (or notsogood (eq (car list) (current-buffer))) - (setq found (car list)))) - (pop list)) - (or found notsogood - (get-buffer "*scratch*") - (progn - (set-buffer-major-mode - (get-buffer-create "*scratch*")) - (get-buffer "*scratch*"))))) - (defun unbury-buffer () "\ Switch to the last buffer in the buffer list." (interactive) @@ -673,8 +650,8 @@ (define-key global-map [?\C-x right] 'next-buffer) (define-key global-map [?\C-x C-right] 'next-buffer) -(define-key global-map [?\C-x left] 'prev-buffer) -(define-key global-map [?\C-x C-left] 'prev-buffer) +(define-key global-map [?\C-x left] 'previous-buffer) +(define-key global-map [?\C-x C-left] 'previous-buffer) (let ((map minibuffer-local-map)) (define-key map "\en" 'next-history-element) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/buff-menu.el --- a/lisp/buff-menu.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/buff-menu.el Mon Dec 19 19:57:22 2005 +0000 @@ -101,7 +101,7 @@ ;; This should get updated & resorted when you click on a column heading (defvar Buffer-menu-sort-column nil - "*2 for sorting by buffer names. 5 for sorting by file names. + "2 for sorting by buffer names. 5 for sorting by file names. nil for default sorting by visited order.") (defconst Buffer-menu-buffer-column 4) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/calc/README --- a/lisp/calc/README Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/calc/README Mon Dec 19 19:57:22 2005 +0000 @@ -71,6 +71,11 @@ Version 2.1: +* New matrix mode for square matrices. Improved handling of + non-commutative products. + +* New functions: powerexpand and ldiv. + * Added new functions: sec, csc, cot, sech, csch, coth. * 0^0 now evaluates to 1. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/complete.el --- a/lisp/complete.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/complete.el Mon Dec 19 19:57:22 2005 +0000 @@ -206,11 +206,10 @@ See also the variable `PC-include-file-path'. Partial Completion mode extends the meaning of `completion-auto-help' (which -see) so that if it is neither nil nor t, Emacs will show the *Completions* -buffer only on the second attempt to complete. I.e. if TAB finds nothing -to complete, the first TAB will just say \"Next char not unique\" without -bringing up the *Completions* buffer, and the second TAB will then bring up -the *Completions* buffer." +see), so that if it is neither nil nor t, Emacs shows the `*Completions*' +buffer only on the second attempt to complete. That is, if TAB finds nothing +to complete, the first TAB just says \"Next char not unique\" and the +second TAB brings up the `*Completions*' buffer." :global t :group 'partial-completion ;; Deal with key bindings... (PC-bindings partial-completion-mode) @@ -613,8 +612,7 @@ (insert (substring prefix i (1+ i))) (setq end (1+ end))) (setq i (1+ i))) - (or pt (equal (point) beg) - (setq pt (point))) + (or pt (setq pt (point))) (looking-at PC-delim-regex)) (setq skip (concat skip (regexp-quote prefix) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/cus-edit.el --- a/lisp/cus-edit.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/cus-edit.el Mon Dec 19 19:57:22 2005 +0000 @@ -121,10 +121,11 @@ ;; 6. rogue ;; There is no standard value. This means that the variable was -;; not defined with defcustom, nor handled in cus-start.el. You -;; can not create a Custom buffer for such variables using the -;; normal interactive Custom commands. However, such Custom -;; buffers can be created in other ways, for instance, by calling +;; not defined with defcustom, nor handled in cus-start.el. Most +;; standard interactive Custom commands do not let you create a +;; Custom buffer containing such variables. However, such Custom +;; buffers can be created, for instance, by calling +;; `customize-apropos' with a prefix arg or by calling ;; `customize-option' non-interactively. ;; 7. hidden @@ -1252,12 +1253,12 @@ ;;;###autoload (defun customize-apropos (regexp &optional all) - "Customize all user options matching REGEXP. + "Customize all loaded options, faces and groups matching REGEXP. If ALL is `options', include only options. If ALL is `faces', include only faces. If ALL is `groups', include only groups. -If ALL is t (interactively, with prefix arg), include options which are not -user-settable, as well as faces and groups." +If ALL is t (interactively, with prefix arg), include variables +that are not customizable options, as well as faces and groups." (interactive "sCustomize regexp: \nP") (let ((found nil)) (mapatoms (lambda (symbol) @@ -1270,11 +1271,11 @@ (push (list symbol 'custom-face) found)) (when (and (not (memq all '(groups faces))) (boundp symbol) + (eq (indirect-variable symbol) symbol) (or (get symbol 'saved-value) (custom-variable-p symbol) - (if (memq all '(nil options)) - (user-variable-p symbol) - (get symbol 'variable-documentation)))) + (and (not (memq all '(nil options))) + (get symbol 'variable-documentation)))) (push (list symbol 'custom-variable) found))))) (if (not found) (error "No matches") @@ -1284,20 +1285,20 @@ ;;;###autoload (defun customize-apropos-options (regexp &optional arg) - "Customize all user options matching REGEXP. -With prefix arg, include options which are not user-settable." + "Customize all loaded customizable options matching REGEXP. +With prefix arg, include variables that are not customizable options." (interactive "sCustomize regexp: \nP") (customize-apropos regexp (or arg 'options))) ;;;###autoload (defun customize-apropos-faces (regexp) - "Customize all user faces matching REGEXP." + "Customize all loaded faces matching REGEXP." (interactive "sCustomize regexp: \n") (customize-apropos regexp 'faces)) ;;;###autoload (defun customize-apropos-groups (regexp) - "Customize all user groups matching REGEXP." + "Customize all loaded groups matching REGEXP." (interactive "sCustomize regexp: \n") (customize-apropos regexp 'groups)) @@ -1757,7 +1758,7 @@ SAVED and set." "\ something in this group has been set and saved.") (rogue "@" custom-rogue "\ -NO CUSTOMIZATION DATA; you should not see this." "\ +NO CUSTOMIZATION DATA; not intended to be customized." "\ something in this group is not prepared for customization.") (standard " " nil "\ STANDARD." "\ diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/descr-text.el --- a/lisp/descr-text.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/descr-text.el Mon Dec 19 19:57:22 2005 +0000 @@ -160,7 +160,7 @@ (let ((buffer (current-buffer)) (target-buffer "*Help*")) (when (eq buffer (get-buffer target-buffer)) - (setq target-buffer "*Help-2*")) + (setq target-buffer "*Help*<2>")) (save-excursion (with-output-to-temp-buffer target-buffer (set-buffer standard-output) @@ -464,9 +464,13 @@ (single-key-description char) (string-to-multibyte (char-to-string char))))) - (orig-buf (current-buffer)) - (help-buf (if (eq orig-buf (get-buffer "*Help*")) - "*Help-2*" "*Help*")) + (text-props-desc + (let ((tmp-buf (generate-new-buffer " *text-props*"))) + (unwind-protect + (progn + (describe-text-properties pos tmp-buf) + (with-current-buffer tmp-buf (buffer-string))) + (kill-buffer tmp-buf)))) item-list max-width unicode) (if (or (< char 256) @@ -619,8 +623,10 @@ (setq max-width (apply #'max (mapcar #'(lambda (x) (if (cadr x) (length (car x)) 0)) item-list))) - (with-output-to-temp-buffer help-buf + (with-output-to-temp-buffer "*Help*" (with-current-buffer standard-output + (let ((help-xref-following t)) + (help-setup-xref nil nil)) (set-buffer-multibyte multibyte-p) (let ((formatter (format "%%%ds:" max-width))) (dolist (elt item-list) @@ -722,10 +728,11 @@ (insert "\nSee the variable `reference-point-alist' for " "the meaning of the rule.\n")) - (save-excursion - (set-buffer orig-buf) - (describe-text-properties pos help-buf)) - (describe-text-mode))))) + (if text-props-desc (insert text-props-desc)) + (describe-text-mode) + (toggle-read-only 1) + (help-make-xrefs (current-buffer)) + (print-help-return-message))))) (defalias 'describe-char-after 'describe-char) (make-obsolete 'describe-char-after 'describe-char "22.1") diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/desktop.el --- a/lisp/desktop.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/desktop.el Mon Dec 19 19:57:22 2005 +0000 @@ -411,7 +411,8 @@ (defcustom desktop-minor-mode-table '((auto-fill-function auto-fill-mode) - (vc-mode nil)) + (vc-mode nil) + (vc-dired-mode nil)) "Table mapping minor mode variables to minor mode functions. Each entry has the form (NAME RESTORE-FUNCTION). NAME is the name of the buffer-local variable indicating that the minor diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/emacs-lisp/crm.el --- a/lisp/emacs-lisp/crm.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/emacs-lisp/crm.el Mon Dec 19 19:57:22 2005 +0000 @@ -247,7 +247,9 @@ (if (null completions) (crm-temp-echo-area-glyphs " [No completions]") (with-output-to-temp-buffer "*Completions*" - (display-completion-list (sort completions 'string-lessp)))))) + (display-completion-list + (sort completions 'string-lessp) + crm-current-element))))) nil) (defun crm-do-completion () diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/emacs-lisp/edebug.el --- a/lisp/emacs-lisp/edebug.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/emacs-lisp/edebug.el Mon Dec 19 19:57:22 2005 +0000 @@ -3711,7 +3711,9 @@ (print-level (or edebug-print-level print-level)) (print-circle (or edebug-print-circle print-circle)) (print-readably nil)) ;; lemacs uses this. - (edebug-prin1-to-string value))) + (condition-case nil + (edebug-prin1-to-string value) + (error "#Apparently circular structure#")))) (defun edebug-compute-previous-result (edebug-previous-value) (if edebug-unwrap-results diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/faces.el --- a/lisp/faces.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/faces.el Mon Dec 19 19:57:22 2005 +0000 @@ -1577,17 +1577,17 @@ (defcustom frame-background-mode nil "*The brightness of the background. Set this to the symbol `dark' if your background color is dark, -`light' if your background is light, or nil (default) if you want Emacs -to examine the brightness for you. Don't set this variable with `setq'; -this won't have the expected effect." +`light' if your background is light, or nil (automatic by default) +if you want Emacs to examine the brightness for you. Don't set this +variable with `setq'; this won't have the expected effect." :group 'faces :set #'(lambda (var value) (set-default var value) (mapc 'frame-set-background-mode (frame-list))) :initialize 'custom-initialize-changed - :type '(choice (choice-item dark) - (choice-item light) - (choice-item :tag "default" nil))) + :type '(choice (const dark) + (const light) + (const :tag "automatic" nil))) (defun frame-set-background-mode (frame) @@ -2027,7 +2027,7 @@ (t :inverse-video t)) "Basic face for highlighting trailing whitespace." :version "21.1" - :group 'whitespace ; like `show-trailing-whitespace' + :group 'whitespace-faces ; like `show-trailing-whitespace' :group 'basic-faces) (defface escape-glyph diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/files.el --- a/lisp/files.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/files.el Mon Dec 19 19:57:22 2005 +0000 @@ -2098,7 +2098,8 @@ (setq done t) (or (set-auto-mode-0 mode keep-mode-if-same) ;; continuing would call minor modes again, toggling them off - (throw 'nop nil))))) + (throw 'nop nil)))))) + (unless done ;; If we didn't, look for an interpreter specified in the first line. ;; As a special case, allow for things like "#!/bin/env perl", which ;; finds the interpreter anywhere in $PATH. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/foldout.el --- a/lisp/foldout.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/foldout.el Mon Dec 19 19:57:22 2005 +0000 @@ -3,6 +3,7 @@ ;; Copyright (C) 1994, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Kevin Broadey +;; Maintainer: FSF ;; Created: 27 Jan 1994 ;; Version: foldout.el 1.10 dated 94/05/19 at 17:09:12 ;; Keywords: folding, outlines diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/font-lock.el --- a/lisp/font-lock.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/font-lock.el Mon Dec 19 19:57:22 2005 +0000 @@ -463,13 +463,13 @@ (defvar font-lock-keywords-alist nil "Alist of additional `font-lock-keywords' elements for major modes. -Each element has the form (MODE KEYWORDS . APPEND). +Each element has the form (MODE KEYWORDS . HOW). `font-lock-set-defaults' adds the elements in the list KEYWORDS to `font-lock-keywords' when Font Lock is turned on in major mode MODE. -If APPEND is nil, KEYWORDS are added at the beginning of +If HOW is nil, KEYWORDS are added at the beginning of `font-lock-keywords'. If it is `set', they are used to replace the -value of `font-lock-keywords'. If APPEND is any other non-nil value, +value of `font-lock-keywords'. If HOW is any other non-nil value, they are added at the end. This is normally set via `font-lock-add-keywords' and @@ -650,15 +650,15 @@ (font-lock-unfontify-buffer) (font-lock-turn-off-thing-lock))) -(defun font-lock-add-keywords (mode keywords &optional append) +(defun font-lock-add-keywords (mode keywords &optional how) "Add highlighting KEYWORDS for MODE. MODE should be a symbol, the major mode command name, such as `c-mode' or nil. If nil, highlighting keywords are added for the current buffer. KEYWORDS should be a list; see the variable `font-lock-keywords'. By default they are added at the beginning of the current highlighting list. -If optional argument APPEND is `set', they are used to replace the current -highlighting list. If APPEND is any other non-nil value, they are added at the +If optional argument HOW is `set', they are used to replace the current +highlighting list. If HOW is any other non-nil value, they are added at the end of the current highlighting list. For example: @@ -691,17 +691,17 @@ see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types', `objc-font-lock-extra-types' and `java-font-lock-extra-types'." (cond (mode - ;; If MODE is non-nil, add the KEYWORDS and APPEND spec to + ;; If MODE is non-nil, add the KEYWORDS and HOW spec to ;; `font-lock-keywords-alist' so `font-lock-set-defaults' uses them. - (let ((spec (cons keywords append)) cell) + (let ((spec (cons keywords how)) cell) (if (setq cell (assq mode font-lock-keywords-alist)) - (if (eq append 'set) + (if (eq how 'set) (setcdr cell (list spec)) (setcdr cell (append (cdr cell) (list spec)))) (push (list mode spec) font-lock-keywords-alist))) ;; Make sure that `font-lock-removed-keywords-alist' does not ;; contain the new keywords. - (font-lock-update-removed-keyword-alist mode keywords append)) + (font-lock-update-removed-keyword-alist mode keywords how)) (t ;; Otherwise set or add the keywords now. ;; This is a no-op if it has been done already in this buffer @@ -712,13 +712,13 @@ (if was-compiled (setq font-lock-keywords (cadr font-lock-keywords))) ;; Now modify or replace them. - (if (eq append 'set) + (if (eq how 'set) (setq font-lock-keywords keywords) (font-lock-remove-keywords nil keywords) ;to avoid duplicates (let ((old (if (eq (car-safe font-lock-keywords) t) (cdr font-lock-keywords) font-lock-keywords))) - (setq font-lock-keywords (if append + (setq font-lock-keywords (if how (append old keywords) (append keywords old))))) ;; If the keywords were compiled before, compile them again. @@ -726,7 +726,7 @@ (set (make-local-variable 'font-lock-keywords) (font-lock-compile-keywords font-lock-keywords t))))))) -(defun font-lock-update-removed-keyword-alist (mode keywords append) +(defun font-lock-update-removed-keyword-alist (mode keywords how) "Update `font-lock-removed-keywords-alist' when adding new KEYWORDS to MODE." ;; When font-lock is enabled first all keywords in the list ;; `font-lock-keywords-alist' are added, then all keywords in the @@ -736,7 +736,7 @@ ;; will not take effect. (let ((cell (assq mode font-lock-removed-keywords-alist))) (if cell - (if (eq append 'set) + (if (eq how 'set) ;; A new set of keywords is defined. Forget all about ;; our old keywords that should be removed. (setq font-lock-removed-keywords-alist @@ -786,14 +786,14 @@ ;; If MODE is non-nil, remove the KEYWORD from ;; `font-lock-keywords-alist'. (when top-cell - (dolist (keyword-list-append-pair (cdr top-cell)) - ;; `keywords-list-append-pair' is a cons with a list of - ;; keywords in the car top-cell and the original append + (dolist (keyword-list-how-pair (cdr top-cell)) + ;; `keywords-list-how-pair' is a cons with a list of + ;; keywords in the car top-cell and the original how ;; argument in the cdr top-cell. - (setcar keyword-list-append-pair - (delete keyword (car keyword-list-append-pair)))) - ;; Remove keyword list/append pair when the keyword list - ;; is empty and append doesn't specify `set'. (If it + (setcar keyword-list-how-pair + (delete keyword (car keyword-list-how-pair)))) + ;; Remove keyword list/how pair when the keyword list + ;; is empty and how doesn't specify `set'. (If it ;; should be deleted then previously deleted keywords ;; would appear again.) (let ((cell top-cell)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/frame.el --- a/lisp/frame.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/frame.el Mon Dec 19 19:57:22 2005 +0000 @@ -962,7 +962,7 @@ "Set the background color of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. To get the frame's current background color, use `frame-parameters'." - (interactive (list (facemenu-read-color))) + (interactive (list (facemenu-read-color "Background color: "))) (modify-frame-parameters (selected-frame) (list (cons 'background-color color-name))) (or window-system @@ -972,7 +972,7 @@ "Set the foreground color of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. To get the frame's current foreground color, use `frame-parameters'." - (interactive (list (facemenu-read-color))) + (interactive (list (facemenu-read-color "Foreground color: "))) (modify-frame-parameters (selected-frame) (list (cons 'foreground-color color-name))) (or window-system @@ -982,7 +982,7 @@ "Set the text cursor color of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. To get the frame's current cursor color, use `frame-parameters'." - (interactive (list (facemenu-read-color))) + (interactive (list (facemenu-read-color "Cursor color: "))) (modify-frame-parameters (selected-frame) (list (cons 'cursor-color color-name)))) @@ -990,7 +990,7 @@ "Set the color of the mouse pointer of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. To get the frame's current mouse color, use `frame-parameters'." - (interactive (list (facemenu-read-color))) + (interactive (list (facemenu-read-color "Mouse color: "))) (modify-frame-parameters (selected-frame) (list (cons 'mouse-color (or color-name @@ -1001,7 +1001,7 @@ "Set the color of the border of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. To get the frame's current border color, use `frame-parameters'." - (interactive (list (facemenu-read-color))) + (interactive (list (facemenu-read-color "Border color: "))) (modify-frame-parameters (selected-frame) (list (cons 'border-color color-name)))) @@ -1283,7 +1283,6 @@ (defcustom show-trailing-whitespace nil "*Non-nil means highlight trailing whitespace. This is done in the face `trailing-whitespace'." - :tag "Highlight trailing whitespace." :type 'boolean :group 'whitespace-faces) @@ -1315,13 +1314,11 @@ (defcustom blink-cursor-delay 0.5 "*Seconds of idle time after which cursor starts to blink." - :tag "Delay in seconds." :type 'number :group 'cursor) (defcustom blink-cursor-interval 0.5 "*Length of cursor blink interval in seconds." - :tag "Blink interval in seconds." :type 'number :group 'cursor) @@ -1397,14 +1394,14 @@ ;; Hourglass pointer (defcustom display-hourglass t - "*Non-nil means show an hourglass pointer when running under a window system." - :tag "Hourglass pointer" + "*Non-nil means show an hourglass pointer, when Emacs is busy. +This feature only works when on a window system that can change +cursor shapes." :type 'boolean :group 'cursor) (defcustom hourglass-delay 1 - "*Seconds to wait before displaying an hourglass pointer." - :tag "Hourglass delay" + "*Seconds to wait before displaying an hourglass pointer when Emacs is busy." :type 'number :group 'cursor) @@ -1413,7 +1410,7 @@ "*Non-nil means show a hollow box cursor in non-selected windows. If nil, don't show a cursor except in the selected window. Use Custom to set this variable to get the display updated." - :tag "Cursor in non-selected windows" + :tag "Cursor In Non-selected Windows" :type 'boolean :group 'cursor :set #'(lambda (symbol value) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,65 @@ +2005-12-16 Katsumi Yamaoka + + * gnus-art.el (gnus-signature-separator): Fix custom type. + + * mm-decode.el (mm-inlined-types): Fix custom type. + (mm-keep-viewer-alive-types): Ditto. + (mm-automatic-display): Ditto. + (mm-attachment-override-types): Ditto. + (mm-inline-override-types): Ditto. + (mm-automatic-external-display): Ditto. + +2005-12-12 Katsumi Yamaoka + + * gnus-art.el (gnus-buttonized-mime-types): Mention addition of + multipart/alternative and add xref to mm-discouraged-alternatives + in doc string. + + * mm-decode.el (mm-discouraged-alternatives): Add xref to + gnus-buttonized-mime-types in doc string. + +2005-12-12 Katsumi Yamaoka + + * rfc2047.el (rfc2047-charset-to-coding-system): Recognize + us-ascii as a MIME charset. + + * mm-bodies.el (mm-decode-content-transfer-encoding): Protect + against the case where the 2nd arg TYPE is nil. + +2005-12-09 Reiner Steib + + * gnus-start.el (gnus-no-server-1): Mention + `gnus-level-default-subscribed' in doc string. + +2005-11-26 Dave Love + + * tls.el (open-tls-stream): Rename arg SERVICE to PORT. + (tls-program, tls-success): Provide openssl alternative. + + * starttls.el: Doc fixes. + (starttls-open-stream-gnutls, starttls-open-stream): Rename arg + SERVICE to PORT. + +2005-12-09 Reiner Steib + + * gnus-start.el (gnus-start-draft-setup): Enforce + `gnus-draft-mode' for nndraft:drafts at startup. + + * gnus.el (gnus-splash): Change custom group. + (gnus-group-get-parameter, gnus-group-parameter-value): Describe + allow-list argument. + + * gnus-agent.el (gnus-agent-article-alist-save-format): Format doc + string. + +2005-12-09 ARISAWA Akihiro (tiny change) + + * mm-decode.el (mm-display-external): Add lacked cdr. + +2005-12-12 Richard M. Stallman + + * mm-url.el (mm-url-load-url): Require url-parse and url-vars. + 2005-12-08 Reiner Steib * mm-decode.el (mm-discouraged-alternatives): Fix custom type. @@ -102,103 +164,6 @@ as a buffer-local variable. This avoids creating truncated dribble files as a result of a hang up, eg. -2005-11-04 Ken Manheimer - - * pgg-pgp.el (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region) - (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric) - (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt) - (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase' - argument to all these routines, so the passphrase can be managed - externally and passed in to the system. - (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for - pgg-add-passphrase-to-cache function. - - * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region) - (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric) - (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt) - (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional 'passphrase' - argument to all these routines, so the passphrase can be managed - externally and passed in to the system. - (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache - function. - -2005-10-30 Chong Yidong - - * imap.el (imap-open): Handle case where buffer is a buffer - object. - -2005-10-29 Ken Manheimer - - * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right - part of the decoded armor to find the key-identifier. - (pgg-gpg-lookup-key-owner): New function to return the - human-readable identifier of a key owner. - (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the - key itself. - (pgg-gpg-decrypt-region): Prompt with the key owner (rather than - the key value) if we have a key and can match it against a secret - key. Also, added a note pointing out fact that the prompt only - indicates the first matching key. - - * pgg.el (pgg-decrypt): Passing along 'passphrase' in call to - pgg-decrypt-region. - (pgg-pending-timers): A new hash for tracking the passphrase cache - timers, so that new ones supercede old ones. - (pgg-add-passphrase-to-cache): Rename from - `pgg-add-passphrase-cache' to reduce confusion (all callers - changed). Modified to cancel old timers when new ones are added. - (pgg-remove-passphrase-from-cache): Rename from - `pgg-remove-passphrase-cache' to reduce confusion (all callers - changed). Modified to cancel old timers when their keys are - removed from the cache. - (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in - XEmacs, an indirection to delete-itimer. - (pgg-read-passphrase-from-cache, pgg-read-passphrase): - Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so - users can only check cache without risk of prompting. Correct bug in - notruncate behavior. - (pgg-read-passphrase-from-cache, pgg-read-passphrase) - (pgg-add-passphrase-cache, pgg-remove-passphrase-cache): - Add informative docstrings. - (pgg-decrypt): Convey provided passphrase in subordinate call to - pgg-decrypt-region. - -2005-10-20 Ken Manheimer - - * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region) - (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region) - (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional - 'passphrase' argument, so the passphrase can be managed externally - and then passed in to the system. - - * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache) - (pgg-remove-passphrase-cache): Add optional 'notruncate' argument, - so the passphrase cache can be used reliably with identifiers - besides a pgp packet's key id. - - * pgg-gpg.el (pgg-pgp-encrypt-region) - (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric) - (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt) - (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase' - argument to all these routines, so the passphrase can be managed - externally and passed in to the system. - - * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional - 'notruncate' argument, so the passphrase cache can be used - reliably with identifiers besides a pgp packet's key id. - -2005-10-29 Sascha Wilde - - * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for - symmetric encryption. - (pgg-gpg-symmetric-key-p): New function to check for an symmetric - encrypted session key. - (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted - message ask for the passphrase in a proper way. - - * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region): - New user commands for symmetric encryption. - 2005-11-30 Stefan Monnier * gnus-delay.el (gnus-delay-group): Don't autoload. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/gnus-agent.el --- a/lisp/gnus/gnus-agent.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/gnus-agent.el Mon Dec 19 19:57:22 2005 +0000 @@ -214,11 +214,12 @@ :type 'boolean) (defcustom gnus-agent-article-alist-save-format 1 - "Indicates whether to use compression(2), verses no - compression(1), when writing agentview files. The compressed - files do save space but load times are 6-7 times higher. A - group must be opened then closed for the agentview to be - updated using the new format." + "Indicates whether to use compression(2), versus no +compression(1), when writing agentview files. The compressed +files do save space but load times are 6-7 times higher. A group +must be opened then closed for the agentview to be updated using +the new format." + ;; Wouldn't symbols instead numbers be nicer? --rsteib :version "22.1" :group 'gnus-agent :type '(radio (const :format "Compressed" 2) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/gnus-art.el --- a/lisp/gnus/gnus-art.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/gnus-art.el Mon Dec 19 19:57:22 2005 +0000 @@ -225,7 +225,9 @@ This can also be a list of regexps. In that case, it will be checked from head to tail looking for a separator. Searches will be done from the end of the buffer." - :type '(repeat string) + :type '(choice :format "%{%t%}: %[Value Menu%]\n%v" + (regexp) + (repeat :tag "List of regexp" regexp)) :group 'gnus-article-signature) (defcustom gnus-signature-limit nil @@ -822,7 +824,9 @@ "List of MIME types that should be given buttons when rendered inline. If set, this variable overrides `gnus-unbuttonized-mime-types'. To see e.g. security buttons you could set this to -`(\"multipart/signed\")'. +`(\"multipart/signed\")'. You could also add \"multipart/alternative\" to +this list to display radio buttons that allow you to choose one of two +media types those mails include. See also `mm-discouraged-alternatives'. This variable is only used when `gnus-inhibit-mime-unbuttonizing' is nil." :version "22.1" :group 'gnus-article-mime diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/gnus-start.el --- a/lisp/gnus/gnus-start.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/gnus-start.el Mon Dec 19 19:57:22 2005 +0000 @@ -717,11 +717,12 @@ (defun gnus-no-server-1 (&optional arg slave) "Read network news. -If ARG is a positive number, Gnus will use that as the -startup level. If ARG is nil, Gnus will be started at level 2. -If ARG is non-nil and not a positive number, Gnus will -prompt the user for the name of an NNTP server to use. -As opposed to `gnus', this command will not connect to the local server." +If ARG is a positive number, Gnus will use that as the startup +level. If ARG is nil, Gnus will be started at level 2 +\(`gnus-level-default-subscribed' minus one). If ARG is non-nil +and not a positive number, Gnus will prompt the user for the name +of an NNTP server to use. As opposed to \\[gnus], this command +will not connect to the local server." (interactive "P") (let ((val (or arg (1- gnus-level-default-subscribed)))) (gnus val t slave) @@ -805,8 +806,12 @@ "Make sure the draft group exists." (gnus-request-create-group "drafts" '(nndraft "")) (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb) + (gnus-message 3 "Subscribing drafts group") (let ((gnus-level-default-subscribed 1)) - (gnus-subscribe-group "nndraft:drafts" nil '(nndraft ""))) + (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))) + (unless (equal (gnus-group-get-parameter "nndraft:drafts" 'gnus-dummy t) + '((gnus-draft-mode))) + (gnus-message 3 "Setting up drafts group") (gnus-group-set-parameter "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode))))) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/gnus.el --- a/lisp/gnus/gnus.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/gnus.el Mon Dec 19 19:57:22 2005 +0000 @@ -934,7 +934,7 @@ (t ())) "Face for the splash screen." - :group 'gnus) + :group 'gnus-start) ;; backward-compatibility alias (put 'gnus-splash-face 'face-alias 'gnus-splash) @@ -3820,6 +3820,7 @@ (defun gnus-group-get-parameter (group &optional symbol allow-list) "Return the group parameters for GROUP. If SYMBOL, return the value of that symbol in the group parameters. +If ALLOW-LIST, also allow list as a result. Most functions should use `gnus-group-find-parameter', which also examines the topic parameters." (let ((params (gnus-info-params (gnus-get-info group)))) @@ -3829,7 +3830,8 @@ (defun gnus-group-parameter-value (params symbol &optional allow-list present-p) - "Return the value of SYMBOL in group PARAMS." + "Return the value of SYMBOL in group PARAMS. +If ALLOW-LIST, also allow list as a result." ;; We only wish to return group parameters (dotted lists) and ;; not local variables, which may have the same names. ;; But first we handle single elements... diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/mm-bodies.el --- a/lisp/gnus/mm-bodies.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/mm-bodies.el Mon Dec 19 19:57:22 2005 +0000 @@ -227,6 +227,7 @@ (message "Error while decoding: %s" error) nil)) (when (and + type (memq encoding '(base64 x-uuencode x-uue x-binhex x-yenc)) (string-match "\\`text/" type)) (goto-char (point-min)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/mm-decode.el --- a/lisp/gnus/mm-decode.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/mm-decode.el Mon Dec 19 19:57:22 2005 +0000 @@ -283,7 +283,7 @@ "List of media types that are to be displayed inline. See also `mm-inline-media-tests', which says how to display a media type inline." - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-keep-viewer-alive-types @@ -292,7 +292,7 @@ "List of media types for which the external viewer will not be killed when selecting a different article." :version "22.1" - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-automatic-display @@ -304,7 +304,7 @@ "application/pkcs7-signature" "application/x-pkcs7-mime" "application/pkcs7-mime") "A list of MIME types to be displayed automatically." - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-attachment-override-types '("text/x-vcard" @@ -313,17 +313,17 @@ "application/pkcs7-signature" "application/x-pkcs7-signature") "Types to have \"attachment\" ignored if they can be displayed inline." - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-inline-override-types nil "Types to be treated as attachments even if they can be displayed inline." - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-automatic-external-display nil "List of MIME type regexps that will be displayed externally automatically." - :type '(repeat string) + :type '(repeat regexp) :group 'mime-display) (defcustom mm-discouraged-alternatives nil @@ -338,7 +338,9 @@ (\"text/html\" \"text/richtext\") Adding \"image/.*\" might also be useful. Spammers use it as the -prefered part of multipart/alternative messages." +prefered part of multipart/alternative messages. See also +`gnus-buttonized-mime-types', to which adding \"multipart/alternative\" +enables you to choose manually one of two types those mails include." :type '(repeat regexp) ;; See `mm-preferred-alternative-precedence'. :group 'mime-display) @@ -769,7 +771,7 @@ ;; Use nametemplate (defined in RFC1524) if it is ;; specified in mailcap. (if (assoc "nametemplate" mime-info) - (format (assoc "nametemplate" mime-info) file) + (format (cdr (assoc "nametemplate" mime-info)) file) ;; Add a suffix according to `mailcap-mime-extensions'. (concat file (car (rassoc (mm-handle-media-type handle) mailcap-mime-extensions)))))) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/mm-url.el --- a/lisp/gnus/mm-url.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/mm-url.el Mon Dec 19 19:57:22 2005 +0000 @@ -276,7 +276,10 @@ (defun mm-url-load-url () "Load `url-insert-file-contents'." (unless (condition-case () - (require 'url-handlers) + (progn + (require 'url-handlers) + (require 'url-parse) + (require 'url-vars)) (error nil)) ;; w3-4.0pre0.46 or earlier version. (require 'w3-vars) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/rfc2047.el --- a/lisp/gnus/rfc2047.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/rfc2047.el Mon Dec 19 19:57:22 2005 +0000 @@ -831,11 +831,11 @@ (memq 'gnus-all mail-parse-ignored-charsets) (memq charset mail-parse-ignored-charsets)) (setq charset mail-parse-charset)) - (let ((cs (mm-coding-system-p (mm-charset-to-coding-system charset)))) + (let ((cs (mm-charset-to-coding-system charset))) (cond ((eq cs 'ascii) (setq cs (or (mm-charset-to-coding-system mail-parse-charset) 'raw-text))) - (cs) + ((setq cs (mm-coding-system-p cs))) ((and charset (listp mail-parse-ignored-charsets) (memq 'gnus-unknown mail-parse-ignored-charsets)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/gnus/starttls.el --- a/lisp/gnus/starttls.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/gnus/starttls.el Mon Dec 19 19:57:22 2005 +0000 @@ -32,7 +32,7 @@ ;; [RFC 2595] "Using TLS with IMAP, POP3 and ACAP" ;; by Chris Newman (1999/06) -;; This file now contain a combination of the two previous +;; This file now contains a combination of the two previous ;; implementations both called "starttls.el". The first one is Daiki ;; Ueno's starttls.el which uses his own "starttls" command line tool, ;; and the second one is Simon Josefsson's starttls.el which uses @@ -44,7 +44,7 @@ ;; both tools installed. It is recommended to use GNUTLS, though, as ;; it performs more verification of the certificates. -;; The GNUTLS support require GNUTLS 0.9.90 (released 2003-10-08) or +;; The GNUTLS support requires GNUTLS 0.9.90 (released 2003-10-08) or ;; later, from , or "starttls" ;; from . @@ -58,7 +58,7 @@ ;; (message "STARTTLS output:\n%s" (starttls-negotiate tmp)) ;; (process-send-string tmp "EHLO foo\n")) -;; An example run yield the following output: +;; An example run yields the following output: ;; ;; 220 yxa.extundo.com ESMTP Sendmail 8.12.11/8.12.11/Debian-3; Wed, 26 May 2004 19:12:29 +0200; (No UCE/UBE) logging access from: c494102a.s-bi.bostream.se(OK)-c494102a.s-bi.bostream.se [217.215.27.65] ;; 220 2.0.0 Ready to start TLS @@ -146,15 +146,14 @@ (defcustom starttls-extra-args nil "Extra arguments to `starttls-program'. -This program is used when the `starttls' command is used, -i.e. when `starttls-use-gnutls' is nil." +These apply when the `starttls' command is used, i.e. when +`starttls-use-gnutls' is nil." :type '(repeat string) :group 'starttls) (defcustom starttls-extra-arguments nil "Extra arguments to `starttls-program'. -This program is used when GNUTLS is used, i.e. when -`starttls-use-gnutls' is non-nil. +These apply when GNUTLS is used, i.e. when `starttls-use-gnutls' is non-nil. For example, non-TLS compliant servers may require '(\"--protocols\" \"ssl3\"). Invoke \"gnutls-cli --help\" to @@ -172,7 +171,7 @@ (defcustom starttls-connect "- Simple Client Mode:\n\n" "*Regular expression indicating successful connection. The default is what GNUTLS's \"gnutls-cli\" outputs." - ;; GNUTLS cli.c:main() print this string when it is starting to run + ;; GNUTLS cli.c:main() prints this string when it is starting to run ;; in the application read/write phase. If the logic, or the string ;; itself, is modified, this must be updated. :version "22.1" @@ -182,7 +181,7 @@ (defcustom starttls-failure "\\*\\*\\* Handshake has failed" "*Regular expression indicating failed TLS handshake. The default is what GNUTLS's \"gnutls-cli\" outputs." - ;; GNUTLS cli.c:do_handshake() print this string on failure. If the + ;; GNUTLS cli.c:do_handshake() prints this string on failure. If the ;; logic, or the string itself, is modified, this must be updated. :version "22.1" :type 'regexp @@ -200,10 +199,10 @@ :group 'starttls) (defun starttls-negotiate-gnutls (process) - "Negotiate TLS on process opened by `open-starttls-stream'. -This should typically only be done once. It typically return a + "Negotiate TLS on PROCESS opened by `open-starttls-stream'. +This should typically only be done once. It typically returns a multi-line informational message with information about the -handshake, or NIL on failure." +handshake, or nil on failure." (let (buffer info old-max done-ok done-bad) (if (null (setq buffer (process-buffer process))) ;; XXX How to remove/extract the TLS negotiation junk? @@ -243,16 +242,16 @@ (defalias 'starttls-set-process-query-on-exit-flag 'process-kill-without-query))) -(defun starttls-open-stream-gnutls (name buffer host service) +(defun starttls-open-stream-gnutls (name buffer host port) (message "Opening STARTTLS connection to `%s'..." host) (let* (done (old-max (with-current-buffer buffer (point-max))) (process-connection-type starttls-process-connection-type) (process (apply #'start-process name buffer starttls-gnutls-program "-s" host - "-p" (if (integerp service) - (int-to-string service) - service) + "-p" (if (integerp port) + (int-to-string port) + port) starttls-extra-arguments))) (starttls-set-process-query-on-exit-flag process nil) (while (and (processp process) @@ -273,11 +272,11 @@ host (if done "done" "failed")) process)) -(defun starttls-open-stream (name buffer host service) - "Open a TLS connection for a service to a host. -Returns a subprocess-object to represent the connection. +(defun starttls-open-stream (name buffer host port) + "Open a TLS connection for a port to a host. +Returns a subprocess object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. -Args are NAME BUFFER HOST SERVICE. +Args are NAME BUFFER HOST PORT. NAME is name for process. It is modified if necessary to make it unique. BUFFER is the buffer (or `buffer-name') to associate with the process. Process output goes at end of that buffer, unless you specify @@ -285,14 +284,15 @@ BUFFER may be also nil, meaning that this process is not associated with any buffer Third arg is name of the host to connect to, or its IP address. -Fourth arg SERVICE is name of the service desired, or an integer -specifying a port number to connect to." +Fourth arg PORT is an integer specifying a port to connect to. +If `starttls-use-gnutls' is nil, this may also be a service name, but +GNUTLS requires a port number." (if starttls-use-gnutls - (starttls-open-stream-gnutls name buffer host service) + (starttls-open-stream-gnutls name buffer host port) (let* ((process-connection-type starttls-process-connection-type) (process (apply #'start-process name buffer starttls-program - host (format "%s" service) + host (format "%s" port) starttls-extra-args))) (starttls-set-process-query-on-exit-flag process nil) process))) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/help-macro.el --- a/lisp/help-macro.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/help-macro.el Mon Dec 19 19:57:22 2005 +0000 @@ -139,8 +139,9 @@ (setq new-frame (window-frame (selected-window)) config nil)) (setq buffer-read-only nil) - (erase-buffer) - (insert help-screen) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert help-screen)) (help-mode) (goto-char (point-min)) (while (or (memq char (append help-event-list diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/help.el --- a/lisp/help.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/help.el Mon Dec 19 19:57:22 2005 +0000 @@ -183,8 +183,7 @@ \(Use SPC or DEL to scroll through this text. Type \\\\[help-quit] to exit the Help command.) a command-apropos. Give a list of words or a regexp, to get a list of - commands whose names match (they contain two or more of the words, - or a match for the regexp). See also the apropos command. + commands whose names match. See also the apropos command. b describe-bindings. Display table of all key bindings. c describe-key-briefly. Type a command key sequence; it prints the function name that sequence runs. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/info.el --- a/lisp/info.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/info.el Mon Dec 19 19:57:22 2005 +0000 @@ -448,8 +448,7 @@ (or tail (error "Can't find %s or any compressed version of it" filename))) ;; check for conflict with jka-compr - (if (and (featurep 'jka-compr) - (jka-compr-installed-p) + (if (and (jka-compr-installed-p) (jka-compr-get-compression-info fullname)) (setq decoder nil)) (if decoder @@ -698,9 +697,9 @@ ;;;###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 -else defaults to \"Top\"." + "Use Info mode to browse the current Info buffer. +With a prefix arg, this queries for the node name to visit first; +otherwise, that defaults to `Top'." (interactive (list (if current-prefix-arg (completing-read "Node name: " (Info-build-node-completions) @@ -1518,7 +1517,12 @@ ;; Arrange to highlight the proper letters in the completion list buffer. (put 'Info-read-node-name-1 'completion-base-size-function - (lambda () 1)) + (lambda () + (if (string-match "\\`([^)]*\\'" + (or completion-common-substring + (minibuffer-completion-contents))) + 1 + 0))) (defun Info-read-node-name (prompt &optional default) (let* ((completion-ignore-case t) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/international/mule.el --- a/lisp/international/mule.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/international/mule.el Mon Dec 19 19:57:22 2005 +0000 @@ -73,7 +73,9 @@ (inhibit-file-name-operation nil)) (save-excursion (set-buffer buffer) - (insert-file-contents fullname) + ;; Don't let deactivate-mark remain set. + (let (deactivate-mark) + (insert-file-contents fullname)) ;; If the loaded file was inserted with no-conversion or ;; raw-text coding system, make the buffer unibyte. ;; Otherwise, eval-buffer might try to interpret random diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/isearch.el --- a/lisp/isearch.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/isearch.el Mon Dec 19 19:57:22 2005 +0000 @@ -1224,9 +1224,10 @@ (let ((case-fold-search isearch-case-fold-search)) (isearch-done) (isearch-clean-overlays) - (if (and (< isearch-other-end (point)) + (if (and isearch-other-end + (< isearch-other-end (point)) (not (and transient-mark-mode mark-active - (< isearch-opoint (point))))) + (< (mark) (point))))) (goto-char isearch-other-end)) (set query-replace-from-history-variable (cons isearch-string diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/log-view.el --- a/lisp/log-view.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/log-view.el Mon Dec 19 19:57:22 2005 +0000 @@ -195,10 +195,11 @@ ;; (defun log-view-diff (beg end) - "Get the diff for several revisions. -If the point is the same as the mark or the mark is not active, -get the diff for this revision. Otherwise, get the diff between -the revisions where the region starts and ends." + "Get the diff between two revisions. +If the mark is not active or the mark is on the revision at point, +get the diff between the revision at point and its previous revision. +Otherwise, get the diff between the revisions where the region starts +and ends." (interactive (list (if mark-active (region-beginning) (point)) (if mark-active (region-end) (point)))) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/makefile.w32-in --- a/lisp/makefile.w32-in Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/makefile.w32-in Mon Dec 19 19:57:22 2005 +0000 @@ -97,6 +97,8 @@ $(lisp)/cus-load.el: touch $@ +# WARNING: Do NOT split the part inside $(ARGQUOTE)s into multiple lines as +# this can break with GNU Make 3.81 and later if sh.exe is used. custom-deps: $(lisp)/cus-load.el doit @echo Directories: $(WINS) -$(emacs) -l cus-dep --eval $(ARGQUOTE)(setq find-file-hook nil)$(ARGQUOTE) -f custom-make-dependencies $(lisp) $(WINS) @@ -150,13 +152,13 @@ # including a drive letter and any leading directories, so the generated # loaddefs.el will mention file names that on other machine reference # possibly non-existent directories. +# +# WARNING: Do NOT split the part inside $(ARGQUOTE)s into multiple lines as +# this can break with GNU Make 3.81 and later if sh.exe is used. autoloads: $(lisp)/loaddefs.el doit @echo Directories: . $(WINS) $(emacs) -l autoload \ - --eval $(ARGQUOTE)(setq find-file-hook nil \ - find-file-suppress-same-file-warnings t \ - generated-autoload-file \ - $(DQUOTE)$(lisp)/loaddefs.el$(DQUOTE))$(ARGQUOTE) \ + --eval $(ARGQUOTE)(setq find-file-hook nil find-file-suppress-same-file-warnings t generated-autoload-file $(DQUOTE)$(lisp)/loaddefs.el$(DQUOTE))$(ARGQUOTE) \ -f batch-update-autoloads . $(WINS) $(lisp)/subdirs.el: diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/menu-bar.el --- a/lisp/menu-bar.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/menu-bar.el Mon Dec 19 19:57:22 2005 +0000 @@ -831,6 +831,18 @@ :visible (display-graphic-p) :button (:radio . (eq fringe-mode nil)))) +(defun menu-bar-showhide-fringe-menu-customize-right () + "Display fringes only on the right of each window." + (interactive) + (require 'fringe) + (customize-set-variable 'fringe-mode '(0 . nil))) + +(define-key menu-bar-showhide-fringe-menu [right] + '(menu-item "On the Right" menu-bar-showhide-fringe-menu-customize-right + :help "Fringe only on the right side" + :visible (display-graphic-p) + :button (:radio . (equal fringe-mode '(0 . nil))))) + (defun menu-bar-showhide-fringe-menu-customize-left () "Display fringes only on the left of each window." (interactive) @@ -843,18 +855,6 @@ :visible (display-graphic-p) :button (:radio . (equal fringe-mode '(nil . 0))))) -(defun menu-bar-showhide-fringe-menu-customize-right () - "Display fringes only on the right of each window." - (interactive) - (require 'fringe) - (customize-set-variable 'fringe-mode '(0 . nil))) - -(define-key menu-bar-showhide-fringe-menu [right] - '(menu-item "On the Right" menu-bar-showhide-fringe-menu-customize-right - :help "Fringe only on the right side" - :visible (display-graphic-p) - :button (:radio . (equal fringe-mode '(0 . nil))))) - (defun menu-bar-showhide-fringe-menu-customize-disable () "Do not display window fringes." (interactive) @@ -1432,7 +1432,7 @@ (selected-frame)))) (not (window-minibuffer-p (frame-selected-window menu-frame))))) -(defun kill-this-buffer () ; for the menubar +(defun kill-this-buffer () ; for the menu bar "Kill the current buffer." (interactive) (kill-buffer (current-buffer))) @@ -1662,10 +1662,10 @@ "Next Buffer" 'next-buffer :help "Switch to the \"next\" buffer in a cyclic order") - (list 'prev-buffer + (list 'previous-buffer 'menu-item "Previous Buffer" - 'prev-buffer + 'previous-buffer :help "Switch to the \"previous\" buffer in a cyclic order") (list 'select-named-buffer 'menu-item diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mh-e/ChangeLog --- a/lisp/mh-e/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mh-e/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,23 @@ +2005-12-15 Bill Wohler + + * mh-e.el (mh-delete-msg): Sync docstrings with manual. + + * mh-seq.el (mh-delete-subject, mh-thread-next-sibling) + (mh-thread-previous-sibling, mh-thread-ancestor) + (mh-thread-delete, mh-thread-refile): Ditto. + +2005-12-14 Bill Wohler + + * mh-customize.el (mh-speed-flists-interval): Rename to + mh-speed-update-interval. + (mh-speed-run-flists-flag): Delete. Setting + mh-speed-flists-interval to 0 accomplishes the same thing. + + * mh-speed.el (mh-folder-speedbar-buttons, mh-speed-flists): Use + mh-speed-update-interval instead of mh-speed-run-flists-flag. + (mh-speed-toggle, mh-speed-view, mh-speed-refresh): Sync + docstrings with manual. + 2005-12-09 Bill Wohler * mh-customize.el (mh-path): Move here from mh-init.el. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mh-e/mh-customize.el --- a/lisp/mh-e/mh-customize.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mh-e/mh-customize.el Mon Dec 19 19:57:22 2005 +0000 @@ -1780,21 +1780,12 @@ ;;; The Speedbar (:group 'mh-speed) -(defcustom mh-speed-flists-interval 60 - "Time between calls to flists in seconds. -If 0, flists is not called repeatedly." +(defcustom mh-speed-update-interval 60 + "Time between speedbar updates in seconds. +Set to 0 to disable automatic update." :type 'integer :group 'mh-speed) -(defcustom mh-speed-run-flists-flag t - "Non-nil means flists is used. -If non-nil, flists is executed every `mh-speed-flists-interval' seconds to -update the display of the number of unseen and total messages in each folder. -If resources are limited, this can be set to nil and the speedbar display can -be updated manually with the \\[mh-speed-flists] command." - :type 'boolean - :group 'mh-speed) - ;;; Threading (:group 'mh-thread) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mh-e/mh-e.el --- a/lisp/mh-e/mh-e.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mh-e/mh-e.el Mon Dec 19 19:57:22 2005 +0000 @@ -535,7 +535,7 @@ ;;; User executable MH-E commands: (defun mh-delete-msg (range) - "Delete message\\. + "Delete RANGE\\. To mark a message for deletion, use this command. A \"D\" is placed by the message in the scan window, and the next undeleted message is displayed. If diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mh-e/mh-seq.el --- a/lisp/mh-e/mh-seq.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mh-e/mh-seq.el Mon Dec 19 19:57:22 2005 +0000 @@ -936,10 +936,12 @@ ;;;###mh-autoload (defun mh-delete-subject () - "Mark all following messages with same subject to be deleted. -This puts the messages in a sequence named subject. You can undo the last -deletion marks using `mh-undo' with a prefix argument and then specifying the -subject sequence." + "Delete messages with same subject\\. + +To delete messages faster, you can use this command to delete all the messages +with the same subject as the current message. This command puts these messages +in a sequence named \"subject\". You can undo this action by using \\[mh-undo] +with a prefix argument and then specifying the \"subject\" sequence." (interactive) (let ((count (mh-subject-to-sequence nil))) (cond @@ -954,11 +956,15 @@ ;;;###mh-autoload (defun mh-delete-subject-or-thread () - "Mark messages for deletion intelligently. -If the folder is threaded then `mh-thread-delete' is used to mark the current -message and all its descendants for deletion. Otherwise `mh-delete-subject' is -used to mark the current message and all messages following it with the same -subject for deletion." + "Delete messages with same subject or thread\\. + +To delete messages faster, you can use this command to delete all the messages +with the same subject as the current message. This command puts these messages +in a sequence named \"subject\". You can undo this action by using \\[mh-undo] +with a prefix argument and then specifying the \"subject\" sequence. + +However, if the buffer is displaying a threaded view of the folder then this +command behaves like \\[mh-thread-delete]." (interactive) (if (memq 'unthread mh-view-ops) (mh-thread-delete) @@ -1562,7 +1568,8 @@ ;;;###mh-autoload (defun mh-thread-next-sibling (&optional previous-flag) - "Jump to next sibling. + "Display next sibling. + With non-nil optional argument PREVIOUS-FLAG jump to the previous sibling." (interactive) (cond ((not (memq 'unthread mh-view-ops)) @@ -1589,7 +1596,7 @@ ;;;###mh-autoload (defun mh-thread-previous-sibling () - "Jump to previous sibling." + "Display previous sibling." (interactive) (mh-thread-next-sibling t)) @@ -1610,9 +1617,11 @@ ;;;###mh-autoload (defun mh-thread-ancestor (&optional thread-root-flag) - "Jump to the ancestor of current message. -If optional argument THREAD-ROOT-FLAG is non-nil then jump to the root of the -thread tree the message belongs to." + "Display ancestor of current message. + +If you do not care for the way a particular thread has turned, you can move up +the chain of messages with this command. This command can also take a prefix +argument THREAD-ROOT-FLAG to jump to the message that started everything." (interactive "P") (beginning-of-line) (cond ((not (memq 'unthread mh-view-ops)) @@ -1656,7 +1665,7 @@ ;;;###mh-autoload (defun mh-thread-delete () - "Mark current message and all its children for subsequent deletion." + "Delete thread." (interactive) (cond ((not (memq 'unthread mh-view-ops)) (error "Folder isn't threaded")) @@ -1669,7 +1678,7 @@ ;;;###mh-autoload (defun mh-thread-refile (folder) - "Mark current message and all its children for refiling to FOLDER." + "Refile (output) thread into FOLDER." (interactive (list (intern (mh-prompt-for-refile-folder)))) (cond ((not (memq 'unthread mh-view-ops)) (error "Folder isn't threaded")) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mh-e/mh-speed.el --- a/lisp/mh-e/mh-speed.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mh-e/mh-speed.el Mon Dec 19 19:57:22 2005 +0000 @@ -76,7 +76,7 @@ (line-beginning-position) (1+ (line-beginning-position)) `(mh-folder nil mh-expanded nil mh-children-p t mh-level 0)) (mh-speed-stealth-update t) - (when mh-speed-run-flists-flag + (when (> mh-speed-update-interval 0) (mh-speed-flists nil)))) ;;;###mh-autoload @@ -292,8 +292,8 @@ ;;;###mh-autoload (defun mh-speed-toggle (&rest args) - "Toggle the display of child folders. -The otional ARGS are ignored and there for compatibilty with speedbar." + "Toggle the display of child folders in the speedbar. +The optional ARGS from speedbar are ignored." (interactive) (declare (ignore args)) (beginning-of-line) @@ -335,8 +335,8 @@ ;;;###mh-autoload (defun mh-speed-view (&rest args) - "View folder on current line. -Optional ARGS are ignored." + "Visits the selected folder just as if you had used \\\\[mh-visit-folder]. +The optional ARGS from speedbar are ignored." (interactive) (declare (ignore args)) (let* ((folder (get-text-property (line-beginning-position) 'mh-folder)) @@ -381,7 +381,9 @@ (unless mh-speed-flists-timer (setq mh-speed-flists-timer (run-at-time - nil (and mh-speed-run-flists-flag mh-speed-flists-interval) + nil (if (> mh-speed-update-interval 0) + mh-speed-update-interval + nil) (lambda () (unless (and (processp mh-speed-flists-process) (not (eq (process-status mh-speed-flists-process) @@ -502,9 +504,10 @@ (clrhash mh-sub-folders-cache))))) (defun mh-speed-refresh () - "Refresh the speedbar. -Use this function to refresh the speedbar if folders have been added or -deleted or message ranges have been updated outside of MH-E." + "Regenerates the list of folders in the speedbar. + +Run this command if you've added or deleted a folder, or want to update the +unseen message count before the next automatic update." (interactive) (mh-speed-flists t) (mh-speed-invalidate-map "")) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/mouse.el --- a/lisp/mouse.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/mouse.el Mon Dec 19 19:57:22 2005 +0000 @@ -594,14 +594,15 @@ ((null (car (cdr mouse))) nil) (t - (save-selected-window - ;; If the scroll bar is on the window's left, - ;; adjust the window on the left. - (unless (eq which-side 'right) - (select-window (previous-window))) + (let ((window + ;; If the scroll bar is on the window's left, + ;; adjust the window on the left. + (if (eq which-side 'right) + (selected-window) + (previous-window)))) (setq x (- (car (cdr mouse)) (if (eq which-side 'right) 0 2)) - edges (window-edges) + edges (window-edges window) left (nth 0 edges) right (nth 2 edges)) ;; scale back a move that would make the @@ -609,19 +610,10 @@ (if (< (- x left -1) window-min-width) (setq x (+ left window-min-width -1))) ;; compute size change needed - (setq growth (- x right -1) - wconfig (current-window-configuration)) - (enlarge-window growth t) - ;; if this window's growth caused another - ;; window to be deleted because it was too - ;; thin, rescind the change. - ;; - ;; if size change caused space to be stolen - ;; from a window to the left of this one, - ;; rescind the change. - (if (or (/= start-nwindows (count-windows t)) - (/= left (nth 0 (window-edges)))) - (set-window-configuration wconfig)))))))))) + (setq growth (- x right -1)) + (condition-case nil + (adjust-window-trailing-edge window growth t) + (error nil)))))))))) (defun mouse-set-point (event) "Move point to the position clicked on with the mouse. diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/net/newsticker.el --- a/lisp/net/newsticker.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/net/newsticker.el Mon Dec 19 19:57:22 2005 +0000 @@ -392,6 +392,32 @@ (defvar w3m-minor-mode-map) ;; ====================================================================== +;;; Newsticker status +;; ====================================================================== + +(defvar newsticker--retrieval-timer-list nil + "List of timers for news retrieval. +This is an alist, each element consisting of (feed-name . timer)") + +(defvar newsticker--display-timer nil + "Timer for newsticker display.") + +;;;###autoload +(defun newsticker-running-p () + "Check whether newsticker is running. +Return t if newsticker is running, nil otherwise. Newsticker is +considered to be running if the newsticker timer list is not empty." + (> (length newsticker--retrieval-timer-list) 0)) + +;;;###autoload +(defun newsticker-ticker-running-p () + "Check whether newsticker's actual ticker is running. +Return t if ticker is running, nil otherwise. Newsticker is +considered to be running if the newsticker timer list is not +empty." + (timerp newsticker--display-timer)) + +;; ====================================================================== ;;; Customizables ;; ====================================================================== (defgroup newsticker nil @@ -1188,11 +1214,6 @@ ;; ====================================================================== ;;; Internal variables ;; ====================================================================== -(defvar newsticker--display-timer nil - "Timer for newsticker display.") -(defvar newsticker--retrieval-timer-list nil - "List of timers for news retrieval. -This is an alist, each element consisting of (feed-name . timer)") (defvar newsticker--item-list nil "List of newsticker items.") (defvar newsticker--item-position 0 @@ -3079,24 +3100,6 @@ (and (memq age '(new old obsolete)) t))))) ;; ====================================================================== -;;; Newsticker status -;; ====================================================================== -;;;###autoload -(defun newsticker-running-p () - "Check whether newsticker is running. -Return t if newsticker is running, nil otherwise. Newsticker is -considered to be running if the newsticker timer list is not empty." - (> (length newsticker--retrieval-timer-list) 0)) - -;;;###autoload -(defun newsticker-ticker-running-p () - "Check whether newsticker's actual ticker is running. -Return t if ticker is running, nil otherwise. Newsticker is -considered to be running if the newsticker timer list is not -empty." - (timerp newsticker--display-timer)) - -;; ====================================================================== ;;; local stuff ;; ====================================================================== (defun newsticker-get-news (feed-name) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/net/tls.el --- a/lisp/net/tls.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/net/tls.el Mon Dec 19 19:57:22 2005 +0000 @@ -56,7 +56,8 @@ :group 'comm) (defcustom tls-program '("gnutls-cli -p %p %h" - "gnutls-cli -p %p %h --protocols ssl3") + "gnutls-cli -p %p %h --protocols ssl3" + "openssl s_client -connect %h:%p -no_ssl2") "List of strings containing commands to start TLS stream to a host. Each entry in the list is tried until a connection is successful. %s is replaced with server hostname, %p with port to connect to. @@ -64,6 +65,7 @@ stdout. Also see `tls-success' for what the program should output after successful negotiation." :type '(repeat string) + :version "22.1" :group 'tls) (defcustom tls-process-connection-type nil @@ -72,9 +74,10 @@ :type 'boolean :group 'tls) -(defcustom tls-success "- Handshake was completed" +(defcustom tls-success "- Handshake was completed\\|SSL handshake has read " "*Regular expression indicating completed TLS handshakes. -The default is what GNUTLS's \"gnutls-cli\" outputs." +The default is what GNUTLS's \"gnutls-cli\" or OpenSSL's +\"openssl s_client\" outputs." :version "22.1" :type 'regexp :group 'tls) @@ -109,11 +112,11 @@ (push (cons (match-string 1) (match-string 2)) vals)) (nreverse vals)))))) -(defun open-tls-stream (name buffer host service) - "Open a TLS connection for a service to a host. +(defun open-tls-stream (name buffer host port) + "Open a TLS connection for a port to a host. Returns a subprocess-object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. -Args are NAME BUFFER HOST SERVICE. +Args are NAME BUFFER HOST PORT. NAME is name for process. It is modified if necessary to make it unique. BUFFER is the buffer (or buffer-name) to associate with the process. Process output goes at end of that buffer, unless you specify @@ -121,8 +124,7 @@ BUFFER may be also nil, meaning that this process is not associated with any buffer Third arg is name of the host to connect to, or its IP address. -Fourth arg SERVICE is name of the service desired, or an integer -specifying a port number to connect to." +Fourth arg PORT is an integer specifying a port to connect to." (let ((cmds tls-program) cmd done) (message "Opening TLS connection to `%s'..." host) (while (and (not done) (setq cmd (pop cmds))) @@ -134,9 +136,9 @@ cmd (format-spec-make ?h host - ?p (if (integerp service) - (int-to-string service) - service))))) + ?p (if (integerp port) + (int-to-string port) + port))))) response) (while (and process (memq (process-status process) '(open run)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/progmodes/cc-engine.el --- a/lisp/progmodes/cc-engine.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/progmodes/cc-engine.el Mon Dec 19 19:57:22 2005 +0000 @@ -3993,35 +3993,36 @@ ;; ;; This function might do hidden buffer changes. - (save-excursion - (goto-char beg) - (when (or (looking-at "[<>]") - (< (skip-chars-backward "<>") 0)) - + (save-match-data + (save-excursion (goto-char beg) - (c-beginning-of-current-token) - (when (and (< (point) beg) - (looking-at c-<>-multichar-token-regexp) - (< beg (setq beg (match-end 0)))) - (while (progn (skip-chars-forward "^<>" beg) - (< (point) beg)) - (c-clear-char-property (point) 'syntax-table) - (forward-char)))) - - (when (< beg end) - (goto-char end) (when (or (looking-at "[<>]") (< (skip-chars-backward "<>") 0)) - (goto-char end) + (goto-char beg) (c-beginning-of-current-token) - (when (and (< (point) end) + (when (and (< (point) beg) (looking-at c-<>-multichar-token-regexp) - (< end (setq end (match-end 0)))) - (while (progn (skip-chars-forward "^<>" end) - (< (point) end)) + (< beg (setq beg (match-end 0)))) + (while (progn (skip-chars-forward "^<>" beg) + (< (point) beg)) (c-clear-char-property (point) 'syntax-table) - (forward-char))))))) + (forward-char)))) + + (when (< beg end) + (goto-char end) + (when (or (looking-at "[<>]") + (< (skip-chars-backward "<>") 0)) + + (goto-char end) + (c-beginning-of-current-token) + (when (and (< (point) end) + (looking-at c-<>-multichar-token-regexp) + (< end (setq end (match-end 0)))) + (while (progn (skip-chars-forward "^<>" end) + (< (point) end)) + (c-clear-char-property (point) 'syntax-table) + (forward-char)))))))) ;; Dynamically bound variable that instructs `c-forward-type' to also ;; treat possible types (i.e. those that it normally returns 'maybe or diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/progmodes/compile.el --- a/lisp/progmodes/compile.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/progmodes/compile.el Mon Dec 19 19:57:22 2005 +0000 @@ -331,7 +331,8 @@ FILE can also have the form (FILE FORMAT...), where the FORMATs \(e.g. \"%s.c\") will be applied in turn to the recognized file name, until a file of that name is found. Or FILE can also be a -function to return the filename. +function that returns (FILENAME) or (RELATIVE-FILENAME . DIRNAME). +In the former case, FILENAME may be relative or absolute. LINE can also be of the form (LINE . END-LINE) meaning a range of lines. COLUMN can also be of the form (COLUMN . END-COLUMN) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/progmodes/cpp.el --- a/lisp/progmodes/cpp.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/progmodes/cpp.el Mon Dec 19 19:57:22 2005 +0000 @@ -59,14 +59,18 @@ :type 'file :group 'cpp) +(define-widget 'cpp-face 'lazy + "Either a face or the special symbol 'invisible'." + :type '(choice (const invisible) (face))) + (defcustom cpp-known-face 'invisible "*Face used for known cpp symbols." - :type 'face + :type 'cpp-face :group 'cpp) (defcustom cpp-unknown-face 'highlight "*Face used for unknown cpp symbols." - :type 'face + :type 'cpp-face :group 'cpp) (defcustom cpp-face-type 'light @@ -95,10 +99,12 @@ 1. Face used for text that is `ifdef' the macro. 2. Face used for text that is `ifndef' the macro. 3. t, nil, or `both' depending on what text may be edited." - :type '(repeat (list string face face - (choice (const t) - (const nil) - (const both)))) + :type '(repeat (list (string :tag "Macro") + (cpp-face :tag "True") + (cpp-face :tag "False") + (choice (const :tag "True branch writable" t) + (const :tag "False branch writeable" nil) + (const :tag "Both branches writeable" both)))) :group 'cpp) (defvar cpp-overlay-list nil) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/progmodes/gdb-ui.el --- a/lisp/progmodes/gdb-ui.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/progmodes/gdb-ui.el Mon Dec 19 19:57:22 2005 +0000 @@ -51,7 +51,8 @@ ;; 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. +;; onwards to use watch expressions. It works best with GDB 6.4 where +;; watch expressions will update more quickly. ;;; Windows Platforms: @@ -2577,6 +2578,8 @@ (if (null arg) (not gdb-many-windows) (> (prefix-numeric-value arg) 0))) + (message (format "Display of other windows %sabled" + (if gdb-many-windows "en" "dis"))) (if (and gud-comint-buffer (buffer-name gud-comint-buffer)) (condition-case nil diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/recentf.el --- a/lisp/recentf.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/recentf.el Mon Dec 19 19:57:22 2005 +0000 @@ -1038,7 +1038,8 @@ (if (eq widget-type (widget-type (widget-at (point)))) (setq done t) (widget-move 1)))) - (goto-char (point-min)))) + (error + (goto-char (point-min))))) (defvar recentf-dialog-mode-map (let ((km (copy-keymap recentf--shortcuts-keymap))) @@ -1100,6 +1101,8 @@ (defun recentf-edit-list () "Show a dialog to delete selected files from the recent list." (interactive) + (unless recentf-list + (error "The list of recent files is empty")) (recentf-dialog (format "*%s - Edit list*" recentf-menu-title) (set (make-local-variable 'recentf-edit-list) nil) (widget-insert @@ -1194,6 +1197,8 @@ If optional argument BUFFER-NAME is non-nil, it is a buffer name to use for the dialog. It defaults to \"*`recentf-menu-title'*\"." (interactive) + (unless (or files recentf-list) + (error "There is no recent file to open")) (recentf-dialog (or buffer-name (format "*%s*" recentf-menu-title)) (widget-insert "Click on a file" (if recentf-show-file-shortcuts-flag diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/simple.el --- a/lisp/simple.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/simple.el Mon Dec 19 19:57:22 2005 +0000 @@ -52,25 +52,68 @@ "Highlight (un)matching of parens and expressions." :group 'matching) +(defun get-next-valid-buffer (list &optional buffer visible-ok frame) "\ +Search LIST for a valid buffer to display in FRAME. +Return nil when all buffers in LIST are undesirable for display, +otherwise return the first suitable buffer in LIST. + +Buffers not visible in windows are preferred to visible buffers, +unless VISIBLE-OK is non-nil. +If the optional argument FRAME is nil, it defaults to the selected frame. +If BUFFER is non-nil, ignore occurances of that buffer in LIST." + ;; This logic is more or less copied from other-buffer. + (setq frame (or frame (selected-frame))) + (let ((pred (frame-parameter frame 'buffer-predicate)) + found buf) + (while (and (not found) list) + (setq buf (car list)) + (if (and (not (eq buffer buf)) + (buffer-live-p buf) + (or (null pred) (funcall pred buf)) + (not (eq (aref (buffer-name buf) 0) ?\s)) + (or visible-ok (null (get-buffer-window buf 'visible)))) + (setq found buf) + (setq list (cdr list)))) + (car list))) + +(defun last-buffer (&optional buffer visible-ok frame) "\ +Return the last non-hidden displayable buffer in the buffer list. +If BUFFER is non-nil, last-buffer will ignore that buffer. +Buffers not visible in windows are preferred to visible buffers, +unless optional argument VISIBLE-OK is non-nil. +If the optional third argument FRAME is non-nil, use that frame's +buffer list instead of the selected frame's buffer list. +If no other buffer exists, the buffer `*scratch*' is returned." + (setq frame (or frame (selected-frame))) + (or (get-next-valid-buffer (frame-parameter frame 'buried-buffer-list) + buffer visible-ok frame) + (get-next-valid-buffer (nreverse (buffer-list frame)) + buffer visible-ok frame) + (progn + (set-buffer-major-mode (get-buffer-create "*scratch*")) + (get-buffer "*scratch*")))) + (defun next-buffer () "Switch to the next buffer in cyclic order." (interactive) - (let ((buffer (current-buffer))) - (switch-to-buffer (other-buffer buffer)) - (bury-buffer buffer))) - -(defun prev-buffer () + (let ((buffer (current-buffer)) + (bbl (frame-parameter nil 'buried-buffer-list))) + (switch-to-buffer (other-buffer buffer t)) + (bury-buffer buffer) + (set-frame-parameter nil 'buried-buffer-list + (cons buffer (delq buffer bbl))))) + +(defun previous-buffer () "Switch to the previous buffer in cyclic order." (interactive) - (let ((list (nreverse (buffer-list))) - found) - (while (and (not found) list) - (let ((buffer (car list))) - (if (and (not (get-buffer-window buffer)) - (not (string-match "\\` " (buffer-name buffer)))) - (setq found buffer))) - (setq list (cdr list))) - (switch-to-buffer found))) + (let ((buffer (last-buffer (current-buffer) t)) + (bbl (frame-parameter nil 'buried-buffer-list))) + (switch-to-buffer buffer) + ;; Clean up buried-buffer-list up to and including the chosen buffer. + (while (and bbl (not (eq (car bbl) buffer))) + (setq bbl (cdr bbl))) + (set-frame-parameter nil 'buried-buffer-list bbl))) + ;;; next-error support framework @@ -4748,7 +4791,7 @@ (error "No completion here")) (setq beg (previous-single-property-change beg 'mouse-face)) (setq end (or (next-single-property-change end 'mouse-face) (point-max))) - (setq completion (buffer-substring beg end)) + (setq completion (buffer-substring-no-properties beg end)) (let ((owindow (selected-window))) (if (and (one-window-p t 'selected-frame) (window-dedicated-p (selected-window))) @@ -4905,68 +4948,52 @@ "Common prefix substring to use in `completion-setup-function' to put faces. The value is set by `display-completion-list' during running `completion-setup-hook'. -To put faces, `completions-first-difference' and `completions-common-part' -into \"*Completions*\* buffer, the common prefix substring in completions is -needed as a hint. (Minibuffer is a special case. The content of minibuffer itself -is the substring.)") +To put faces `completions-first-difference' and `completions-common-part' +in the `*Completions*' buffer, the common prefix substring in completions +is needed as a hint. (The minibuffer is a special case. The content +of the minibuffer before point is always the common substring.)") ;; This function goes in completion-setup-hook, so that it is called ;; after the text of the completion list buffer is written. (defun completion-setup-function () (let* ((mainbuf (current-buffer)) - (mbuf-contents (minibuffer-contents)) - (common-string-length (length mbuf-contents))) + (mbuf-contents (minibuffer-completion-contents)) + common-string-length) ;; When reading a file name in the minibuffer, ;; set default-directory in the minibuffer ;; so it will get copied into the completion list buffer. (if minibuffer-completing-file-name (with-current-buffer mainbuf (setq default-directory (file-name-directory mbuf-contents)))) - ;; If partial-completion-mode is on, point might not be after the - ;; last character in the minibuffer. - ;; FIXME: This hack should be moved to complete.el where we call - ;; display-completion-list. - (when partial-completion-mode - (setq common-string-length - (if (eq (char-after (field-beginning)) ?-) - ;; If the text to be completed starts with a `-', there is no - ;; common prefix. - ;; FIXME: this probably still doesn't do the right thing - ;; when completing file names. It's not even clear what - ;; is TRT. - 0 - (- common-string-length (- (point-max) (point)))))) (with-current-buffer standard-output (completion-list-mode) (set (make-local-variable 'completion-reference-buffer) mainbuf) (setq completion-base-size - (if minibuffer-completing-file-name - ;; For file name completion, use the number of chars before - ;; the start of the last file name component. - (with-current-buffer mainbuf - (save-excursion - (goto-char (point-max)) - (skip-chars-backward completion-root-regexp) - (- (point) (minibuffer-prompt-end)))) - ;; Otherwise, in minibuffer, the whole input is being completed. - (if (minibufferp mainbuf) 0))) - (if (and (symbolp minibuffer-completion-table) - (get minibuffer-completion-table 'completion-base-size-function)) - (setq completion-base-size - ;; FIXME: without any extra arg, how is this function - ;; expected to return anything else than a constant unless - ;; it redoes part of the work of all-completions? - ;; In most cases this value would better be computed and - ;; returned at the same time as the list of all-completions - ;; is computed. --Stef - (funcall (get minibuffer-completion-table - 'completion-base-size-function)))) + (cond + ((and (symbolp minibuffer-completion-table) + (get minibuffer-completion-table 'completion-base-size-function)) + ;; To compute base size, a function can use the global value of + ;; completion-common-substring or minibuffer-completion-contents. + (with-current-buffer mainbuf + (funcall (get minibuffer-completion-table + 'completion-base-size-function)))) + (minibuffer-completing-file-name + ;; For file name completion, use the number of chars before + ;; the start of the file name component at point. + (with-current-buffer mainbuf + (save-excursion + (skip-chars-backward completion-root-regexp) + (- (point) (minibuffer-prompt-end))))) + ;; Otherwise, in minibuffer, the base size is 0. + ((minibufferp mainbuf) 0))) + (setq common-string-length + (cond + (completion-common-substring + (length completion-common-substring)) + (completion-base-size + (- (length mbuf-contents) completion-base-size)))) ;; Put faces on first uncommon characters and common parts. - (when (or completion-common-substring completion-base-size) - (setq common-string-length - (if completion-common-substring - (length completion-common-substring) - (- common-string-length completion-base-size))) + (when (and (integerp common-string-length) (>= common-string-length 0)) (let ((element-start (point-min)) (maxp (point-max)) element-common-end) @@ -4977,7 +5004,8 @@ (+ element-start common-string-length)) maxp)) (when (get-char-property element-start 'mouse-face) - (if (get-char-property (1- element-common-end) 'mouse-face) + (if (and (> common-string-length 0) + (get-char-property (1- element-common-end) 'mouse-face)) (put-text-property element-start element-common-end 'font-lock-face 'completions-common-part)) (if (get-char-property element-common-end 'mouse-face) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/startup.el --- a/lisp/startup.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/startup.el Mon Dec 19 19:57:22 2005 +0000 @@ -47,14 +47,14 @@ "Emacs start-up procedure." :group 'internal) -(defcustom inhibit-startup-message nil - "*Non-nil inhibits the initial startup message. +(defcustom inhibit-splash-screen nil + "*Non-nil inhibits the startup screen. This is for use in your personal init file, once you are familiar -with the contents of the startup message." +with the contents of the startup screen." :type 'boolean :group 'initialization) -(defvaralias 'inhibit-splash-screen 'inhibit-startup-message) +(defvaralias 'inhibit-startup-message 'inhibit-splash-screen) (defcustom inhibit-startup-echo-area-message nil "*Non-nil inhibits the initial startup echo area message. @@ -648,15 +648,22 @@ (set-locale-environment nil) ;; Convert preloaded file names to absolute. - (setq load-history - (mapcar (lambda (elt) - (if (and (stringp (car elt)) - (not (file-name-absolute-p (car elt)))) - (cons (locate-file (car elt) load-path - (append load-suffixes '(""))) - (cdr elt)) - elt)) - load-history)) + (let ((lisp-dir + (file-name-directory + (locate-file "simple" load-path + load-suffixes)))) + + (setq load-history + (mapcar (lambda (elt) + (if (and (stringp (car elt)) + (not (file-name-absolute-p (car elt)))) + (cons (concat lisp-dir + (car elt) + (if (string-match "[.]el$" (car elt)) + "" ".elc")) + (cdr elt)) + elt)) + load-history))) ;; Convert the arguments to Emacs internal representation. (let ((args (cdr command-line-args))) @@ -930,6 +937,10 @@ (pop-to-buffer "*Messages*")) (setq init-file-had-error t))))) + (if (and deactivate-mark transient-mark-mode) + (with-current-buffer (window-buffer) + (deactivate-mark))) + ;; If the user has a file of abbrevs, read it. (if (file-exists-p abbrev-file-name) (quietly-read-abbrev-file abbrev-file-name)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/subr.el --- a/lisp/subr.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/subr.el Mon Dec 19 19:57:22 2005 +0000 @@ -2907,11 +2907,11 @@ (defvar version-regexp-alist - '(("^[-_+]?a\\(lpha\\)?$" . -3) + '(("^[-_+ ]?a\\(lpha\\)?$" . -3) ("^[-_+]$" . -3) ; treat "1.2.3-20050920" and "1.2-3" as alpha releases - ("^[-_+]cvs$" . -3) ; treat "1.2.3-CVS" as alpha release - ("^[-_+]?b\\(eta\\)?$" . -2) - ("^[-_+]?\\(pre\\|rc\\)$" . -1)) + ("^[-_+ ]cvs$" . -3) ; treat "1.2.3-CVS" as alpha release + ("^[-_+ ]?b\\(eta\\)?$" . -2) + ("^[-_+ ]?\\(pre\\|rc\\)$" . -1)) "*Specify association between non-numeric version part and a priority. This association is used to handle version string like \"1.0pre2\", @@ -2922,10 +2922,10 @@ \"1.0pre2\" (1 0 -1 2) \"1.0PRE2\" (1 0 -1 2) \"22.8beta3\" (22 8 -2 3) - \"22.8Beta3\" (22 8 -2 3) + \"22.8 Beta3\" (22 8 -2 3) \"0.9alpha1\" (0 9 -3 1) \"0.9AlphA1\" (0 9 -3 1) - \"0.9alpha\" (0 9 -3) + \"0.9 alpha\" (0 9 -3) Each element has the following form: @@ -2977,8 +2977,13 @@ \"0.9alpha\" (0 9 -3) See documentation for `version-separator' and `version-regexp-alist'." - (or (and (stringp ver) (not (string= ver ""))) + (or (and (stringp ver) (> (length ver) 0)) (error "Invalid version string: '%s'" ver)) + ;; Change .x.y to 0.x.y + (if (and (>= (length ver) (length version-separator)) + (string-equal (substring ver 0 (length version-separator)) + version-separator)) + (setq ver (concat "0" ver))) (save-match-data (let ((i 0) (case-fold-search t) ; ignore case in matching diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/term.el --- a/lisp/term.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/term.el Mon Dec 19 19:57:22 2005 +0000 @@ -2687,13 +2687,17 @@ (buffer-undo-list t) (selected (selected-window)) last-win + handled-ansi-message (str-length (length str))) (save-selected-window ;; Let's handle the messages. -mm - (setq str (term-handle-ansi-terminal-messages str)) - (setq str-length (length str)) + (let* ((newstr (term-handle-ansi-terminal-messages str))) + (if (not (eq str newstr)) + (setq handled-ansi-message t + str newstr))) + (setq str-length (length str)) (if (marker-buffer term-pending-delete-marker) (progn @@ -2849,7 +2853,8 @@ ((eq char ?\017)) ; Shift In - ignored ((eq char ?\^G) ;; (terminfo: bel) (beep t)) - ((eq char ?\032) + ((and (eq char ?\032) + (not handled-ansi-message)) (let ((end (string-match "\r?$" str i))) (if end (funcall term-command-hook diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/textmodes/bibtex.el --- a/lisp/textmodes/bibtex.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/textmodes/bibtex.el Mon Dec 19 19:57:22 2005 +0000 @@ -551,6 +551,12 @@ :group 'bibtex-autokey :type 'string) +(defcustom bibtex-autokey-expand-strings nil + "If non-nil, expand strings when extracting the content of a BibTeX field. +See `bibtex-generate-autokey' for details." + :group 'bibtex-autokey + :type 'boolean) + (defvar bibtex-autokey-transcriptions '(;; language specific characters ("\\\\aa" . "a") ; \aa -> a @@ -809,6 +815,8 @@ and with the `match-data' properly set. Case is always ignored. Always remove the field delimiters. +If `bibtex-expand-strings' is non-nil, BibTeX strings are expanded +for generating the URL. The following is a complex example, see http://link.aps.org/linkfaq.html. @@ -840,12 +848,17 @@ (integer :tag "Sub-match") (function :tag "Filter")))))))) -;; bibtex-font-lock-keywords is a user option as well, but since the +(defcustom bibtex-expand-strings nil + "If non-nil, expand strings when extracting the content of a BibTeX field." + :group 'bibtex + :type 'boolean) + +;; `bibtex-font-lock-keywords' is a user option as well, but since the ;; patterns used to define this variable are defined in a later ;; section of this file, it is defined later. -;; Syntax Table, Keybindings and BibTeX Entry List +;; Syntax Table and Keybindings (defvar bibtex-mode-syntax-table (let ((st (make-syntax-table))) (modify-syntax-entry ?\" "\"" st) @@ -1073,66 +1086,69 @@ "Last reformat reference keys option given.") (defconst bibtex-field-name "[^\"#%'(),={} \t\n0-9][^\"#%'(),={} \t\n]*" + "Regexp matching the name of a BibTeX field.") + +(defconst bibtex-name-part + (concat ",[ \t\n]*\\(" bibtex-field-name "\\)[ \t\n]*=") "Regexp matching the name part of a BibTeX field.") -(defconst bibtex-entry-type (concat "@" bibtex-field-name) - "Regexp matching the type part of a BibTeX entry.") - (defconst bibtex-reference-key "[][[:alnum:].:;?!`'/*@+|()<>&_^$-]+" "Regexp matching the reference key part of a BibTeX entry.") (defconst bibtex-field-const "[][[:alnum:].:;?!`'/*@+=|<>&_^$-]+" "Regexp matching a BibTeX field constant.") -(defconst bibtex-entry-head +(defvar bibtex-entry-type + (concat "@[ \t]*\\(?:" + (regexp-opt (mapcar 'car bibtex-entry-field-alist)) "\\)") + "Regexp matching the name of a BibTeX entry.") + +(defvar bibtex-entry-type-whitespace + (concat "[ \t]*" bibtex-entry-type) + "Regexp matching the name of a BibTeX entry preceded by whitespace.") + +(defvar bibtex-entry-type-str + (concat "@[ \t]*\\(?:" + (regexp-opt (append '("String") + (mapcar 'car bibtex-entry-field-alist))) "\\)") + "Regexp matching the name of a BibTeX entry (including @String).") + +(defvar bibtex-entry-head (concat "^[ \t]*\\(" bibtex-entry-type "\\)[ \t]*[({][ \t\n]*\\(" bibtex-reference-key "\\)") - "Regexp matching the header line of a BibTeX entry.") - -(defconst bibtex-entry-maybe-empty-head + "Regexp matching the header line of a BibTeX entry (including key).") + +(defvar bibtex-entry-maybe-empty-head (concat bibtex-entry-head "?") "Regexp matching the header line of a BibTeX entry (possibly without key).") +(defconst bibtex-any-entry-maybe-empty-head + (concat "^[ \t]*\\(@[ \t]*" bibtex-field-name "\\)[ \t]*[({][ \t\n]*\\(" + bibtex-reference-key "\\)?") + "Regexp matching the header line of any BibTeX entry (possibly without key).") + (defconst bibtex-type-in-head 1 "Regexp subexpression number of the type part in `bibtex-entry-head'.") (defconst bibtex-key-in-head 2 "Regexp subexpression number of the key part in `bibtex-entry-head'.") -(defconst bibtex-string-maybe-empty-head - (concat "^[ \t]*\\(@String\\)[ \t]*[({]\\(" - bibtex-reference-key - "\\)?") - "Regexp matching the header line of a BibTeX String entry.") - -(defconst bibtex-entry-postfix "[ \t\n]*,?[ \t\n]*[})]" - "Regexp matching the postfix of a BibTeX entry.") - -(defvar bibtex-known-entry-type-re - (regexp-opt (mapcar 'car bibtex-entry-field-alist)) - "Regexp matching the name of a BibTeX entry.") - -(defvar bibtex-valid-entry-re - (concat "@[ \t]*\\(" bibtex-known-entry-type-re "\\)") - "Regexp matching the name of a valid BibTeX entry.") - -(defvar bibtex-valid-entry-whitespace-re - (concat "[ \t]*\\(" bibtex-valid-entry-re "\\)") - "Regexp matching the name of a valid BibTeX entry preceded by whitespace.") - -(defvar bibtex-any-valid-entry-re - (concat "@[ \t]*" - (regexp-opt (append '("String") - (mapcar 'car bibtex-entry-field-alist)) - t)) - "Regexp matching the name of any valid BibTeX entry (including string).") - (defconst bibtex-empty-field-re "\\`\\(\"\"\\|{}\\)\\'" "Regexp matching the text part (as a string) of an empty field.") +(defconst bibtex-string-type "^[ \t]*\\(@[ \t]*String\\)[ \t]*[({][ \t\n]*" + "Regexp matching the name of a BibTeX String entry.") + +(defconst bibtex-string-maybe-empty-head + (concat bibtex-string-type "\\(" bibtex-reference-key "\\)?") + "Regexp matching the header line of a BibTeX String entry.") + +(defconst bibtex-preamble-prefix "[ \t]*@[ \t]*Preamble[ \t]*" + "Regexp matching the prefix part of a preamble.") + (defconst bibtex-font-lock-syntactic-keywords `((,(concat "^[ \t]*\\(" (substring bibtex-comment-start 0 1) "\\)" (substring bibtex-comment-start 1) "\\>") @@ -1140,7 +1156,7 @@ (defvar bibtex-font-lock-keywords ;; entry type and reference key - `((,bibtex-entry-maybe-empty-head + `((,bibtex-any-entry-maybe-empty-head (,bibtex-type-in-head font-lock-function-name-face) (,bibtex-key-in-head font-lock-constant-face nil t)) ;; optional field names (treated as comments) @@ -1160,9 +1176,8 @@ "[ \t]*=[ \t]*") "Regexp for `bibtex-font-lock-url'.") -(defvar bibtex-field-name-for-parsing nil - "Regexp of field name to be parsed by function `bibtex-parse-field-name'. -Passed by dynamic scoping.") +(defvar bibtex-string-empty-key nil + "If non-nil, `bibtex-parse-string' accepts empty key.") (defvar bibtex-sort-entry-class-alist (let ((i -1) alist) @@ -1193,8 +1208,8 @@ "Parse a string of the format . The functions PARSE-LHS and PARSE-RHS are used to parse the corresponding substrings. These functions are expected to return nil if parsing is not -successful. If both functions return non-nil, a pair containing the returned -values of the functions PARSE-LHS and PARSE-RHS is returned." +successful. If the returned values of both functions are non-nil, +return a cons pair of these values. Do not move point." (save-match-data (save-excursion (let ((left (funcall parse-lhs)) @@ -1206,7 +1221,7 @@ (cons left right)))))) (defun bibtex-parse-field-name () - "Parse the field name stored in `bibtex-field-name-for-parsing'. + "Parse the name part of a BibTeX field. If the field name is found, return a triple consisting of the position of the very first character of the match, the actual starting position of the name part and end position of the match. Move point to end of field name. @@ -1215,14 +1230,18 @@ (cond ((looking-at ",[ \t\n]*") (let ((start (point))) (goto-char (match-end 0)) - (when (looking-at bibtex-field-name-for-parsing) + (when (looking-at bibtex-field-name) (goto-char (match-end 0)) (list start (match-beginning 0) (match-end 0))))) ;; Maybe add a missing comma. ((and bibtex-autoadd-commas - (looking-at (concat "[ \t\n]*\\(?:" bibtex-field-name-for-parsing + (looking-at (concat "[ \t\n]*\\(?:" bibtex-field-name "\\)[ \t\n]*="))) (skip-chars-backward " \t\n") + ;; It can be confusing if non-editing commands try to + ;; modify the buffer. + (if buffer-read-only + (error "Comma missing at buffer position %s" (point))) (insert ",") (forward-char -1) ;; Now try again. @@ -1251,7 +1270,8 @@ (defun bibtex-parse-field-string () "Parse a BibTeX field string enclosed by braces or quotes. If a syntactically correct string is found, a pair containing the start and -end position of the field string is returned, nil otherwise." +end position of the field string is returned, nil otherwise. +Do not move point." (let ((end-point (or (and (eq (following-char) ?\") (save-excursion @@ -1283,68 +1303,17 @@ (if (looking-at "[ \t\n]*#[ \t\n]*") (goto-char (match-end 0)) (setq end-point (point)))) + (skip-chars-forward " \t\n") (if (and (not failure) end-point) - (cons starting-point end-point)))) - -(defun bibtex-parse-field (name) - "Parse a BibTeX field of regexp NAME. -If a syntactically correct field is found, a pair containing the boundaries of -the name and text parts of the field is returned." - (let ((bibtex-field-name-for-parsing name)) - (bibtex-parse-association 'bibtex-parse-field-name - 'bibtex-parse-field-text))) - -(defun bibtex-search-forward-field (name &optional bound) - "Search forward to find a BibTeX field of name NAME. -If a syntactically correct field is found, a pair containing the boundaries of -the name and text parts of the field is returned. The search is limited by -optional arg BOUND. If BOUND is t the search is limited by the end of the -current entry. Do not move point." - (save-match-data - (save-excursion - (unless (integer-or-marker-p bound) - (setq bound (if bound - (save-excursion (bibtex-end-of-entry)) - (point-max)))) - (let ((case-fold-search t) - (bibtex-field-name-for-parsing name) - boundaries temp-boundaries) - (while (and (not boundaries) - (< (point) bound) - (search-forward "," bound t)) - (goto-char (match-beginning 0)) - (if (and (setq temp-boundaries - (bibtex-parse-association 'bibtex-parse-field-name - 'bibtex-parse-field-text)) - (<= (cddr temp-boundaries) bound)) - (setq boundaries temp-boundaries) - (forward-char 1))) - boundaries)))) - -(defun bibtex-search-backward-field (name &optional bound) - "Search backward to find a BibTeX field of name NAME. -If a syntactically correct field is found, a pair containing the boundaries of -the name and text parts of the field is returned. The search is limited by -optional arg BOUND. If BOUND is t the search is limited by the beginning of the -current entry. Do not move point." - (save-match-data - (save-excursion - (unless (integer-or-marker-p bound) - (setq bound (if bound - (save-excursion (bibtex-beginning-of-entry)) - (point-min)))) - (let ((case-fold-search t) - (bibtex-field-name-for-parsing name) - boundaries temp-boundaries) - (while (and (not boundaries) - (>= (point) bound) - (search-backward "," bound t)) - (if (setq temp-boundaries - (bibtex-parse-association 'bibtex-parse-field-name - 'bibtex-parse-field-text)) - (setq boundaries temp-boundaries))) - boundaries)))) + (list starting-point end-point (point))))) + +(defun bibtex-parse-field () + "Parse the BibTeX field beginning at the position of point. +If a syntactically correct field is found, return a cons pair containing +the boundaries of the name and text parts of the field. Do not move point." + (bibtex-parse-association 'bibtex-parse-field-name + 'bibtex-parse-field-text)) (defsubst bibtex-start-of-field (bounds) (nth 0 (car bounds))) @@ -1352,32 +1321,111 @@ (nth 1 (car bounds))) (defsubst bibtex-end-of-name-in-field (bounds) (nth 2 (car bounds))) +(defsubst bibtex-start-of-text-in-field (bounds) + (nth 1 bounds)) +(defsubst bibtex-end-of-text-in-field (bounds) + (nth 2 bounds)) (defsubst bibtex-end-of-field (bounds) - (cddr bounds)) -(defsubst bibtex-start-of-text-in-field (bounds) - (cadr bounds)) -(defsubst bibtex-end-of-text-in-field (bounds) - (cddr bounds)) + (nth 3 bounds)) + +(defun bibtex-search-forward-field (name &optional bound) + "Search forward to find a BibTeX field of name NAME. +If a syntactically correct field is found, return a pair containing +the boundaries of the name and text parts of the field. The search +is limited by optional arg BOUND or if nil by the end of the current +entry. Do not move point." + (save-match-data + (save-excursion + (if bound + ;; If the search is bounded we need not worry we could overshoot. + ;; This is indeed the case when `bibtex-search-forward-field' is + ;; called many times. So we optimize this part of this function. + (let ((name-part (concat ",[ \t\n]*\\(" name "\\)[ \t\n]*=[ \t\n]*")) + (case-fold-search t) left right) + (while (and (not right) + (re-search-forward name-part bound t)) + (setq left (list (match-beginning 0) (match-beginning 1) + (match-end 1)) + ;; Don't worry that the field text could be past bound. + right (bibtex-parse-field-text))) + (if right (cons left right))) + (let ((regexp (concat bibtex-name-part "\\|" + bibtex-any-entry-maybe-empty-head)) + (case-fold-search t) bounds) + (catch 'done + (if (looking-at "[ \t]*@") (goto-char (match-end 0))) + (while (and (not bounds) + (re-search-forward regexp nil t)) + (if (match-beginning 2) + ;; We found a new entry + (throw 'done nil) + ;; We found a field + (goto-char (match-beginning 0)) + (setq bounds (bibtex-parse-field)))) + ;; Step through all fields so that we cannot overshoot. + (while bounds + (goto-char (bibtex-start-of-name-in-field bounds)) + (if (looking-at name) (throw 'done bounds)) + (goto-char (bibtex-end-of-field bounds)) + (setq bounds (bibtex-parse-field))))))))) + +(defun bibtex-search-backward-field (name &optional bound) + "Search backward to find a BibTeX field of name NAME. +If a syntactically correct field is found, return a pair containing +the boundaries of the name and text parts of the field. The search +is limited by the optional arg BOUND. If BOUND is nil the search is +limited by the beginning of the current entry. Do not move point." + (save-match-data + (save-excursion + (let ((name-part (concat ",[ \t\n]*\\(?:" name "\\)[ \t\n]*=")) + (case-fold-search t) + bounds) + (unless bound (setq bound (save-excursion (bibtex-beginning-of-entry)))) + (while (and (not bounds) + (search-backward "," bound t) + (looking-at name-part)) + (setq bounds (bibtex-parse-field))) + bounds)))) (defun bibtex-name-in-field (bounds &optional remove-opt-alt) "Get content of name in BibTeX field defined via BOUNDS. If optional arg REMOVE-OPT-ALT is non-nil remove \"OPT\" and \"ALT\"." - (let ((name (buffer-substring-no-properties (nth 1 (car bounds)) - (nth 2 (car bounds))))) + (let ((name (buffer-substring-no-properties + (bibtex-start-of-name-in-field bounds) + (bibtex-end-of-name-in-field bounds)))) (if (and remove-opt-alt (string-match "\\`\\(OPT\\|ALT\\)" name)) (substring name 3) name))) -(defun bibtex-text-in-field-bounds (bounds &optional remove-delim) - "Get content of text in BibTeX field defined via BOUNDS. -If optional arg REMOVE-DELIM is non-nil remove enclosing field delimiters -if present." - (let ((content (buffer-substring-no-properties (cadr bounds) - (cddr bounds)))) - (if remove-delim - (bibtex-remove-delimiters-string content) - content))) +(defun bibtex-text-in-field-bounds (bounds &optional content) + "Get text in BibTeX field defined via BOUNDS. +If optional arg CONTENT is non-nil extract content of field +by removing field delimiters and concatenating the resulting string. +If `bibtex-expand-strings' is non-nil, also expand BibTeX strings." + (if content + (save-excursion + (let ((epoint (bibtex-end-of-text-in-field bounds)) + content opoint temp) + (goto-char (bibtex-start-of-text-in-field bounds)) + (while (< (setq opoint (point)) epoint) + (cond ((looking-at bibtex-field-const) + (let ((mtch (match-string-no-properties 0))) + (goto-char (match-end 0)) + (setq temp (if bibtex-expand-strings + (cdr (assoc-string mtch (bibtex-strings) t))) + content (concat content (or temp mtch))))) + + ((setq temp (bibtex-parse-field-string)) + (setq content (concat content (buffer-substring-no-properties + (1+ (car temp)) + (1- (cdr temp))))) + (goto-char (cdr temp))) + (t (error "Malformed text field"))) + (re-search-forward "\\=[ \t\n]*#[ \t\n]*" nil t)) + content)) + (buffer-substring-no-properties (bibtex-start-of-text-in-field bounds) + (bibtex-end-of-text-in-field bounds)))) (defun bibtex-text-in-field (field &optional follow-crossref) "Get content of field FIELD of current BibTeX entry. @@ -1388,13 +1436,13 @@ ;; We want to jump back and forth while searching FIELD (bibtex-narrow-to-entry) (goto-char (point-min)) - (let ((bounds (bibtex-search-forward-field field)) + (let ((bounds (bibtex-search-forward-field field (point-max))) crossref-field) (cond (bounds (bibtex-text-in-field-bounds bounds t)) ((and follow-crossref (progn (goto-char (point-min)) (setq bounds (bibtex-search-forward-field - "\\(OPT\\)?crossref")))) + "\\(OPT\\)?crossref" (point-max))))) (setq crossref-field (bibtex-text-in-field-bounds bounds t)) (widen) (if (bibtex-find-crossref crossref-field) @@ -1406,16 +1454,21 @@ "Parse the prefix part of a BibTeX string entry, including reference key. If the string prefix is found, return a triple consisting of the position of the very first character of the match, the actual starting position of the -reference key and the end position of the match." +reference key and the end position of the match. +If `bibtex-string-empty-key' is non-nil accept empty string key." (let ((case-fold-search t)) - (if (looking-at "^[ \t]*@string[ \t\n]*[({][ \t\n]*") + (if (looking-at bibtex-string-type) (let ((start (point))) (goto-char (match-end 0)) - (when (looking-at bibtex-reference-key) - (goto-char (match-end 0)) - (list start - (match-beginning 0) - (match-end 0))))))) + (cond ((looking-at bibtex-reference-key) + (goto-char (match-end 0)) + (list start + (match-beginning 0) + (match-end 0))) + ((and bibtex-string-empty-key + (looking-at "=")) + (skip-chars-backward " \t\n") + (list start (point) (point)))))))) (defun bibtex-parse-string-postfix () "Parse the postfix part of a BibTeX string entry, including the text. @@ -1425,18 +1478,18 @@ (let* ((case-fold-search t) (bounds (bibtex-parse-field-text))) (when bounds - (goto-char (cdr bounds)) + (goto-char (nth 1 bounds)) (when (looking-at "[ \t\n]*[})]") (goto-char (match-end 0)) (list (car bounds) - (cdr bounds) + (nth 1 bounds) (match-end 0)))))) (defun bibtex-parse-string () - "Parse a BibTeX string entry. -If a syntactically correct entry is found, a pair containing the boundaries of -the reference key and text parts of the entry is returned. -Move point past BibTeX string entry." + "Parse a BibTeX string entry beginning at the position of point. +If a syntactically correct entry is found, return a cons pair containing +the boundaries of the reference key and text parts of the entry. +Do not move point." (bibtex-parse-association 'bibtex-parse-string-prefix 'bibtex-parse-string-postfix)) @@ -1449,8 +1502,7 @@ (let ((case-fold-search t) boundaries) (while (and (not boundaries) - (search-forward-regexp - "^[ \t]*@string[ \t\n]*[({][ \t\n]*" nil t)) + (search-forward-regexp bibtex-string-type nil t)) (goto-char (match-beginning 0)) (unless (setq boundaries (bibtex-parse-string)) (forward-char 1))) @@ -1465,25 +1517,22 @@ (let ((case-fold-search t) boundaries) (while (and (not boundaries) - (search-backward-regexp - "^[ \t]*@string[ \t\n]*[({][ \t\n]*" nil t)) + (search-backward-regexp bibtex-string-type nil t)) (goto-char (match-beginning 0)) (setq boundaries (bibtex-parse-string))) boundaries)))) (defun bibtex-reference-key-in-string (bounds) + "Return the key part of a BibTeX string defined via BOUNDS" (buffer-substring-no-properties (nth 1 (car bounds)) (nth 2 (car bounds)))) -(defun bibtex-text-in-string (bounds &optional remove-delim) - "Get content of text in BibTeX string field defined via BOUNDS. -If optional arg REMOVE-DELIM is non-nil remove enclosing field -delimiters if present." - (let ((content (buffer-substring-no-properties (nth 0 (cdr bounds)) - (nth 1 (cdr bounds))))) - (if remove-delim - (bibtex-remove-delimiters-string content) - content))) +(defun bibtex-text-in-string (bounds &optional content) + "Get text in BibTeX string field defined via BOUNDS. +If optional arg CONTENT is non-nil extract content +by removing field delimiters and concatenating the resulting string. +If `bibtex-expand-strings' is non-nil, also expand BibTeX strings." + (bibtex-text-in-field-bounds bounds content)) (defsubst bibtex-start-of-text-in-string (bounds) (nth 0 (cdr bounds))) @@ -1503,15 +1552,17 @@ (or (match-string-no-properties bibtex-key-in-head) empty)) +(defun bibtex-preamble-prefix (&optional delim) + "Parse the prefix part of a BibTeX Preamble. +Point must be at beginning of prefix part. If prefix is found move point +to its end and return position of point. If optional arg DELIM is non-nil, +move past the opening delimiter. If no preamble is found return nil." + (let ((case-fold-search t)) + (re-search-forward (concat "\\=" bibtex-preamble-prefix + (if delim "[({][ \t\n]*")) nil t))) + ;; Helper Functions -(defun bibtex-remove-delimiters-string (str) - "Remove delimiters of string STR." - (if (and (memq (aref str 0) '(?\{ ?\")) - (memq (aref str (1- (length str))) '(?\} ?\"))) - (substring str 1 -1) - str)) - (defsubst bibtex-string= (str1 str2) "Return t if STR1 and STR2 are equal, ignoring case." (eq t (compare-strings str1 0 nil str2 0 nil t))) @@ -1533,15 +1584,17 @@ beginning of previous valid one. A valid entry is a syntactical correct one with type contained in `bibtex-entry-field-alist' or, if `bibtex-sort-ignore-string-entries' is nil, a syntactical correct string -entry. Return buffer position of beginning and ending of entry if a valid +entry. Return buffer position of beginning and end of entry if a valid entry is found, nil otherwise." (interactive "P") (let ((case-fold-search t) found) + (beginning-of-line) + ;; Loop till we look at a valid entry. (while (not (or found (if backward (bobp) (eobp)))) (let ((pnt (point)) bounds) - (cond ((or (and (looking-at bibtex-valid-entry-re) + (cond ((or (and (looking-at bibtex-entry-type-whitespace) (setq found (bibtex-search-entry nil nil t)) (equal (match-beginning 0) pnt)) (and (not bibtex-sort-ignore-string-entries) @@ -1549,11 +1602,10 @@ (setq found (cons (bibtex-start-of-field bounds) (bibtex-end-of-string bounds))))) (goto-char pnt)) - (backward - (if (re-search-backward "^[ \t]*\\(@\\)" nil 'move) - (goto-char (match-beginning 1)))) - (t (if (re-search-forward "\n[ \t]*@" nil 'move) - (forward-char -1)))))) + (backward (re-search-backward "^[ \t]*@" nil 'move)) + (t (re-search-forward "\\=[ \t]*@" nil t) ;; don't be stuck + (if (re-search-forward "^[ \t]*@" nil 'move) + (goto-char (match-beginning 0))))))) found)) (defun bibtex-map-entries (fun) @@ -1562,20 +1614,14 @@ positions (marker) of beginning and end of entry. Point is inside the entry. If `bibtex-sort-ignore-string-entries' is non-nil, FUN is not called for @String entries." - (let ((case-fold-search t)) + (let ((case-fold-search t) + found) (save-excursion (goto-char (point-min)) - (while (re-search-forward bibtex-entry-head nil t) - (let ((entry-type (bibtex-type-in-head)) - (key (bibtex-key-in-head "")) - (beg (copy-marker (match-beginning 0))) - (end (copy-marker (save-excursion (bibtex-end-of-entry))))) - (save-excursion - (if (or (and (not bibtex-sort-ignore-string-entries) - (bibtex-string= entry-type "string")) - (assoc-string entry-type bibtex-entry-field-alist t)) - (funcall fun key beg end))) - (goto-char end)))))) + (while (setq found (bibtex-skip-to-valid-entry)) + (looking-at bibtex-any-entry-maybe-empty-head) + (funcall fun (bibtex-key-in-head "") (car found) (cdr found)) + (goto-char (cdr found)))))) (defun bibtex-progress-message (&optional flag interval) "Echo a message about progress of current buffer. @@ -1631,9 +1677,9 @@ is non-nil, search in reverse direction. Move point past the closing delimiter (at the beginning of entry if BACKWARD is non-nil). Return a cons pair with buffer positions of beginning and end of entry. -After call to this function MATCH-BEGINNING and MATCH-END functions -are defined, but only for the head part of the entry -\(especially (match-end 0) just gives the end of the head part)." +After a call to this function `match-data' corresponds to the head part +of the entry, see regexp `bibtex-entry-head'. +Ignore @String and @Preamble entries." (let ((pnt (point)) (entry-head-re (if empty-head bibtex-entry-maybe-empty-head @@ -1643,16 +1689,13 @@ (while (and (not found) (re-search-backward entry-head-re bound noerror)) (setq found (bibtex-search-entry empty-head pnt t))) - (if found - (progn (goto-char (match-beginning 0)) - found) - (cond ((not noerror) - ;; yell - (error "Backward search of BibTeX entry failed")) - ((eq noerror t) - ;; don't move - (goto-char pnt))) - nil)) + (cond (found + (goto-char (match-beginning 0)) + found) + ((not noerror) ;; yell + (error "Backward search of BibTeX entry failed")) + (t (if (eq noerror t) (goto-char pnt)) ;; don't move + nil))) (let (found) (unless bound (setq bound (point-max))) (while (and (not found) @@ -1662,52 +1705,41 @@ (if (save-excursion (goto-char (match-end bibtex-type-in-head)) (looking-at "[ \t]*(")) - ;; entry opened with parenthesis - ?\) - ?\})) - (infix-start (point)) - finished bounds) - (while (not finished) - (skip-chars-forward " \t\n" bound) - (if (and (setq bounds (bibtex-parse-field bibtex-field-name)) - (<= (bibtex-end-of-field bounds) bound)) - (setq infix-start (bibtex-end-of-field bounds)) - (setq finished t)) - (goto-char infix-start)) - ;; This matches the infix* part. The AND construction assures - ;; that BOUND is respected. - (when (and (looking-at bibtex-entry-postfix) - (eq (char-before (match-end 0)) entry-closer) + ",?[ \t\n]*)" ;; entry opened with `(' + ",?[ \t\n]*}")) ;; entry opened with `{' + bounds) + (skip-chars-forward " \t\n" bound) + ;; loop over all BibTeX fields + (while (and (setq bounds (bibtex-parse-field)) + (<= (bibtex-end-of-field bounds) bound)) + (goto-char (bibtex-end-of-field bounds))) + ;; This matches the infix* part. + (when (and (looking-at entry-closer) (<= (match-end 0) bound)) (goto-char (match-end 0)) (setq found t))))) - (if found - (cons (match-beginning 0) (point)) - (cond ((not noerror) - ;; yell - (error "Search of BibTeX entry failed")) - ((eq noerror t) - ;; don't move - (goto-char pnt))) - nil))))) + (cond (found + (cons (match-beginning 0) (point))) + ((not noerror) ;; yell + (error "Search of BibTeX entry failed")) + (t (if (eq noerror t) (goto-char pnt)) ;; don't move + nil)))))) (defun bibtex-flash-head () "Flash at BibTeX entry head before point, if exists." (let ((case-fold-search t) + (pnt (point)) flash) - (cond ((re-search-backward bibtex-entry-head nil t) - (goto-char (match-beginning bibtex-type-in-head)) - (setq flash (match-end bibtex-key-in-head))) - (t - (end-of-line) - (skip-chars-backward " \t") - (setq flash (point)) - (beginning-of-line) - (skip-chars-forward " \t"))) - (if (pos-visible-in-window-p (point)) - (sit-for 1) - (message "From: %s" - (buffer-substring (point) flash))))) + (save-excursion + (bibtex-beginning-of-entry) + (when (and (looking-at bibtex-any-entry-maybe-empty-head) + (< (point) pnt)) + (goto-char (match-beginning bibtex-type-in-head)) + (setq flash (match-end bibtex-key-in-head)) + (if (pos-visible-in-window-p (point)) + (sit-for 1) + (message "From: %s" + (buffer-substring (point) flash))))))) (defun bibtex-make-optional-field (field) "Make an optional field named FIELD in current BibTeX entry." @@ -1731,17 +1763,11 @@ (skip-chars-forward " \t\n"))) (defun bibtex-beginning-of-first-entry () - "Go to the beginning of the first BibTeX entry in buffer. Return point." + "Go to beginning of line of first BibTeX entry in buffer. +If `bibtex-sort-ignore-string-entries' is non-nil, @String entries +are ignored. Return point" (goto-char (point-min)) - (if (re-search-forward "^[ \t]*@" nil 'move) - (beginning-of-line)) - (point)) - -(defun bibtex-beginning-of-last-entry () - "Go to the beginning of the last BibTeX entry in buffer." - (goto-char (point-max)) - (if (re-search-backward "^[ \t]*@" nil 'move) - (beginning-of-line)) + (bibtex-skip-to-valid-entry) (point)) (defun bibtex-inside-field () @@ -1758,7 +1784,7 @@ "Search for BibTeX field enclosing point. Unless NOERR is non-nil, signal an error if no enclosing field is found. On success return bounds, nil otherwise. Do not move point." - (let ((bounds (bibtex-search-backward-field bibtex-field-name t))) + (let ((bounds (bibtex-search-backward-field bibtex-field-name))) (if (and bounds (<= (bibtex-start-of-field bounds) (point)) (>= (bibtex-end-of-field bounds) (point))) @@ -1793,7 +1819,7 @@ (length (eval kr))) (eval kr)))))) (if (eq bibtex-last-kill-command 'field) - (let (bibtex-help-message) + (progn (bibtex-find-text) (if (looking-at "[}\"]") (forward-char)) @@ -1846,12 +1872,11 @@ ;; determine if entry has crossref field and if at least ;; one alternative is non-empty (goto-char (point-min)) - (let* ((fields-alist (bibtex-parse-entry)) + (let* ((fields-alist (bibtex-parse-entry t)) (field (assoc-string "crossref" fields-alist t))) (setq crossref-key (and field - (not (string-match bibtex-empty-field-re - (cdr field))) - (bibtex-remove-delimiters-string (cdr field))) + (not (equal "" (cdr field))) + (cdr field)) req-field-list (if crossref-key (nth 0 (nth 2 entry-list)) ; crossref part (nth 0 (nth 1 entry-list)))) ; required part @@ -1861,8 +1886,7 @@ (setq alternatives-there t field (assoc-string (car rfield) fields-alist t)) (if (and field - (not (string-match bibtex-empty-field-re - (cdr field)))) + (not (equal "" (cdr field)))) (cond ((not non-empty-alternative) (setq non-empty-alternative t)) ((memq 'required-fields format) @@ -1875,7 +1899,8 @@ ;; process all fields (goto-char (point-min)) - (while (setq bounds (bibtex-search-forward-field bibtex-field-name)) + (while (setq bounds (bibtex-search-forward-field + bibtex-field-name (point-max))) (let* ((beg-field (copy-marker (bibtex-start-of-field bounds))) (end-field (copy-marker (bibtex-end-of-field bounds) t)) (beg-name (copy-marker (bibtex-start-of-name-in-field bounds))) @@ -1887,9 +1912,7 @@ beg-name (+ beg-name 3)))) (field-name (buffer-substring-no-properties (if opt-alt (+ beg-name 3) beg-name) end-name)) - (empty-field (string-match bibtex-empty-field-re - (buffer-substring-no-properties - beg-text end-text))) + (empty-field (equal "" (bibtex-text-in-field-bounds bounds t))) deleted) ;; We have more elegant high-level functions for several @@ -2065,7 +2088,8 @@ Optional arg CHANGE-LIST is a list of substitution patterns that is applied to the content of FIELD. It is an alist with pairs \(OLD-REGEXP . NEW-STRING\)." - (let ((content (bibtex-text-in-field field bibtex-autokey-use-crossref)) + (let* ((bibtex-expand-strings bibtex-autokey-expand-strings) + (content (bibtex-text-in-field field bibtex-autokey-use-crossref)) case-fold-search) (unless content (setq content "")) (dolist (pattern change-list content) @@ -2195,6 +2219,7 @@ The name part: 1. Use the author or editor field to generate the name part of the key. + Expand BibTeX strings if `bibtex-autokey-expand-strings' is non-nil. 2. Change the content of the name field according to `bibtex-autokey-name-change-strings' (see there for further detail). 3. Use the first `bibtex-autokey-names' names in the name field. If there @@ -2299,7 +2324,9 @@ "Set `bibtex-reference-keys' to the keys used in the whole buffer. Find both entry keys and crossref entries. If ABORTABLE is non-nil abort on user input. If VERBOSE is non-nil give messages about progress. -Return alist of keys if parsing was completed, `aborted' otherwise." +Return alist of keys if parsing was completed, `aborted' otherwise. +If `bibtex-parse-keys-fast' is non-nil, use fast but simplified algorithm +for parsing BibTeX keys. If parsing fails, try to set this variable to nil." (let (ref-keys crossref-keys) (save-excursion (save-match-data @@ -2387,6 +2414,11 @@ ;; successful operation --> return `bibtex-strings' (setq bibtex-strings strings)))))) +(defun bibtex-strings () + "Return `bibtex-strings'. Initialize this variable if necessary." + (if (listp bibtex-strings) bibtex-strings + (bibtex-parse-strings (bibtex-string-files-init)))) + (defun bibtex-string-files-init () "Return initialization for `bibtex-strings'. Use `bibtex-predefined-strings' and BibTeX files `bibtex-string-files'." @@ -2521,8 +2553,7 @@ (t (message "Making completion list...") (with-output-to-temp-buffer "*Completions*" - (display-completion-list (all-completions part-of-word - completions) + (display-completion-list (all-completions part-of-word completions) part-of-word)) (message "Making completion list...done") ;; return value is handled by choose-completion-string-functions @@ -2533,17 +2564,10 @@ Remove enclosing field delimiters for STR. Display message with expansion of STR using expansion list COMPL." (save-excursion - (bibtex-inside-field) - (let ((bounds (bibtex-enclosing-field)) - (abbr (cdr (if (stringp str) + (let ((abbr (cdr (if (stringp str) (assoc-string str compl t))))) (if abbr (message "Abbreviation for `%s'" abbr)) - (goto-char (bibtex-start-of-text-in-field bounds)) - (let ((boundaries (bibtex-parse-field-string))) - (if (and boundaries - (equal (cdr boundaries) - (bibtex-end-of-text-in-field bounds))) - (bibtex-remove-delimiters)))))) + (bibtex-remove-delimiters)))) (defun bibtex-complete-crossref-cleanup (key) "Display summary message on entry KEY after completion of a crossref key. @@ -2598,8 +2622,7 @@ (defun bibtex-pop (arg direction) "Fill current field from the ARGth same field's text in DIRECTION. Generic function used by `bibtex-pop-previous' and `bibtex-pop-next'." - (let (bibtex-help-message) - (bibtex-find-text)) + (bibtex-find-text) (save-excursion ;; parse current field (bibtex-inside-field) @@ -2642,8 +2665,7 @@ (goto-char stop-old-text) (delete-region start-old-text stop-old-text) (insert new-text))))) - (let (bibtex-help-message) - (bibtex-find-text)) + (bibtex-find-text) (setq this-command 'bibtex-pop)) (defun bibtex-beginning-of-field () @@ -2667,7 +2689,7 @@ (setq field (match-string-no-properties 1))) (setq bounds (bibtex-parse-field-text)) (progn - (setq start (car bounds) end (cdr bounds)) + (setq start (car bounds) end (nth 1 bounds)) ;; Always ignore field delimiters (if (memq (char-before end) '(?\} ?\")) (setq end (1- end))) @@ -2905,20 +2927,21 @@ (unless (assoc-string (car field) fields-alist t) (bibtex-make-optional-field field)))))) -(defun bibtex-parse-entry () +(defun bibtex-parse-entry (&optional content) "Parse entry at point, return an alist. The alist elements have the form (FIELD . TEXT), where FIELD can also be the special strings \"=type=\" and \"=key=\". For the FIELD \"=key=\" TEXT may be nil. Remove \"OPT\" and \"ALT\" from FIELD. -Move point to the end of the last field." +Move point to the end of the last field. +If optional arg CONTENT is non-nil extract content of text fields." (let (alist bounds) (when (looking-at bibtex-entry-maybe-empty-head) (push (cons "=type=" (bibtex-type-in-head)) alist) (push (cons "=key=" (bibtex-key-in-head)) alist) (goto-char (match-end 0)) - (while (setq bounds (bibtex-parse-field bibtex-field-name)) + (while (setq bounds (bibtex-parse-field)) (push (cons (bibtex-name-in-field bounds t) - (bibtex-text-in-field-bounds bounds)) + (bibtex-text-in-field-bounds bounds content)) alist) (goto-char (bibtex-end-of-field bounds)))) alist)) @@ -2970,14 +2993,11 @@ (when other (setq other (save-excursion (goto-char other) (bibtex-parse-entry))) (setq key-end (point)) ;In case parse-entry changed the buffer. - (while (setq bounds (bibtex-parse-field bibtex-field-name)) + (while (setq bounds (bibtex-parse-field)) (let ((text (assoc-string (bibtex-name-in-field bounds t) other t))) (if (not (and text - (string-match bibtex-empty-field-re - (buffer-substring-no-properties - (bibtex-start-of-text-in-field bounds) - (bibtex-end-of-text-in-field bounds))))) + (equal "" (bibtex-text-in-field-bounds bounds t)))) (goto-char (bibtex-end-of-field bounds)) (goto-char (bibtex-start-of-text-in-field bounds)) (delete-region (point) (bibtex-end-of-text-in-field bounds)) @@ -2997,19 +3017,25 @@ (defun bibtex-print-help-message () "Print helpful information about current field in current BibTeX entry." (interactive) - (save-excursion - (let* ((case-fold-search t) - (field-name (bibtex-name-in-field (bibtex-enclosing-field) t)) - (field-list (bibtex-field-list (progn (re-search-backward - bibtex-entry-maybe-empty-head nil t) - (bibtex-type-in-head)))) - (comment (assoc-string field-name - (append (car field-list) - (cdr field-list)) - t))) - (if comment - (message "%s" (nth 1 comment)) - (message "No comment available"))))) + (let* ((case-fold-search t) + (type (save-excursion + (bibtex-beginning-of-entry) + (looking-at bibtex-any-entry-maybe-empty-head) + (bibtex-type-in-head))) + comment field-list) + (cond ((bibtex-string= type "string") + (message "String definition")) + ((bibtex-string= type "preamble") + (message "Preamble definition")) + (t + (setq field-list (bibtex-field-list type) + comment + (assoc-string (bibtex-name-in-field (bibtex-enclosing-field) t) + (append (car field-list) (cdr field-list)) + t)) + (if comment + (message "%s" (nth 1 comment)) + (message "No comment available")))))) (defun bibtex-make-field (field &optional move interactive) "Make a field named FIELD in current BibTeX entry. @@ -3032,11 +3058,10 @@ t t)) (unless (consp field) (setq field (list field))) - (if move - (let (bibtex-help-message) - (bibtex-find-text) - (if (looking-at "[}\"]") - (forward-char)))) + (when move + (bibtex-find-text) + (if (looking-at "[}\"]") + (forward-char))) (insert ",\n") (indent-to-column (+ bibtex-entry-offset bibtex-field-indentation)) (if (nth 3 field) (insert "ALT")) @@ -3079,16 +3104,16 @@ (org (point)) (pnt (bibtex-beginning-of-entry)) err bounds) - (cond ((looking-at bibtex-valid-entry-whitespace-re) + (cond ((looking-at bibtex-entry-type-whitespace) (bibtex-search-entry t nil t) (unless (equal (match-beginning 0) pnt) (setq err t))) + ;; @String ((setq bounds (bibtex-parse-string)) (goto-char (bibtex-end-of-string bounds))) - ((looking-at "[ \t]*@[ \t]*preamble[ \t\n]*") - (goto-char (match-end 0)) - (if (looking-at "[({]") - (forward-sexp 1) + ;; @Preamble + ((bibtex-preamble-prefix t) + (unless (bibtex-parse-string-postfix) ;; @String postfix OK (setq err t))) (t (if (interactive-p) @@ -3142,15 +3167,10 @@ If mark is active count entries in region, if not in whole buffer." (interactive "P") (let ((number 0) - (bibtex-sort-ignore-string-entries - (not count-string-entries))) - (save-excursion - (save-restriction - (narrow-to-region (if mark-active (region-beginning) - (bibtex-beginning-of-first-entry)) - (if mark-active (region-end) (point-max))) - (bibtex-map-entries (lambda (key beg end) - (setq number (1+ number)))))) + (bibtex-sort-ignore-string-entries (not count-string-entries))) + (save-restriction + (if mark-active (narrow-to-region (region-beginning) (region-end))) + (bibtex-map-entries (lambda (key beg end) (setq number (1+ number))))) (message "%s contains %d entries." (if mark-active "Region" "Buffer") number))) @@ -3166,7 +3186,7 @@ (interactive) (let ((bounds (save-excursion (bibtex-beginning-of-entry) - (bibtex-search-forward-field "abstract" t)))) + (bibtex-search-forward-field "abstract")))) (if bounds (ispell-region (bibtex-start-of-text-in-field bounds) (bibtex-end-of-text-in-field bounds)) @@ -3194,7 +3214,7 @@ ;; Don't search CROSSREF-KEY if we don't need it. (if (eq bibtex-maintain-sorted-entries 'crossref) (let ((bounds (bibtex-search-forward-field - "\\(OPT\\)?crossref" t))) + "\\(OPT\\)?crossref"))) (list key (if bounds (bibtex-text-in-field-bounds bounds t)) entry-name)) @@ -3237,17 +3257,13 @@ affected. If `bibtex-sort-ignore-string-entries' is non-nil, @String entries are ignored." (interactive) - (save-restriction - (narrow-to-region (bibtex-beginning-of-first-entry) - (save-excursion (goto-char (point-max)) - (bibtex-end-of-entry))) - (bibtex-skip-to-valid-entry) + (bibtex-beginning-of-first-entry) ;; needed by `sort-subr' (sort-subr nil 'bibtex-skip-to-valid-entry ; NEXTREC function 'bibtex-end-of-entry ; ENDREC function 'bibtex-entry-index ; STARTKEY function nil ; ENDKEY function - 'bibtex-lessp))) ; PREDICATE + 'bibtex-lessp)) ; PREDICATE (defun bibtex-find-crossref (crossref-key &optional pnt split) "Move point to the beginning of BibTeX entry CROSSREF-KEY. @@ -3265,7 +3281,7 @@ (let ((crossref-key (save-excursion (bibtex-beginning-of-entry) - (let ((bounds (bibtex-search-forward-field "crossref" t))) + (let ((bounds (bibtex-search-forward-field "crossref"))) (if bounds (bibtex-text-in-field-bounds bounds t)))))) (list (bibtex-read-key "Find crossref key: " crossref-key t) @@ -3361,11 +3377,10 @@ (key-exist) (t ; bibtex-maintain-sorted-entries is non-nil (let* ((case-fold-search t) - (left (save-excursion (bibtex-beginning-of-first-entry) - (bibtex-skip-to-valid-entry) - (point))) - (right (save-excursion (bibtex-beginning-of-last-entry) - (bibtex-end-of-entry))) + (left (save-excursion (bibtex-beginning-of-first-entry))) + (bounds (save-excursion (goto-char (point-max)) + (bibtex-skip-to-valid-entry t))) + (right (if bounds (cdr bounds) (point-min))) (found (if (>= left right) left)) actual-index new) (save-excursion @@ -3412,9 +3427,8 @@ error-list syntax-error) (save-excursion (save-restriction - (narrow-to-region (if mark-active (region-beginning) - (bibtex-beginning-of-first-entry)) - (if mark-active (region-end) (point-max))) + (if mark-active + (narrow-to-region (region-beginning) (region-end))) ;; looking if entries fit syntactical structure (goto-char (point-min)) @@ -3424,7 +3438,7 @@ (bibtex-progress-message) (forward-char -1) (let ((pnt (point))) - (if (not (looking-at bibtex-any-valid-entry-re)) + (if (not (looking-at bibtex-entry-type-str)) (forward-char) (bibtex-skip-to-valid-entry) (if (equal (point) pnt) @@ -3634,33 +3648,27 @@ (goto-char start) (end-of-line) (forward-char)))) - (bibtex-find-text begin)) - -(defun bibtex-find-text (&optional begin noerror) + (bibtex-find-text begin nil bibtex-help-message)) + +(defun bibtex-find-text (&optional begin noerror help) "Move point to end of text of current BibTeX field. With optional prefix BEGIN non-nil, move point to its beginning. Unless NOERROR is non-nil, an error is signaled if point is not -on a BibTeX field." - (interactive "P") - (let* ((pnt (point)) - (_ (bibtex-inside-field)) - (bounds (bibtex-enclosing-field t))) +on a BibTeX field. If optional arg HELP is non-nil print help message. +When called interactively, the value of HELP is `bibtex-help-message'." + (interactive (list current-prefix-arg nil bibtex-help-message)) + (let ((pnt (point)) + (bounds (bibtex-find-text-internal))) (beginning-of-line) (cond (bounds (if begin - (progn (goto-char (bibtex-start-of-text-in-field bounds)) + (progn (goto-char (nth 1 bounds)) (if (looking-at "[{\"]") (forward-char))) - (goto-char (bibtex-end-of-text-in-field bounds)) - (if (or (= (preceding-char) ?}) - (= (preceding-char) ?\")) + (goto-char (nth 2 bounds)) + (if (memq (preceding-char) '(?} ?\")) (forward-char -1))) - (if bibtex-help-message - (bibtex-print-help-message))) - ((setq bounds (bibtex-parse-string)) - (goto-char (if begin - (1+ (bibtex-start-of-text-in-string bounds)) - (1- (bibtex-end-of-text-in-string bounds))))) + (if help (bibtex-print-help-message))) ((looking-at bibtex-entry-maybe-empty-head) (goto-char (if begin (match-beginning bibtex-key-in-head) @@ -3669,6 +3677,56 @@ (goto-char pnt) (unless noerror (error "Not on BibTeX field")))))) +(defun bibtex-find-text-internal (&optional noerror subfield) + "Find text part of current BibTeX field, @String or @Preamble. +Return list (NAME START END) with field name, start and end of text +or nil if not found. +If optional arg NOERROR is non-nil, an error message is suppressed if text +is not found. If optional arg SUBFIELD is non-nil START and END correspond +to the current subfield delimited by #." + (save-excursion + (let ((pnt (point)) + (_ (bibtex-inside-field)) + (bounds (bibtex-enclosing-field t)) + (case-fold-search t) + (bibtex-string-empty-key t) + name start end) + (bibtex-beginning-of-entry) + (cond (bounds + (setq name (bibtex-name-in-field bounds t) + start (bibtex-start-of-text-in-field bounds) + end (bibtex-end-of-text-in-field bounds))) + ;; @String + ((setq bounds (bibtex-parse-string)) + (setq name "@String" ;; not a field name! + start (bibtex-start-of-text-in-string bounds) + end (bibtex-end-of-text-in-string bounds))) + ;; @Preamble + ((and (bibtex-preamble-prefix t) + (setq bounds (bibtex-parse-field-text))) + (setq name "@Preamble" ;; not a field name! + start (car bounds) + end (nth 1 bounds))) + (t (unless noerror (error "Not on BibTeX field")))) + (when (and start end subfield) + (goto-char start) + (let (done) + (while (not done) + (if (or (prog1 (looking-at bibtex-field-const) + (setq end (match-end 0))) + (prog1 (setq bounds (bibtex-parse-field-string)) + (setq end (cdr bounds)))) + (progn + (if (and (<= start pnt) (<= pnt end)) + (setq done t) + (goto-char end)) + (if (looking-at "[ \t\n]*#[ \t\n]*") + (setq start (goto-char (match-end 0))))) + (unless noerror (error "Not on text part of BibTeX field")) + (setq done t start nil end nil))))) + (if (and start end) + (list name start end))))) + (defun bibtex-remove-OPT-or-ALT () "Remove the string starting optional/alternative fields. Align text and go thereafter to end of text." @@ -3695,17 +3753,16 @@ (bibtex-inside-field))) (defun bibtex-remove-delimiters () - "Remove \"\" or {} around string." + "Remove \"\" or {} around current BibTeX field text." (interactive) - (save-excursion - (bibtex-inside-field) - (let* ((bounds (bibtex-enclosing-field)) - (end (bibtex-end-of-text-in-field bounds)) - (start (bibtex-start-of-text-in-field bounds))) - (if (memq (char-before end) '(?\} ?\")) - (delete-region (1- end) end)) - (if (memq (char-after start) '(?\{ ?\")) - (delete-region start (1+ start)))))) + ;; `bibtex-find-text-internal' issues an error message if bounds is nil. + (let* ((bounds (bibtex-find-text-internal nil t)) + (start (nth 1 bounds)) + (end (nth 2 bounds))) + (if (memq (char-before end) '(?\} ?\")) + (delete-region (1- end) end)) + (if (memq (char-after start) '(?\{ ?\")) + (delete-region start (1+ start))))) (defun bibtex-kill-field (&optional copy-only) "Kill the entire enclosing BibTeX field. @@ -3719,7 +3776,7 @@ (end (bibtex-end-of-field bounds)) (beg (bibtex-start-of-field bounds))) (goto-char end) - (skip-chars-forward " \t\n,") + (skip-chars-forward ",") (push (list (bibtex-name-in-field bounds) nil (bibtex-text-in-field-bounds bounds)) bibtex-field-kill-ring) @@ -3803,9 +3860,9 @@ (let ((bounds (bibtex-enclosing-field))) (goto-char (bibtex-start-of-text-in-field bounds)) (delete-region (point) (bibtex-end-of-text-in-field bounds)) - (insert (concat (bibtex-field-left-delimiter) - (bibtex-field-right-delimiter)) ) - (bibtex-find-text t))) + (insert (bibtex-field-left-delimiter) + (bibtex-field-right-delimiter)) + (bibtex-find-text t nil bibtex-help-message))) (defun bibtex-pop-previous (arg) "Replace text of current field with the similar field in previous entry. @@ -3837,7 +3894,7 @@ (interactive "P") (let ((case-fold-search t) (start (bibtex-beginning-of-entry)) - (_ (looking-at bibtex-entry-maybe-empty-head)) + (_ (looking-at bibtex-any-entry-maybe-empty-head)) (entry-type (bibtex-type-in-head)) (key (bibtex-key-in-head))) ;; formatting @@ -3994,18 +4051,18 @@ "Realign BibTeX entries such that they are separated by one blank line." (goto-char (point-min)) (let ((case-fold-search t) - (valid-entry (concat "[ \t\n]*\\(" bibtex-valid-entry-re "\\)"))) - ;; No blank lines prior to the first valid entry if there no + (entry-type (concat "[ \t\n]*\\(" bibtex-entry-type "\\)"))) + ;; No blank lines prior to the first entry if there no ;; non-white characters in front of it. - (when (looking-at valid-entry) + (when (looking-at entry-type) (replace-match "\\1")) - ;; Valid entries are separated by one blank line. - (while (re-search-forward valid-entry nil t) + ;; Entries are separated by one blank line. + (while (re-search-forward entry-type nil t) (replace-match "\n\n\\1")) - ;; One blank line past the last valid entry if it is followed by + ;; One blank line past the last entry if it is followed by ;; non-white characters, no blank line otherwise. (beginning-of-line) - (when (re-search-forward bibtex-valid-entry-re nil t) + (when (re-search-forward bibtex-entry-type nil t) (bibtex-end-of-entry) (bibtex-delete-whitespace) (open-line (if (eobp) 1 2))))) @@ -4101,11 +4158,13 @@ If point is inside key or crossref field perform key completion based on `bibtex-reference-keys'. Inside a month field perform key completion based on `bibtex-predefined-month-strings'. Inside any other field -perform string completion based on `bibtex-strings'. An error is -signaled if point is outside key or BibTeX field." +\(including a String or Preamble definition) perform string completion +based on `bibtex-strings'. +An error is signaled if point is outside key or BibTeX field." (interactive) (let ((pnt (point)) (case-fold-search t) + (bibtex-string-empty-key t) bounds name compl) (save-excursion (if (and (setq bounds (bibtex-enclosing-field t)) @@ -4119,22 +4178,23 @@ ;; point is in month field bibtex-predefined-month-strings) ;; point is in other field - (t (if (listp bibtex-strings) - bibtex-strings - ;; so that bibtex-complete-string-cleanup - ;; can do its job - (bibtex-parse-strings - (bibtex-string-files-init)))))) + (t (bibtex-strings)))) (bibtex-beginning-of-entry) - (cond ((and (looking-at bibtex-string-maybe-empty-head) - ;; point is inside a string key - (or (and (match-beginning bibtex-key-in-head) - (>= pnt (match-beginning bibtex-key-in-head)) - (<= pnt (match-end bibtex-key-in-head))) - ;; or point is on empty string key - (and (not (match-beginning bibtex-key-in-head)) - (= pnt (match-end 0))))) - (setq compl 'string)) + (cond ((setq bounds (bibtex-parse-string)) + ;; point is inside a @String key + (cond ((and (>= pnt (nth 1 (car bounds))) + (<= pnt (nth 2 (car bounds)))) + (setq compl 'string)) + ;; point is inside a @String field + ((and (>= pnt (bibtex-start-of-text-in-string bounds)) + (<= pnt (bibtex-end-of-text-in-string bounds))) + (setq compl (bibtex-strings))))) + ;; point is inside a @Preamble field + ((and (bibtex-preamble-prefix t) + (setq bounds (bibtex-parse-field-text)) + (>= pnt (car bounds)) + (<= pnt (nth 1 bounds))) + (setq compl (bibtex-strings))) ((and (looking-at bibtex-entry-maybe-empty-head) ;; point is inside a key (or (and (match-beginning bibtex-key-in-head) @@ -4282,8 +4342,8 @@ (bibtex-entry-left-delimiter) (bibtex-field-left-delimiter)) (let ((endpos (point))) - (insert (bibtex-entry-right-delimiter) - (bibtex-field-right-delimiter) + (insert (bibtex-field-right-delimiter) + (bibtex-entry-right-delimiter) "\n") (goto-char endpos))) @@ -4296,7 +4356,8 @@ (save-excursion (if pos (goto-char pos)) (bibtex-beginning-of-entry) - (let ((fields-alist (bibtex-parse-entry)) + ;; Always remove field delimiters + (let ((fields-alist (bibtex-parse-entry t)) ;; Always ignore case, (case-fold-search t) (lst bibtex-generate-url-list) @@ -4304,18 +4365,14 @@ (while (setq scheme (pop lst)) (when (and (setq field (cdr (assoc-string (caar scheme) fields-alist t))) - ;; Always remove field delimiters - (progn (setq field (bibtex-remove-delimiters-string field)) - (string-match (cdar scheme) field))) + (string-match (cdar scheme) field)) (setq lst nil scheme (cdr scheme) url (if (null scheme) (match-string 0 field) (if (stringp (car scheme)) (setq fmt (pop scheme))) (dolist (step scheme) - ;; Always remove field delimiters - (setq field (bibtex-remove-delimiters-string - (cdr (assoc-string (car step) fields-alist t)))) + (setq field (cdr (assoc-string (car step) fields-alist t))) (if (string-match (nth 1 step) field) (setq field (cond ((functionp (nth 2 step)) (funcall (nth 2 step) field)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/textmodes/flyspell.el --- a/lisp/textmodes/flyspell.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/textmodes/flyspell.el Mon Dec 19 19:57:22 2005 +0000 @@ -1332,10 +1332,9 @@ (while keep (if (search-forward word flyspell-large-region-end t) - (progn + (save-excursion (goto-char (- (point) 1)) - (let* ((match-point (point)) ; flyspell-get-word might move it - (flyword-prev-l (flyspell-get-word nil)) + (let* ((flyword-prev-l (flyspell-get-word nil)) (flyword-prev (car flyword-prev-l)) (size-match (= (length flyword-prev) (length word)))) (when (or @@ -1362,7 +1361,7 @@ (setq keep nil) (flyspell-word) ;; Next search will begin from end of last match - (setq flyspell-large-region-beg match-point)))) + ))) ;; Record if misspelling is not found and try new one (add-to-list 'words-not-found (concat " -> " word " - " @@ -1558,7 +1557,7 @@ (defun flyspell-delete-all-overlays () "Delete all the overlays used by flyspell." - (flyspell-delete-region-overlays (point-min) (point-max))) + (remove-overlays (point-min) (point-max) 'flyspell-overlay t)) ;;*---------------------------------------------------------------------*/ ;;* flyspell-unhighlight-at ... */ diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/textmodes/ispell.el --- a/lisp/textmodes/ispell.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/textmodes/ispell.el Mon Dec 19 19:57:22 2005 +0000 @@ -1161,6 +1161,10 @@ This is passed to the ispell process using the `-d' switch and is used as key in `ispell-local-dictionary-alist' and `ispell-dictionary-alist'.") +(defvar ispell-current-personal-dictionary nil + "The name of the current personal dictionary, or nil for the default. +This is passed to the ispell process using the `-p' switch.") + (defvar ispell-dictionary nil "Default dictionary to use if `ispell-local-dictionary' is nil.") @@ -1339,7 +1343,7 @@ (KEY . REGEXP) - skip to the end of REGEXP. REGEXP may be string or symbol. (KEY REGEXP) - skip to end of REGEXP. REGEXP must be a string. (KEY FUNCTION ARGS) - FUNCTION called with ARGS returns end of region.") - +(put 'ispell-skip-region-alist 'risky-local-variable t) ;;;###autoload @@ -1369,6 +1373,7 @@ Delete or add any regions you want to be automatically selected for skipping in latex mode.") +(put 'ispell-tex-skip-alist 'risky-local-variable t) ;;;###autoload @@ -1385,7 +1390,7 @@ Same format as `ispell-skip-region-alist' Note - substrings of other matches must come last (e.g. \"<[tT][tT]/\" and \"<[^ \\t\\n>]\").") - +(put 'ispell-html-skip-alists 'risky-local-variable t) (defvar ispell-local-pdict ispell-personal-dictionary "A buffer local variable containing the current personal dictionary. @@ -2456,18 +2461,23 @@ ;; Local dictionary becomes the global dictionary in use. (setq ispell-current-dictionary (or ispell-local-dictionary ispell-dictionary)) + (setq ispell-current-personal-dictionary + (or ispell-local-pdict ispell-personal-dictionary)) (setq args (ispell-get-ispell-args)) (if (and ispell-current-dictionary ; use specified dictionary (not (member "-d" args))) ; only define if not overridden (setq args (append (list "-d" ispell-current-dictionary) args))) - (if ispell-personal-dictionary ; use specified pers dict + (if ispell-current-personal-dictionary ; use specified pers dict (setq args (append args (list "-p" - (expand-file-name ispell-personal-dictionary))))) + (expand-file-name ispell-current-personal-dictionary))))) (setq args (append args ispell-extra-args)) + ;; Initially we don't know any buffer's local words. + (setq ispell-buffer-local-name nil) + (if ispell-async-processp (let ((process-connection-type ispell-use-ptys-p)) (apply 'start-process @@ -2619,8 +2629,8 @@ a new one will be started when needed." (let ((dict (or ispell-local-dictionary ispell-dictionary))) (unless (equal ispell-current-dictionary dict) - (setq ispell-current-dictionary dict) - (ispell-kill-ispell t)))) + (ispell-kill-ispell t) + (setq ispell-current-dictionary dict)))) ;;; Spelling of comments are checked when ispell-check-comments is non-nil. @@ -3678,22 +3688,22 @@ (setq ispell-local-pdict (match-string-no-properties 1))))))) ;; Reload if new personal dictionary defined. - (if (and ispell-local-pdict - (not (equal ispell-local-pdict ispell-personal-dictionary))) - (progn - (ispell-kill-ispell t) - (setq ispell-personal-dictionary ispell-local-pdict))) + (if (not (equal ispell-current-personal-dictionary + (or ispell-local-pdict ispell-personal-dictionary))) + (ispell-kill-ispell t)) ;; Reload if new dictionary defined. (ispell-internal-change-dictionary)) (defun ispell-buffer-local-words () "Loads the buffer-local dictionary in the current buffer." + ;; If there's an existing ispell process that's wrong for this use, + ;; kill it. (if (and ispell-buffer-local-name (not (equal ispell-buffer-local-name (buffer-name)))) - (progn - (ispell-kill-ispell t) - (setq ispell-buffer-local-name nil))) + (ispell-kill-ispell t)) + ;; Actually start a new ispell process, because we need + ;; to send commands now to specify the local words to it. (ispell-init-process) (save-excursion (goto-char (point-min)) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/textmodes/org.el --- a/lisp/textmodes/org.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/textmodes/org.el Mon Dec 19 19:57:22 2005 +0000 @@ -3,9 +3,9 @@ ;; Copyright (c) 2004, 2005 Free Software Foundation ;; ;; Author: Carsten Dominik -;; Keywords: outlines, hypermedia, calendar +;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 3.23 +;; Version: 4.00 ;; ;; This file is part of GNU Emacs. ;; @@ -59,7 +59,6 @@ ;; (autoload 'org-mode "org" "Org mode" t) ;; (autoload 'org-diary "org" "Diary entries from Org mode") ;; (autoload 'org-agenda "org" "Multi-file agenda from Org mode" t) -;; (autoload 'org-todo-list "org" "Multi-file todo list from Org mode" t) ;; (autoload 'org-store-link "org" "Store a link to the current location" t) ;; (autoload 'orgtbl-mode "org" "Org tables as a minor mode" t) ;; (autoload 'turn-on-orgtbl "org" "Org tables as a minor mode") @@ -82,6 +81,16 @@ ;; ;; Changes: ;; ------- +;; Version 4.00 +;; - Headlines can contain TAGS, and Org-mode can produced a list +;; of matching headlines based on a TAG search expression. +;; - `org-agenda' has now become a dispatcher that will produce the agenda +;; and other views on org-mode data with an additional keypress. +;; +;; Version 3.24 +;; - Switching and item to DONE records a time stamp when the variable +;; `org-log-done' is turned on. Default is off. +;; ;; Version 3.23 ;; - M-RET makes new items as well as new headings. ;; - Various small bug fixes @@ -257,7 +266,7 @@ ;;; Customization variables -(defvar org-version "3.23" +(defvar org-version "4.00" "The version number of the file org.el.") (defun org-version () (interactive) @@ -448,6 +457,11 @@ :group 'org-keywords :type 'string) +(defcustom org-closed-string "CLOSED:" + "String ued as the prefix for timestamps logging closing a TODO entry." + :group 'org-keywords + :type 'string) + (defcustom org-comment-string "COMMENT" "Entries starting with this keyword will never be exported. An entry can be toggled between COMMENT and normal with @@ -528,6 +542,7 @@ If the file does not specify a category, then file's base name is used instead.") +(make-variable-buffer-local 'org-category) (defgroup org-time nil "Options concerning time stamps and deadlines in Org-mode." @@ -560,6 +575,13 @@ :group 'org-time :type 'boolean) +(defcustom org-log-done nil + "When set, insert a (non-active) time stamp when TODO entry is marked DONE. +When the state of an entry is changed from nothing to TODO, remove a previous +closing date." + :group 'org-time + :type 'boolean) + (defgroup org-agenda nil "Options concerning agenda display Org-mode." :tag "Org Agenda" @@ -954,11 +976,56 @@ :group 'org-structure :type 'boolean) +(defgroup org-tags nil + "Options concerning startup of Org-mode." + :tag "Org Tags" + :group 'org) + +(defcustom org-tags-column 40 + "The column to which tags should be indented in a headline. +If this number is positive, it specified the column. If it is negative, +it means that the tags should be flushright to that column. For example, +-79 works well for a normal 80 character screen." + :group 'org-tags + :type 'integer) + +(defcustom org-use-tag-inheritance t + "Non-nil means, tags in levels apply also for sublevels. +When nil, only the tags directly give in a specific line apply there." + :group 'org-tags + :type 'boolean) + +(defcustom org-tags-match-list-sublevels nil + "Non-nil means list also sublevels of headlines matching tag search. +Because of tag inheritance (see variable `org-use-tag-inheritance'), +the sublevels of a headline matching a tag search often also match +the same search. Listing all of them can create very long lists. +Setting this variable to nil causes subtrees to be skipped." + :group 'org-tags + :type 'boolean) + +(defvar org-tags-history nil + "History of minibuffer reads for tags.") +(defvar org-last-tags-completion-table nil + "The last used completion table for tags.") + (defgroup org-link nil "Options concerning links in Org-mode." :tag "Org Link" :group 'org) +(defcustom org-tab-follows-link nil + "Non-nil means, on links TAB will follow the link. +Needs to be set before org.el is loaded." + :group 'org-link + :type 'boolean) + +(defcustom org-return-follows-link nil + "Non-nil means, on links RET will follow the link. +Needs to be set before org.el is loaded." + :group 'org-link + :type 'boolean) + (defcustom org-link-format "<%s>" "Default format for linkes in the buffer. This is a format string for printf, %s will be replaced by the link text. @@ -1997,6 +2064,7 @@ sets it back to nil.") (defvar org-mode-hook nil) (defvar org-inhibit-startup nil) ; Dynamically-scoped param. +(defvar org-agenda-keep-modes nil) ; Dynamically-scoped param. ;;;###autoload @@ -2022,6 +2090,7 @@ (easy-menu-add org-tbl-menu) (org-install-agenda-files-menu) (setq outline-regexp "\\*+") +; (setq outline-regexp "\\(?:\\*+\\|[ \t]*\\(?:[-+*]\\|[0-9]+[.)]\\) \\)") (setq outline-level 'org-outline-level) (if org-startup-truncated (setq truncate-lines t)) (org-set-regexps-and-options) @@ -2075,6 +2144,12 @@ (if org-xemacs-p [button2] [mouse-2]) 'org-open-at-mouse) (define-key org-mouse-map (if org-xemacs-p [button3] [mouse-3]) 'org-find-file-at-mouse) +(when org-tab-follows-link + (define-key org-mouse-map [(tab)] 'org-open-at-point) + (define-key org-mouse-map "\C-i" 'org-open-at-point)) +(when org-return-follows-link + (define-key org-mouse-map [(return)] 'org-open-at-point) + (define-key org-mouse-map "\C-m" 'org-open-at-point)) (require 'font-lock) @@ -2098,7 +2173,9 @@ (cons (length (format-time-string (car org-time-stamp-formats))) (length (format-time-string (cdr org-time-stamp-formats)))) "This holds the lengths of the two different time formats.") -(defconst org-ts-regexp "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*\\)>" +(defconst org-ts-regexp "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*?\\)>" + "Regular expression for fast time stamp matching.") +(defconst org-ts-regexp-both "[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*?\\)[]>]" "Regular expression for fast time stamp matching.") (defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\)\\([^0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)" "Regular expression matching time strings for analysis.") @@ -2128,7 +2205,8 @@ 'keymap org-mouse-map)) t))) -(defvar org-camel-regexp "\\*?\\<[A-Z]+[a-z]+[A-Z][a-zA-Z]*\\>") +(defvar org-camel-regexp "\\*?\\<[A-Z]+[a-z]+[A-Z][a-zA-Z]*\\>" + "Matches CamelCase words, possibly with a star before it.") (defun org-activate-camels (limit) "Run through the buffer and add overlays to dates." (if (re-search-forward org-camel-regexp limit t) @@ -2138,6 +2216,14 @@ 'keymap org-mouse-map)) t))) +(defun org-activate-tags (limit) + (if (re-search-forward "[ \t]\\(:[A-Za-z_:]+:\\)[ \r\n]" limit t) + (progn + (add-text-properties (match-beginning 1) (match-end 1) + (list 'mouse-face 'highlight + 'keymap org-mouse-map)) + t))) + (defun org-font-lock-level () (save-excursion (org-back-to-heading t) @@ -2155,16 +2241,16 @@ (defun org-set-font-lock-defaults () (let ((org-font-lock-extra-keywords (list - '(org-activate-links (0 'org-link)) - '(org-activate-dates (0 'org-link)) - '(org-activate-camels (0 'org-link)) + '(org-activate-links (0 'org-link t)) + '(org-activate-dates (0 'org-link t)) + '(org-activate-camels (0 'org-link t)) + '(org-activate-tags (1 'org-link t)) (list (concat "^\\*+[ \t]*" org-not-done-regexp) '(1 'org-warning t)) (list (concat "\\[#[A-Z]\\]") '(0 'org-special-keyword t)) -; (list (concat "\\<" org-deadline-string) '(0 'org-warning t)) -; (list (concat "\\<" org-scheduled-string) '(0 'org-warning t)) (list (concat "\\<" org-deadline-string) '(0 'org-special-keyword t)) (list (concat "\\<" org-scheduled-string) '(0 'org-special-keyword t)) + (list (concat "\\<" org-closed-string) '(0 'org-special-keyword t)) ;; '("\\(\\s-\\|^\\)\\(\\*\\([a-zA-Z]+\\)\\*\\)\\([^a-zA-Z*]\\|$\\)" ;; (3 'bold)) ;; '("\\(\\s-\\|^\\)\\(/\\([a-zA-Z]+\\)/\\)\\([^a-zA-Z*]\\|$\\)" @@ -2194,7 +2280,7 @@ ; on XEmacs if noutline is ever ported `((eval . (list "^\\(\\*+\\).*" ,(if org-level-color-stars-only 1 0) - '(nth ;; FIXME: 1<->0 ???? + '(nth (% (- (match-end 1) (match-beginning 1) 1) org-n-levels) org-level-faces) @@ -2885,7 +2971,7 @@ (throw 'exit nil))) t)))) -;;; Plain list item +;;; Plain list items (defun org-at-item-p () "Is point in a line starting a hand-formatted item?" @@ -3046,7 +3132,7 @@ (col (current-column)) (ind (org-get-string-indentation (buffer-substring (point-at-bol) (match-beginning 3)))) - (term (substring (match-string 3) -1)) + ;; (term (substring (match-string 3) -1)) ind1 (n (1- arg))) ;; find where this list begins (catch 'exit @@ -3111,7 +3197,6 @@ (beginning-of-line 2)) (goto-char beg))) - ;;; Archiving (defun org-archive-subtree () @@ -3227,16 +3312,20 @@ (interactive "P") (catch 'exit (let* ((end (point)) + (beg1 (save-excursion + (if (equal (char-before (point)) ?\ ) (backward-char 1)) + (skip-chars-backward "a-zA-Z_") + (point))) (beg (save-excursion (if (equal (char-before (point)) ?\ ) (backward-char 1)) (skip-chars-backward "a-zA-Z0-9_:$") (point))) (camel (equal (char-before beg) ?*)) + (tag (equal (char-before beg1) ?:)) (texp (equal (char-before beg) ?\\)) (opt (equal (buffer-substring (max (point-at-bol) (- beg 2)) beg) "#+")) - (pattern (buffer-substring-no-properties beg end)) (completion-ignore-case opt) (type nil) (tbl nil) @@ -3262,7 +3351,10 @@ (push (list (org-make-org-heading-camel (match-string 3))) tbl))) tbl) + (tag (setq type :tag beg beg1) + (org-get-buffer-tags)) (t (progn (ispell-complete-word arg) (throw 'exit nil))))) + (pattern (buffer-substring-no-properties beg end)) (completion (try-completion pattern table))) (cond ((eq completion t) (if (equal type :opt) @@ -3278,9 +3370,9 @@ (insert completion) (if (get-buffer-window "*Completions*") (delete-window (get-buffer-window "*Completions*"))) - (if (and (eq type :todo) - (assoc completion table)) - (insert " ")) + (if (assoc completion table) + (if (eq type :todo) (insert " ") + (if (eq type :tag) (insert ":")))) (if (and (equal type :opt) (assoc completion table)) (message "%s" (substitute-command-keys "Press \\[org-complete] again to insert example settings")))) @@ -3370,6 +3462,11 @@ (replace-match next t t) (setq org-last-todo-state-is-todo (not (equal state org-done-string))) + (when org-log-done + (if (equal state org-done-string) + (org-log-done) + (if (not this) + (org-log-done t)))) (run-hooks 'org-after-todo-state-change-hook))) ;; Fixup cursor location if close to the keyword (if (and (outline-on-heading-p) @@ -3381,6 +3478,38 @@ (goto-char (or (match-end 2) (match-end 1))) (just-one-space)))) +(defun org-log-done (&optional undone) + "Add a time stamp logging that a TODO entry has been closed. +When UNDONE is non-nil, remove such a time stamg again." + (interactive) + (let (beg end col) + (save-excursion + (org-back-to-heading t) + (setq beg (point)) + (looking-at (concat outline-regexp " *")) + (goto-char (match-end 0)) + (setq col (current-column)) + (outline-next-heading) + (setq end (point)) + (goto-char beg) + (when (re-search-forward (concat + "[\r\n]\\([ \t]*" + (regexp-quote org-closed-string) + " *\\[.*?\\][^\n\r]*[\n\r]?\\)") end t) + (delete-region (match-beginning 1) (match-end 1))) + (unless undone + (org-back-to-heading t) + (skip-chars-forward "^\n\r") + (goto-char (min (1+ (point)) (point-max))) + (when (not (member (char-before) '(?\r ?\n))) + (insert "\n")) + (indent-to col) + (insert org-closed-string " " + (format-time-string + (concat "[" (substring (cdr org-time-stamp-formats) 1 -1) "]") + (current-time)) + "\n"))))) + (defun org-show-todo-tree (arg) "Make a compact tree which shows all headlines marked with TODO. The tree will show the lines where the regexp matches, and all higher @@ -3602,7 +3731,9 @@ "Insert an inactive time stamp. An inactive time stamp is enclosed in square brackets instead of angle brackets. It is inactive in the sense that it does not trigger agenda entries, -does not link to the calendar and cannot be changed with the S-cursor keys." +does not link to the calendar and cannot be changed with the S-cursor keys. +So these are more for recording a certain time/date." + ;; FIXME: Would it be better not to ask for a date/time here? (interactive "P") (let ((fmt (if arg (cdr org-time-stamp-formats) (car org-time-stamp-formats))) @@ -3614,6 +3745,7 @@ (insert (format-time-string fmt time)))) ;;; FIXME: Make the function take "Fri" as "next friday" +;;; because these are mostly being used to record the current time. (defun org-read-date (&optional with-time to-time) "Read a date and make things smooth for the user. The prompt will suggest to enter an ISO date, but you can also enter anything @@ -3750,6 +3882,7 @@ (let* ((date (calendar-cursor-to-date)) (time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date)))) (setq ans2 (format-time-string "%Y-%m-%d" time)))) + (and org-xemacs-p (sit-for .2)) (select-window sw))) (defun org-calendar-select () @@ -4041,10 +4174,13 @@ (defvar org-agenda-menu) (defvar org-agenda-follow-mode nil) +(defvar org-agenda-show-log nil) (defvar org-agenda-buffer-name "*Org Agenda*") (defvar org-agenda-redo-command nil) (defvar org-agenda-mode-hook nil) +(defvar org-agenda-force-single-file nil) + ;;;###autoload (defun org-agenda-mode () "Mode for time-sorted view on action items in Org-mode files. @@ -4063,14 +4199,21 @@ (add-hook 'post-command-hook 'org-agenda-post-command-hook nil 'local) (make-local-hook 'pre-command-hook) ; Needed for XEmacs (add-hook 'pre-command-hook 'org-unhighlight nil 'local) - (setq org-agenda-follow-mode nil) + (unless org-agenda-keep-modes + (setq org-agenda-follow-mode nil + org-agenda-show-log nil)) (easy-menu-change '("Agenda") "Agenda Files" (append (list - ["Edit File List" (customize-variable 'org-agenda-files) t] + (vector + (if (get 'org-agenda-files 'org-restrict) + "Restricted to single file" + "Edit File List") + '(customize-variable 'org-agenda-files) + (not (get 'org-agenda-files 'org-restrict))) "--") - (mapcar 'org-file-menu-entry org-agenda-files))) + (mapcar 'org-file-menu-entry (org-agenda-files)))) (org-agenda-set-mode-name) (apply (if (fboundp 'run-mode-hooks) 'run-mode-hooks 'run-hooks) @@ -4081,7 +4224,7 @@ (define-key org-agenda-mode-map " " 'org-agenda-show) (define-key org-agenda-mode-map "\C-c\C-t" 'org-agenda-todo) (define-key org-agenda-mode-map "o" 'delete-other-windows) -(define-key org-agenda-mode-map "l" 'org-agenda-recenter) +(define-key org-agenda-mode-map "L" 'org-agenda-recenter) (define-key org-agenda-mode-map "t" 'org-agenda-todo) (define-key org-agenda-mode-map "." 'org-agenda-goto-today) (define-key org-agenda-mode-map "d" 'org-agenda-day-view) @@ -4097,6 +4240,7 @@ (int-to-string (pop l)) 'digit-argument))) (define-key org-agenda-mode-map "f" 'org-agenda-follow-mode) +(define-key org-agenda-mode-map "l" 'org-agenda-log-mode) (define-key org-agenda-mode-map "D" 'org-agenda-toggle-diary) (define-key org-agenda-mode-map "g" 'org-agenda-toggle-time-grid) (define-key org-agenda-mode-map "r" 'org-agenda-redo) @@ -4162,14 +4306,16 @@ "--" ["Rebuild buffer" org-agenda-redo t] ["Goto Today" org-agenda-goto-today t] - ["Next Dates" org-agenda-later (local-variable-p 'starting-day)] - ["Previous Dates" org-agenda-earlier (local-variable-p 'starting-day)] + ["Next Dates" org-agenda-later (local-variable-p 'starting-day (current-buffer))] + ["Previous Dates" org-agenda-earlier (local-variable-p 'starting-day (current-buffer))] "--" - ["Day View" org-agenda-day-view :active (local-variable-p 'starting-day) + ["Day View" org-agenda-day-view :active (local-variable-p 'starting-day (current-buffer)) :style radio :selected (equal org-agenda-ndays 1)] - ["Week View" org-agenda-week-view :active (local-variable-p 'starting-day) + ["Week View" org-agenda-week-view :active (local-variable-p 'starting-day (current-buffer)) :style radio :selected (equal org-agenda-ndays 7)] "--" + ["Show Logbook entries" org-agenda-log-mode + :style toggle :selected org-agenda-show-log :active t] ["Include Diary" org-agenda-toggle-diary :style toggle :selected org-agenda-include-diary :active t] ["Use Time Grid" org-agenda-toggle-time-grid @@ -4188,6 +4334,63 @@ ["Exit and Release Buffers" org-agenda-exit t] )) +;;;###autoload +(defun org-agenda (arg) + "Dispatch agenda commands to collect entries to the agenda buffer. +Prompts for a character to select a command. Any prefix arg will be passed +on to the selected command. Possible selections are: + +a Call `org-agenda' to display the agenda for the current day or week. +t Call `org-todo-list' to display the global todo list. +T Call `org-todo-list' to display the global todo list, put + select only entries with a specific TODO keyword. +m Call `org-tags-view' to display headlines with tags matching + a condition. The tags condition is a list of positive and negative + selections, like `+WORK+URGENT-WITHBOSS'. +M like `m', but select only TODO entries, no ordinary headlines. + +If the current buffer is in Org-mode and visiting a file, you can also +first press `1' to indicate that the agenda should be temporarily +restricted to the current file." + (interactive "P") + (let ((restrict-ok (and (buffer-file-name) (eq major-mode 'org-mode))) + c) + (put 'org-agenda-files 'org-restrict nil) + (message"[a]genda [t]odoList [T]odoKwd [m]atchTags [M]atchTagsTodo%s" + (if restrict-ok " [1]JustThisFile" "")) + (setq c (read-char-exclusive)) + (message "") + (when (equal c ?1) + (if restrict-ok + (put 'org-agenda-files 'org-restrict (list (buffer-file-name))) + (error "Cannot restrict agenda to current buffer")) + (message "Single file: [a]genda [t]odoList [T]odoKwd [m]atchTags [M]atchTagsTodo") + (setq c (read-char-exclusive)) + (message "")) + (cond + ((equal c ?a) (call-interactively 'org-agenda-list)) + ((equal c ?t) (call-interactively 'org-todo-list)) + ((equal c ?T) + (setq current-prefix-arg (or arg '(4))) + (call-interactively 'org-todo-list)) + ((equal c ?m) (call-interactively 'org-tags-view)) + ((equal c ?M) + (setq current-prefix-arg (or arg '(4))) + (call-interactively 'org-tags-view)) + (t (error "Invalid key"))))) + +(defun org-fit-agenda-window () + "Fit the window to the buffer size." + (and org-fit-agenda-window + (fboundp 'fit-window-to-buffer) + (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) + (/ (frame-height) 2)))) + +(defun org-agenda-files () + "Get the list of agenda files." + (or (get 'org-agenda-files 'org-restrict) + org-agenda-files)) + (defvar org-agenda-markers nil "List of all currently active markers created by `org-agenda'.") (defvar org-agenda-last-marker-time (time-to-seconds (current-time)) @@ -4240,11 +4443,10 @@ (defvar org-respect-restriction nil) ; Dynamically-scoped param. -(defun org-timeline (&optional include-all) +(defun org-timeline (&optional include-all keep-modes) "Show a time-sorted view of the entries in the current org file. Only entries with a time stamp of today or later will be listed. With -one \\[universal-argument] prefix argument, past entries will also be listed. -With two \\[universal-argument] prefixes, all unfinished TODO items will also be shown, +\\[universal-argument] prefix, all unfinished TODO items will also be shown, under the current date. If the buffer contains an active region, only check the region for dates." @@ -4252,8 +4454,10 @@ (require 'calendar) (org-agenda-maybe-reset-markers 'force) (org-compile-prefix-format org-timeline-prefix-format) - (let* ((dopast include-all) - (dotodo (equal include-all '(16))) + (let* ((dopast t) + (dotodo include-all) + (doclosed org-agenda-show-log) + (org-agenda-keep-modes keep-modes) (entry (buffer-file-name)) (org-agenda-files (list (buffer-file-name))) (date (calendar-current-date)) @@ -4262,15 +4466,16 @@ (beg (if (org-region-active-p) (region-beginning) (point-min))) (end (if (org-region-active-p) (region-end) (point-max))) (day-numbers (org-get-all-dates beg end 'no-ranges - t)) ; always include today + t doclosed)) ; always include today (today (time-to-days (current-time))) (org-respect-restriction t) (past t) + args s e rtn d) (setq org-agenda-redo-command (list 'progn (list 'switch-to-buffer-other-window (current-buffer)) - (list 'org-timeline (list 'quote include-all)))) + (list 'org-timeline (list 'quote include-all) t))) (if (not dopast) ;; Remove past dates from the list of dates. (setq day-numbers (delq nil (mapcar (lambda(x) @@ -4281,6 +4486,9 @@ (setq buffer-read-only nil) (erase-buffer) (org-agenda-mode) (setq buffer-read-only nil) + (if doclosed (push :closed args)) + (push :timestamp args) + (if dotodo (push :todo args)) (while (setq d (pop day-numbers)) (if (and (>= d today) dopast @@ -4290,10 +4498,8 @@ (insert (make-string 79 ?-) "\n"))) (setq date (calendar-gregorian-from-absolute d)) (setq s (point)) - (if dotodo - (setq rtn (org-agenda-get-day-entries - entry date :todo :timestamp)) - (setq rtn (org-agenda-get-day-entries entry date :timestamp))) + (setq rtn (apply 'org-agenda-get-day-entries + entry date args)) (if (or rtn (equal d today)) (progn (insert (calendar-day-name date) " " @@ -4315,12 +4521,15 @@ (goto-char pos1)))) ;;;###autoload -(defun org-agenda (&optional include-all start-day ndays) +(defun org-agenda-list (&optional include-all start-day ndays keep-modes) "Produce a weekly view from all files in variable `org-agenda-files'. The view will be for the current week, but from the overview buffer you will be able to go to other weeks. With one \\[universal-argument] prefix argument INCLUDE-ALL, all unfinished TODO items will also be shown, under the current date. +With two \\[universal-argument] prefix argument INCLUDE-ALL, all TODO entries marked DONE +on the days are also shown. See the variable `org-log-done' for how +to turn on logging. START-DAY defaults to TODAY, or to the most recent match for the weekday given in `org-agenda-start-on-weekday'. NDAYS defaults to `org-agenda-ndays'." @@ -4332,7 +4541,8 @@ (if (or (equal ndays 1) (and (null ndays) (equal 1 org-agenda-ndays))) nil org-agenda-start-on-weekday)) - (files (copy-sequence org-agenda-files)) + (org-agenda-keep-modes keep-modes) + (files (copy-sequence (org-agenda-files))) (win (selected-window)) (today (time-to-days (current-time))) (sd (or start-day today)) @@ -4348,7 +4558,7 @@ (inhibit-redisplay t) s e rtn rtnall file date d start-pos end-pos todayp nd) (setq org-agenda-redo-command - (list 'org-agenda (list 'quote include-all) start-day ndays)) + (list 'org-agenda-list (list 'quote include-all) start-day ndays t)) ;; Make the list of days (setq ndays (or ndays org-agenda-ndays) nd ndays) @@ -4368,7 +4578,7 @@ (set (make-local-variable 'include-all-loc) include-all) (when (and (or include-all org-agenda-include-all-todo) (member today day-numbers)) - (setq files org-agenda-files + (setq files (org-agenda-files) rtnall nil) (while (setq file (pop files)) (catch 'nextfile @@ -4390,12 +4600,18 @@ (setq start-pos (point)) (if (and start-pos (not end-pos)) (setq end-pos (point)))) - (setq files org-agenda-files + (setq files (org-agenda-files) rtnall nil) (while (setq file (pop files)) (catch 'nextfile (org-check-agenda-file file) - (setq rtn (org-agenda-get-day-entries file date)) + (if org-agenda-show-log + (setq rtn (org-agenda-get-day-entries + file date + :deadline :scheduled :timestamp :closed)) + (setq rtn (org-agenda-get-day-entries + file date + :deadline :scheduled :timestamp))) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary (progn @@ -4419,9 +4635,7 @@ (put-text-property s (1- (point)) 'day d)))) (goto-char (point-min)) (setq buffer-read-only t) - (if org-fit-agenda-window - (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) - (/ (frame-height) 2))) + (org-fit-agenda-window) (unless (and (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p (point-max))) (goto-char (1- (point-max))) @@ -4437,7 +4651,7 @@ (defvar org-select-this-todo-keyword nil) ;;;###autoload -(defun org-todo-list (arg) +(defun org-todo-list (arg &optional keep-modes) "Show all TODO entries from all agenda file in a single list. The prefix arg can be used to select a specific TODO keyword and limit the list to these. When using \\[universal-argument], you will be prompted @@ -4446,7 +4660,8 @@ (interactive "P") (org-agenda-maybe-reset-markers 'force) (org-compile-prefix-format org-agenda-prefix-format) - (let* ((today (time-to-days (current-time))) + (let* ((org-agenda-keep-modes keep-modes) + (today (time-to-days (current-time))) (date (calendar-gregorian-from-absolute today)) (win (selected-window)) (kwds org-todo-keywords) @@ -4470,8 +4685,8 @@ (set (make-local-variable 'last-arg) arg) (set (make-local-variable 'org-todo-keywords) kwds) (set (make-local-variable 'org-agenda-redo-command) - '(org-todo-list (or current-prefix-arg last-arg))) - (setq files org-agenda-files + '(org-todo-list (or current-prefix-arg last-arg) t)) + (setq files (org-agenda-files) rtnall nil) (while (setq file (pop files)) (catch 'nextfile @@ -4484,13 +4699,20 @@ (setq pos (point)) (insert (or org-select-this-todo-keyword "ALL") "\n") (add-text-properties pos (1- (point)) (list 'face 'org-warning)) + (setq pos (point)) + (insert + "Available with `N r': (0)ALL " + (let ((n 0)) + (mapconcat (lambda (x) + (format "(%d)%s" (setq n (1+ n)) x)) + org-todo-keywords " ")) + "\n") + (add-text-properties pos (1- (point)) (list 'face 'org-link)) (when rtnall (insert (org-finalize-agenda-entries rtnall) "\n")) (goto-char (point-min)) (setq buffer-read-only t) - (if org-fit-agenda-window - (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) - (/ (frame-height) 2))) + (org-fit-agenda-window) (if (not org-select-agenda-window) (select-window win)))) (defun org-check-agenda-file (file) @@ -4536,8 +4758,9 @@ (if (boundp 'starting-day) (let ((cmd (car org-agenda-redo-command)) (iall (nth 1 org-agenda-redo-command)) - (nday (nth 3 org-agenda-redo-command))) - (eval (list cmd iall nil nday))) + (nday (nth 3 org-agenda-redo-command)) + (keep (nth 4 org-agenda-redo-command))) + (eval (list cmd iall nil nday keep))) (goto-char (or (text-property-any (point-min) (point-max) 'org-today t) (point-min))))) @@ -4547,8 +4770,8 @@ (interactive "p") (unless (boundp 'starting-day) (error "Not allowed")) - (org-agenda (if (boundp 'include-all-loc) include-all-loc nil) - (+ starting-day (* arg org-agenda-ndays)))) + (org-agenda-list (if (boundp 'include-all-loc) include-all-loc nil) + (+ starting-day (* arg org-agenda-ndays)) nil t)) (defun org-agenda-earlier (arg) "Go back in time by `org-agenda-ndays' days. @@ -4556,8 +4779,8 @@ (interactive "p") (unless (boundp 'starting-day) (error "Not allowed")) - (org-agenda (if (boundp 'include-all-loc) include-all-loc nil) - (- starting-day (* arg org-agenda-ndays)))) + (org-agenda-list (if (boundp 'include-all-loc) include-all-loc nil) + (- starting-day (* arg org-agenda-ndays)) nil t)) (defun org-agenda-week-view () "Switch to weekly view for agenda." @@ -4565,9 +4788,10 @@ (unless (boundp 'starting-day) (error "Not allowed")) (setq org-agenda-ndays 7) - (org-agenda include-all-loc - (or (get-text-property (point) 'day) - starting-day)) + (org-agenda-list include-all-loc + (or (get-text-property (point) 'day) + starting-day) + nil t) (org-agenda-set-mode-name) (message "Switched to week view")) @@ -4577,9 +4801,10 @@ (unless (boundp 'starting-day) (error "Not allowed")) (setq org-agenda-ndays 1) - (org-agenda include-all-loc - (or (get-text-property (point) 'day) - starting-day)) + (org-agenda-list include-all-loc + (or (get-text-property (point) 'day) + starting-day) + nil t) (org-agenda-set-mode-name) (message "Switched to day view")) @@ -4624,6 +4849,15 @@ (message "Follow mode is %s" (if org-agenda-follow-mode "on" "off"))) +(defun org-agenda-log-mode () + "Toggle follow mode in an agenda buffer." + (interactive) + (setq org-agenda-show-log (not org-agenda-show-log)) + (org-agenda-set-mode-name) + (org-agenda-redo) + (message "Log mode is %s" + (if org-agenda-show-log "on" "off"))) + (defun org-agenda-toggle-diary () "Toggle follow mode in an agenda buffer." (interactive) @@ -4650,7 +4884,8 @@ (if (equal org-agenda-ndays 7) " Week" "") (if org-agenda-follow-mode " Follow" "") (if org-agenda-include-diary " Diary" "") - (if org-agenda-use-time-grid " Grid" ""))) + (if org-agenda-use-time-grid " Grid" "") + (if org-agenda-show-log " Log" ""))) (force-mode-line-update)) (defun org-agenda-post-command-hook () @@ -4834,21 +5069,23 @@ (defun org-file-menu-entry (file) (vector file (list 'find-file file) t)) -;; FIXME: Maybe removed a buffer visited through the menu from +;; FIXME: Maybe we removed a buffer visited through the menu from ;; org-agenda-new-buffers, so that the buffer will not be removed ;; when exiting the agenda???? -(defun org-get-all-dates (beg end &optional no-ranges force-today) +(defun org-get-all-dates (beg end &optional no-ranges force-today inactive) "Return a list of all relevant day numbers from BEG to END buffer positions. If NO-RANGES is non-nil, include only the start and end dates of a range, not every single day in the range. If FORCE-TODAY is non-nil, make -sure that TODAY is included in the list." - (let (dates date day day1 day2 ts1 ts2) +sure that TODAY is included in the list. If INACTIVE is non-nil, also +inactive time stamps (those in square brackets) are included." + (let ((re (if inactive org-ts-regexp-both org-ts-regexp)) + dates date day day1 day2 ts1 ts2) (if force-today (setq dates (list (time-to-days (current-time))))) (save-excursion (goto-char beg) - (while (re-search-forward org-ts-regexp end t) + (while (re-search-forward re end t) (setq day (time-to-days (org-time-string-to-time (substring (match-string 1) 0 10)))) (or (memq day dates) (push day dates))) @@ -4931,16 +5168,24 @@ (while (re-search-forward "\\(^\\|\r\\)#\\+CATEGORY:[ \t]*\\(.*\\)" nil t) (push (cons (point) (org-trim (match-string 2))) tbl))) tbl)) - (defun org-get-category (&optional pos) - "Get the category applying to position POS." - (if (not org-category-table) - org-category - (let ((tbl org-category-table) - (pos (or pos (point)))) - (while (and tbl (> (caar tbl) pos)) - (pop tbl)) - (or (cdar tbl) (cdr (nth (1- (length org-category-table)) - org-category-table)))))) +(defun org-get-category (&optional pos) + "Get the category applying to position POS." + (if (not org-category-table) + (cond + ((null org-category) + (setq org-category + (if (buffer-file-name) + (file-name-sans-extension + (file-name-nondirectory (buffer-file-name))) + "???"))) + ((symbolp org-category) (symbol-name org-category)) + (t org-category)) + (let ((tbl org-category-table) + (pos (or pos (point)))) + (while (and tbl (> (caar tbl) pos)) + (pop tbl)) + (or (cdar tbl) (cdr (nth (1- (length org-category-table)) + org-category-table)))))) (defun org-agenda-get-day-entries (file date &rest args) "Does the work for `org-diary' and `org-agenda'. @@ -4987,6 +5232,9 @@ ((eq arg :scheduled) (setq rtn (org-agenda-get-scheduled)) (setq results (append results rtn))) + ((eq arg :closed) + (setq rtn (org-agenda-get-closed)) + (setq results (append results rtn))) ((and (eq arg :deadline) (equal date (calendar-current-date))) (setq rtn (org-agenda-get-deadlines)) @@ -5117,6 +5365,7 @@ (if donep 'org-done 'org-warning) 'undone-face 'org-warning 'done-face 'org-done + 'category category 'priority (+ 100 priority)) txt) (if scheduledp @@ -5125,6 +5374,7 @@ (list 'face 'org-scheduled-today 'undone-face 'org-scheduled-today 'done-face 'org-done + 'category category priority (+ 99 priority)) txt) (add-text-properties @@ -5134,6 +5384,60 @@ (outline-next-heading)))) (nreverse ee))) +(defun org-agenda-get-closed () + "Return the loggedd TODO entries for agenda display." + (let* ((props (list 'mouse-face 'highlight + 'keymap org-agenda-keymap + 'help-echo + (format "mouse-2 or RET jump to org file %s" + (abbreviate-file-name (buffer-file-name))))) + (regexp (concat + "\\<" org-closed-string " *\\[" + (regexp-quote + (substring + (format-time-string + (car org-time-stamp-formats) + (apply 'encode-time ; DATE bound by calendar + (list 0 0 0 (nth 1 date) (car date) (nth 2 date)))) + 1 11)))) + marker hdmarker priority category + ee txt timestr) + (goto-char (point-min)) + (while (re-search-forward regexp nil t) + (if (not (save-match-data (org-at-date-range-p))) + (progn + (setq marker (org-agenda-new-marker (match-beginning 0)) + category (org-get-category (match-beginning 0)) + timestr (buffer-substring (match-beginning 0) (point-at-eol)) + ;; donep (org-entry-is-done-p) + ) + (if (string-match "\\]" timestr) + ;; substring should only run to end of time stamp + (setq timestr (substring timestr 0 (match-end 0)))) + (save-excursion + (if (re-search-backward "\\(^\\|\r\\)\\*+" nil t) + (progn + (goto-char (match-end 1)) + (setq hdmarker (org-agenda-new-marker)) + (looking-at "\\*+[ \t]*\\([^\r\n]+\\)") + (setq txt (org-format-agenda-item + "Closed: " + (match-string 1) category timestr))) + (setq txt org-agenda-no-heading-message)) + (setq priority 100000) + (add-text-properties + 0 (length txt) (append (list 'org-marker marker + 'org-hd-marker hdmarker + 'face 'org-done + 'priority priority + 'category category + 'undone-face 'org-warning + 'done-face 'org-done) props) + txt) + (push txt ee)) + (outline-next-heading)))) + (nreverse ee))) + (defun org-agenda-get-deadlines () "Return the deadline information for agenda display." (let* ((wdays org-deadline-warning-days) @@ -5411,7 +5715,7 @@ (unless (and remove (member time have)) (setq time (int-to-string time)) (push (org-format-agenda-item - nil string "" ;; FIXME: put a category? + nil string "" ;; FIXME: put a category for the grid? (concat (substring time 0 -2) ":" (substring time -2))) new) (put-text-property @@ -5849,8 +6153,9 @@ "Compute the Org-mode agenda for the calendar date displayed at the cursor. This is a command that has to be installed in `calendar-mode-map'." (interactive) - (org-agenda nil (calendar-absolute-from-gregorian - (calendar-cursor-to-date)))) + (org-agenda-list nil (calendar-absolute-from-gregorian + (calendar-cursor-to-date)) + nil t)) (defun org-agenda-convert-date () (interactive) @@ -5878,6 +6183,259 @@ (princ s)) (fit-window-to-buffer (get-buffer-window "*Dates*")))) +;;; Tags + +(defun org-scan-tags (action matcher &optional todo-only) + "Scan headline tags with inheritance and produce output ACTION. +ACTION can be `sparse-tree' or `agenda'. MATCHER is a Lisp form to be +evaluated, testing if a given set of tags qualifies a headline for +inclusion. When TODO-ONLY is non-nil, only lines with a TDOD keyword +d are included in the output." + (let* ((re (concat "[\n\r]" outline-regexp " *\\(\\<\\(" + (mapconcat 'regexp-quote + (nreverse (cdr (reverse org-todo-keywords))) + "\\|") + "\\>\\)\\)? *\\(.*?\\)\\(:[A-Za-z_:]+:\\)?[ \t]*[\n\r]")) + (props (list 'face nil + 'done-face 'org-done + 'undone-face nil + 'mouse-face 'highlight + 'keymap org-agenda-keymap + 'help-echo + (format "mouse-2 or RET jump to org file %s" + (abbreviate-file-name (buffer-file-name))))) + tags tags-list tags-alist (llast 0) rtn level category i txt + todo marker) + + (save-excursion + (goto-char (point-min)) + (when (eq action 'sparse-tree) (hide-sublevels 1)) + (while (re-search-forward re nil t) + (setq todo (if (match-end 1) (match-string 2)) + tags (if (match-end 4) (match-string 4))) + (goto-char (1+ (match-beginning 0))) + (setq level (outline-level) + category (org-get-category)) + (setq i llast llast level) + ;; remove tag lists from same and sublevels + (while (>= i level) + (when (setq entry (assoc i tags-alist)) + (setq tags-alist (delete entry tags-alist))) + (setq i (1- i))) + ;; add the nex tags + (when tags + (setq tags (mapcar 'downcase (org-split-string tags ":")) + tags-alist + (cons (cons level tags) tags-alist))) + ;; compile tags for current headline + (setq tags-list + (if org-use-tag-inheritance + (apply 'append (mapcar 'cdr tags-alist)) + tags)) + (when (and (or (not todo-only) todo) + (eval matcher)) + ;; list this headline + (if (eq action 'sparse-tree) + (progn + (org-show-hierarchy-above)) + (setq txt (org-format-agenda-item + "" + (concat + (if org-tags-match-list-sublevels + (make-string (1- level) ?.) "") + (org-get-heading)) + category)) + (setq marker (org-agenda-new-marker)) + (add-text-properties + 0 (length txt) + (append (list 'org-marker marker 'org-hd-marker marker + 'category category) + props) + txt) + (push txt rtn)) + ;; if we are to skip sublevels, jump to end of subtree + (or org-tags-match-list-sublevels (outline-end-of-subtree))))) + (nreverse rtn))) + +(defun org-tags-sparse-tree (&optional arg match) + "Create a sparse tree according to tags search string MATCH. +MATCH can contain positive and negative selection of tags, like +\"+WORK+URGENT-WITHBOSS\"." + (interactive "P") + (let ((org-show-following-heading nil) + (org-show-hierarchy-above nil)) + (org-scan-tags 'sparse-tree (cdr (org-make-tags-matcher match))))) + +(defun org-make-tags-matcher (match) + "Create the TAGS matcher form for the tags-selecting string MATCH." + (unless match + (setq org-last-tags-completion-table + (or (org-get-buffer-tags) + org-last-tags-completion-table)) + (setq match (completing-read + "Tags: " 'org-tags-completion-function nil nil nil + 'org-tags-history))) + (let ((match0 match) minus tag mm matcher) + (while (string-match "^\\([-+:]\\)?\\([A-Za-z_]+\\)" match) + (setq minus (and (match-end 1) (equal (string-to-char match) ?-)) + tag (match-string 2 match) + match (substring match (match-end 0)) + mm (list 'member (downcase tag) 'tags-list) + mm (if minus (list 'not mm) mm)) + (push mm matcher)) + (cons match0 (cons 'and matcher)))) + +;;;###autoload +(defun org-tags-view (&optional todo-only match keep-modes) + "Show all headlines for all `org-agenda-files' matching a TAGS criterions. +The prefix arg TODO-ONLY limits the search to TODO entries." + (interactive "P") + (org-agenda-maybe-reset-markers 'force) + (org-compile-prefix-format org-agenda-prefix-format) + (let* ((org-agenda-keep-modes keep-modes) + (win (selected-window)) + (completion-ignore-case t) + rtn rtnall files file pos matcher + buffer) + (setq matcher (org-make-tags-matcher match) + match (car matcher) matcher (cdr matcher)) + (if (not (equal (current-buffer) (get-buffer org-agenda-buffer-name))) + (progn + (delete-other-windows) + (switch-to-buffer-other-window + (get-buffer-create org-agenda-buffer-name)))) + (setq buffer-read-only nil) + (erase-buffer) + (org-agenda-mode) (setq buffer-read-only nil) + (set (make-local-variable 'org-agenda-redo-command) + '(call-interactively 'org-tags-view)) + (setq files (org-agenda-files) + rtnall nil) + (while (setq file (pop files)) + (catch 'nextfile + (org-check-agenda-file file) + (setq buffer (if (file-exists-p file) + (org-get-agenda-file-buffer file) + (error "No such file %s" file))) + (if (not buffer) + ;; If file does not exist, merror message to agenda + (setq rtn (list + (format "ORG-AGENDA-ERROR: No such org-file %s" file)) + rtnall (append rtnall rtn)) + (with-current-buffer buffer + (unless (eq major-mode 'org-mode) + (error "Agenda file %s is not in `org-mode'" file)) + (save-excursion + (save-restriction + (if org-respect-restriction + (if (org-region-active-p) + ;; Respect a region to restrict search + (narrow-to-region (region-beginning) (region-end))) + ;; If we work for the calendar or many files, + ;; get rid of any restriction + (widen)) + (setq rtn (org-scan-tags 'agenda matcher todo-only)) + (setq rtnall (append rtnall rtn)))))))) + (insert "Headlines with TAGS match: ") + (add-text-properties (point-min) (1- (point)) + (list 'face 'org-link)) + (setq pos (point)) + (insert match "\n") + (add-text-properties pos (1- (point)) (list 'face 'org-warning)) + (when rtnall + (insert (mapconcat 'identity rtnall "\n"))) + (goto-char (point-min)) + (setq buffer-read-only t) + (org-fit-agenda-window) + (if (not org-select-agenda-window) (select-window win)))) + +(defvar org-add-colon-after-tag-completion nil) ;; dynamically skoped param +(defun org-set-tags (&optional arg just-align) + "Set the tags for the current headline. +With prefix ARG, realign all tags in headings in the current buffer." + (interactive) + (let* (;(inherit (org-get-inherited-tags)) + (re (concat "^" outline-regexp)) + (col (current-column)) + (current (org-get-tags)) + tags hd) + (if arg + (save-excursion + (goto-char (point-min)) + (while (re-search-forward re nil t) + (org-set-tags nil t)) + (message "All tags realigned to column %d" org-tags-column)) + (if just-align + (setq tags current) + (setq org-last-tags-completion-table + (or (org-get-buffer-tags);; FIXME: replace +- with :, so that we can use history stuff??? + org-last-tags-completion-table)) + (setq tags + (let ((org-add-colon-after-tag-completion t)) + (completing-read "Tags: " 'org-tags-completion-function + nil nil current 'org-tags-history))) + (while (string-match "[-+]" tags) + (setq tags (replace-match ":" t t tags))) + (unless (string-match ":$" tags) (setq tags (concat tags ":"))) + (unless (string-match "^:" tags) (setq tags (concat ":" tags)))) + (beginning-of-line 1) + (looking-at (concat "\\(.*\\)\\(" (regexp-quote current) "\\)[ \t]*")) + (setq hd (save-match-data (org-trim (match-string 1)))) + (delete-region (match-beginning 0) (match-end 0)) + (insert hd " ") + (move-to-column (max (current-column) + (if (> org-tags-column 0) + org-tags-column + (- org-tags-column (length tags)))) + t) + (insert tags) + (move-to-column col)))) + +(defun org-tags-completion-function (string predicate &optional flag) + (let (s1 s2 rtn (ctable org-last-tags-completion-table)) + (if (string-match "^\\(.*[-+:]\\)\\([^-+:]*\\)$" string) + (setq s1 (match-string 1 string) + s2 (match-string 2 string)) + (setq s1 "" s2 string)) + (cond + ((eq flag nil) + ;; try completion + (setq rtn (try-completion s2 ctable)) + (if (stringp rtn) + (concat s1 s2 (substring rtn (length s2)) + (if (and org-add-colon-after-tag-completion + (assoc rtn ctable)) + ":" ""))) + ) + ((eq flag t) + ;; all-completions + (all-completions s2 ctable) + ) + ((eq flag 'lambda) + ;; exact match? + (assoc s2 ctable))) + )) + +(defun org-get-tags () + "Get the TAGS string in the current headline." + (unless (org-on-heading-p) + (error "Not on a heading")) + (save-excursion + (beginning-of-line 1) + (if (looking-at ".*[ \t]\\(:[A-Za-z_:]+:\\)[ \t]*\\(\r\\|$\\)") + (match-string 1) + ""))) + +(defun org-get-buffer-tags () + "Get a table of all tags used in the buffer, for completion." + (let (tags) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward "[ \t]:\\([A-Za-z_:]+\\):[ \t\r\n]" nil t) + (mapc (lambda (x) (add-to-list 'tags x)) + (org-split-string (match-string-no-properties 1) ":")))) + (mapcar 'list tags))) + ;;; Link Stuff (defun org-find-file-at-mouse (ev) @@ -5901,9 +6459,9 @@ (interactive "P") (org-remove-occur-highlights nil nil t) (if (org-at-timestamp-p) - (org-agenda nil (time-to-days (org-time-string-to-time - (substring (match-string 1) 0 10))) - 1) + (org-agenda-list nil (time-to-days (org-time-string-to-time + (substring (match-string 1) 0 10))) + 1) (let (type path line search (pos (point))) (catch 'match (save-excursion @@ -5915,6 +6473,14 @@ path (match-string 2)) (throw 'match t))) (save-excursion + (skip-chars-backward "^ \t\n\r") + (when (looking-at "\\(:[A-Za-z_:]+\\):[ \t\r\n]") + (setq type "tags" + path (match-string 1)) + (while (string-match ":" path) + (setq path (replace-match "+" t t path))) + (throw 'match t))) + (save-excursion (skip-chars-backward "a-zA-Z_") (when (looking-at org-camel-regexp) (setq type "camel" path (match-string 0)) @@ -5939,6 +6505,8 @@ (cond + ((string= type "tags") + (org-tags-view path in-emacs)) ((string= type "camel") (org-link-search path @@ -10390,7 +10958,7 @@ (dts (org-ical-ts-to-string (format-time-string (cdr org-time-stamp-formats) (current-time)) "DTSTART")) - hd ts ts2 state (inc t) pos scheduledp deadlinep donep tmp pri) + hd ts ts2 state (inc t) pos scheduledp deadlinep tmp pri) (save-excursion (goto-char (point-min)) (while (re-search-forward org-ts-regexp nil t) @@ -10408,7 +10976,8 @@ pos) deadlinep (string-match org-deadline-regexp tmp) scheduledp (string-match org-scheduled-regexp tmp) - donep (org-entry-is-done-p))) + ;; donep (org-entry-is-done-p) + )) (if (or (string-match org-tr-regexp hd) (string-match org-ts-regexp hd)) (setq hd (replace-match "" t t hd))) @@ -10449,9 +11018,8 @@ (defun org-start-icalendar-file (name) "Start an iCalendar file by inserting the header." (let ((user user-full-name) - (calname "something") (name (or name "unknown")) - (timezone "Europe/Amsterdam")) ;; FIXME: How can I get the real timezone? + (timezone (cadr (current-time-zone)))) (princ (format "BEGIN:VCALENDAR VERSION:2.0 @@ -10553,6 +11121,7 @@ (define-key org-mode-map "\C-c\C-v" 'org-show-todo-tree) (define-key org-mode-map "\C-c\C-w" 'org-check-deadlines) (define-key org-mode-map "\C-c/" 'org-occur) ; Minor-mode reserved +(define-key org-mode-map "\C-c\\" 'org-tags-sparse-tree) ; Minor-mode res. (define-key org-mode-map "\C-c\C-m" 'org-insert-heading) (define-key org-mode-map "\M-\C-m" 'org-insert-heading) (define-key org-mode-map "\C-c\C-l" 'org-insert-link) @@ -10853,6 +11422,7 @@ (org-table-paste-rectangle) (org-paste-subtree arg))) +;; FIXME: document tags (defun org-ctrl-c-ctrl-c (&optional arg) "Call realign table, or recognize a table.el table, or update keywords. When the cursor is inside a table created by the table.el package, @@ -10865,6 +11435,7 @@ (interactive "P") (let ((org-enable-table-editor t)) (cond + ((org-on-heading-p) (org-set-tags arg)) ((org-at-table.el-p) (require 'table) (beginning-of-line 1) @@ -11039,12 +11610,18 @@ ["Goto Calendar" org-goto-calendar t] ["Date from Calendar" org-date-from-calendar t]) "--" - ("Timeline/Agenda" - ["Show TODO Tree this File" org-show-todo-tree t] - ["Check Deadlines this File" org-check-deadlines t] - ["Timeline Current File" org-timeline t] + ("Agenda/Summary Views" + "Current File" + ["TODO Tree" org-show-todo-tree t] + ["Check Deadlines" org-check-deadlines t] + ["Timeline" org-timeline t] + ["Tags Tree" org-tags-sparse-tree t] "--" - ["Agenda" org-agenda t]) + "All Agenda Files" + ["Command Dispatcher" org-agenda t] + ["TODO list" org-todo-list t] + ["Agenda" org-agenda-list t] + ["Tags View" org-tags-view t]) ("File List for Agenda") "--" ("Hyperlinks" @@ -11435,3 +12012,4 @@ ;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd ;;; org.el ends here + diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/textmodes/texinfmt.el --- a/lisp/textmodes/texinfmt.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/textmodes/texinfmt.el Mon Dec 19 19:57:22 2005 +0000 @@ -212,6 +212,8 @@ ;;; Find a buffer to use. (switch-to-buffer (get-buffer-create texinfo-region-buffer-name)) + (setq buffer-read-only t) + (let ((inhibit-read-only t)) (erase-buffer) ;; Insert the header into the buffer. (insert header-text) @@ -313,7 +315,7 @@ (goto-char (point-min)) (Info-tagify input-buffer) (goto-char (point-min)) - (message "Done."))) + (message "Done.")))) ;;;###autoload (defun texi2info (&optional nosplit) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/tooltip.el --- a/lisp/tooltip.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/tooltip.el Mon Dec 19 19:57:22 2005 +0000 @@ -71,26 +71,22 @@ (defcustom tooltip-delay 0.7 "Seconds to wait before displaying a tooltip the first time." - :tag "Delay" :type 'number :group 'tooltip) (defcustom tooltip-short-delay 0.1 "Seconds to wait between subsequent tooltips on different items." - :tag "Short delay" :type 'number :group 'tooltip) (defcustom tooltip-recent-seconds 1 "Display tooltips if changing tip items within this many seconds. Do so after `tooltip-short-delay'." - :tag "Recent seconds" :type 'number :group 'tooltip) (defcustom tooltip-hide-delay 10 "Hide tooltips automatically after this many seconds." - :tag "Hide delay" :type 'number :group 'tooltip) @@ -102,11 +98,10 @@ If `tooltip-frame-parameters' includes the `left' parameter, the value of `tooltip-x-offset' is ignored." - :tag "X offset" :type 'integer :group 'tooltip) -(defcustom tooltip-y-offset +40 +(defcustom tooltip-y-offset +20 "Y offset, in pixels, for the display of tooltips. The offset is relative to the position of the mouse. It must be chosen so that the tooltip window doesn't contain the mouse @@ -114,7 +109,6 @@ If `tooltip-frame-parameters' includes the `top' parameter, the value of `tooltip-y-offset' is ignored." - :tag "Y offset" :type 'integer :group 'tooltip) @@ -127,7 +121,6 @@ If `left' or `top' parameters are included, they specify the absolute position to pop up the tooltip." :type 'sexp - :tag "Frame Parameters" :group 'tooltip) (defface tooltip @@ -144,7 +137,6 @@ (defcustom tooltip-use-echo-area nil "Use the echo area instead of tooltip frames for help and GUD tooltips." :type 'boolean - :tag "Use echo area" :group 'tooltip) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/vc-mcvs.el --- a/lisp/vc-mcvs.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/vc-mcvs.el Mon Dec 19 19:57:22 2005 +0000 @@ -350,7 +350,7 @@ (defun vc-mcvs-revert (file &optional contents-done) "Revert FILE to the version it was based on." - (vc-default-revert file contents-done) + (vc-default-revert 'MCVS file contents-done) (unless (eq (vc-checkout-model file) 'implicit) (if vc-mcvs-use-edit (vc-mcvs-command nil 0 file "unedit") diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/vc-svn.el --- a/lisp/vc-svn.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/vc-svn.el Mon Dec 19 19:57:22 2005 +0000 @@ -114,15 +114,19 @@ (file-name-directory file))) (with-temp-buffer (cd (file-name-directory file)) - (condition-case nil - (vc-svn-command t 0 file "status" "-v") - ;; Some problem happened. E.g. We can't find an `svn' executable. - ;; We used to only catch `file-error' but when the process is run on - ;; a remote host via Tramp, the error is only reported via the - ;; exit status which is turned into an `error' by vc-do-command. - (error nil)) - (vc-svn-parse-status t) - (eq 'SVN (vc-file-getprop file 'vc-backend))))) + (let ((status + (condition-case nil + ;; Ignore all errors. + (vc-svn-command t t file "status" "-v") + ;; Some problem happened. E.g. We can't find an `svn' + ;; executable. We used to only catch `file-error' but when + ;; the process is run on a remote host via Tramp, the error + ;; is only reported via the exit status which is turned into + ;; an `error' by vc-do-command. + (error nil)))) + (when (eq 0 status) + (vc-svn-parse-status t) + (eq 'SVN (vc-file-getprop file 'vc-backend))))))) (defun vc-svn-state (file &optional localp) "SVN-specific version of `vc-state'." diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/vc.el --- a/lisp/vc.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/vc.el Mon Dec 19 19:57:22 2005 +0000 @@ -762,7 +762,7 @@ (defun vc-default-previous-version (backend file rev) "Return the version number immediately preceding REV for FILE, or nil if there is no previous version. This default -implementation works for .-style version numbers as +implementation works for MAJOR.MINOR-style version numbers as used by RCS and CVS." (let ((branch (vc-branch-part rev)) (minor-num (string-to-number (vc-minor-part rev)))) @@ -781,7 +781,7 @@ (defun vc-default-next-version (backend file rev) "Return the version number immediately following REV for FILE, or nil if there is no next version. This default implementation -works for .-style version numbers as used by RCS +works for MAJOR.MINOR-style version numbers as used by RCS and CVS." (when (not (string= rev (vc-workfile-version file))) (let ((branch (vc-branch-part rev)) @@ -930,8 +930,9 @@ current buffer if BUFFER is t. If the destination buffer is not already current, set it up properly and erase it. The command is considered successful if its exit status does not exceed OKSTATUS (if -OKSTATUS is nil, that means to ignore errors, if it is 'async, that -means not to wait for termination of the subprocess). FILE is the +OKSTATUS is nil, that means to ignore error status, if it is `async', that +means not to wait for termination of the subprocess; if it is t it means to +ignore all execution errors). FILE is the name of the working file (may also be nil, to execute commands that don't expect a file name). If an optional list of FLAGS is present, that is inserted into the command line before the filename." @@ -976,7 +977,9 @@ `(unless (active-minibuffer-window) (message "Running %s in the background... done" ',command)))) (setq status (apply 'process-file command nil t nil squeezed)) - (when (or (not (integerp status)) (and okstatus (< okstatus status))) + (when (and (not (eq t okstatus)) + (or (not (integerp status)) + (and okstatus (< okstatus status)))) (pop-to-buffer (current-buffer)) (goto-char (point-min)) (shrink-window-if-larger-than-buffer) @@ -2526,6 +2529,33 @@ (if (file-exists-p backup-file) backup-file))))) +(defun vc-default-revert (backend file contents-done) + (unless contents-done + (let ((rev (vc-workfile-version file)) + (file-buffer (or (get-file-buffer file) (current-buffer)))) + (message "Checking out %s..." file) + (let ((failed t) + (backup-name (car (find-backup-file-name file)))) + (when backup-name + (copy-file file backup-name 'ok-if-already-exists 'keep-date) + (unless (file-writable-p file) + (set-file-modes file (logior (file-modes file) 128)))) + (unwind-protect + (let ((coding-system-for-read 'no-conversion) + (coding-system-for-write 'no-conversion)) + (with-temp-file file + (let ((outbuf (current-buffer))) + ;; Change buffer to get local value of vc-checkout-switches. + (with-current-buffer file-buffer + (let ((default-directory (file-name-directory file))) + (vc-call find-version file rev outbuf))))) + (setq failed nil)) + (when backup-name + (if failed + (rename-file backup-name file 'ok-if-already-exists) + (and (not vc-make-backup-files) (delete-file backup-name)))))) + (message "Checking out %s...done" file)))) + (defun vc-revert-file (file) "Revert FILE back to the version it was based on." (with-vc-properties diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/wdired.el --- a/lisp/wdired.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/wdired.el Mon Dec 19 19:57:22 2005 +0000 @@ -211,6 +211,7 @@ ;; Local variables (put here to avoid compilation gripes) (defvar wdired-col-perm) ;; Column where the permission bits start (defvar wdired-old-content) +(defvar wdired-old-point) (defun wdired-mode () @@ -242,6 +243,7 @@ (interactive) (set (make-local-variable 'wdired-old-content) (buffer-substring (point-min) (point-max))) + (set (make-local-variable 'wdired-old-point) (point)) (set (make-local-variable 'query-replace-skip-read-only) t) (use-local-map wdired-mode-map) (force-mode-line-update) @@ -264,7 +266,8 @@ (set-buffer-modified-p nil) (setq buffer-undo-list nil) (run-mode-hooks 'wdired-mode-hook) - (message "%s" (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ + (message "%s" (substitute-command-keys + "Press \\[wdired-finish-edit] when finished \ or \\[wdired-abort-changes] to abort changes"))) @@ -348,7 +351,8 @@ (interactive) (let ((inhibit-read-only t)) (erase-buffer) - (insert wdired-old-content)) + (insert wdired-old-content) + (goto-char wdired-old-point)) (wdired-change-to-dired-mode) (set-buffer-modified-p nil) (setq buffer-undo-list nil) diff -r e26e2265dcc6 -r 14a4eb789b45 lisp/wid-edit.el --- a/lisp/wid-edit.el Mon Dec 19 16:13:20 2005 +0000 +++ b/lisp/wid-edit.el Mon Dec 19 19:57:22 2005 +0000 @@ -2161,7 +2161,8 @@ (when sibling (if (widget-value widget) (widget-apply sibling :activate) - (widget-apply sibling :deactivate))))) + (widget-apply sibling :deactivate)) + (widget-clear-undo)))) ;;; The `checklist' Widget. diff -r e26e2265dcc6 -r 14a4eb789b45 lispref/ChangeLog --- a/lispref/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/lispref/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,27 @@ +2005-12-16 Richard M. Stallman + + * minibuf.texi (Minibuffer Contents): Minor cleanup. + +2005-12-16 Juri Linkov + + * minibuf.texi (Minibuffer Contents): Add minibuffer-completion-contents. + +2005-12-14 Romain Francoise + + * modes.texi (Customizing Keywords): Rename `append' to `how'. + Fix typo. + +2005-12-11 Juri Linkov + + * minibuf.texi (Completion Commands): Add mention of read-file-name + for filename completion keymaps. + (Reading File Names): Add mention of filename completion keymaps + for read-file-name and xref to `Completion Commands'. + +2005-12-10 Richard M. Stallman + + * customize.texi (Common Keywords): State caveats for use of :tag. + 2005-12-08 Richard M. Stallman * minibuf.texi (Intro to Minibuffers): Replace list of local maps diff -r e26e2265dcc6 -r 14a4eb789b45 lispref/customize.texi --- a/lispref/customize.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/lispref/customize.texi Mon Dec 19 19:57:22 2005 +0000 @@ -34,8 +34,16 @@ @table @code @item :tag @var{label} -Use @var{label}, a string, instead of the item's name, to label the item -in customization menus and buffers. +Use @var{label}, a string, instead of the item's name, to label the +item in customization menus and buffers. @strong{Don't use a tag +which is substantially different from the item's real name; that would +cause confusion.} One legitimate case for use of @code{:tag} is to +specify a dash where normally a hyphen would be converted to a space: + +@example +(defcustom cursor-in-non-selected-windows @dots{} + :tag "Cursor In Non-selected Windows" +@end example @item :group @var{group} Put this customization item in group @var{group}. When you use diff -r e26e2265dcc6 -r 14a4eb789b45 lispref/minibuf.texi --- a/lispref/minibuf.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/lispref/minibuf.texi Mon Dec 19 19:57:22 2005 +0000 @@ -1023,12 +1023,14 @@ @defvar minibuffer-local-filename-completion-map This is like @code{minibuffer-local-completion-map} -except that it does not bind @key{SPC}. +except that it does not bind @key{SPC}. This keymap is used by the +function @code{read-file-name}. @end defvar @defvar minibuffer-local-must-match-filename-map This is like @code{minibuffer-local-must-match-map} -except that it does not bind @key{SPC}. +except that it does not bind @key{SPC}. This keymap is used by the +function @code{read-file-name}. @end defvar @node High-Level Completion @@ -1212,6 +1214,12 @@ @var{existing} is @code{nil}, then the name of a nonexistent file is acceptable. +The function @code{read-file-name} uses +@code{minibuffer-local-filename-completion-map} as the keymap if +@var{existing} is @code{nil}, and uses +@code{minibuffer-local-must-match-filename-map} if @var{existing} is +non-@code{nil}. @xref{Completion Commands}. + The argument @var{directory} specifies the directory to use for completion of relative file names. It should be an absolute directory name. If @code{insert-default-directory} is non-@code{nil}, @@ -1828,6 +1836,13 @@ properties, just the characters themselves. @xref{Text Properties}. @end defun +@defun minibuffer-completion-contents +@tindex minibuffer-completion-contents +This is like @code{minibuffer-contents}, except that it returns only +the contents before point. That is the part that completion commands +operate on. @xref{Minibuffer Completion}. +@end defun + @defun delete-minibuffer-contents @tindex delete-minibuffer-contents This function erases the editable contents of the minibuffer (that is, diff -r e26e2265dcc6 -r 14a4eb789b45 lispref/modes.texi --- a/lispref/modes.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/lispref/modes.texi Mon Dec 19 19:57:22 2005 +0000 @@ -2638,7 +2638,7 @@ search-based fontification rules to a major mode, and @code{font-lock-remove-keywords} to removes rules. -@defun font-lock-add-keywords mode keywords &optional append +@defun font-lock-add-keywords mode keywords &optional how This function adds highlighting @var{keywords}, for the current buffer or for major mode @var{mode}. The argument @var{keywords} should be a list with the same format as the variable @code{font-lock-keywords}. @@ -2654,11 +2654,10 @@ @code{font-lock-add-keywords} is usually used in mode hook functions. By default, @var{keywords} are added at the beginning of -@code{font-lock-keywords}. If the optional argument @var{append} is +@code{font-lock-keywords}. If the optional argument @var{how} is @code{set}, they are used to replace the value of -@code{font-lock-keywords}. If @var{append} is any other -non-@code{nil} value, they are added at the end of -@code{font-lock-keywords}. +@code{font-lock-keywords}. If @var{how} is any other non-@code{nil} +value, they are added at the end of @code{font-lock-keywords}. Some modes provide specialized support you can use in additional highlighting patterns. See the variables @@ -2677,7 +2676,7 @@ This function removes @var{keywords} from @code{font-lock-keywords} for the current buffer or for major mode @var{mode}. As in @code{font-lock-add-keywords}, @var{mode} should be a major mode -command name or @code{nil}. All the caveats and requirments for +command name or @code{nil}. All the caveats and requirements for @code{font-lock-add-keywords} apply here too. @end defun diff -r e26e2265dcc6 -r 14a4eb789b45 man/ChangeLog --- a/man/ChangeLog Mon Dec 19 16:13:20 2005 +0000 +++ b/man/ChangeLog Mon Dec 19 19:57:22 2005 +0000 @@ -1,3 +1,66 @@ +2005-12-12 Katsumi Yamaoka + + * gnus.texi (MIME Commands): Mention addition of + multipart/alternative to gnus-buttonized-mime-types and add xref + to mm-discouraged-alternatives. + + * emacs-mime.texi (Display Customization): Mention addition of + "image/.*" and add xref to gnus-buttonized-mime-types in the + mm-discouraged-alternatives section. + +2005-12-16 Carsten Dominik + + * org.texi: (Tags): New section. + (Agenda Views): Chapter reorganized. + +2005-12-16 Ralf Angeli + + * killing.texi (Killing by Lines): Document `kill-whole-line' + function. + +2005-12-16 Eli Zaretskii + + * org.texi (Internal Links): Add a missing comma after an @xref. + +2005-12-16 L$,1 q(Brentey K,Aa(Broly + + * buffers.texi (Select Buffer): Change `prev-buffer' to + `previous-buffer'. Indicate that these functions use a frame + local buffer list. + +2005-12-14 Chong Yidong + + * faq.texi (Filling paragraphs with a single space): No need to + change sentence-end now. + +2005-12-13 Romain Francoise + + * faq.texi (Scrolling only one line): Use `scroll-conservatively'. + +2005-12-12 Jay Belanger + + * faq.texi (Calc): Updated version number. + +2005-12-12 Carsten Dominik + + * org.texi: (Progress Logging): New section. + +2005-12-12 Richard M. Stallman + + * custom.texi (Easy Customization): Change menu comment. + (Prefix Keymaps): Fix spelling of Control-X-prefix. + + * help.texi (Apropos): Rewrite. Talk about "apropos patterns". + (Help): Among the Apropos commands, describe only C-h a here. + +2005-12-11 Richard M. Stallman + + * programs.texi (Options for Comments): Comment-end starts with space. + + * glossary.texi (Glossary): Minor cleanup. + + * files.texi (Old Versions): Use @table. + 2005-12-10 Romain Francoise Update the Emacs FAQ for the 22.1 release. diff -r e26e2265dcc6 -r 14a4eb789b45 man/buffers.texi --- a/man/buffers.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/buffers.texi Mon Dec 19 19:57:22 2005 +0000 @@ -95,11 +95,11 @@ @kindex C-x @key{LEFT} @kindex C-x @key{RIGHT} @findex next-buffer -@findex prev-buffer +@findex previous-buffer For conveniently switching between a few buffers, use the commands @kbd{C-x @key{LEFT}} and @kbd{C-x @key{RIGHT}}. @kbd{C-x @key{RIGHT}} -(@code{prev-buffer}) selects the previous buffer (following the order -of most recent selection), while @kbd{C-x @key{LEFT}} +(@code{previous-buffer}) selects the previous buffer (following the order +of most recent selection in the current frame), while @kbd{C-x @key{LEFT}} (@code{next-buffer}) moves through buffers in the reverse direction. @kindex C-x 4 b diff -r e26e2265dcc6 -r 14a4eb789b45 man/custom.texi --- a/man/custom.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/custom.texi Mon Dec 19 19:57:22 2005 +0000 @@ -207,7 +207,7 @@ @menu * Groups: Customization Groups. How options are classified in a structure. * Changing a Variable:: How to edit a value and set an option. -* Saving Customizations:: Details of saving customizations. +* Saving Customizations:: Specifying the file for saving customizations. * Face Customization:: How to edit the attributes of a face. * Specific Customization:: Making a customization buffer for specific variables, faces, or groups. @@ -1293,7 +1293,7 @@ symbol whose function definition is the following keymap; the effect is the same, but it provides a command name for the prefix key that can be used as a description of what the prefix key is for. Thus, the binding -of @kbd{C-x} is the symbol @code{Ctl-X-Prefix}, whose function +of @kbd{C-x} is the symbol @code{Control-X-prefix}, whose function definition is the keymap for @kbd{C-x} commands. The definitions of @kbd{C-c}, @kbd{C-x}, @kbd{C-h} and @key{ESC} as prefix keys appear in the global map, so these prefix keys are always available. diff -r e26e2265dcc6 -r 14a4eb789b45 man/emacs-mime.texi --- a/man/emacs-mime.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/emacs-mime.texi Mon Dec 19 19:57:22 2005 +0000 @@ -322,6 +322,12 @@ (remove "text/html" mm-automatic-display)) @end lisp +Adding @code{"image/.*"} might also be useful. Spammers use it as the +prefered part of @samp{multipart/alternative} messages. See also +@code{gnus-buttonized-mime-types} (@pxref{MIME Commands, ,MIME Commands, +gnus, Gnus Manual}), to which adding @code{"multipart/alternative"} +enables you to choose manually one of two types those mails include. + @item mm-inline-large-images @vindex mm-inline-large-images When displaying inline images that are larger than the window, Emacs diff -r e26e2265dcc6 -r 14a4eb789b45 man/faq.texi --- a/man/faq.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/faq.texi Mon Dec 19 19:57:22 2005 +0000 @@ -2503,14 +2503,17 @@ @cindex Scrolling only one line @cindex Reducing the increment when scrolling -Place the following Lisp form in your @file{.emacs} file: +Customize the @code{scroll-conservatively} variable with @kbd{M-x +customize-variable @key{RET} scroll-conservatively @key{RET}} and set it +to a large value like, say, 10000. For an explanation of what this +means, @inforef{Scrolling, Scrolling, emacs}. + +Alternatively, use the following Lisp form in your @file{.emacs}: @lisp -(setq scroll-step 1) +(setq scroll-conservatively most-positive-fixnum) @end lisp -@inforef{Scrolling, Scrolling, emacs}. - @node Replacing highlighted text, Editing MS-DOS files, Scrolling only one line, Common requests @section How can I replace highlighted text with what I type? @cindex @code{delete-selection-mode} @@ -2565,11 +2568,9 @@ @cindex Single space following periods @cindex Periods, one space following -@email{ulm@@vsnhd1.cern.ch, Ulrich Mueller} suggests adding the -following two lines to your @file{.emacs} file: +Add the following line to your @file{.emacs} file: @lisp -(setq sentence-end "[.?!][]\"')@}]*\\($\\|[ \t]\\)[ \t\n]*") (setq sentence-end-double-space nil) @end lisp @@ -3790,7 +3791,7 @@ @email{daveg@@csvax.cs.caltech.edu, Dave Gillespie} @item Latest version -2.02g (part of Emacs since version 22.1) +2.1 (part of Emacs since version 22.1) @item Distribution No separate distribution outside of Emacs. Older versions diff -r e26e2265dcc6 -r 14a4eb789b45 man/files.texi --- a/man/files.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/files.texi Mon Dec 19 19:57:22 2005 +0000 @@ -1680,45 +1680,42 @@ stretch factor greater than 1 means the color range spans more than a year. -From the annotate buffer, you can use the following keys to browse the + From the annotate buffer, you can use the following keys to browse the annotations of past revisions, view diffs, or view log entries: -@itemize @bullet - -@item -Pressing @kbd{P} annotates the previous revision. It also takes a -numeric prefix argument, so for example @kbd{C-u 10 P} would take you -back 10 revisions. - -@item -Pressing @kbd{N} annotates the next revision. It also takes a numeric -prefix argument, so for example @kbd{C-u 10 N} would take you forward -10 revisions. - -@item -Pressing @kbd{J} annotates the revision at line (as denoted by the -version number on the same line). - -@item -Pressing @kbd{A} annotates the revision previous to line (as denoted -by the version number on the same line). This is useful to see the -state the file was in before the change on the current line was made. - -@item -Pressing @kbd{D} shows the diff of the revision at line with its -previous revision. This is useful to see what actually changed when -the revision denoted on the current line was committed. - -@item -Pressing @kbd{L} shows the log of the revision at line. This is -useful to see the author's description of the changes that occurred -when the revision denoted on the current line was committed. - -@item -Pressing @kbd{W} annotates the workfile (most up to date) version. If -you used @kbd{P} and @kbd{N} to browse to other revisions, use this -key to return to the latest version. -@end itemize +@table @kbd +@item P +Annotate the previous revision, that is to say, the revision before +the one currently annotated. A numeric prefix argument is a repeat +count, so @kbd{C-u 10 P} would take you back 10 revisions. + +@item N +Annotate the next revision---the one after the revision currently +annotated. A numeric prefix argument is a repeat count. + +@item J +Annotate the revision indicated by the current line. + +@item A +Annotate the revision before the one indicated by the current line. +This is useful to see the state the file was in before the change on +the current line was made. + +@item D +Display the diff between the current line's revision and the previous +revision. This is useful to see what the current line's revision +actually changed in the file. + +@item L +Show the log of the current line's revision. This is useful to see +the author's description of the changes in the revision on the current +line. + +@item W +Annotate the workfile version--the one you are editing. If you used +@kbd{P} and @kbd{N} to browse to other revisions, use this key to +return to the latest version. +@end table @node Secondary VC Commands @subsection The Secondary Commands of VC diff -r e26e2265dcc6 -r 14a4eb789b45 man/glossary.texi --- a/man/glossary.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/glossary.texi Mon Dec 19 19:57:22 2005 +0000 @@ -664,8 +664,8 @@ @cindex keyboard shortcuts @item Keyboard Shortcut A keyboard shortcut is a key sequence (q.v.@:) which invokes a -command. What other programs call ``assign a keyboard shortcut'' -Emacs calls ``bind a key sequence''. See `binding.' +command. What some programs call ``assigning a keyboard shortcut,'' +Emacs calls ``binding a key sequence''. See `binding.' @item Key Sequence A key sequence (key, for short) is a sequence of input events (q.v.@:) diff -r e26e2265dcc6 -r 14a4eb789b45 man/gnus.texi --- a/man/gnus.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/gnus.texi Mon Dec 19 19:57:22 2005 +0000 @@ -9319,6 +9319,12 @@ variable to @code{("multipart/signed")} and leave @code{gnus-unbuttonized-mime-types} at the default value. +You could also add @code{"multipart/alternative"} to this list to +display radio buttons that allow you to choose one of two media types +those mails include. See also @code{mm-discouraged-alternatives} +(@pxref{Display Customization, ,Display Customization, emacs-mime, The +Emacs MIME Manual}). + @item gnus-inhibit-mime-unbuttonizing @vindex gnus-inhibit-mime-unbuttonizing If this is non-@code{nil}, then all @acronym{MIME} parts get buttons. The diff -r e26e2265dcc6 -r 14a4eb789b45 man/help.texi --- a/man/help.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/help.texi Mon Dec 19 19:57:22 2005 +0000 @@ -44,21 +44,11 @@ manual index, then finally look in the FAQ and the package keywords. @table @kbd -@item C-h a @var{topic} @key{RET} -This searches for commands whose names match @var{topic}, which should -be a list of words or a regular expression (@pxref{Regexps}). Browse -the buffer that this command displays to find what you are looking -for. @xref{Apropos}. - -@item M-x apropos @key{RET} @var{topic} @key{RET} -This works like @kbd{C-h a}, but it also searches for noninteractive -functions and for variables. @xref{Apropos}. - -@item C-h d @var{topic} @key{RET} -This searches the @emph{documentation strings} (the built-in short -descriptions) of all variables and functions (not their names) for a -match for @var{topic}, a list or words or a regular expression. -@xref{Apropos}. +@item C-h a @var{topics} @key{RET} +This searches for commands whose names match @var{topics}, which +should be a keyword, a list of keywords, or a regular expression +(@pxref{Regexps}). This command displays a the matches in a new +buffer. @xref{Apropos}. @item C-h i d m emacs @key{RET} i @var{topic} @key{RET} This looks up @var{topic} in the indices of the Emacs on-line manual. @@ -113,9 +103,9 @@ pre-written file of information. @table @kbd -@item C-h a @var{topic} @key{RET} -Display a list of commands whose names match word list or regexp @var{topic} -(@code{apropos-command}). +@item C-h a @var{topics} @key{RET} +Display a list of commands whose names match @var{topics} +(@code{apropos-command}; @pxref{Apropos}). @item C-h b Display a table of all key bindings in effect now, in this order: minor mode bindings, major mode bindings, and global bindings @@ -124,10 +114,9 @@ Show the name of the command that @var{key} runs (@code{describe-key-briefly}). Here @kbd{c} stands for ``character.'' For more extensive information on @var{key}, use @kbd{C-h k}. -@item C-h d @var{topic} @key{RET} -Display a list of commands and variables whose documentation match -word list or regexp @var{topic} -(@code{apropos-documentation}). +@item C-h d @var{topics} @key{RET} +Display a list of commands and variables whose documentation matches +@var{topics} (@code{apropos-documentation}). @item C-h e Display the @code{*Messages*} buffer (@code{view-echo-area-messages}). @@ -274,35 +263,69 @@ @node Apropos @section Apropos + A more sophisticated sort of question to ask is, ``What are the +commands for working with files?'' The @dfn{apropos} commands ask +such questions---they look for things whose names match an +@dfn{apropos pattern}, which means either a word, a list of words, or +a regular expression. Each apropos command displays a list of +matching items in a special buffer. + +@table @kbd +@item C-h a @var{pattern} @key{RET} +Search for commands whose names match @var{pattern}. + +@item M-x apropos @key{RET} @var{pattern} @key{RET} +Similar, but it searches for noninteractive functions and for +variables, as well as commands. + +@item M-x apropos-variable @key{RET} @var{pattern} @key{RET} +Similar, but it searches for variables only. + +@item M-x apropos-value @key{RET} @var{pattern} @key{RET} +Similar, but it searches for variables based on their values, or +functions based on their definitions. + +@item C-h d @var{pattern} @key{RET} +Search the @emph{documentation strings} (the built-in short +descriptions) of all variables and functions (not their names) for a +match for @var{pattern}. +@end table + @kindex C-h a @findex apropos-command @cindex apropos - A more sophisticated sort of question to ask is, ``What are the -commands for working with files?'' To ask this question, type @kbd{C-h -a file @key{RET}}, which displays a list of all command names that -contain @samp{file}, including @code{copy-file}, @code{find-file}, and -so on. With each command name appears a brief description of how to use -the command, and what keys you can currently invoke it with. For -example, it would say that you can invoke @code{find-file} by typing -@kbd{C-x C-f}. The @kbd{a} in @kbd{C-h a} stands for ``Apropos''; -@kbd{C-h a} runs the command @code{apropos-command}. This command -normally checks only commands (interactive functions); if you specify a -prefix argument, it checks noninteractive functions as well. + To find the commands that work on files, type @kbd{C-h a file +@key{RET}}. This displays a list of all command names that contain +@samp{file}, including @code{copy-file}, @code{find-file}, and so on. +With each command name appears a brief description of how to use the +command, and what keys you can currently invoke it with. For example, +it would say that you can invoke @code{find-file} by typing @kbd{C-x +C-f}. The @kbd{a} in @kbd{C-h a} stands for ``Apropos''; @kbd{C-h a} +runs the command @code{apropos-command}. This command normally checks +only commands (interactive functions); if you specify a prefix +argument, it checks noninteractive functions as well. - Because @kbd{C-h a} looks only for commands matching the string you -specify, you may not find what you want on the first try. In that -case, don't just give up. You can give Apropos a list of words to -search for. When more than one word is specified, at least two of -those words must be present for an item to match. If you are looking -for commands to kill a chunk of text before point, try @kbd{C-h a kill -back behind before @key{RET}}. For even greater flexibility, you can -also supply a regular expression to Apropos (@pxref{Regexps}). + If you want more information about a function definition, variable or +symbol property listed in the Apropos buffer, you can click on it with +@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. + + @kbd{C-h a} with a single word can find too many matches. Don't +just give up; you can give Apropos a list of words to search for. +When you specify more than one word in the apropos pattern, a name +must contain at least two of the words in order to match. Thus, if +you are looking for commands to kill a chunk of text before point, you +could try @kbd{C-h a kill back backward behind before @key{RET}}. + + For even greater flexibility, you can specify a regular expression +(@pxref{Regexps}). An apropos pattern is interpreted as a regular +expression if it contains any of the regular expression special +characters, @samp{^$*+?.\[}. Here is a set of arguments to give to @kbd{C-h a} that covers many -classes of Emacs commands, since there are strong conventions for naming -the standard Emacs commands. By giving you a feel for the naming -conventions, this set should also serve to aid you in developing a -technique for picking @code{apropos} strings. +classes of Emacs commands, since there are strong conventions for +naming the standard Emacs commands. By giving you a feel for the +naming conventions, this set should also serve to aid you in +developing a technique for picking Apropos keywords. @quotation char, line, word, sentence, paragraph, region, page, sexp, list, defun, @@ -312,31 +335,29 @@ view, describe, default. @end quotation -@findex apropos-variable - To list all user variables that match a word list or regexp, use the -command @kbd{M-x apropos-variable}. By default, this command shows -only variables meant for user customization; if you specify a prefix -argument, it checks all variables. +@findex apropos + To list all Lisp symbols that contain a match an Apropos pattern, +not just the ones that are defined as commands, use the command +@kbd{M-x apropos} instead of @kbd{C-h a}. This command does not check +key bindings by default; specify a numeric argument if you want it to +check them. -@findex apropos - To list all Lisp symbols that contain a match for a word list or -regexp, not just the ones that are defined as commands, use the -command @kbd{M-x apropos} instead of @kbd{C-h a}. This command does -not check key bindings by default; specify a numeric argument if you -want it to check them. +@findex apropos-variable + To list user-customizable variables that match an apropos pattern, +use the command @kbd{M-x apropos-variable}. If you specify a prefix +argument, it checks all variables. @kindex C-h d @findex apropos-documentation - The @code{apropos-documentation} command is like @code{apropos} except -that it searches documentation strings as well as symbol names for -matches for the specified topic, a word list or regular expression. + The @code{apropos-documentation} command is like @code{apropos} +except that it searches documentation strings instead of symbol names +for matches for the specified Apropos pattern. @findex apropos-value - The @code{apropos-value} command is like @code{apropos} except that it -searches symbols' values for matches for the specified word list or regular -expression. This command does not check function definitions or -property lists by default; specify a numeric argument if you want it to -check them. + The @code{apropos-value} command is like @code{apropos} except that +it searches variables' values for matches for the pattern. With a +prefix argument, it also checks symbols' function definitions and +property lists. @vindex apropos-do-all If the variable @code{apropos-do-all} is non-@code{nil}, the commands @@ -351,13 +372,9 @@ @vindex apropos-documentation-sort-by-scores By default, Apropos lists the search results for - @code{apropos-documentation} in order of relevance. -If the variable @code{apropos-documentation-sort-by-scores} is @code{nil}, -Apropos will list documentation in alphabetical order. - - If you want more information about a function definition, variable or -symbol property listed in the Apropos buffer, you can click on it with -@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. +@code{apropos-documentation} in order of relevance of the match. If +the variable @code{apropos-documentation-sort-by-scores} is +@code{nil}, Apropos lists the symbosl found in alphabetical order. @node Library Keywords @section Keyword Search for Lisp Libraries diff -r e26e2265dcc6 -r 14a4eb789b45 man/killing.texi --- a/man/killing.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/killing.texi Mon Dec 19 19:57:22 2005 +0000 @@ -169,6 +169,8 @@ @table @kbd @item C-k Kill rest of line or one or more lines (@code{kill-line}). +@item C-S-backspace +Kill an entire line at once (@code{kill-whole-line}) @end table @kindex C-k @@ -200,6 +202,13 @@ the very beginning of a line kills the entire line including the following newline. This variable is normally @code{nil}. +@kindex C-S-backspace +@findex kill-whole-line + @kbd{C-S-backspace} (@code{kill-whole-line}) will kill a whole line +including its newline regardless of the position of point within the +line. Note that many character terminals will prevent you from typing +the key sequence @kbd{C-S-backspace}. + @node Other Kill Commands @subsection Other Kill Commands @findex kill-region diff -r e26e2265dcc6 -r 14a4eb789b45 man/org.texi --- a/man/org.texi Mon Dec 19 16:13:20 2005 +0000 +++ b/man/org.texi Mon Dec 19 19:57:22 2005 +0000 @@ -4,12 +4,13 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.23 +@set VERSION 4.00 @set DATE December 2005 @dircategory Emacs @direntry -* Org Mode: (org). Outline-based notes management and organizer +* Org Mode: (org). outline-based notes management and organizer + @end direntry @c Version and Contact Info @@ -81,7 +82,7 @@ * Hyperlinks:: Notes in context * TODO items:: Every tree branch can be a TODO item * Timestamps:: Assign date and time to items -* Timeline and Agenda:: Use time-stamped items to produce an agenda +* Agenda Views:: Collecting information into views * Exporting:: Sharing and publishing of notes * Miscellaneous:: All the rest which did not fit elsewhere * Index:: The fast road to specific information @@ -105,6 +106,7 @@ * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place * Sparse trees:: Matches embedded in context +* Tags:: * Plain Lists:: Editing hand-formatted lists Tables @@ -134,6 +136,7 @@ TODO items * TODO basics:: Marking and displaying TODO entries +* Progress Logging:: Document your productivity * TODO extensions:: Workflow and assignments * Priorities:: Some things are more important than others @@ -148,10 +151,12 @@ * Time stamps:: Assigning a time to a tree entry * Creating timestamps:: Commands which insert timestamps -Timeline and Agenda - +Agenda Views + +* Agenda:: Your weekly planner +* Global TODO list:: Overview over all things to do +* Matching headline tags:: Select information based on tags * Timeline:: Time-sorted view for single file -* Agenda:: Your weekly planner * Agenda commands:: Remote editing of org trees * Calendar/Diary integration:: Integrating Anniversaries and more @@ -250,16 +255,15 @@ If Org-mode is part of the Emacs distribution or an XEmacs package, you only need to copy the following lines to your @file{.emacs} file. -The last three lines define @emph{global} keys for the commands -@command{org-store-link}, @command{org-agenda}, and -@code{org-todo-list} - please choose suitable keys yourself. +The last two lines define @emph{global} keys for the commands +@command{org-store-link} and @command{org-agenda} - please +choose suitable keys yourself. @lisp ;; The following lines are always needed. Choose your own keys. (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) (define-key global-map "\C-cl" 'org-store-link) (define-key global-map "\C-ca" 'org-agenda) -(define-key global-map "\C-ct" 'org-todo-list) @end lisp If you have downloaded Org-mode from the Web, you must byte-compile @@ -272,7 +276,6 @@ (autoload 'org-mode "org" "Org mode" t) (autoload 'org-diary "org" "Diary entries from Org mode") (autoload 'org-agenda "org" "Multi-file agenda from Org mode" t) -(autoload 'org-todo-list "org" "Global TODO list from Org mode" t) (autoload 'org-store-link "org" "Store a link to the current location" t) (autoload 'orgtbl-mode "org" "Org tables as a minor mode" t) (autoload 'turn-on-orgtbl "org" "Org tables as a minor mode") @@ -331,6 +334,7 @@ * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place * Sparse trees:: Matches embedded in context +* Tags:: * Plain Lists:: Editing hand-formatted lists @end menu @@ -370,8 +374,11 @@ @node Visibility cycling, Motion, Headlines, Document Structure @section Visibility cycling +@cindex cycling, visibility @cindex visibility cycling @cindex trees, visibility +@cindex show hidden text +@cindex hide text Outlines make it possible to hide parts of the text in the buffer. Org-mode uses a single command bound to the @key{TAB} key to change @@ -427,6 +434,7 @@ @section Motion @cindex motion, between headlines @cindex jumping, to headlines +@cindex headline navigation The following commands jump to other headlines in the buffer. @table @kbd @@ -465,6 +473,7 @@ @cindex pasting, of subtrees @cindex cutting, of subtrees @cindex copying, of subtrees +@cindex subtrees, cut and paste @table @kbd @kindex M-@key{RET} @@ -523,6 +532,7 @@ @node Archiving, Sparse trees, Structure editing, Document Structure @section Archiving @cindex archiving +@cindex filing subtries When a project represented by a (sub)tree is finished, you may want to move the tree to an archive place, either in the same file under a @@ -543,7 +553,7 @@ agenda, archiving to a different file is a good way to keep archived trees from contributing agenda items. -@node Sparse trees, Plain Lists, Archiving, Document Structure +@node Sparse trees, Tags, Archiving, Document Structure @section Sparse trees @cindex sparse trees @cindex trees, sparse @@ -587,10 +597,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 +@node Tags, Plain Lists, Sparse trees, Document Structure +@section Tags +@cindex tags +@cindex headline tagging +@cindex matching, tags +@cindex sparse tree, tag based + +If you wish to implement a tag system to cross-correlate information, +this can be done as well in Org-mode. Every headline can contain a +list of tags, at the end of the headline. Tags are normal words +containing letters and @samp{_}, but no numbers. Tags must be +preceded and followed by a single colon; like @samp{:WORK:}. Several +tags can be specified like @samp{:WORK:URGENT:}. + +@cindex inheritance, of tags +Tags make use of the hierarchical structure of outline trees. If a +heading has a certain tag, all subheadings will inherit the tag as +well. For example, in the list + +@example +* Meeting with the French group :WORK: +** Summary by Frank :BOSS: +*** TODO Prepare slides for him :ACTION: +@end example +@noindent +the final heading will have the tags @samp{:WORK:}, @samp{:BOSS:}, and +@samp{:ACTION:}. + +@table @kbd +@kindex C-c C-c +@item C-c C-c +@cindex completion, of tags +Enter new tags for the current headline. The minibuffer will prompt +for a list of tags and offer completion with respect to all other tags +used in the current buffer. After pressing @key{RET}, the tags will +be inserted and aligned to @code{org-tags-column}. When called with a +@kbd{C-u} prefix, align all tags in the current buffer to that column, +just to make things look nice. Tags can also be just typed into the +buffer, with @kbd{M-@key{TAB}} support. +@cindex M-@key{TAB} +@item M-@key{TAB} +Tags can also be typed directly into the buffer, using +@kbd{M-@key{TAB}} completion. +@kindex C-c \ +@item C-c \ +Create a sparse tree with all headlines matching a given set of tags. +The command prompts for the tags to match. The criterion is just a +list of tags separated by @samp{+} or @samp{-} for positive and +negative selection. For example, @samp{+WORK-BOSS} would select all +headlines that are tagged @samp{:WORK:}, but discard those also tagged +@samp{:BOSS:}. +@kindex C-c a m +@item C-c a m +Create a global list of tag matches from all agenda files. +@xref{Matching headline tags}. +@end table + +@node Plain Lists, , Tags, Document Structure @section Plain Lists @cindex plain lists @cindex lists, plain +@cindex lists, ordered +@cindex ordered lists Headlines define the structure of the Org-mode file, and also lists (for example TODO items (@pxref{TODO items}) should be created using @@ -633,7 +702,7 @@ Items can be folded just like headline levels if you set the variable @code{org-cycle-include-plain-lists}. The level of an item is then given by the indentation of the bullet/number. However, items are -always subortinate to real headlines, the hierarchies remain +always subordinate to real headlines, the hierarchies remain completely separated. @kindex M-@key{RET} @item M-@key{RET} @@ -643,7 +712,7 @@ @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 +of same indentation). If the list is ordered, renumbering is automatic. @kindex M-S-@key{left} @kindex M-S-@key{right} @@ -663,6 +732,7 @@ @node Tables, Hyperlinks, Document Structure, Top @chapter Tables @cindex tables +@cindex editing tables Org-mode has a very fast and intuitive table editor built-in. Spreadsheet-like calculations are supported in connection with the @@ -910,6 +980,8 @@ @node Table calculations, orgtbl-mode, Built-in table editor, Tables @section Calculations in tables @cindex calculations, in tables +@cindex spreadsheet capabilities +@cindex @file{calc} package The table editor makes use of the Emacs @file{calc} package to implement spreadsheet-like capabilities. Org-mode has two levels of @@ -933,6 +1005,8 @@ @node Formula syntax, Column formulas, Table calculations, Table calculations @subsection Formula syntax +@cindex formula syntax +@cindex syntax, of formulas A formula can be any algebraic expression understood by the Emacs @file{calc} package. Before evaluation by @code{calc-eval} @@ -952,9 +1026,12 @@ $name @r{a named field, parameter or constant} @end example +@cindex vectors, in table calculations The range vectors can be directly fed into the calc vector functions like @samp{vmean} and @samp{vsum}. +@cindex name, of column or field +@cindex constants, in calculations @samp{$name} is interpreted as the name of a column, parameter or constant. Constants are defined globally through the variable @code{org-table-formula-constants}. If you have the @@ -964,6 +1041,8 @@ parameters can be specified in special table lines. These are described below, see @ref{Advanced features}. +@cindex format specifier +@cindex mode, for @file{calc} A formula can contain an optional mode string after a semicolon. This string consists of flags to influence calc's modes@footnote{By default, Org-mode uses the standard calc modes (precision 12, angular @@ -993,6 +1072,8 @@ @node Column formulas, Advanced features, Formula syntax, Table calculations @subsection Column formulas +@cindex column formula +@cindex formula, for table column To apply a formula to a field, type it directly into the field, preceded by an equal sign, like @samp{=$1+$2}. When you press @@ -1016,6 +1097,7 @@ numerical prefix (e.g. @kbd{C-5 C-c =}) will apply it to that many subsequent fields in the current column. +@cindex recomputing table fields To recompute all the fields in a line, use the command @kbd{C-c *}. It re-applies all stored equations to the current row, from left to right. With a @kbd{C-u} prefix, this will be done to every line in @@ -1060,6 +1142,7 @@ which are marked @samp{#} or @samp{*}, and named fields. The column formulas are not applied in rows with empty first field. +@cindex marking characters, tables The marking characters have the following meaning: @table @samp @item ! @@ -1072,7 +1155,7 @@ associated with them. @item _ Similar to @samp{^}, but defines names for the fields in the row -@emph{below}. +@emph{below}. @item $ Fields in this row can define @emph{parameters} for formulas. For example, if a field in a @samp{$} row contains @samp{max=50}, then @@ -1089,7 +1172,7 @@ Selects this line for global recalculation with @kbd{C-u C-c *}, but not for automatic recalculation. Use this when automatic recalculation slows down editing too much. -@item +@item Unmarked lines are exempted from recalculation with @kbd{C-u C-c *}. All lines that should be recalculated should be marked with @samp{#} or @samp{*}. @@ -1097,6 +1180,8 @@ @node Named-field formulas, Editing/debugging formulas, Advanced features, Table calculations @subsection Named-field formulas +@cindex named field formula +@cindex formula, for named table field A named field can have its own formula associated with it. In the example above, this is used for the @samp{at} field that contains @@ -1109,6 +1194,8 @@ @node Editing/debugging formulas, Appetizer, Named-field formulas, Table calculations @subsection Editing and debugging formulas +@cindex formula editing +@cindex editing, of table formulas To edit a column or field formula, you can use the commands @kbd{C-c =} and @kbd{C-u C-c =}, respectively. The currently active expression @@ -1123,7 +1210,7 @@ @kindex C-c C-c You may edit the @samp{#+TBLFM} directly and re-apply the changed equations with @kbd{C-c C-c} in that line, or with the -normal recalculation commands in the table. +normal recalculation commands in the table. @kindex C-c ' @kindex C-c C-c @@ -1244,7 +1331,7 @@ # <> @end example -Each occurence of @samp{MyTarget} in the file is an active link that +Each occurrence of @samp{MyTarget} in the file is an active link that can be followed with @kbd{C-c C-o} or with a mouse click (@pxref{Managing links}). If no dedicated target exists, org-mode will search for the words in the link separated by white space, in the @@ -1274,7 +1361,7 @@ @node External Links, Managing links, Internal Links, Hyperlinks @section External Links -@cindex links +@cindex links, external @cindex external links @cindex links, external @cindex GNUS links @@ -1342,8 +1429,11 @@ Activation}. @kindex C-c C-l +@cindex link completion +@cindex file name completion @cindex completion, of links @cindex completion, of file names +@cindex inserting links @item C-c C-l Insert a link. This prompts for a link to be inserted into the buffer. You can just type a link, using one of the link type prefixes @@ -1355,18 +1445,24 @@ command to insert a link. Links in Org-mode are plain text, and you can type or paste them straight into the buffer. -@cindex inserting links +@cindex following links @kindex C-c C-o +@kindex mouse-2 @item C-c C-o +@itemx mouse-2 Open link at point. This will launch a web browser for URLs (using @command{browse-url-at-point}), run vm/gnus/bbdb for the corresponding -links, execute the command in a shell link, visit text files with -Emacs and select a suitable application for non-text files. -Classification of files is based on file extension only. See option -@code{org-file-apps}. If there is no link at point, the current -subtree will be searched for one. If you want to override the default -application and visit the file with Emacs, use a @kbd{C-u} prefix. -If the cursor is on a time stamp, compiles the agenda for that date. +links, and execute the command in a shell link. When the cursor is on +a CamelCase link, this commands runs the corresponding search. When +the cursor is on a TAGS list in a headline, it creates the +corresponding TAGS view. Furthermore, it will visit text files in +@samp{file:} links with Emacs and select a suitable application for +non-text files. Classification of files is based on file extension +only. See option @code{org-file-apps}. If there is no link at point, +the current subtree will be searched for one. If you want to override +the default application and visit the file with Emacs, use a @kbd{C-u} +prefix. If the cursor is on a time stamp, compiles the agenda for +that date. @strong{IMPORTANT}: Be careful not to use any dangerous commands in a shell link. @@ -1383,6 +1479,8 @@ @node Search Options, Remember, Managing links, Hyperlinks @section Search options in file links +@cindex search option in file links +@cindex file links, searching File links can contain additional information to make Emacs jump to a particular location in the file when following a link. This can be a @@ -1497,11 +1595,12 @@ @menu * TODO basics:: Marking and displaying TODO entries +* Progress Logging:: Document your productivity * TODO extensions:: Workflow and assignments * Priorities:: Some things are more important than others @end menu -@node TODO basics, TODO extensions, TODO items, TODO items +@node TODO basics, Progress Logging, TODO items, TODO items @section Basic TODO functionality Any headline can become a TODO item by starting it with the word TODO, @@ -1516,6 +1615,7 @@ @table @kbd @kindex C-c C-t +@cindex cycling, of TODO states @item C-c C-t Rotate the TODO state of the current item between @example @@ -1532,29 +1632,38 @@ above them. With prefix arg, show also the DONE entries. With numerical prefix N, show the tree for the Nth keyword in the variable @code{org-todo-keywords}. -@kindex C-c t -@item C-c t +@kindex C-c a t +@item C-c a t Show the global TODO list. This collects the TODO items from all agenda files (@pxref{Agenda}) into a single buffer. The buffer is in @code{agenda-mode}, so there are commands to examine and manipulate the TODO entries directly from that buffer (@pxref{Agenda commands}). -A prefix argument can be used to collect only TODO entries of a -particular type. With a C-u prefix you are prompted for a keyword. -With a numeric prefix, the Nth keyword in @code{org-todo-keywords} is -selected. -@kindex r -The @kbd{r} key in the agenda -buffer regenerates it, and you can give a prefix argument to this -command to change the selected TODO keyword, for example @kbd{3 r}. -The key binding @kbd{C-c t} is only a suggestion - see -@ref{Installation and Activation}. -@kindex C-u C-c a -@item C-u C-c a -A @kbd{C-u} argument to the @code{org-agenda command} (@pxref{Agenda}) -includes all unfinished TODO items at the beginning of todays agenda. +@xref{Global TODO list}, for more information. +@item @code{org-agenda-include-all-todo} +If you would like to have all your TODO items listed as part of your +agenda, customize the variable @code{org-agenda-include-all-todo}. @end table -@node TODO extensions, Priorities, TODO basics, TODO items +@node Progress Logging, TODO extensions, TODO basics, TODO items +@section Progress Logging +@cindex progress logging +@cindex logging, of progress +If you want to keep track of @emph{when} a certain TODO item was +finished, turn on logging with +@lisp +(setq org-log-done t) +@end lisp +@noindent +Then each time you turn a TODO entry into DONE using either @kbd{C-c +C-t} in the Org-mode buffer or @kbd{t} in the agenda buffer, a line +@samp{CLOSED: [timestamp]} will be inserted just after the headline. +If you turn the entry back into a TODO item again through further +state cycling, that line will be removed again. In the timeline +(@pxref{Timeline}) and in the agenda (@pxref{Agenda}), you can then +use the @kbd{L} key to display the TODO items closed on each day, +giving you an overview of what has been done on a day. + +@node TODO extensions, Priorities, Progress Logging, TODO items @section Extended use of TODO keywords @cindex extended TODO keywords @@ -1711,7 +1820,7 @@ (@pxref{Interaction}). @end table -@node Timestamps, Timeline and Agenda, TODO items, Top +@node Timestamps, Agenda Views, TODO items, Top @chapter Timestamps Items can be labeled with timestamps to make them useful for project @@ -1726,6 +1835,8 @@ @node Time stamps, Creating timestamps, Timestamps, Timestamps @section Time stamps, deadlines and scheduling @cindex time stamps +@cindex ranges, time +@cindex date stamps @cindex deadlines @cindex scheduling @@ -1782,6 +1893,7 @@ @node Creating timestamps, , Time stamps, Timestamps @section Creating timestamps @cindex creating timestamps +@cindex timestamps, creating For Org-mode to recognize time stamps, they need to be in the specific format. All commands listed below produce time stamps in the correct @@ -1802,7 +1914,7 @@ @kindex C-c ! @item C-c ! Like @kbd{C-c .}, but insert an inactive time stamp not triggering the -agenda. +agenda. @kindex C-c < @item C-c < @@ -1904,10 +2016,11 @@ Choose date in calendar (only if nothing typed into minibuffer). @end table -@node Timeline and Agenda, Exporting, Timestamps, Top -@chapter Timeline and Agenda -@cindex agenda - +@node Agenda Views, Exporting, Timestamps, Top +@chapter Agenda Views +@cindex agenda views + +@ignore We have already described three commands to filter important information in an org file into a sparse tree (@pxref{Sparse trees}): @@ -1922,59 +2035,17 @@ timestamps}. @end itemize @noindent - -Instead of using the sparse trees, Org-mode can also collect and -time-sort the important items into a separate buffer, which we call -the @emph{timeline} of the org file. It can also collect information -from a @emph{list of files} and in this way provide an @emph{agenda} -which covers all of your current projects, action items and -appointments. - -@menu -* Timeline:: Time-sorted view for single file -* Agenda:: Your weekly planner -* Agenda commands:: Remote editing of org trees -* Calendar/Diary integration:: Integrating Anniversaries and more -@end menu - -@node Timeline, Agenda, Timeline and Agenda, Timeline and Agenda -@section Timeline for a single file -@cindex single file summary -@cindex agenda, for single file -@cindex timeline, single file -@cindex time-sorted view - -The timeline shows all time-stamped items in a single Org-mode file, -in @emph{time-sorted view}. The main purpose of this command is to -give an overview over events in a project. - -@table @kbd -@kindex C-c C-r -@item C-c C-r -Show a time-sorted view of the org file, with all time-stamped items -of today or later. When called with a @kbd{C-u} prefix, past dates -will be included as well. When called with two @kbd{C-u C-u} -prefixes, all unfinished TODO entries (scheduled or not) are also -listed under the current date. -@end table -@noindent - -The timeline is shown in a temporary buffer @file{*Org Agenda*}. The -commands available in the Agenda buffer are listed in @ref{Agenda -commands}. - -@node Agenda, Agenda commands, Timeline, Timeline and Agenda -@section Agenda -@cindex agenda - -An agenda can be compiled from one or more org files. The main -purpose of this command is to act like a paper agenda, showing you all -the tasks for the current day or week. - -The Org-mode files to be processed in order to generate the agenda are -listed in the variable @code{org-agenda-files}. You can customize -this variable, but the easiest way to maintain it is through the -following commands +@end ignore + +Org-mode can collect and sort selected items into a separate buffer. +The information to be listed is collected from all @emph{agenda +files}, the files listed in the variable @code{org-agenda-files}. +Thus even if you only work with a single Org-mode file, this file must +be put into that list@footnote{When using the dispatcher pressing +@kbd{1} before selecting a command will actually limit the command to +the current file, and ignore @code{org-agenda-files} until the next +dispatcher command.}. You can customize this variable, but the easiest +way to maintain it is through the following commands @cindex files, adding to agenda list @table @kbd @@ -1991,27 +2062,68 @@ Cycle through agenda file list. @end table @noindent -The Org menu contains the list of all files and can be used to quickly -visit any of them. - -The global command @command{org-agenda} compiles the agenda from all -listed files. +The Org menu always contains the current list of files and can be used +to quickly visit any of them. + +Org-mode provides three different views on the information in these +files: +@itemize @bullet +@item +an @emph{agenda} that is like a calendar and shows information +for specific dates +@item +a @emph{TODO list} that covers all unfinished +action items, and +@item +a @emph{tags view} that show information based on +the tags associated with headlines in the outline tree. +@end itemize +@noindent +The extracted information is displayed in a special @emph{agenda +buffer}. This buffer is read-only, but provides commands to visit the +corresponding locations in the original Org-mode files, and even to +edit these files remotely. + +The views are created through a dispatcher that should be bound to a +global key, for example @kbd{C-c a} (@pxref{Installation and +Activation}). In the following we will assume that @kbd{C-c a} is +indeed how the dispatcher is accessed and list keyboard access to +commands accordingly. + +@menu +* Agenda:: Your weekly planner +* Global TODO list:: Overview over all things to do +* Matching headline tags:: Select information based on tags +* Timeline:: Time-sorted view for single file +* Agenda commands:: Remote editing of org trees +* Calendar/Diary integration:: Integrating Anniversaries and more +@end menu + +@node Agenda, Global TODO list, Agenda Views, Agenda Views +@section Agenda +@cindex agenda + +The purpose of the @emph{agenda} is to act like a week/day page of a +paper agenda, showing you all the tasks for the current week or day. @table @kbd @cindex org-agenda, command -@kindex C-c a -@item C-c a +@kindex C-c a a +@item C-c a a Compile an agenda for the current week from a list of org files. The agenda shows the entries for each day. With a @kbd{C-u} prefix (or when the variable @code{org-agenda-include-all-todo} is @code{t}), all unfinished TODO items (also those without a date) are also listed at the beginning of the buffer, before the first date.@* -The key binding @kbd{C-c a} is only a suggestion - see +The key binding @kbd{C-c a a} is only a suggestion - see @ref{Installation and Activation}. @end table -The commands available in the Agenda buffer are listed in -@ref{Agenda commands}. +Remote editing from the agenda buffer means for example that you can +change the dates of deadlines and appointments from the agenda buffer. +The commands available in the Agenda buffer are listed in @ref{Agenda +commands}. + @subsection Categories @@ -2090,8 +2202,92 @@ Sorting can be customized using the variable @code{org-agenda-sorting-strategy}. -@node Agenda commands, Calendar/Diary integration, Agenda, Timeline and Agenda +@node Global TODO list, Matching headline tags, Agenda, Agenda Views +@section The global TODO list +@cindex global TODO list +@cindex TODO list, global + +The global TODO list contains all unfinished TODO items, formatted and +collected into a single place. + +@table @kbd +@kindex C-c a t +@item C-c a t +Show the global TODO list. This collects the TODO items from all +agenda files (@pxref{Agenda}) into a single buffer. The buffer is in +@code{agenda-mode}, so there are commands to examine and manipulate +the TODO entries directly from that buffer (@pxref{Agenda commands}). +@xref{Global TODO list}, for more information. +@kindex C-c a T +@item C-c a T +Like the above, but allow to select a specific TODO keyword. You can +also do this by specifying a prefix argument. With a @kbd{C-u} prefix +you are prompted for a keyword. With a numeric prefix, the Nth +keyword in @code{org-todo-keywords} is selected. +@kindex r +The @kbd{r} key in the agenda buffer regenerates it, and you can give +a prefix argument to this command to change the selected TODO keyword, +for example @kbd{3 r}. +@end table + +Remote editing of TDOD items means that you can change the state of a +TODO entry with a single key press. The commands available in the +TODO list are described in @ref{Agenda commands}. + +@node Matching headline tags, Timeline, Global TODO list, Agenda Views +@section Matching headline tags +@cindex matching, of tags +@cindex tags view + +If headlines in the agenda files are marked with @emph{tags} +(@pxref{Tags}), you can select headlines based on the tags that apply +to them and collect them into an ageenda buffer. + +@table @kbd +@kindex C-c a m +@item C-c a m +Produce a list of all headlines that match a given set of tags. The +command prompts for a selection criterion, which is a simple list of +TAGS with positive and negative selection, like +@samp{+WORK+URGENT-WITHBOSS}. +@kindex C-c a M +@item C-c a M +Like @kbd{C-c a m}, but only select headlines that are also TODO +items. +@end table + +The commands available in the tags list are described in @ref{Agenda +commands}. + +@node Timeline, Agenda commands, Matching headline tags, Agenda Views +@section Timeline for a single file +@cindex single file summary +@cindex agenda, for single file +@cindex timeline, single file +@cindex time-sorted view + +The timeline is not really an agenda view, because it only summarizes +items from a single Org-mode file. But it also uses the agenda buffer +and provides similar commands, so we discuss it here. The timeline +shows all time-stamped items in a single Org-mode file (or the +selected part of it), in @emph{time-sorted view}. The main purpose of +this command is to give an overview over events in a project. + +@table @kbd +@kindex C-c C-r +@item C-c C-r +Show a time-sorted view of the org file, with all time-stamped items. +When called with a @kbd{C-u} prefix, all unfinished TODO entries +(scheduled or not) are also listed under the current date. +@end table +@noindent + +The commands available in the timeline buffer are listed in +@ref{Agenda commands}. + +@node Agenda commands, Calendar/Diary integration, Timeline, Agenda Views @section Commands in the agenda buffer +@cindex commands, in agenda buffer Entries in the agenda buffer are linked back to the org file or diary file where they originate. You are not allowed to edit the agenda @@ -2120,8 +2316,8 @@ @itemx @key{SPC} Display the original location of the item in another window. -@kindex l -@item l +@kindex L +@item L Display original location and recenter that window. @kindex mouse-2 @@ -2136,10 +2332,15 @@ @kindex f @item f -Toggle follow mode. In follow mode, as you move the cursor through +Toggle Follow mode. In Follow mode, as you move the cursor through the agenda buffer, the other window always shows the corresponding location in the org file. +@kindex l +@item l +Toggle Logbook mode. In Logbook mode, entries that where marked DONE while +logging was on (variable @code{org-log-done}) are shown in the agenda. + @tsubheading{Change display} @kindex o @item o @@ -2293,7 +2494,7 @@ @end table -@node Calendar/Diary integration, , Agenda commands, Timeline and Agenda +@node Calendar/Diary integration, , Agenda commands, Agenda Views @section Calendar/Diary integration @cindex calendar integration @cindex diary integration @@ -2341,6 +2542,7 @@ @node Agenda to diary, , Diary to agenda, Calendar/Diary integration @subsection Including the agenda into the diary +@cindex agenda to diary If you prefer to use the Emacs diary as your main instrument and if you wish to include the Org-mode agenda into it, the following steps @@ -2374,7 +2576,7 @@ additional entries for overdue deadlines and scheduled items. See also the documentation of the @command{org-diary} function. -@node Exporting, Miscellaneous, Timeline and Agenda, Top +@node Exporting, Miscellaneous, Agenda Views, Top @chapter Exporting @cindex exporting @@ -2576,7 +2778,7 @@ @example * COMMENT HTML style specifications -# Local Variables: +# Local Variables: # org-export-html-style: "