diff options
| author | Karoly Lorentey | 2005-10-23 22:47:29 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2005-10-23 22:47:29 +0000 |
| commit | 6dc59f76f49a35140b3bbdeb9c495609f8e55f3a (patch) | |
| tree | 3694df29f4ce4ab94220bd377cd0d32b64f98b0a | |
| parent | a095475c5f316eed7b27f6e0e6df52dae53dc2a5 (diff) | |
| parent | c286104c51b4510ead8e92d265a84aa661ddbf97 (diff) | |
| download | emacs-6dc59f76f49a35140b3bbdeb9c495609f8e55f3a.tar.gz emacs-6dc59f76f49a35140b3bbdeb9c495609f8e55f3a.zip | |
Merged from miles@gnu.org--gnu-2005 (patch 610-614)
Patches applied:
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-610
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-611
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-612
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-613
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-614
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-429
77 files changed, 5320 insertions, 1477 deletions
| @@ -38,7 +38,7 @@ | |||
| 38 | * configure.in (AC_CHECK_FUNCS): Check for get_current_dir_name. | 38 | * configure.in (AC_CHECK_FUNCS): Check for get_current_dir_name. |
| 39 | * configure: Regenerated. | 39 | * configure: Regenerated. |
| 40 | 40 | ||
| 41 | 2005-09-09 Eli Zaretskii <eliz@fencepost.gnu.org> | 41 | 2005-09-09 Eli Zaretskii <eliz@gnu.org> |
| 42 | 42 | ||
| 43 | * configure.in <lynxsos*>: Support for LynxOS on PPC. | 43 | * configure.in <lynxsos*>: Support for LynxOS on PPC. |
| 44 | * configure: Regenerated. | 44 | * configure: Regenerated. |
diff --git a/admin/ChangeLog b/admin/ChangeLog index 68194266dd6..3204ed9cb0c 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2005-10-19 Chong Yidong <cyd@stupidchicken.com> | ||
| 2 | |||
| 3 | * FOR-RELEASE (New features): max-image-size implemented. | ||
| 4 | (Bugs): split-window done, by Kim F. Storm. | ||
| 5 | |||
| 1 | 2005-10-17 Bill Wohler <wohler@newt.com> | 6 | 2005-10-17 Bill Wohler <wohler@newt.com> |
| 2 | 7 | ||
| 3 | * FOR-RELEASE (DOCUMENTATION): Removed lisp/toolbar from list | 8 | * FOR-RELEASE (DOCUMENTATION): Removed lisp/toolbar from list |
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index ba744a621c6..91b27e0d0b0 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE | |||
| @@ -39,13 +39,6 @@ bitmap usage to a bitmap name, and second level maps bitmap name to | |||
| 39 | a bitmap appearence. | 39 | a bitmap appearence. |
| 40 | [Assigned to KFS] | 40 | [Assigned to KFS] |
| 41 | 41 | ||
| 42 | ** Put a max-limit on the size of images, e.g. based on the display size. | ||
| 43 | This is to avoid allocating insane amounts of memory due to bogus | ||
| 44 | image size specifications. | ||
| 45 | Note: rather than clipping images that are too big (this may be | ||
| 46 | non-trivial to do correctly in all cases -- and thus non-trivial to | ||
| 47 | test), it may be better just to avoid displaying such images for emacs 22. | ||
| 48 | |||
| 49 | * FATAL ERRORS | 42 | * FATAL ERRORS |
| 50 | 43 | ||
| 51 | ** Investigate reported crashes in compact_small_strings. | 44 | ** Investigate reported crashes in compact_small_strings. |
| @@ -55,9 +48,6 @@ invalid pointer from string_free_list. | |||
| 55 | 48 | ||
| 56 | * BUGS | 49 | * BUGS |
| 57 | 50 | ||
| 58 | ** Make a new interface for specifying window configurations | ||
| 59 | so that we can fix bugs in balance-windows. | ||
| 60 | |||
| 61 | ** TCP server processes do not work on Windows. | 51 | ** TCP server processes do not work on Windows. |
| 62 | 52 | ||
| 63 | TCP/IP server processes created with `make-network-process' consume | 53 | TCP/IP server processes created with `make-network-process' consume |
diff --git a/etc/ChangeLog b/etc/ChangeLog index afc7b6b8249..cb0b68f7f01 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,16 @@ | |||
| 1 | 2005-10-20 Dan Nicolaescu <dann@ics.uci.edu> | ||
| 2 | |||
| 3 | * e/eterm-color.ti: Change the terminal name to eterm-color. | ||
| 4 | * e/eterm-color: Regenerate. | ||
| 5 | |||
| 6 | 2005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change) | ||
| 7 | |||
| 8 | * Makefile (e/eterm-color): Rename eterm to eterm-color. | ||
| 9 | |||
| 10 | 2005-10-18 Chong Yidong <cyd@stupidchicken.com> | ||
| 11 | |||
| 12 | * NEWS: New variable `max-image-size'. | ||
| 13 | |||
| 1 | 2005-10-17 Bill Wohler <wohler@newt.com> | 14 | 2005-10-17 Bill Wohler <wohler@newt.com> |
| 2 | 15 | ||
| 3 | Moved all remaining images from lisp/toolbar to etc/images. The | 16 | Moved all remaining images from lisp/toolbar to etc/images. The |
diff --git a/etc/Makefile b/etc/Makefile index 0ccd107ddf0..4275b301aaa 100644 --- a/etc/Makefile +++ b/etc/Makefile | |||
| @@ -21,13 +21,13 @@ unlock: | |||
| 21 | relock: | 21 | relock: |
| 22 | chmod u-w $(SOURCES) | 22 | chmod u-w $(SOURCES) |
| 23 | 23 | ||
| 24 | # ${etcdir}/e/eterm is used by ../lisp/term.el. | 24 | # ${etcdir}/e/eterm-color is used by ../lisp/term.el. |
| 25 | # TERMINFO systems use terminfo files compiled by the Terminfo Compiler (tic). | 25 | # TERMINFO systems use terminfo files compiled by the Terminfo Compiler (tic). |
| 26 | # These files are binary, and depend on the version of tic, but they seem | 26 | # These files are binary, and depend on the version of tic, but they seem |
| 27 | # to be system-independent and backwardly compatible. | 27 | # to be system-independent and backwardly compatible. |
| 28 | # So there should be no need to recompile the distributed binary version. | 28 | # So there should be no need to recompile the distributed binary version. |
| 29 | TIC=tic | 29 | TIC=tic |
| 30 | e/eterm: e/eterm.ti | 30 | e/eterm-color: e/eterm-color.ti |
| 31 | TERMINFO=`pwd`; export TERMINFO; $(TIC) e/eterm.ti | 31 | TERMINFO=`pwd`; export TERMINFO; $(TIC) e/eterm-color.ti |
| 32 | 32 | ||
| 33 | # arch-tag: 4261f003-cf77-4478-a10a-5284e9d8f797 | 33 | # arch-tag: 4261f003-cf77-4478-a10a-5284e9d8f797 |
| @@ -113,6 +113,11 @@ much pure storage it will approximately need. | |||
| 113 | contents of buffers from a core dump and save them to files easily, should | 113 | contents of buffers from a core dump and save them to files easily, should |
| 114 | emacs crash. | 114 | emacs crash. |
| 115 | 115 | ||
| 116 | --- | ||
| 117 | ** The Emacs terminal emulation in term.el uses a different terminfo name. | ||
| 118 | The Emacs terminal emulation in term.el now uses "eterm-color" as its | ||
| 119 | terminfo name, since term.el now supports color. | ||
| 120 | |||
| 116 | 121 | ||
| 117 | * Startup Changes in Emacs 22.1 | 122 | * Startup Changes in Emacs 22.1 |
| 118 | 123 | ||
| @@ -1495,6 +1500,18 @@ colors as on X. | |||
| 1495 | 1500 | ||
| 1496 | * New Modes and Packages in Emacs 22.1 | 1501 | * New Modes and Packages in Emacs 22.1 |
| 1497 | 1502 | ||
| 1503 | ** Rcirc is now part of the Emacs distribution. | ||
| 1504 | |||
| 1505 | Rcirc is an Internet relay chat (IRC) client. It supports | ||
| 1506 | simultaneous connections to multiple IRC servers. Each discussion | ||
| 1507 | takes place in its own buffer. For each connection you can join | ||
| 1508 | several channels (many-to-many) and participate in private | ||
| 1509 | (one-to-one) chats. Both channel and private chats are contained in | ||
| 1510 | separate buffers. | ||
| 1511 | |||
| 1512 | To start an IRC session, type M-x irc, and follow the prompts for | ||
| 1513 | server, port, nick and initial channels. | ||
| 1514 | |||
| 1498 | --- | 1515 | --- |
| 1499 | ** Newsticker is now part of the Emacs distribution. | 1516 | ** Newsticker is now part of the Emacs distribution. |
| 1500 | 1517 | ||
| @@ -1794,6 +1811,28 @@ boundaries during scrolling. | |||
| 1794 | 1811 | ||
| 1795 | * Changes in Specialized Modes and Packages in Emacs 22.1: | 1812 | * Changes in Specialized Modes and Packages in Emacs 22.1: |
| 1796 | 1813 | ||
| 1814 | ** Changes in Allout | ||
| 1815 | |||
| 1816 | *** Topic cryptography added, enabling easy gpg topic encryption and | ||
| 1817 | decryption. Per-topic basis enables interspersing encrypted-text and | ||
| 1818 | clear-text within a single file to your hearts content, using symmetric | ||
| 1819 | and/or public key modes. Time-limited key caching, user-provided | ||
| 1820 | symmetric key hinting and consistency verification, auto-encryption of | ||
| 1821 | pending topics on save, and more, make it easy to use encryption in | ||
| 1822 | powerful ways. | ||
| 1823 | |||
| 1824 | *** many substantial fixes and refinements, including: | ||
| 1825 | |||
| 1826 | - repaired inhibition of inadvertant edits to concealed text | ||
| 1827 | - repaired retention of topic body hanging indent upon topic depth shifts | ||
| 1828 | - prevent "containment discontinuities" where a topic is shifted deeper | ||
| 1829 | than the offspring-depth of its' container | ||
| 1830 | - easy to adopt the distinctive bullet of a topic in a topic created | ||
| 1831 | relative to it, or select a new one, or use the common topic bullet | ||
| 1832 | - plain bullets, by default, now alternate between only two characters | ||
| 1833 | ('.' and ','), yielding less cluttered outlines. | ||
| 1834 | - many internal fixes. | ||
| 1835 | |||
| 1797 | ** The variable `woman-topic-at-point' was renamed | 1836 | ** The variable `woman-topic-at-point' was renamed |
| 1798 | to `woman-use-topic-at-point' and behaves differently: if this | 1837 | to `woman-use-topic-at-point' and behaves differently: if this |
| 1799 | variable is non-nil, the `woman' command uses the word at point | 1838 | variable is non-nil, the `woman' command uses the word at point |
| @@ -4689,6 +4728,10 @@ explicitly; for example, if an image is put in etc/images/foo/bar.xpm: | |||
| 4689 | 4728 | ||
| 4690 | (defimage foo-image '((:type xpm :file "foo/bar.xpm"))) | 4729 | (defimage foo-image '((:type xpm :file "foo/bar.xpm"))) |
| 4691 | 4730 | ||
| 4731 | +++ | ||
| 4732 | *** The new variable `max-image-size' defines the maximum size of | ||
| 4733 | images that Emacs will load and display. | ||
| 4734 | |||
| 4692 | ** Mouse pointer features: | 4735 | ** Mouse pointer features: |
| 4693 | 4736 | ||
| 4694 | +++ (lispref) | 4737 | +++ (lispref) |
diff --git a/etc/e/eterm b/etc/e/eterm deleted file mode 100644 index 09d184fd762..00000000000 --- a/etc/e/eterm +++ /dev/null | |||
| Binary files differ | |||
diff --git a/etc/e/eterm-color b/etc/e/eterm-color new file mode 100644 index 00000000000..de84f4c909c --- /dev/null +++ b/etc/e/eterm-color | |||
| Binary files differ | |||
diff --git a/etc/e/eterm.ti b/etc/e/eterm-color.ti index 8f88f0e6f88..ac8b459ef3c 100644 --- a/etc/e/eterm.ti +++ b/etc/e/eterm-color.ti | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | eterm|Emacs term.el terminal emulator term-protocol-version 0.96, | 1 | eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96, |
| 2 | colors#8, | 2 | colors#8, |
| 3 | cols#80, | 3 | cols#80, |
| 4 | lines#24, | 4 | lines#24, |
diff --git a/etc/orgcard.ps b/etc/orgcard.ps index 8631e221e59..d49242b2033 100644 --- a/etc/orgcard.ps +++ b/etc/orgcard.ps | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | %DVIPSWebPage: (www.radicaleye.com) | 10 | %DVIPSWebPage: (www.radicaleye.com) |
| 11 | %DVIPSCommandLine: dvips -t landscape -o orgcard.ps orgcard.dvi | 11 | %DVIPSCommandLine: dvips -t landscape -o orgcard.ps orgcard.dvi |
| 12 | %DVIPSParameters: dpi=600, compressed | 12 | %DVIPSParameters: dpi=600, compressed |
| 13 | %DVIPSSource: TeX output 2005.10.10:1112 | 13 | %DVIPSSource: TeX output 2005.10.21:0749 |
| 14 | %%BeginProcSet: texc.pro | 14 | %%BeginProcSet: texc.pro |
| 15 | %! | 15 | %! |
| 16 | /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S | 16 | /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S |
| @@ -385,181 +385,183 @@ E12CD06BD02AB38CBA57492EFEB4A12AE7B58548623D7F862515AA3EC1B4F84A | |||
| 385 | 7C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED | 385 | 7C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED |
| 386 | 45974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0 | 386 | 45974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0 |
| 387 | 801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2 | 387 | 801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2 |
| 388 | 415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E02221090 | 388 | 415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E14A21FEF |
| 389 | 2BB6DBA4C0F57B6505E06154D2FD2B4867047BA56876080E6355F74A94B6110E | 389 | 41EC3005C351D229B3D1186D118B72EE4143CB89492E211F7490D664ACDAD2D9 |
| 390 | 519BDFCCE8B1591398350C973E52643947FF0DDF1EF1D5BDC2CB548691337378 | 390 | 70F1FDD65D3A6D84370B8AC3F5FCCF497D067D5A98CC0319404B6825FDB73587 |
| 391 | CF13E83C7724774281EBCCD04A9A6193DFCAA31067CCDD98444C705CDFC58F57 | 391 | 51D7066CDD0EB40033BFA664BA84E58540F849C0D7987B8F9A7569879351F681 |
| 392 | 51343E8EEF46E9B779B89D59ABE35BAB4F08719816215E434BEB69263F40E144 | 392 | AC379AA1CDEADCDAF6910C3BCC38E053F6530D9674D6E5E8352DFE3B4F9D74A8 |
| 393 | B30D52B749F3B66A9147F225777BC69BB72A12C96852AB90629CB453EC8BEF3D | 393 | 7F1E76E795110F46E7C5548B85426CEC3E9977B97EFC5DCBA8891784CEEF8917 |
| 394 | 62FD39F7DFF6F9466E98EB42D718EC3F40773D76EFB2FF4E7261C3C64A4C937E | 394 | 39BC430CC40DC166C51C1984F1734AD604002716FD4488FADC935CF801AB0DD7 |
| 395 | 823F633F19C6F58F4BD5E0EF012ECBECC797680A1B862AED6A1DFFD252155E20 | 395 | 6C865C611509DA17DFBE1A230D6A3F7D21826AEDA368C7EB0DFC740698D2A196 |
| 396 | 57E8B6B0156FEED1987931DE5EF1CA6D3B580BEAF56C71D8A2385481CFF22E6E | 396 | C637BACEA9501C7D421EA39C6B49327913ED5CA51990AE2D3E5AA63732907DC2 |
| 397 | 7B6D2FB8F139B5FC183BF5FA5E1ECADE0C78F6F43F37AF77F228E6E41B98142C | 397 | F5A64A50D2E20A1881F9B1BAA746F639EA45158DEEF3D84C08AAD15D0FA0FCAF |
| 398 | 085427FF927194E7BE2B84ECCA36BA40DD7EDB158D3DA6109F4668FD12AB988B | 398 | F0C5195372E83862031BD25044DA8B5DA9A9DFB248B001D0F8E957E8810BFE7F |
| 399 | 0D65E1E14C092F865452DC646E0C246376ACA12C01F17D714A4DB87EDE98B6C3 | 399 | 6507B8B1D8D3E81F33D615F899EC881E671E421D66BAEFB992F15E481EA42330 |
| 400 | 60E5A0F414813EF3392168D164463CDB5D55CE2862008ED4FD65F113195E5CE8 | 400 | 9B880E308BED0527EDBBB718761A8488B218135211541F65096AE8D70F8A8D31 |
| 401 | 854F473644A50DAAC5D39A3E10D690ECEE89CABBFA93D2B91F4116FAB704797C | 401 | 6F6D498318D7C59D355F95650C05C489BBC03779570A4F8FEBC0FF26716243FB |
| 402 | C8397FDDC9F364013CDCAE9E9704B1DE28E2CD476AF57C3A30460AF14634C05E | 402 | 15D4D03E6E8A8FC09F3F06EB19DBA15E5CF724243C0CE942EFC0771E267C15DC |
| 403 | 7F1F232F563BFE0C7C3D669700A38A4752AE88BB814DFD08B40E9E7F8BFA0252 | 403 | 30CC67D47504E7CD7FB549D03EDBC6D655EC9BD66160085A2AE4797BE3E87933 |
| 404 | 177405ECFE96FC249A6F1B530AF5CF106E21EFE0AC0729C36385E022BBA827F1 | 404 | B77CCD6DCF1026E598CB760903ECC82CAE5F6139EFB2B980B7C72552D0A8291F |
| 405 | 68C11A91E90CA1472AB5767F14821E8FE5E32C7DB4A88FB64E746187CEF23FCE | 405 | F3CCA05628B50DECD30786F7DC9ECC532AE8AC212562F7F691D8CE393E02FF78 |
| 406 | C499D2472AF392EBB6F79F714AC991F390769C25DC58D364147D868AC08DD739 | 406 | 971E6D5A607F3394A57FF995BF0AFB94E16A619C89A3BE5F49F0AC96A65C76AA |
| 407 | FA4602613467E3F2B04ECCCD12333F55D80BA4132883B2498D652E61D4E0096C | 407 | 305C15CD82BC540D42BA924BC728948A6EEABF03A7D2E5448226D6AA94729DE9 |
| 408 | B5193FA063E5C4131397D76C9656CE31CDC41D24C17F3208971BB853FDCB3F62 | 408 | 8CCA2D5832408F1685761DF7376EAE3BA2C1E5D1CC394D93E681B3931DE59B1A |
| 409 | B3CC083E6D9682CACA448112C84C0FC9FB19C8AB13E0C33EDFEC2A4CC16AB125 | 409 | E69218C1108EB831FDACDFCEFE511E471665D8124E795F675E10814006F950EC |
| 410 | 044C048B65011725D34571D9C235736B61A485F7FF0835C7294A6FF2E48194F1 | 410 | 33CC631392FB4C0A49D99E01EC3559A9D761F0C877982865FD2F61B97BCC3C4D |
| 411 | 8FFF4C5A055091AFF95E674F9CD2E43ECCA77F4876B5B50A1D5B38319D594246 | 411 | 67392977694F889E3C5DD8DACC55498FC38586BE2AA0F754B618EC820C7C80C7 |
| 412 | CCA3CD4F81AB3CE49B648FB21F0959801B814422D31DA4F7C3581032F8310E76 | 412 | 58145708C6B98C5163D2B1EBFF47116E4D38A046A1E4FD901110F1A1045CE82E |
| 413 | 95660ABF1A1DB536081F61FBB83AE5C8B47A9E0575FC475754DEC3689B28582C | 413 | C2020AFC6AAAEDFA12028E2142B2B3C743907C4E8D1090D29C105BE00D870796 |
| 414 | 016062AA7AA63EE703DBC73ACCB5316DC3A12A2B7926D132D5B463B01452B475 | 414 | D76E5D390490E7DE28C0A8A0AB39A6E9247EF7C5B20B01F55ECCB14F875BEA2E |
| 415 | 51862ED934A55F3DEB560FE2CAC39909C99CBDCA1F7239D122D9FFDE76D90D8E | 415 | CE4397FF9523E58FE23AF03EC2289D401C1048BAECB98394EC222615811D06F0 |
| 416 | 0576A645714E190BE1938E8A9EF1E4E5C55AC58899C2ED571F246A612EB73EBD | 416 | D162CF83F6F4C7A87A4DACD987AD4B64428F992AF4EC203DEEDCCEC70C3368A7 |
| 417 | 24B76697C6A4FFDF1447CA182096A771B26788DD9456E0DD04C83119B0E1D0C7 | 417 | 9570872B3AAAAE34A6E7168005DE1E5F6AF4C469205E19739271735BB60127B9 |
| 418 | 3C4323F13AC8786BF2B89F3759180E58AA599D2F981FE280E82768C0E3ABBBA7 | 418 | 50153CE55340595903F815841594ECE6B84AAF2E83725C4C8995D39EF436EB0D |
| 419 | CC14B6521FE6179CDD5EFD68E9BDC2F53B5D6C25155564176618EA019D0BA472 | 419 | AA7C9BA7BA7A4BC876D5C554FFE4A055CF8815650B5D6B7048744AB7EB39560C |
| 420 | 76C553A27871443019F43AE1B1B898AAFE70EA1F274C57582E70719AF3A53597 | 420 | 09FE285561A0A04190B35170F3306CCBBE6A37ED07BECF11E890BD890FED9B80 |
| 421 | 1E88D7603DC99E5113062024B63E9BE65CE676E4F61DDB8F77E40C47A8F7D6A8 | 421 | 330AC0D1288C028E7B1E8753C32F1C03E01C694D69561524E930583B8F98B82F |
| 422 | 2590664A97ED1D14547FCBED2C7E37BC09558954D4E3B93DFC48E504BCCE7865 | 422 | EA5832D1283F330D4ABDF1B941386CF90028C8D4F33B453B9AD6137D69F0FCDF |
| 423 | E44F4C479A27F3BCF551203BB51F443630B06F3D75D24EE7478B1AF78130174F | 423 | 53E0BB814947DC58E45DC165478E74E07AAF3B5EF3F79A90F24A18B7F9CB8057 |
| 424 | FCE0B804DBCE20F62989ECD03A0CC1A42A1F7FBB673EED9E93E1B36D6E3E9905 | 424 | A94085D4C2B2FF62ECED65D8C47BB939AE969AEFBAE94F6B230F965D21BC9C2D |
| 425 | 24E71A3391786905FFF7A2B56FC23AE64D4478D25ECDFAE9235606EEDC854E62 | 425 | 7C22B7F8CAC5FB01891A63EC9FC9900AEAC00AB0743D201DCD68AFEC5F877F4E |
| 426 | F2EE5F50849138DE28C569D08961EACE1E6AA1787825B0706C532ABE724AD9D9 | 426 | 3EA013E883AB0FF98AD3A4D85ADA45C5F51CB33061EA7129C1FB68D146450014 |
| 427 | 87B1F459B0197A9F2B8002686E814BC91A91DEC9C0BE90F3F76242E3709228E3 | 427 | E98BAD39D0CC6A58E0F1D6E3AD6BD0F0FDDB9E3123843FBBFBC7C6C5A4854AF9 |
| 428 | DE8116E7138751A8854E8A515BBA1E0F8A16C77BFABB6562601B85E1497E6E82 | 428 | 1F6E260D6E09CD14B764276F5F33E6539FAB56C3ABB3AB24ACDD7D1937B6A459 |
| 429 | AE4B8688DD6FDEFCD53226058BC6923EE68A195F375DC42448DD39905439A38D | 429 | 9D846E6AF2138B361A827CA9C5D8AE11CDD8714EAB13BE223C81FBCCE0FFF57A |
| 430 | 1B61CC01CEF9D2618F72E05E018A9E83AB1BACA13D1FAEE362F60C2E00523558 | 430 | 779FF50E761E533AFE08A5AFADB1FBF2DA3CBB35E7003C76D205040BCF2C1815 |
| 431 | E801B3BC8F79E4079D10627DAC3EE837B39337BFA4FCCE26FFAE8B9AAD60B710 | 431 | 0FCB1609829AC06A1D2CFF13ADA1C23BD25EDE48815255E0C0CC62901D210EA2 |
| 432 | 0BDDAADC236257D1DC9A7C41F83EE6F44573A357A3A1820D03685C919D80293C | 432 | 2F5A1F8330AC0677DFB0F2CD0E8922570584A21C0278941EE54F9CC993BE5BDB |
| 433 | 1276AAB97166B2D0D82D1045075648ACCA7933FF2B68F7584DA6E78899F0F5C2 | 433 | 6DA0EF7ACA47555152AA2EDF27F5CFB2E3D0512795F464D30FD2C1F71241EC90 |
| 434 | 247A46AD8162A61671A1B633DF24EBFCC985C029223B98362431118BD6ADFAE5 | 434 | 2EF44228E348D3E696BDCEB802354583BBFB408879320D23D735E7C06A0A513A |
| 435 | 61A8C91E79306D1E3D4DFA5073C6BAB2DD04D441418B47015A7A0F21DA1C1B8C | 435 | E053521E2365A4430F131612CB06FACC0F436B9F36E927F5AB4142F9E18BE935 |
| 436 | 0E9B5DAF91CDCB69F86B62B4C003BE88B4DAE2D5F9DC00FEA9D3136B7EBF92E2 | 436 | 892C440CE0D23939723F9C9680130AF7BC1FAEC6381EF863E9824A4E619646B1 |
| 437 | 7AD8617DEEEE72E869E2483548B56B90BC88F8E767676341B45FD0C000B8E080 | 437 | 2FC51140B5AD7A1DA320E3BFB961A5C807B919DB572898ABBDF7AA831641426B |
| 438 | 42CC156B75ABFA7026D54B31FFE73D285A2330C7698727BCA6511F8C404994EB | 438 | 8F743177E98D22574D0F0EB55673533D3105E4C708697B61ACD89C5C5F6E46AA |
| 439 | 8C8D437CB593291E8816FFFE3E4BD7BAADA3CB009982EC7F0192C5429FF37D2A | 439 | 9D5EB05B7E5ED1B663AA74D84EE8BC451A44459DA6399FD72992DED97BF05AF2 |
| 440 | AC8DD62D454A8B50857804BDB8EBA7347902EEDCB394FF153503E77174D71439 | 440 | 59139D6470F50EA8D263F645D9C0EBFA5BA30E8CD7D4F489E0EB18B5C07BCE4C |
| 441 | A57D9941E1EC82D2CC49847933FF387BC7EC6E730BA6EFE48A9BB5B1A6785DCC | 441 | CACD432ED5316356DE895C256C5FB47EBA7AABC06A92E6A360BC9174ED0F5754 |
| 442 | AD7A9557FF402D8AF864E0FAEB0AAAE4C93243F3E6C550A18047F2CB9AB57FAC | 442 | 08F4539D8ADD26D7B27FD753572667649F8A2EDAB9A7D312FD5C26503384980F |
| 443 | CE3F57FA2072D37763FB32172C2908B152948BE21051D26715C9326B858D538C | 443 | 345E11F3722283EF2DB9EE15A4F04CB6797B15AE0970BC2747A7F9A229275638 |
| 444 | B9C8A6DDF567C6DC6E7DBFE7CFD29A498490AC16D964B1FC1FD81B95735A5E3B | 444 | 7BCDD3B7BF28FF5A143999CCF53AF3E02D8AE4B9AE572D7C2B77350509A91044 |
| 445 | 03CE325D2138969138F3B6CB027E54C987E4C81E52EFA77A824B40F71B2EA2CC | 445 | 89F3725CB95A0F124F3E9D7504127684617509ABF65DF8821B6A168365CA625B |
| 446 | E98F2AB61546E4BFADE41731E48D6EE82C19257DD9FFF78CF3D01A2055863099 | 446 | 139CBF549F604FB8319B3C62770FB61114B5EA4FB1F992AA99F32543BB4464C3 |
| 447 | 21C06567DF3F852DC96838488CBB41D5D587BAC66C9586F093E493E1EFA65260 | 447 | C86C5D85FCA3E7E1285A51167D5C17608A6C0CAEF95952461A93B1FC9CFFBC50 |
| 448 | 9B9F0148227A5D3F69FFF499675F0A52EF0615E8272825E69D0D8496CAD940CA | 448 | 602F25835D3A566300DAF0FCA7046930CBCA09155621BD65518ECD5B698A6FA3 |
| 449 | 93655503DA72D62D8D35C6E25337ADF834198C750910461C25965925D0DEF604 | 449 | A391E92872397BA95E7B5EA69A0EE6F9C74ECB5AA83C2FAF2B031D17E0B6FBBD |
| 450 | 844C1257BFF739EAD0918630473F5B9E88A5AB0417815239189E0738A1134655 | 450 | CA02AA882F8925967CA744D3837890DC7D1ACBBD1F0BDA8E61B88A230F4B8291 |
| 451 | DCF9B009A68120E823B23C770F7AD7C0A11EBE9962D3F14940C8D2C1A7295F63 | 451 | 73D37F471AF6AB22BB3434F00F3A35A330B69459F40DC5EE430AD2F9710580B5 |
| 452 | 908BD22A418F4E8F81526FC827CBA16BA143050278D4F2FECBBFAFD3DC8003F8 | 452 | E93F75AC1E6B516138D92BC9EE6D3085ED02616EA1474848DFEFF3A7DD443DF0 |
| 453 | 81FD27C56330B33BEBA0EFEF1F0384C45756B1A74339E232873504E55DB50E3B | 453 | 3B421295AF2BC090C869E92C2A774FC327D15C6AB3EE92E2B16C401740E9B1B9 |
| 454 | 59A2CA167D209142C1ED6029313C73B7D83B0E22B1410C01519206795FA33F63 | 454 | B22B4663C9348DD5F24264352C56D872CE93DA420AA8922E572F587600346B8E |
| 455 | C88A326500EB96700A24A434382BEEA0D0692E12E3AC72D568AA0133B0CCCF70 | 455 | 4194D11B37433D0874BBD33A8B2E67F36D7A55298664F9E96DDA20846F9E9746 |
| 456 | C34C979B31975536089EA02286AC17FAC1CC980FDB0BA382F7755602DCB18CEA | 456 | 657A4F0A63D14437AC61F22DAAB23095BBD7FF8C1EB24D43DFB6A2C62B574A96 |
| 457 | C862957FD6DA71D7180B3AFA8851458B5DA45DD8C5336E7033F4E957CFC2C08D | 457 | CAB867CF40194ED7CD9EB634AD076B42337636CFE681137A96F393CD73DE2FAA |
| 458 | 1B3F550A219034ACFE7353BDB815B7B65BAF0F947BFC3C5E47AAB9FEE752B938 | 458 | 904D9F703D141D344272DD9DE9F18C74929E8DFF9CD108E69E5540A8C8D10B9D |
| 459 | 34F5E6AADE58FD6F827B0649DB56F21097A780F57E253AA57CA6D5C97AB407B8 | 459 | 3D715CBCA486ABB3E010BA1F20F728ED2C1855B85AAE3E9AA00ACCC7DB968CD4 |
| 460 | 8646B1652557344AB12A962D745016BF5E3E712E56520A30D2D4725FA67B2AC4 | 460 | 3A03EB9270B8BF51C74881BFDABD1B25E51B3E91FF7137FBBDD7D8077E3EA554 |
| 461 | 8E331D28063727F0DCB494D6DE60F01FC86DD340EB5C8201CEE5C83B141A6FF9 | 461 | 3125D1E104B26596D96EAB6B19D148A037CCAAA3469AD06B424DE6521795668A |
| 462 | 72974B88E35BE6061626D570539AB1BA69183EBD64FEDDE0E3C8221A5190DA08 | 462 | 5D8AB2F65264CC20B20BD7C5D0DDF2AE0932F99D8400DC31F81030AACEA27251 |
| 463 | 58853CB53920A109561473A0E0A3E6C89E66F9A5372483CDF9CB9F05F6AD5AD1 | 463 | 78278C3FACBCCDC668DCECDA033F23D408BFB7E2A787D77433E23D8A36452FA9 |
| 464 | F673B2DB23090B73C08E0D914366AFF8190366111E0504E11A1B123E2E752B75 | 464 | 7339E1A9036034A6C1D10162BC409D6B8F899CD0448C64DA643E5A38A70470CE |
| 465 | 90728C69D7FBCCFD6411CBE4AF4734CD67F4F4CF231F38F4A2085C9896C5CE05 | 465 | 8C8F251D7916D7786F91BD21A15FCCA149A035DD219B523F23C1CA6B07C04678 |
| 466 | 8DC64395C62FDFB3ED92FBF66451DA41385E35FF0E0B381DCEBAF01CB9550679 | 466 | EE2ED5DECE5C1B4DD835FDFB1A50D4BC57491203E521E85B8BD5635F2BCDCD00 |
| 467 | A0B3016A0E6CAC3E9C9B6FCDD0991B3AD4DB08B899A321FB78EE4205A0440285 | 467 | A3CF1125C8B29191E5192A22A725E0A0A26E4A6F4E19EC36E506B78EB090FA14 |
| 468 | BE7D4AECB70BF2574EFD1A8E715AF68DC99E30DE8233C557AA120584199A80EB | 468 | C3F5C4476665D6BD48BE1990D3B53E9BF58D70253490E9D2BB274A16F8BCB411 |
| 469 | BCABC03A01AAEF4259F4740D3E217288BBDD85F690BFF141CAD097B6E7353364 | 469 | B9B1133ECA1723C52328CBF108DD84B55F8CFAA7C642824357A76A2FA12D8BBF |
| 470 | CE25F9818D743CE61A3EC151B120462A411332FE32F279F7BE76014AC2BF7C44 | 470 | 392474CD645BC9AB430E6031BE0220F603DC75498A4189CCB239E4F3B27B4076 |
| 471 | C9B2E6A156F4F63C2522470963BF1FE855AD6A083349BAE5A077AE1381F0E264 | 471 | C3793944F26B44330FB42973EF70E86F740C684F123F121BDE3758C551EEFC49 |
| 472 | 4F3CC894E16A0B1E5195B66CB83F0904E3C9C3154E87231CFF119A00165C4338 | 472 | 69A082AD4F3FFA89509A7B8922CFB8C971C072D498712A1A5F6BF254C9A4CBA4 |
| 473 | 7EBE20D9F9F7E73AE9DBFF5A5B25E241A52C180843852748415EB5F040B38D59 | 473 | AA3652A56675C7359DE901E292A9826D3BC140843A7799A05D20C56AE586F178 |
| 474 | FA08110F79D73ABDF3AABCB1A95933E7A56120D63B473ACA80B80769638ED878 | 474 | 090E9E55876958C665923401901D4825DD5C9B7AB686AE1B38314CDFB6DAAC1B |
| 475 | 0E0513D8134962A1C350712424910E4528AB2C27F805E73D0C204B94809C5872 | 475 | FCF2CFB4C404E173988FB1CC35297B3DC7A32F45DB7C1971973F9BA501982760 |
| 476 | DE2B60DB49C7414001AE889875E6FE43F8D3BDE20EA92F4B92F9E9077F96987A | 476 | E353B8DE47C6065C128680E51C080D5D3A0C9BE09C25D85E4D1E6087C9CF4F51 |
| 477 | FAF2EF0CE7FD75387CC8E98CCEC81F1EC31955098C66936CFAC4200A7896B245 | 477 | 13AB80E75EC442CE2F2E0B6F7D13733E939A3F983BA540FA236A6AADAB9C7734 |
| 478 | CD57EE8BFF38CF671576240C466CD5AE235E46DDA8825C72619AD25EBD9B4D20 | 478 | 510C858581725CFEB2A46BAECDCAFF7E726D140F50C2A0109ECA4C1ADAAFF17C |
| 479 | B0DBC776CFB8E8F988903E59573D77D9CD6AC5CA6447323B9B6B9D4EA9C975A6 | 479 | 3269DD90145A9007639A54DFACDAD0FE945E97A370DAF3F0B4D66F847E0CBC17 |
| 480 | CAC725E12C3B10BD7D38BED398F49D132D850B737979658BE3D6585D63052366 | 480 | F8D6E5D5E124BC85379C1FB15E82280F157ABDEB2CB67CC25DD0C4DF157B5177 |
| 481 | 255234F4A3A6CFA9E1B1CA462CD6FBFE67F8B02E7988BD6C81AECB1396AFB4C9 | 481 | 60A7EA491389E573905653A694F31DAD0052BFE5A252C902B3976F5522526DB0 |
| 482 | 6CF9F41A9426D1AE18A3CA08062CD08FF430935081B48EF4FF53093B1BD25B15 | 482 | CB9423C892CC9348C40DD844BF5F87BCE0D8C7E42AAABB2DAFA3001976360946 |
| 483 | 13B8F3207B3F5AF6788364DD45853A1ABB21E67848184228238C7290ECDD5B6F | 483 | 8DD8EEEB4D2F1A5CE8139AF70FFE8C72E8CD4F891C679D93D7BAF53B850CE9B3 |
| 484 | 6A755FCA9D9422FB325FC74A8831C33F053DED1525FC298DCFA03F382FE259CB | 484 | 7672AD44717E88EB64C9EBB80727A6CDE2E07A14E686B5A452CC456FFE933F75 |
| 485 | 6DA17A718CFBC755A5EA1B46AACB7C5882B341D01EF761625804C83A2073E41E | 485 | F323DFB14573F37D26F04CDFF33F6560BDFE530B4E3352F44608EB26D49EEC8C |
| 486 | C1B47DF7037677D53BEBB9D1EBCE59E1D10E68C4E4BC9972443FFDE127B6A7AC | 486 | E1BDFF8ECE3823670BDDF72C4FF89327ABA853713667E4EC04D8981644D0AA5F |
| 487 | 0ACA3D597FD27904183920B6050DF7F6D2B6EFF4FDE0BF73863020BD00C03803 | 487 | 5D872283F02F1B108533B833A33BAAE41CE4C4097242DDCA81896EC33E38F88D |
| 488 | DF70E829030D042FF85E288550BA31479A53EA746760D4D330EF65A9CD017EB4 | 488 | 0ECD5F240C274A5949BEE7EDA1511A2636028161A8612EF580116BD6C212821A |
| 489 | 75528EDC8F9D527098258D7C89A642333C73CEB113F80D3D507E0D7E62BECEC5 | 489 | B0C917365705937924B58BCA415E2B3C6E3191E80921F0A49F2D3AC371DEA089 |
| 490 | C63C8545A01F94E2ED182472AA6AC86864E3725C31930B0ED0B8AE8AC33FE5D2 | 490 | 78FCFAA20EB6325FF3D9E57717F0A75135401322746EDE63970B7EBB07728CFA |
| 491 | 5A2AADDCECA9877DBBB9CBDD7255F5AE1F0D64A399447AAECAC3360D77BB85D0 | 491 | 641B345A2C00B9C526191AE25B66EB97AB3A32A41D57D9B2501BBD4765137BD1 |
| 492 | 49988DF9FD104F31917A03ED7C3319CD51EF4DE19D7EAA3292DD8D1BE8A729AF | 492 | 04993E60EBC3DE43523B24BE3B4BA26F493C38168DA4899251AE82541118B28D |
| 493 | ED576D7D298EEF456B4E252B9057A8186328ADAFE674FD28936FA4A66AA8CEFE | 493 | C653F14878DC30A9CADB3C8833968F135FCD7BFB1D2FE028C74636491D9FC892 |
| 494 | FD75A180F88B56FF34C353EA48E19D94BD98B0BD330A06D2FDE75D950EED3A61 | 494 | 81553B1775FF95FF9CAF675A2E7208CA84610F9C39F37474E18569C0209EBDCC |
| 495 | ED046D38B86429EAD3C8FD076BBF224F97A07EB96DF43027A1F3C841080B08D9 | 495 | EAAF9D06A63499C6EFC91AA8FDB9F159A6FAB1F62DFE56FA0E37BD5BDA0F17E4 |
| 496 | 90669E035C80E052EF8C209097AC6C1EA442E6E553055D659573CC1764866C76 | 496 | FAE3E27A36F95629EC2064D6A411108E721FD1091D6E9AAA5B0C0B3D41833C62 |
| 497 | 4A998871A49FE54F852DC81C19EB833DCB827C4FFEA4203C1539FB6057006EFC | 497 | 4733535A726EB6AB936498812D50200AB915F8CAEA47C036F1542AFBE2E53067 |
| 498 | 8C9FAAF9E4676EA22CAC6907105292F59169E0690CAAC7C5D71E6CA25220BB09 | 498 | 6366E355003FE82F28A456E79E921853B15964E911D08176F607E695FCF541A7 |
| 499 | 6B815EE86C14BB4FC2EB5F684E96A5A23813F0979D07990723861939EA40A6A8 | 499 | C20A3CE2A2835093F8CD0FDE40DBF10B8E96D06EFBD2D7CABAF21D411B105044 |
| 500 | B6B360F5DB0062A426036CEF16485B4BBB0A18056E8BEA923884EB5876F82A90 | 500 | 431A1E87CF0CCEB10D9A9D09E84307DD362E885160EA24DC0A06D0308347E3FD |
| 501 | F9B175F1F9C0DEAC73DBF7A8B8B735C271CCB85181FA5007706E31D349571B9B | 501 | E8FD32456AD30269D2DC5D0E34379382B637493ECF9F143F44022A1B045BB3F3 |
| 502 | C876251A0DEB34DB2715CD37B5F38CE8D5AF46C338C98B70FF11535D355ACFC7 | 502 | 6E99BF86A1AD87FEF11786DCD4443459C7F5BB2B4F3914E162DA2FD998E46067 |
| 503 | 9107738B8907A52BEEE7EF642593D486EE15CEA7D17328F58D2C453FFC9D5422 | 503 | 07E10461AF5E065685A43BA4F1A843001D412550BC868DE93A91740B62F08026 |
| 504 | 35084974E464ADD547B26F3FA94988DF0B1F36ECD048D41C8459A258698DA53A | 504 | 3B37B93D95448DBAEFF1089726A975FCB9BD5375457173AD766C8F99DCC54952 |
| 505 | B71546604E7EBACAD7A9A949451A5841B3CBFC65E818B6923003CC9CB2D0EE17 | 505 | 4AC00377464E80A168669A183FD69A2E31BC22989E4F34F4ACF043424598BBA5 |
| 506 | 54DB8F558DA7CC3E5678CA5F2317A0713B8CA73D4B4F555BF5CB00410B7CAC34 | 506 | 63A6EE2FF886BB0DD160FD91860CAC052E47A55BD334A5F97F8DE2ED3675D3FA |
| 507 | C862B645F311E814A23F60810162C6E7FCC2830ABE3BEF1F60975F1ADEE9174A | 507 | B838CA438EBA043D638793F04477EA8201C718124597CF1693BB99A627AFAB1D |
| 508 | 82E67ADFEAF665F4DEB6EFA2A12F2A44AFF5D5B73FE036AF2BDC271E44E5C119 | 508 | 5345D2F17CC96A4387BD5822186B3E488DCB0A1531F931424D9E75D19685CD15 |
| 509 | F3165F00248C3CFBE900A4D925B9E99BD7B72549DA2E26BDDAA760936F7D056E | 509 | 09A5014BE0FD6CDE63FF735D1BA182D015877DF843368FD7A8AC312D53A951B5 |
| 510 | 16214EFC4BF143588FDC9195389359F05FB38B07FA192895B5482BC16DA48FB2 | 510 | FA02B36337098B97B1B4FA84133BD030F7E8647B8D32697DF9E9B15D08B43187 |
| 511 | 675F45BE53D1FD413192E344AE1B8D4D34B6DE4BD2C5F0CCAC25D8C416E82FF4 | 511 | BBF609E074F0DA9CDEE2A959D46410B33E1C91A3BD703BE0B7E9698CF942BD9A |
| 512 | 8DD67C02CE58BE6C1411750195A6FC57186BA2A501D9E94E55B99435FF0B80A9 | 512 | 564C9B7F806FF1ECF1FF29C95F8733AE1BC08A607108A09E3B4B2919523164CF |
| 513 | 468ABE2014EB30AADC5512550BCC194B2654CF439E669779FFA2D0D956B02311 | 513 | ACB794B5D3438B55F72700257BC5BC00735E5BDE3DF55202841314593C815857 |
| 514 | 9A7C15A34D3EB890D1971307E85CF10C316A560454ABEFE5B9E4BF9E12D2C18B | 514 | 428574BBD6DF0DF89D69B7246F212E81F88320B21D4E9B1BFE85329AA1794FE9 |
| 515 | D42ABCC8A9E848028BE311B0315E3EF2DA66F87C0204D62172F3DA5392489B4D | 515 | C8F7FA2B8A3668A2E4129350B330074831072AF3E48E672AF033D89C1C56A830 |
| 516 | 6DE4005E73F3C7CA198F6EAF1359C7B41E0A9B6A1D4E5BA635A376157910521D | 516 | 5D358A92F340D0D5AF454DF9D8731215747F30990B10C18BAD25DBA0883C080D |
| 517 | 516AD8BF7275725C81D75D553D6C45807422C979E85896967933C80B693FAFDD | 517 | 8098362B9A9A0ADD65EAEFEE0DA098BDD1D351B262F18562164300DA97EC921B |
| 518 | 7A0BF5CFD1CB0C19CB60517BC725F5B5AE16D38E9878CC4B80B5CA95C942E6FC | 518 | E290B5B3C68B8695C4BFA1081CCC558E17D64A42B8769F217747D850813D66BF |
| 519 | 2DABE3617E5CF76CC6CD83F257E7B7B746D164A26B451D400C8177946FA447EE | 519 | 5A399CD0E8B145D7C09527F6F9CEE142BD62B7F050C4B34D2001BA539633D9AC |
| 520 | 6A68C961E78DFBC76DF68AEBD9E1061DC729088E4C2FE68DB331A031B42BFB26 | 520 | E02A1A4FE6225931E56289151500BDAB61556F7D599C8EC2FCC90B4DA68AF3AC |
| 521 | 14045F941615EA0D1ADB1F7672FF6726AC59AF4835115B14ADB0C6422BAE128B | 521 | 370EC9FB3ED88649561481D299B57B7800CC76B3E8094F6C46832625AFF88D98 |
| 522 | 956F8AA6F35773757D13EF82C640F1D79E7904AE638958A63F8D4B48534B6758 | 522 | 99F49FD3A089606A43DB6FB466118E44BC51397CA38E6251E6C8B100AF453754 |
| 523 | EE840A51857C852EB04680C6B5789D0EF46178A02801CDE990D2C1689B7FCA63 | 523 | 6922D3E1F1F197DABF2B07B98B77B9451F62F4CC6543B4C27ACEECBC0640930F |
| 524 | D3F3953340DBFDCA3FEDE5F026F0C15EB43848B78A6C2D6C01231FDDDC0A67CF | 524 | 30336891857317B46FC98DD069AED6944CD0B527C961BDA2232ED479D72C7C54 |
| 525 | AF1C673B95370C4FB888B551BC360762DB048D91F614A764E9EB618111122664 | 525 | C44D4EF3AD0B1F9F96A9F5A1D35D91EE77BAE7C77326BD0DDBD396BC3C78FAF5 |
| 526 | C33BDDA6C8996B8B85A3583C5661B5B66B8222B46325F6244E0323B3B3EEE469 | 526 | DFEEEB59B05F0B1FE8E1347F26D09DC5534B3F1BB47B897154515E893795D4A9 |
| 527 | 433F262863585D54DF1F11AEF52C2114CB0AFCDCD2AF7C6C7ED155B1F58B84C1 | 527 | 897D7BCEA2D54AB60EB39F67399FF8777FACC4B706FC2A6137DA53A343BDC1DD |
| 528 | AB11520AB2D62C3DECDD638D83E42195B8315BCB37C1A7A0BE6BA1274AC9C4FB | 528 | C0EBF311507475F6D00FD877EA29C8DAC798BFB33D9B1506AD583A2C508D231F |
| 529 | FB9647197DED96DD50FBDFE9E46050400B78F04744E687ED5F51DCD04067DACB | 529 | 0EDF3ACBD0B48DCD12F4789AFE4B2B18390ACACB86E1333AC38DA0C1D0158061 |
| 530 | E4299E7EEC824DEBE6D165C463B920A4BBD08EC3554F4CEE40F044529AA8F059 | 530 | 9CDEDB47CBC1CD43D191C47DC214C61EF98CD5065F63D203696B384EF1FDE092 |
| 531 | 81AEC16191D42BCE549DC373DC8252D8AB83C4512BCB4FDF83603D629B26E302 | 531 | 78F5DECDA175900094D90AAE4CC26A7AE779B4393DC49DBCAFAA7F319421F54F |
| 532 | A49E90B234503D5622FFB038E8EA2CE5794FA2E97E80FE5231ECE372A35DB9B5 | 532 | 7A3AFC61D68CC5F74668C7028666B95DC14E522F11200155893EDDAD0B06F60F |
| 533 | D7D86AC8B690635AC11789940493C7D37934E2FDF8F56433824C7F2AAFA357D4 | 533 | 33D2CDC6F75FF167606FBE426B627FB8661AB7B9ED104AB11ECAA5EED3717D5A |
| 534 | 6952E877C901139D1F68F379DE71A51C0F7EAA3272A412744C52F9782DAFA97B | 534 | B491E48C5A6E778274EB5B854135DF8FF07CFE9795CC8C69079CACA09FFE5C08 |
| 535 | 8A753144988536ADAE7964B6E7D63191C1C521DCB90656DD8AF540C67D30B644 | 535 | FC73A41C878B439E706F6C33093D4AE7E13B17EF32E115B684E9A27DB490CC35 |
| 536 | 048B0CC17F54090F1CAE35B59F190BDC2A473BA8BBAC2D8E4004E6BFB02FE922 | 536 | DBCA03AFF0ACA4825176AB8071299BFE1F1FBB225E6915F0D52C6A5AEBD603D2 |
| 537 | 849F6DE710ABDE45BF0CBCC91EA5FE97806C059617D5EB64FBBEDBC570A39F5C | 537 | 151C5441BEA1EE87D9F4010C4642CF89B2776351C30153B226A1A5C4654BB683 |
| 538 | DB4C9E35F3C57E6693196066843B53DF3633C3E44F4A3857DEE327121DFB0BF6 | 538 | 4AA2107029F120A491BD4103D186F800B9B785C953150094080848B6AF8969F6 |
| 539 | 3CFA4F3FD2EE79DE54ED1E66168B6718F0DB0EAE4B0387AC2D680E60BAE49478 | 539 | 2FE34B3631F4E50DC0EA5FE4C0826CEDA30D3F3E2983FCEC4EC872420A6ED8AF |
| 540 | 0D89683C04CF89CB5B22CA2A5B4F56827388AEC1263EC0E0918E12E26834FF3D | 540 | EC8B02888837927D0A7574031B2853921132DE3C564F24E909FBC63690B02033 |
| 541 | E53BF07C6670109AC0236F4676C014782B9AB4C139499A0E72A8FF6101A39F5B | 541 | 0D3069D8DDA63DE8DA7667D07810FDD5D4C877DDC1C180F667D6361B77E666D0 |
| 542 | 99B33D6EF20B9A959159EC1BDFE1AAC8846352DE5B3B29137A34E8ACD5883FD9 | 542 | 29AC20B15BDDE9E42ACA7802A4B74D31E91CE3FCF105A7F65B543172C8DF6248 |
| 543 | 56F140D6BF3A66A4E2B547CF555DBAA3C8A04E2616873C76AD8E0257C8224EA9 | 543 | 256541684153DA1EC7550E86B55DA0E87B70DF90D88358C9AC8FECA82AABCB39 |
| 544 | 5EF69C5EE5BBA0D9DAA564EE3648A3F19AC70652EF6B2529D87E11FF3102A846 | 544 | 552DC96D1EC3310264EA111713839C45F469D16CE5510807897D58C3B2154429 |
| 545 | 4AB88679CF80547A3D94A2EFFAC31005CAB09BEF2B9D20B5AEB4FA1882126B62 | 545 | A2A01B2F8956B7FABF2764E131A7A819772BE63983E017737286CF2CA8C42A90 |
| 546 | B7C151CE7A504381B3E24EE88FC789B0ED87A13A3A04AB0742940DEEB24B5D3D | 546 | 2ACFAA2AADA5EE0B125415518D1F19BAE94E3EF1419A2CF9A954C37E078CE895 |
| 547 | 75FDCDA9B817FA318C932E9397E4E4011714EA81D69717F21470ABA8BA20DDDD | 547 | C582992082BFF6E7A6C93C322A76A7AB7D96532B0D91603461C0903C9464D2F5 |
| 548 | A9ECF00C6804214BC82B20C91A445C6B0B5158F57315CF1939539F6A2FFEF426 | 548 | 7F93383EB60120E8246DE8FB13A8C5253591A4FEA03E20BCDB972851572174F6 |
| 549 | E493FCF410E5D576AF15B178E77E65B79328A79ECC7A681C6C8585EFCE1DC079 | 549 | DEC5F8D863641E7868FFA14D5087F98A13B7142769E04447FD93EC724D3B34CF |
| 550 | C0F140D40EC95B468564DE0BAFA0EB3E70BE89797146F56B7BE9A4B7BF3E5B8F | 550 | 39CE00821D0E9FA5DC4255AF09F985174AE10C86FB18BE347A0E228723D00B0B |
| 551 | BCECD50A1793FCE65EBA1E335247E3964BE095810964326D580CF2F26133A799 | 551 | 968644728D65B7F3B726B287DA8419536F7BD24E7F64BA8FFCF260373183DFEF |
| 552 | 1A078D83BD6E550812CC56CF295A1E6545B339440A1D3392866B9E4500428130 | 552 | 36FD6696ED0DA7F01D48551C51B07276C39A3F4E2771E36DCE6A01EBA288868C |
| 553 | E42B64F1E4824FB0D785F787C7A0515DD39678008950E25564E3E148190F8C30 | 553 | 8FD6E7CFB42318DF9350BF110A57BC4E3DAA29D922A39EFAF2A307912B1123EB |
| 554 | 922D719A29798C3C120EEDD5BC0F4C321F82C08761E68D8400993655CEB31839 | 554 | 4E0AC2F8006FCDE4D27E66E0494E52938403C0D06E7898DE0C9A550081FAE7A1 |
| 555 | A98154FE243670B464AC40BAD7F18893F517A09D7EB5CB30CAD9ADF62DF7D9DA | 555 | 0998F8AC69B3FBD7903293C3DF14DD1FBEEDCC3A3ACA963137A768025CE3FB50 |
| 556 | 5F60EC004A9B9A49DD43005B66E05EDEDBCD49B94DCA88E91F6D359ECF19FC2D | 556 | 939B0571F1A89237FABD6ED4AEC9D14428FC1C77FA5405B8FD3DFA363072C841 |
| 557 | 660EEDB26CD608D0B2E0867633CF353F16804E2E8155C9DF6B6FEEEB2CE1FEF0 | 557 | D0A118CCE8484C9BE169BF1CA9BB822F5248AD79D18821236DCF4B4615E3CC9F |
| 558 | 9492C875FDDA09F81D8266766E6CE28199D1EA777FF67F71F3F7BEB60A2DEF9E | 558 | FA968FAC447C718C3178C0EB5C7560B1E858ABDB3E2F0476D10CF52DF8CF62B0 |
| 559 | 68B059FB0135812071176E44A70C38A3FA80648225631B16B17D683343313F52 | 559 | 7B6FF34D91D63901C1B35D58585449C903198846DB9DB58787F2AAFF1E392807 |
| 560 | 810F6E7D60BB7C895317C6C0A93289B1A29E6D221E55BE350547FD775CE2F77F | 560 | F0FABADA9576D36CCFEC151C64CBA1E91CDDC9B96D59A9743072C8D45C2CCB2F |
| 561 | 94ACA7430811E849E86F87C4913D04E15B704A8059C9F4E9B15EB1F32F081F19 | 561 | 14BE3125DE785EF47E874C4BAAA3A487DF75B8C6F680664176C9097B1C3176DD |
| 562 | 49255ABA9890AE20DEF0BCEB216B5372DE32AED9577FFD9E06 | 562 | DBAD73CC453120BE2B47F5247C215E790B79BACA9C817CCE7F8DA2D8F791F5E3 |
| 563 | C1B9F32A34AE5B452CCD75FC55C1785AB8AB43029D6663ED0A6855FCC56B5443 | ||
| 564 | 2379BDA7EF132F | ||
| 563 | 0000000000000000000000000000000000000000000000000000000000000000 | 565 | 0000000000000000000000000000000000000000000000000000000000000000 |
| 564 | 0000000000000000000000000000000000000000000000000000000000000000 | 566 | 0000000000000000000000000000000000000000000000000000000000000000 |
| 565 | 0000000000000000000000000000000000000000000000000000000000000000 | 567 | 0000000000000000000000000000000000000000000000000000000000000000 |
| @@ -2031,271 +2033,273 @@ A208ED52A9684A802003AAD6D9FCD5A3CF635FCC938931CB94C751212CCCDA6E | |||
| 2031 | 6EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B | 2033 | 6EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B |
| 2032 | 2E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3 | 2034 | 2E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3 |
| 2033 | 42EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189 | 2035 | 42EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189 |
| 2034 | 8EAEDFDBC8802E6C8D2F78857CE66105FEFAA26AA62235515B9DF83D86CA7F06 | 2036 | 98B28CF2783D9BCBCF089F9E4BA80AE4FE0C21376BC144EB419F3C346A540126 |
| 2035 | 4887E80BC9C14A4C5974463498998052A711AF175999917AB6530A5981D5FC02 | 2037 | 8DF517CB30F5C2CE09D7A269D6A02229EF415D7D9412198AABE493F3B7344688 |
| 2036 | F6F5BDAFD469D43E2E2134C6BFF0B68ED9CABD7A14B0F0C2427F14682AD3E1E5 | 2038 | 72145D60CD95F113A968F7C0C8FD1A4550EEB73BFB9231FE6C942BF859FDD93A |
| 2037 | EC92396EF1DF4FC20F1B574F1FDF7BE782DAEB1490C2182F017E633F47EE6B56 | 2039 | E4D428B7E16F01633448536CBDED367E9F725417992A4C7297DF9048760E2E64 |
| 2038 | 971A2837D4C9E8C78E5B28D34BA512FBD85CC07117D7A261904D6E2C57413264 | 2040 | FAD313DF07F86486996EC840E235EB5B661F915092A6A80D0CC932FC4FFBC7C1 |
| 2039 | DC745E50EACD437C729BCA09AA240BF7F99B11DABC36B90AD717BED1439D1649 | 2041 | B1B9A1E7E71936CAE5B0729BF1D8B8BF42D0520FB7591D868D18DC4692B21881 |
| 2040 | A8F219ABF3C3E8275B4C41DD3251907E90601B7625C72E4EC7BB58EE544E09CC | 2042 | AB73A3FFB3A0C6DAC4C9C6757EA9F17955336AA938DF2380AF0EEBD694CFE55A |
| 2041 | D86769AE126E8325A6997F7163187B190B0C73F76783EE86095540C40C86CDBE | 2043 | D8BE01F9991D94DE9980879E94FB1959CA21EA09BFF8D335D24C6B1DBEA913E2 |
| 2042 | B2ED24860D2224024AA004929555C0C4EA645EFEE62B7A20DFFAB78A256704E4 | 2044 | 9757D5110C7018A959C9C20873440610C113BCF278CF74EE3EB1B2BEA6BCA663 |
| 2043 | 0BE2A5E2DFD2086BB24376D399A14888757AACCCAAB87C123445F38C7B2D6B75 | 2045 | C451D157CF420C4CDCD949309FD52FDF4189DA36ECC22CEEC43A43337F6BB755 |
| 2044 | 3E7EB1D517A4B4C8770251666F76C1F1C79DE62671BD3D0CAD2C1434D9E0E931 | 2046 | BF613B711D1970B4F5D1C120064169F70BCA3A784B06B2542EFFB32FB5A0A534 |
| 2045 | 883723EB811D9906BE8305278E586493C90CEAA20307064A29F20BB204E5CEA8 | 2047 | 4C560825DD4CE51941AC685E0CC87AF48AACDF6CFB9720CAB78588A05910431F |
| 2046 | FE94F52A5DE7C1F3F7403F642F29E81F2B38760DB0F0DFE9775FDFE49C685F69 | 2048 | 096A2CE6059506C9496EBCF1737F801C66E96CB8093C650A49DC7D1AC6B81FFB |
| 2047 | 360C20D3ACAFD0BF01C813DEF6C95F16BFB43923A78B5B20112BBA77DCFB3F81 | 2049 | C20DC5BA3AC25C709A2FB2C848F203CC862BFECF195115FDB3BE0EB82FA85B0B |
| 2048 | 7DE00A59336368DE9737943A9B33160D3FA500B5C74D36BDACC54A5D6862056E | 2050 | 6E83A4093122A7F459AA330606E6B6CF32C5C46656DA827AD81A86D162C7EE6C |
| 2049 | B02CD766308328E2C8C7FC41A0E9B21C75C08219195CD22FC5D3A99AC9FB25C7 | 2051 | 0A3C0D61FACEACA53E633519D7FA77DA807D0035C88C86FAE3167C8BDCF24481 |
| 2050 | 1D72A08B5B86B4866CBA3CC965743CFDB0FBD2DC51EB24BA7BC9E6C99A03259E | 2052 | 0387070337F0388FDDB757C2A5CFAD9C2883F7F2FBB71CCD3043B35684F4ACF9 |
| 2051 | B78BFBAE4DA928215E1B969FD6B00E3C44393AE4C0F3A18E380A55BB8EAD5713 | 2053 | BC0A50F9C33ECD20084082D97A71E9680E90A560B6C1760408F7CC1C18347AD2 |
| 2052 | 44D479967A07C711E8DB24C3E01EC9F0B6C2F936DBFB3F3B5FBF0850C55B9A38 | 2054 | 391C7D660D50126E5B26EB49384B95BAF472769097F8FD4566D03C776F18AC7C |
| 2053 | 2C546BED80AFE9B30E3AA308FD575FBF349F4C556A1F5227495EB5A313CC6AAA | 2055 | C68934D967A97840034FE6966A4C44384283D25549B89163A50C27CA0E9D130F |
| 2054 | BA779533C79CC35EE45C86333E307864EDD1BB5D45BC3058BA88A351FD39312B | 2056 | E01B62AB10A8461CAF49567BF6C5A37442AF6EFAFDF352B5BDCE9301D1C0EEA4 |
| 2055 | B031A56703E91714EEE44056F6B826090B63CD30144C95B88A3E5B250A2B2AF8 | 2057 | 3CCBCF70A8AF88C6C8A2EFA29541ACA6E8DA7254E4FA8B1768BED363E885C639 |
| 2056 | 9254E991853F7C8165185BAEBA1F088C9AE10B16B618F8E32352DEB52967E3A9 | 2058 | 256E15CE6AB3F8D5F5F19828041A25E0B5F21AE224C8CB7F51333ACFE8C820CF |
| 2057 | A39E6DF485104508B77B3569AF0FF6AC768EAB7432BCD14F18B0A6B2D7AF694D | 2059 | 67ECD12BCE156DEB74737FF42B3A2684679EA97ACE6E24A1A9ECD7DAC0F00248 |
| 2058 | 958E51BF543A3A337FE6CA854586F2FD61C5835A939AD374CB05BC334CD893C8 | 2060 | BE2A74F13F7808F8B6D001882951DBA633E4D21C47E326270AD50E91F1717F28 |
| 2059 | 031FE1D92920DB07488228C03FDEF985574836565885E5023CEFE96AD27D2F7F | 2061 | 1A183A3F7603CE9F9DD8D798C5CF6D94144F1E2CB378726523E7B2080B753CFE |
| 2060 | 468DE1FE34C26216CF4219288A88DB2512CC9A79BBC672D38A430B643B64D09A | 2062 | D7D53773219CB1EFE995DC623A1EFFE70215F3DC17CC0695DBBAD0DEF043D57E |
| 2061 | C2A82DD14F6AC4085C2B2D950839F1B3DBE701AD3F4488ADFC4953056AE03B04 | 2063 | 226BE50D8F31C5DB8401636BA1FFAE520EBCF2AC99C4390E4D878028DF493B45 |
| 2062 | 0CAB248A3697303B74171D342AC88F6E436A28970752BBDDA6A49CA78DFC76EB | 2064 | 93CC8971CBED42848099D1CAF836A594802973FCA3BC632CF8DFEDAACD30F3B8 |
| 2063 | 8A2EAF1E6E663DE24E221125555B79CFD316BD450196DFE80AFC35F9D0EFD36E | 2065 | 23933ACB3833F98296207ECC26336902EE4E61AC47F838CCA4BA4343F37337FF |
| 2064 | FA0D1050E4CE2DF26B9605FB8950E2BBE6C873F1621DDD52FC977D9A7E5E5DCB | 2066 | BC2F5D2C17B7496D794BDC9FCADF1F68710EF935BEBCA4F766D1C463D36BA87A |
| 2065 | 3C7200B775513A763647F6DF8C6EBCB415242654867A519A57880271AB25A9C8 | 2067 | 77634687592D7570EFD3218A155AF4F799D425EBAECDD6D53FF4BAE6AC83413B |
| 2066 | 9255B10E0D0FEF324CC97D1BE4278C69A7ED352FFDD4B83FA569CDF24E8698E3 | 2068 | 819D0EBC3BE6F5B0503D39629FADA6A2210B7EED0D23EE9536948C36D1BCE955 |
| 2067 | 04CAB5E8F66EB18BACADCB452E7E2D93FAA3D7DED9E392E7A82B2E343F61CC6C | 2069 | 978E6F5A5D5150913C1C9675FB4CC807136796691E186405E6188F536730D89F |
| 2068 | D8943214CB064C361930803CF4C470925857C83D9FA4871854E84980762F8B11 | 2070 | 87987272EFE130166003DB3A723063C331688174788EB915C09C6D73037E0721 |
| 2069 | CAC395DC7C24DA3D94C70903CF0B406F67D71E37835A40A676CEE1780C955E7E | 2071 | B43F4365D9974F1786CDCA4DE9F2EF193DD46149B5A24098FD0106045E309809 |
| 2070 | 2699F15A82AF0138A106E0BB7C179F1480678F90D7794777652300C073D8127C | 2072 | C88067CB5C35DB60F64DFFDF774BB30035F9C4509534F34A07E50A04BFAF6747 |
| 2071 | 9C0F6C08AF449C339C324B286BCF56CA6CB069D351AAEE86C04BBF3BFED533B5 | 2073 | 31D3A2A56AB7F755BDF243345811E8AAB524A920B0F17EE914D3015EFBDD74A9 |
| 2072 | 4993C9EDAE588F9122BBF1D830E1B024235EBF5842FCD14DA0E759453A0A87D0 | 2074 | 868823DB2338532AA4094051E3CD43B29B18EB3B9AAD4C4EF5D755AA3D323D11 |
| 2073 | 569C89320936EF3A9A93865600133C2800BD77A49A7CB1EA1ABC17A89AEA5383 | 2075 | 9440B1A2C01A0375BCF13162A3962224F04A28FC15D5000B796E39F80016F858 |
| 2074 | 50740DB2DBA5A00ABB556FDD5181B8086CC1683703829BD9995E9B9928ED6CE6 | 2076 | 989E64B8B9B43289FDF3CCE2D020AD995A3D7736C4A7BCCD31440EAC5518B970 |
| 2075 | 4ADACDFB73DE333CA7B8F7DB17EB25C30846D9DF5110FBF2A5B004E80486B5F0 | 2077 | 043E2AF5D3B5618FD9D5C5716403B43D2773D94CEE751CB545AE7C8AF1431FF1 |
| 2076 | F0A5E9EE3B37FDF87E52A65CA61DAF5774521BE090875605FC33445A8CB47470 | 2078 | C9C8B77065FC01530E2BDCB91308510BFFB756432885FFE7E51B8F5D078D2ED1 |
| 2077 | 5C088A7AAED828BD3D93BE80F93CCBB71B702DA053B9CF4C5D949678B54E7D7B | 2079 | 1D894839E7AAD86FC90850472B81CE2B9F67BCF8AF334B1CCD1E4C3AAB470867 |
| 2078 | 8B4D28E3283310890884A4DEE9BA606770C8FC52FAA87A1846E402F5110F79CF | 2080 | 591E32CC9EDDFE53FACDC1F10AB7D5200B79C5F52D0278D47E6A5D1487018879 |
| 2079 | 685AD45742AA00FA8304E668BB4B3A78BA2BE8717306419F4EE1EC696B4C8CD9 | 2081 | 528FA32BE86D7CA2C7D74A4C83DC5403EE7B5ECD0265AC43381C55C9A2A7D0B0 |
| 2080 | 0877326DE7DCCE619D86F9A75C194CD7406A9B1B9C962A381DA83707264F879F | 2082 | 100D59724CEBF79065CF467722D098AEEA112DE97D3A63B5DA728AD9649EEE38 |
| 2081 | FF16DBFB7B15D38347423C4D14CB8B26007BF591AC6A0FA815852433CE4AC18A | 2083 | 0FC7E3C2DF87FC75FC71FE7A1FB29CE0412A292E7D0AA49C6EB3169726CA4D35 |
| 2082 | 4FD19818F04737C71BBF48C925699AFCFDD25D92010069D2568E655B43A2A88E | 2084 | 4B346F90F80759A98A4FACCD4BD3443C5D495209D5B8371CD9F609B2F31D0089 |
| 2083 | 3F734C472714E5FC7CAD6189611A10FC281118DA6D78743B9F5CA56301888AB4 | 2085 | 53BE78E3031A481353B21AC539D1D0DB15D125C5A215B85C967330877CCB8E4E |
| 2084 | 1B4099F9593D046157054869A6267C12474BABDAF528DD0E0F2452C38052787C | 2086 | FFA3B31297E1FF68B1F037146EE0CF72442E5D97231D60A780EFAEBD557BDF25 |
| 2085 | 12B04D3F2A46888BBA6ED82374485BDFF8B887B8238105D63E912B01D25FB099 | 2087 | 2841E68C8D9DD235D19D7949A847BA813AFDC78C45A3ADC0C594DDE1502632AC |
| 2086 | 834F60570D0E50CFF2ABC21162EAED3B6D1E8F3575E285EB59A3CFE0D4291255 | 2088 | C9DDF7F22C37569C4B6721F5D4E0DC02AD038A293C751E4270D83CCE38E33C0D |
| 2087 | 40EFDDD282C4A213FD3313C21DC6D90AD561435DF54236CA665EE4B45D7F57C8 | 2089 | 935A016C2E48A3B0B302EBC153592938C504B6E2F534DF5905DF530889A46DE2 |
| 2088 | C43B9AFF7AB6E35C1D3BF42CC45DAD238B10F782559007BBA003B508CB25C41F | 2090 | EF823D01C77EC705A38576040991BE498E2ABB8AF0EDF14F762E43FAD1F77BFA |
| 2089 | 8CA0B35779C6B5EA62D3F3D4543E12863DCC7A41432DF12464F119E9584C8BFD | 2091 | 526507E86F108E6BC293E737B1CEF52CE5F4601AB761B18761351C8865F6C1D4 |
| 2090 | FD46563D85185C21A221D398AC93B79C1206975DAB906418E4F27DB339B6B50E | 2092 | 662420E1E761ECD0D3ADD8DDA3B4B8DFB78BC27F33BFE6CC5A2A60B31CEB007E |
| 2091 | BE1CB70F5ADACA9635B61CCC4DC831CC3EF73AB139061D725190EA2E0C8FD7C6 | 2093 | 9B6D571226EFD67FAD3EABFFEE981225FEDE1627645BB5E881907B0F30E66158 |
| 2092 | 8D805D2D19A2F54769D68ACE92B6DBF22C0A2EDB9B45C604E724FABE2762AA93 | 2094 | 251F0FFE3FA1C010C937B6C8DC8C4A8649156947B204563B30167D4D480EA6D5 |
| 2093 | 2F30FE0FF0FFA874FD655D416F254BC4EE83EFC2489DDA222C669FDDDC14170E | 2095 | E74571126EC1F19961983A135064DE001B9F0F2FD8D63D1D9A9992964239056F |
| 2094 | 607B85563BECB3D0D397CDF9CFD6E1D7FF5116334317A188FB8537B38B328CDE | 2096 | 1983B84C152AAEC909E8B27FA29D309EC0FAC516F297438DF16F5DC70E3CCFA2 |
| 2095 | 2D05354E9774AAA3BD0E21053683879F89324F1714B42DF0A6E9D902BA5373E3 | 2097 | CA7ACC09A83BC9B7912CDD58E0B367BF41F581162C100F3633A8DF70BFA80565 |
| 2096 | 2A6E95367DD0CFCEC5F1576631969BC441CA14E5E927FE46CB26601D492B8A9E | 2098 | 6EAA455575E8433805C923ACCD1DA4FD9A08B5A344329C61F897749DBAC3644E |
| 2097 | D5FB32EC9BECA60CA49A241C5F432B2E71B4EC4AE2E4CAF8A488CE89639F2008 | 2099 | F76DEA49E774150D58B868B341B40EF1ED951DD2E8EFB95C2B71C0F9FE556CAC |
| 2098 | 04762E7F895F5865655E81AEEF5B4CB02E47ABEA8E35F95B289B5BF52D760539 | 2100 | AA0B805105F924AD53DF8A8792293A7C6EC634BBF784534EC60AFDDDE7A5ECFD |
| 2099 | 53C5F2950A886B43E4D6AF59199A6C8CDAA2BB2767D5ABDEFFCD40EEFA0B1D02 | 2101 | 7DD6399B84BED1B6603DB2807E0021CBEA0C2AB014EBDC670D082AFAB26B3151 |
| 2100 | ED629131B0FFBD54693A602AC1BD15745E2C80C4A9DB293EA112393CC16A3904 | 2102 | 101B9111E538CC9508786CD5B4322F6D8BE43455BC8D585663C2494F2A941AF9 |
| 2101 | A26BA8FFD378D0C13D656ECEEBCCDB6F177777CB24359791F987BBC6A8F9F33F | 2103 | 5DF7A512F936105B6C0B71E4A29C189CB175F1B4ADCFEF1EE300551A573ECDEE |
| 2102 | 54919747ABC99A0C994F65151C777472AF32480E21399F6FF16BAB2B1501FE31 | 2104 | BCD73740A44D6FCA66E22AF39A236E27C4BACDB41D616039AB10B308C0671129 |
| 2103 | 9D991F02F20235D5117B1255622EDECC52FB0A752C9DC5CF7DB8B8213E0386E1 | 2105 | 4DF112BCC3F0709D96E00C54FC5D335632C107058AAD26366DE0A1E8D2448845 |
| 2104 | 4CE8CA8116B3326DE080035488E7E68F52DB93B456B7DBE5CE4A10298083B1DA | 2106 | 99DB48A0F053672ACF7208F8EC728FAD0950599396813185862034E128C29EB2 |
| 2105 | 8C1C682D701299958D772E7ADD0E94944F0C4CD12A23DE08FAC08469CDA4B7FA | 2107 | 5D0EA2C06F8B067F2199455E44998E7B523FF19A1F7CDAB6BA06E166E471090C |
| 2106 | 7E7C86A82C998975B0CF64527869AA22388B3338C0DB25B26B3C5BB43DF9AB3A | 2108 | C3C7C2005CC0757F5A07CB3B1C6D050D1BDB00BE0DCD9EBB1A7CFF6E4BCF162E |
| 2107 | 7A356DAA33B0B36B4C39330635FE1D8BD33A00208B49F15CE341A54C5698F447 | 2109 | FC95B6895F5E6E90C10D6D8F17CAC2B271105BAB3EA0605C8561E3DDD996DBA3 |
| 2108 | 43638F0B8EEEC6BA29DE5F016365CD09342039C6C30D2C25E38BF1D6DBB78580 | 2110 | 5DCF762D40B38DFA30086967C407F20618613CC7E2A854FF0F25CEED4DAA58FD |
| 2109 | F0BF68CDFBD27D25AA0D9B60D91AE236157C9C5293046695E6C6C74388CB4E69 | 2111 | 4EF8C4DA724D2B21D0DBE3F53D2D9D26FD15DAFAF81DFB2809B05BBE5B2A79B6 |
| 2110 | 43B316C090C3641E1B846FAC1579770B4A2D0F55847CA1162DEDFD59D544E402 | 2112 | 6BE13F46F5A94F43763AAF260231DD3C2774A165FE4D2E7C8788F23609E36249 |
| 2111 | 0D472889C3B8177FC1FC57A1D56894750787A6388A9F53004575B85437674062 | 2113 | 622A714A19B91ECEAC16D64CF55F761A801815A384506B6A3342EADB2671B107 |
| 2112 | E93B2517E379DFD6F735B363D5588591A1D5C384193B6FC50CF4BFF941307783 | 2114 | 7E2099F4480AB218B8FE2CA0F6696851F6431DC6758E7C4E551ED27BAF6E28DB |
| 2113 | 3D23C679FB825C99E536B1D0638AE039CD1B38D3FDD72FF18A3E686C32576328 | 2115 | 83AD73C80504F0ABE98095A525EFF2667E1F23380D5E9B5406830B8EE04A82D6 |
| 2114 | F16A3090AA2D5527009F821A5F6DAEC910982407451BC6442762B8486C3F923C | 2116 | 0C016ECA5D0E0D22253CD23E5D4F758A919833AD851EAE0AB007BB05E6234D86 |
| 2115 | 4F2EA39609025D5BC6345EB42A74342304819397459C7C576AA92ECEB4584D58 | 2117 | FB4070BC98506C718BD3FDEB8F98CDEC8F628F1BEF4727630C09987EE93A05A3 |
| 2116 | BF275974AF38FD6CE06A25EC5659D9BE7F616602D48CD61A3F9303500D1A1DA1 | 2118 | E27FDD103ED344DCF579D4E47AA29EAC5E0415C64319AB8121EE933F2DEF6C65 |
| 2117 | E6D0EAD6141B3E5209E6728DC6436AC89E27D591C4A1057467C5EE398CFFBDC5 | 2119 | 92D3067DAC8D228F566265AE3F51C5B5B63847066C8E15766E9C17212D17BFF3 |
| 2118 | E9E9DBE6649F926671D15AC22E4DA06D2E882BB371682172D21F108D62BABC36 | 2120 | 3EDE7E9380DC748E30D7A441020650E6244E0A0F10B9CCB08D9D184F31557E86 |
| 2119 | 28F0A65F816E0F389C27419EFA98B070B4F761AF9E8277D1AAA42D8CA68B51CA | 2121 | 728D0D17E69D02F9139F114BE9365B5789ECD22D525B0B3F4F77BAE59FD5EEB3 |
| 2120 | 21C09C83AD39A9B94EB527F4E114EEAD8DFA8996EA536E0FB71EFCAB6EBD5EA0 | 2122 | 9D04F26B3EEE5107BE27FF59AE320732610814C77CC42C6A2CFBBDAC95B1692E |
| 2121 | 1C3840716B944F6DD6B7BA486F188202D879A07242550A1487F96E0704EBA09E | 2123 | CB3AB1E0663590BD79F72322ED01417F7839CDCDD86E16A3FF7486D1BBBFBEA7 |
| 2122 | BF6EBCA8AEEFE48EB5CE14CB3E3D7823DDE0EE6700D5E5D60D76A677FE18AD56 | 2124 | CC9A15F1D85E99982E657D5E6CCEC362878C63C70776B7F3129A81E71FAC756C |
| 2123 | 6752653E7333CC4C21229079F40F4DCC756362B8BBF4AC77C527E285956B1543 | 2125 | 3B9D5BC099F11271EE45E8912DD6E519BE47540FA7E6CDEF4E0AE2FA78EC9909 |
| 2124 | 4268C9CCFDECF6E4E5A9B65893AC7C707465E0502AF76E458B6193B943F8CB3E | 2126 | A3BA4AA0498A42D363EF9BD3EA3F44DD192054D99E2BA96AE79D58F1FBF4FEF0 |
| 2125 | AEDDEC24C24AD1DF95B958EB48F9D79608A2C53D281F77801B1D0191E2456B17 | 2127 | 1C0BE069B0D181A6BA16E7856A55A1252CB6E1CAE718F061B0D69A697F30212D |
| 2126 | 825825502754E688CACD557422C5EEF2221F39DE067051611D118020DD2CF23B | 2128 | ABAF64B49495CE8C2C3A021F1B63EFBECAEB14FF0F933679D4825ABA027BFD16 |
| 2127 | F7530C9F085AD552E0EE0E2A0967631D36D3F19F16D0C3EBA4806B1B050F74E3 | 2129 | 8FEEDA3BEDB9333856DD7DC8DEE7C6F1A6E571996CA3850C3EC6F7AB56217F89 |
| 2128 | D101E032C64C8950560EA38C473099D45DB3E9B3ECE0F5DD604B3AB8CE424618 | 2130 | BD0E5D306E9D173050124427C0639C9CB1093BC5DFAA4975639E844BD57128FD |
| 2129 | BFB6BF2A357CA3FDE707BA64B42BF9585E95F717FAA6157E6B03D098EED24DF5 | 2131 | 8565FAB45473C77772EF4B5AF7AD6BBA291A06952A9FE634909480CDCA5D2924 |
| 2130 | DA296997ABFD50D085092AF1FBA05DD63A354200134E6CC02AC5978CD7F5DB4C | 2132 | AAC8A378DE44DEC27FB92F3EB49C2CEFBE1C9C8FF1ABEAD47EBE178369E562CD |
| 2131 | 9F6480918FE5348DD6908C6CC33413E41B41E308CA598AE14E61C1E61F8EED96 | 2133 | 83863901139FB4CD2C62B5813AC5FA42972CD918E866C218F88F0F358066E169 |
| 2132 | 995E95D2AF962AD7E7E08AE45FE5A15A9C9B9C9A4A003F80EE6A35EC9DE3428A | 2134 | AEAB4A6706F7B863BB95ED3F75F0B8C358511167E30277CA4B7D9C3829A6C4AE |
| 2133 | 98863BBD9F3247BBD3661EABA6DB4A885E3CF961E3FA211BC75B97C01AF1D196 | 2135 | 382314835A27CF8DB04BD2E399315430B41AE224403FB3DC5A6E6E703CBD290F |
| 2134 | 5A67092149A7D759804BDCE977EB1BBE8E150DF922B7E9AB6F90A8F4373BDDE2 | 2136 | 0C186179130FD6D362480F725AF7DA8FC53C3A74DFC8358BA617299FF5FB80EE |
| 2135 | AEB4BEB35DA4876795B5401A84BC613A43F425FCF92E9F9EF479CCC441C2B35C | 2137 | 3F50D30ED2ACA85ED86802C32FF46B6EEA7C574A0571A73B11E5260F8DCB7C3A |
| 2136 | EF2745005AA4890E904004C66434408374D569A1ED0B6CFB30A26C91C9ADC8F3 | 2138 | 8664F92A46775E19F1EE687862A4DF83C32B055EDE4FE626C6227B0B2CCC8C42 |
| 2137 | 07EC65241B13F5B9741527DBE436E8C9DB6FF461A78391AC480D5A8AF8DF33AE | 2139 | 065FCFE0EBA1778CA4AF232E795337F1F581B7904EACBE02B7C331F1089F2021 |
| 2138 | 79AB46290DDD2C1D6BD0CBAC35EE36496EAE145D52353E6EB263DFE620EB54B0 | 2140 | 2E14F5B5F0D0F20A157BDB8CF35DBCE84930A8B594FC8D49B86DDFC8D7698F59 |
| 2139 | 49651CA5B551077E59A0963F707F1DEB5B329BDB46F59537854B982C7A5C5D43 | 2141 | 552900CA17022719DA2DE504CB3EF99369FEAEE2B8B692F0A63A5380D4E3ADC2 |
| 2140 | 6DD9398FB9D035DA69C9874094104F4EF073E8FD995C8FC81D8B285E22CEB34D | 2142 | B8A1A4C3D4B521F6A96AD5F04FAD50D4365038A650FF9B78CFB879B546006A42 |
| 2141 | 568F6609A5902886875DE5C52C496D5146D200BF495F5EC143B93CC49E5C2A08 | 2143 | 468D77BEAA748544C863C4CCA988E13C4FEC9D4516A4056A79B8162198B0B0ED |
| 2142 | D4267B161D4AAD19A05EF614886BC60A66A6342FB499480F38BDEBC97E0A5C1E | 2144 | 598F9A702420A7A466628922632F3EAA31D81063D23706D2BABE7072FD3F1869 |
| 2143 | 5759955496515E544266E1DC67620A31A47997B6AD78F5DAB4640EF4AFC5E0FE | 2145 | 59256BCDABE36BFA51C205ABB4FE86E0818930A18BEF080E680AD529E3C53B69 |
| 2144 | EAB4677B4D02CEB83868BB7E0192DC0B8B2A32A78575A4019A7137F206223238 | 2146 | 640C131261131FABD462CBDCDCFB35AD7EE87A9B651394CCB46E992BDF79C47F |
| 2145 | C754551A6644A3D3DFFBF819916ED174FDEF284DABE4179FF24F406303547ABF | 2147 | 7044848CDBCF7260DB57EC13AFF48F65FAC15FBB95A84DB9B5AA65CD2A44A5A4 |
| 2146 | D453EF90B6713978992A11DF0D0CBCCF423AF7D29B171AA79978EEA46574BF14 | 2148 | BBD2598F7C46E0F55FBD3CD60D8D26B384367F3680FB23A431C4F9E4013B5FEF |
| 2147 | 2A631C701B921C6746067A40AC96F5A05D3F60834F5A63363D05D44CFE0E6820 | 2149 | 79674CC608B23BA474CEE87C7C1C89505F95AF66DADA954C08B90DF6EA5C3D35 |
| 2148 | E467E28CF920243F3B01A09F20D91DDACDEDB5EDA65CC9CA01C395BCE006F690 | 2150 | 2B6B28A4E65078A4644625C6B5748CD9F0C8E6CD8DAFCC6768448C0E1844B067 |
| 2149 | 8D83231B3015692822C11F541E5D4A6651A315151A26C4A145D7D4644682B094 | 2151 | B8FE4642141CFD6AF18BE1D8D0C42ADF8EA56B2DECB0E105102329E01A326D2B |
| 2150 | 9A8870FD7E6AD333E7A78933BACD0F28A1B8CBCA57A7FE19AB2165A22648D09C | 2152 | 185371ED000FF8F10B2642191C1C8896C287CC5B02F7D0D2961311E9FDE97967 |
| 2151 | 7796E45EF0F36605561BE1F039106DA70ED7C603081D459F004CDA4B4CD201EC | 2153 | 125F17AF2BC1C0D9E81082A0F2CAAFA85586E83DCF821169F643E378ED0C06AB |
| 2152 | E7653A8311DC66B95AE6DBBDEEBA50016D14ADE0488FE1AB0377B7049A0F9A09 | 2154 | F0107C05B6C20E8C219B1EA372AFE14556BB26E265DDB35EC1A29E698ADDDC82 |
| 2153 | 14B16EA09F1EE2565D567EE0FA21C712F5DBD1CC53E8C23E40338E43C4965BE4 | 2155 | B3DB2749CC168E27B40ED391851B5D9265D59BAFC8ED28A3317D56BED94EE667 |
| 2154 | EEF1CAE961E2F2C9775BD78274FB62016A7363FA3D3936D02667EA6841775DF9 | 2156 | C829329BACB09D1B1F7A416F23BCE70366C60E5CB4F058F00A490C2FCAF90255 |
| 2155 | 3CBF9165389CCFA9392D139735575C3662F0355BC343851BCEDD7CA61278EB0B | 2157 | EDD033037A2DD77F576CDF4B793FD62E5EF1DA9CA07EF7196356FC92141F0786 |
| 2156 | A7810A4317C52B15F559C0F0762A0F4A17D52052779B655C3F77CD0613D07367 | 2158 | 7E55CA7D70BD6C095106F365D80C5E56DA0A2EFF8BD6F4274138ED558DC888C1 |
| 2157 | 52BB9BF23D904FD1B70AD6C107EB1831C241BA878BD7CF0B2EFAA4BD2E3F9BCF | 2159 | 1795AED007DE68040372974BAF475526BD0833CEFB3D115467DBA008921D3B7B |
| 2158 | D09A2A4F2C9EE9D742ED921721701AC2ACD6E9754CDB6E1EAD891B0D63474600 | 2160 | 20213B1FEFAC68B2F8881274841562A098631B4DF3055E4F993C8E3668431C87 |
| 2159 | 24C221A5550472C685E6BC6ADAF7BAD61135D960B66B59A524423CF6815407B5 | 2161 | 363304114F12F7A6741E63B57EFFAD0451125284641B7B63A155786F0F30AAA6 |
| 2160 | 29ACEE91F08C4F3AFF74931786D014BDF6F85A57C50C50CA13082F0F962D8A7D | 2162 | B4AA243909838427881299D4A812037868176E78080B58D71BD4DB349F5FC40B |
| 2161 | D91BB97760E1DF2A8051FEE387AEC967524E8AA2D6D4C824AADD46EDF9683DB5 | 2163 | 93E93AB792213570A54812E4289E434C7C41EC8EB1D725071DF30C07955B8354 |
| 2162 | 6FDD72CCA7D000BE8BD526F5AC2990ECAA151A4B65F87BACAB9CEDFE7F2BE5BF | 2164 | 142DED8CC2746850ABEBFC9FB474A8A4B4C955E2C4B1B95C20FB7D7785D6B2C2 |
| 2163 | 0DA724EF6AA670E37CB8DFCE9D32A90590831C9E71FA8C929F01C09D379B819F | 2165 | 27C53F46B5650208C05D672AC1591BE11F4EE6C139315C57010445E788312C39 |
| 2164 | C86B1F1CA2DCCAD147496898756107F3B1EA3FF25D603E625C3ADB1A122C4010 | 2166 | A20F2316933C10C67BAC33DAF32442A0321E4C9372C2B4D80414454E518C65DD |
| 2165 | B1A8BE368C268F1938CC1DA24ED7F22634A4B3DEBCEFE6AC250B9384F7A34131 | 2167 | B0D18FECA4B9D7A86A11E9B3F2E56119450551092CB2E7B4DDD3858FA8BC80E5 |
| 2166 | 36A38C1589FFA8EDB470D62EE09EE9F19E6CC76F0EBDA2C9E9D6276C466F02BD | 2168 | 6C883015EA7B770A8B51D56AD6A14D22DAF80229DF1026A723C1BA653915123F |
| 2167 | 5F6F9E9AF9A74793B8B36C36E8C198215EB0259F871FD4356A9FFB3337988711 | 2169 | A1D57F518B44F0613521CDD32EB9A1E4E986FF5093B81985A00E0CFF355C61C0 |
| 2168 | 5A84B7829626D3C7FBAD3D4FD5EA30953408BB97D77229F5C27150D72CBB6A6C | 2170 | A8D01874FB5C462A3B3A317E027AF79D5820B473A61CE2D6F759CB48B441341C |
| 2169 | 4585FE13E452D977DBF7EC2639F06B0D0420D965CAB90E1797DE9D201E1219AA | 2171 | C98393C31626FB7459EDE4953D114D2A3C3266EB03F4A4545BB737E6C3BF0B5B |
| 2170 | 3B06CD074470641FE3CDD17A17E68FB3B7F2B5498F2C74D6209EB97EF626286C | 2172 | 4186E06CD1EEBB1DC515A1727CBECC5770212BD638BD04D1A4F2662E8DEA0713 |
| 2171 | 1982FD51DB1B80CF8D3AAC6C449AF5B32966D483B12C4C2C4C2359523B603892 | 2173 | B3580AEFA6AA79AA7DDFEF04F877B1C7C763B553FC4DB31E7E73FAD239C8B871 |
| 2172 | 13109BA0D7E208DC74CFC4583AF2F0E50AE9458F5112A780991C8B6EA248E76E | 2174 | 208FE433C3902A84A0580CC2F7EF3BE276175F6A6197FBEE6E039A1AC985D478 |
| 2173 | 15C78B3B068C5BFFB1F015A9639EFBCCCC5507206D204EC199CE2D38A2A2F7ED | 2175 | 58C86EDCE81805640D4A87D5AE7155DF9F2092966CA7A1ACF9B04AD4ADFE7EFF |
| 2174 | E9604F1F146AAC9F21B0F6E306202E5BA947C38FA3C9CFE0E2332A903E9F9360 | 2176 | 4FF711FC4D9E9CF66C395A26F25309BE09019E61F5B70C50BEF2EE54CCEDB425 |
| 2175 | C3C8750D8DA48FA999397CB7C98F130E449E6116D120DA2902137B9B9CD92D4F | 2177 | B9A0A84E2E142E4B388D3DD88062AA6FFD55B671AA4442011FD17EA9FA0B67E2 |
| 2176 | 48BA0A077EDF1BE73E43A4C445D9D3738EFE2674FB1849F2037D7CE3D43D126A | 2178 | D4A2BF06F00F5B90EB8B4318F026B9F3D7862266615E87A226A0BACB505E0FD3 |
| 2177 | 607D72B5EEDD491EBDBC9E45EE8AD7E07DE4B0AB22698CCA2800DC307C2D3726 | 2179 | 2340134D25DA26A26EB4569D95B57DFFD5BCFE6CB99AD2CCE1B98C250A621F70 |
| 2178 | A98D432531FED2BD1FFE8329A23FFE76837D502A7453FA4EDD1C6EEC8DDCC96B | 2180 | A5B45601163E7CBBC9FB212E7FC224C6C9B8B3AD91D68B5244428AE7309CE55C |
| 2179 | C23543F90CC51B078F513E0444CA873332E146B87785078084B6E5E89DF07C68 | 2181 | 1213620A6E7AEB379F5C2374A10948A21E307EB064D46BB725F6CCFD4F0BEDBF |
| 2180 | 3777F088436E1D5E5D3EC8078E5D4079AE89C546EEEF93B5EC16CB8C6D95051B | 2182 | 13F46A187209D019FEB51E0743A145821281A3FD631CC2A4B1A26BD2A1260756 |
| 2181 | DF0D5B1B59487483402198EE5D20DF471DC29330012EB2934FF9321E5F55D42E | 2183 | 3B54198F049B25A82FC4A40E3253B0A9B96E9E5A8E6FA072BC0C4D4957F4FF35 |
| 2182 | 9DDAC8B2A5ABC0549D3E31F4E700F92F92D41991E3680C74D3C8D78FC37F24E0 | 2184 | 1C57C6511C9DF81D02BEEA475A63108A5C89DDFCEF769227899948AA28D761F3 |
| 2183 | 6A00CB6FA5145BBA9637DE8A8BCB5DA54E4CBF2A42874A277D8BE7BE258BDFB3 | 2185 | 233CB498C5178B8EF70CA1AE12602B5BB28D113B77E275D952EEFCA9111F921B |
| 2184 | 580E4360299187051E62C27B2C79CDDB9B279A2059325CBA86847B13893AA6D9 | 2186 | C8AC69D314A324B93B03C97DE285958FB13FCF5D4B2F9E855CE45345ED0D8E39 |
| 2185 | E497C6A771868237B064D20953D44DEDCDA37586ECDE68994A96EB8013753EF2 | 2187 | 5615922765C0CAA288969E056D81CAF8012E4DF8FC543DC0FD54E1B32529C054 |
| 2186 | CAACD7045E07B8440DCBE8DCBD6862A14E349691C93C83F9F7F9E67C5A746BC0 | 2188 | 862911D2061DAE5AC576AF98809CACF6A86405B0A83DBBE664917625AD60143D |
| 2187 | 7864B3E9938BB5A8D244DE021D45B7766364F5AA1BC2BA0633404F00AD6A097C | 2189 | A22DDD3FC2419A51285E8774E5BE1632EC12E29B6805E54B168B1C003385A74D |
| 2188 | DC400FADF01566720B6341407C60045EEDD3187B79EE341FB867A0D1C61903BA | 2190 | 385865C5A46F79692553AF2792C11DBB6911E3FDB8CF3DD6F55D31E6C1F86D3B |
| 2189 | 2FF729083A1D94B1B2CC31E28F6D098135E9008BF046650D8EA8881EC30C03CE | 2191 | 19B86B8EAC47837594EF0EEB73D8EE06BB39B77A40E5C47752A314FD837F09BA |
| 2190 | DEAC187BC4B92E3F8F90F6E433E3053A2841D95B4CD5A5536D2FD8BA3C8BFCA9 | 2192 | 5A84A5C73111B6AFD932B5B4A4E680428F4840AD627379E9E812730577AADE4F |
| 2191 | BA560A0171B941AD077865DCFA6D7DCAAF5EBE285BD0807A7207BE986E8351BE | 2193 | C96F1D16FB6D0BFA89779AA11708F81C9A5EEA31D608B2FA8898235219D82F81 |
| 2192 | 03064839D4358B16264538A453D42C095552F552383FBA044C7F2D47A3A69EC4 | 2194 | 1162F1DB9E2A85F397653B8A57D9E36380A70543A1492D217323D69E42278594 |
| 2193 | 6E5FD899E0E55CF0B94BDACBC436660DD0CB9C24030345944BF4C62FFA0C7A63 | 2195 | B7F54368880E22CD2E2F3BF701DA9CC29DE0C62AB31BCDAE82A2F695C98FEE90 |
| 2194 | 35F86BC16EB62F5B117458B12ED15387165036F2A2E106BF8D388075382D886E | 2196 | EECA21BA77D17298F7E2DE6F74544B53CB85638E239EF670172951CC203F37DD |
| 2195 | 5FCE7DE83E43F9145D0DAD6CCD00772F6D3C0804BA01B9DF8F31AFC3B2E0F7C1 | 2197 | 51471D4727E6FA2098076D9177EB995C676E21AC27AD84B90DF5620FD9952A6B |
| 2196 | 976A83DFFD9DE717AAEB614EE6C32DFB3E0592BDC29C18ED416AB637E8769C7C | 2198 | 637EA0337053F39A8101938A30F6B8E37D94D7FE31C980560519B6517155DED0 |
| 2197 | 9F0D9AC0F017A9CC75BA10EF9B30ED1C31DAA78D6CA6F3F71A988F0FBB0BA50E | 2199 | A419B6D36CBEB64AF00518300C4AC1B9AD4336C7B099651AFC70D68C624DFB3B |
| 2198 | 4775BD68A0FA366E16351193EC5390EC553437388EBE4153E678D850DFDBDBDD | 2200 | 5A944675EA3ED1AE5FA7ADB63E5E0763F6BC4D4E83F8B1D1F355ACCB0F4869A0 |
| 2199 | BDFA73F47A3E6A800EEFDA70402B73E571B3B55A6475C055A89D0504423F829D | 2201 | C29000EE68B8D3284D782874761908D83E461D247798A35BA1B4356C4869AAB2 |
| 2200 | FA76DD2C7D78280429E6527AAA64AD7FD074F300732771ACA43288CDBB3D26FD | 2202 | 0263D440DFF69BF5ABE9362B1BFB8C5B6E6D8973AFDC4E76277104B8326EFE02 |
| 2201 | DD4A0AF02CED8E7503E6479643741581E0565970A56C7DD5D7E1C314639EA886 | 2203 | B08A5D00A6FBF10413C2B8B3E2C1BFF9F235772014C39D48821097390F760062 |
| 2202 | 0E581B4DE3742FB93683F0BF5932019AF0AE1DF9A2812B3E0200C6FCED8AB6E0 | 2204 | 03B12B90A7C766E19E6BA87211D33F2AF5F921F7387E42246E71EBE0470C0A61 |
| 2203 | C5256611D969FF4472771FC0ADB16E71A5C32BB6E3C3A79C832C32574262ACE4 | 2205 | 2FBE7DC210AA55310FF8CAED5D089801DD513F6995F84D87CCCEC287B1A2E98C |
| 2204 | 20225A253F4B5C750903DF5D9F5C3AD6DE75500F2B2584973612115924906460 | 2206 | 958C180C6434CAC5514B8E0BDB98FD47ECB991F7687EA48BC5348C48C6231793 |
| 2205 | AE9AB02B1DEE0AACD47B7610241ADFEA06EEC2677BA7CEA0CF3CA93BE4083710 | 2207 | D6A6AF77ADD045C90876876BCDDA1CD33A64CC745FA39E924D6CB69A26501BAD |
| 2206 | 1956D6974422517019551C92FC19CDFFCAEF2A26C9508D206D9642D66B33971C | 2208 | 34DFD096F155ADE23EDE1D17394F19D4DA037740556124BE10A1CF66EBFC7CD9 |
| 2207 | 8996CDFD0789B2DFB9460A8E00BD6E2BA83120E94E4EBFBBD5A06C2C77555465 | 2209 | 093891E8C4C084B16B589A627B7807E2216E0E9E9E76E28AB4EB52E8121AB21B |
| 2208 | B50579BBC9EBF8C6D9066C4114383392998324DCF86B9ADC935F66176E019DBB | 2210 | 68EECA8901ACBAC21610C80BD3039902AB708A0C393EA723B8C0A42626C99BA9 |
| 2209 | 081AE411E45A1499A7DF7B5C998C6DF917AB3D43639CE6365AFBACE5FF30A70F | 2211 | F7B4E369F4DF12F9D8F5747BED03ABF2292FBA592F614468CEBE74BC3BA016AA |
| 2210 | F0B0087701AA9C5E871A97EF789F94A222F7E586BE8BD1C83FF7E0A429918A8C | 2212 | 75CBD88BA886C0FCACACB6BB14B57CB27189B6716F58DADBA7F0D94D06CC3AB4 |
| 2211 | 0275B463A881742F71096D6ED5946BDF93CD1EA0D407C0542ACE030BE6214211 | 2213 | 41B9A6761B4F473624EB06346D2DD8C2F011BD9BD3BB17F9400E53083C924FAC |
| 2212 | BB580CAF11EB8635D6C00052A5A0ADCED3CD6BD1E99141BE1D247CB48CE39CD6 | 2214 | 38B5457E6E2653DADF8AE603A45761A198B0E1C03CFAB17CC01C38F3FA36B17F |
| 2213 | CAEE933C1068729E9A167515F743E0B66BD06481FFA48CE9C6DCF4F0145BC851 | 2215 | 64720594133B6994483BAC49C252F44AB1A80729ADD3C4D7A8E866694B1549BC |
| 2214 | 0710C946391AABEFB70AA2D02DF83E68EED2305195B53B667331B9EF352D7FFF | 2216 | CE77C1F1B8287F515DED9B124AABF35EEA5761C8D86289882D9D77AFA73B4EA1 |
| 2215 | 56EAC2571490A80E0F5EDB22EF988671B978CBA393FAEE0271A02AD4E7916FAD | 2217 | 1BD12F4AF1416F83F99F9F70FE1B43210ACE9E76C0E0137F2018B2E89543F1ED |
| 2216 | 5BA6E42816C0E4A6B59AD4882CBBE4279392940636B95B14AC72EC763F3C8DF5 | 2218 | B2C35DDCA5D68EF1641463D7B8378D195BABC1880DC6592FA2429A4FBC4DEB7C |
| 2217 | 158902E1144BCB9B77497B94AB6F985BAFE6A6EA919ADF5DC76D9547BFC10CF7 | 2219 | 67F1EAE1F0FCB79AD109EEF143B57C30CC105F65FDE1C80BAEA04282132BDA3C |
| 2218 | F27AF0F3F369A40F0818EC70BA8D0E3064208B929F4691B4C3359FF49A32477F | 2220 | B48050A7267DEF7F3F48C2A83308B16320E15564171171F46EF2CDDB10AB209C |
| 2219 | E21B57B2C2D7A6C444C09147DAF3C53BBAF46FDC8F18F8F53534F69DB5568BFA | 2221 | 4E7624373F4C6A49C566CE0B053667D12EFF5A434DDE23B32D0D3090318029CF |
| 2220 | 41412B4050EBAD38E48DE3CB3B2024365A2D9436AFAE44DFA3B145EB031F2B34 | 2222 | BA8A095C50BCF1F6B0504DFCFB70752A9C68ECDD82FF949C2A17822C8E3DD91F |
| 2221 | A98C93D81397DED7235D26F7C55B6E9DEC79AAD7ECD9D25119C11657E7F593C0 | 2223 | 15CF16B6CC6C8EF09178CC9111B5FA9D36278B47AA95D22D6959F7882B101F69 |
| 2222 | 00B3B94107B15D33F2B27BCB1C7544018613FCE5546AB33EA041BDD6DF071D9A | 2224 | 435085BA043D7465E896C536867A71DD95B07486B0DD43061FE0D4AE86C3A476 |
| 2223 | 93AB099D606F7B5437A61C294770AFD946F292CBC5C0E657DFD3B99645D02611 | 2225 | C37DDA978A549D60F17212C0F0BFD0E5EE4881686280AD90FC6090C0207FCED9 |
| 2224 | C3C2D5C083304436098C8BF60C7527F06997B4D10AE189322D279DB5834EDB43 | 2226 | C7D395F9BFC34591D1E73A55E7257753D2603D51B0861C11810A6B2129349511 |
| 2225 | FAC2E91C1E9B468583AE8EBB861898CE9415A6FA5E099EAAE096BDE2978A142B | 2227 | B5AA65AA3F1191066CF75BA36421A46844BD99861F9F9F241C67979D51676C57 |
| 2226 | 930EE1DE108AB039C1512D066AD015A88024072732AD9932203E38F8F822931C | 2228 | 6D5F9C816AFAEFD24650564D8E2553A8535A2D4CC4C4C5C6D6108A9DA0D5AD91 |
| 2227 | 226A39466C45C1D5161583730D41695AD184C7DA4A2F6E06599B0A7D2676C99F | 2229 | EDA473D9BA0AA3313D850C749B3CB733FBB7B09670C6716B9856B9773D2EC073 |
| 2228 | 265568564D74A19CFE27CE4F3EAF0F1C1AC97902FAF891506B735F9E35D4E91B | 2230 | 036471AA470AA02DEFC681ED77568508AB6A3BACB821B77E90A94CAC3CFF436A |
| 2229 | 10A54E78899C211532A36D3C85D7C37B287D7D0BB3FCCF4922FA25A2B7EE57E9 | 2231 | C554E78721F7D5B16D70D131ABE62B6AB3CC687B1483A7A63A9563F4675295EA |
| 2230 | 6F834FA1614758B455E4ED8A4F3BB2155EF04D18F8771DE6E441AD8B90CEC661 | 2232 | 78D3B2E73D08AC9056FAB8478A6F41E24E8904CD0C65C420C1808ED22BD4A42F |
| 2231 | 81096112F28A4F5BF8C0D03647974574330A9DB9FD4858A866B827E02815D6FE | 2233 | F86A163D8F8C4FA298AE20293367796E5793A8F129676795ADDA26C3BAAEA0AF |
| 2232 | 269545855B4C2978ADF3D01FD470375622DB6302841304C4B34DFC14C934A5EA | 2234 | 2A4A2525B889D45ACEA22616BFEC7FCDF17927C5233FBD73C3C58005C843D5BF |
| 2233 | D948AFF88638AB565855086B9BDC7ED1C2B1A2DCDE0237F64379FBF189B062BC | 2235 | 7AEE8D1E6B17FE8ABC9BC16A7FACCD47D6B6CEC06016D29AFC9F9706C3109225 |
| 2234 | 3E271422401D7044171D1CF04BCE2334018509119BF2A1A9F77D539FB78049F7 | 2236 | FE7DD2CB5B7262A2D209B3AC7AE7B5999E5143D1ADE6F9FF55848878F5F1ED01 |
| 2235 | 55447125C1B1BC734D552A95A6542A45B56BC7A9D77D865D69FAD63EBB5CEF5C | 2237 | 879C62BC67853FC360480DEEB73694A6AE25C6B2B3DE9456D6FA372DF603352C |
| 2236 | A6CC02E78F40A5F4D2D0083A57B9EE39AA1A85AB63F3611BD2F27CC4C0C38B99 | 2238 | EF498A11D4DF3C441A685AE00CBAEACF603B40527A7BC5102F082B508A869498 |
| 2237 | C66CE4ABA335F4E6325EF52E64BFB558C1B0C811C779A46F079E64639EC28C94 | 2239 | EE2741017999C5FD551668615F32AECF6008B8FFED14BA461B081C290C3E6C2C |
| 2238 | 7FB1A2D4C30533813E739009C352DCF93441E0C61A2B43D180D495C62D4433E2 | 2240 | 9D11342D1F4FAC2037FAA555BC213857242D72D971081B89ADFCF15B26E6229A |
| 2239 | D5CDC01224D6CE29F06FDFA328E338648FB3C47BBEAED76E2C10DB94B8B39D19 | 2241 | A753773EB8F05BD2C47A53B6B98D6017848D115FF490F1270ED226A588E5A714 |
| 2240 | 9A596EAB6D5E0033252119CD31BDC7857CF5833E011DB5330DAEC0C0C6C2CC37 | 2242 | 96E737DC61DF729881023D566D428DC4F534F2619326C2C2489D492E6483A322 |
| 2241 | C3B81DADE8B960867D48E26ADF34929E7A74C220048C250AFD23CD03CA8CAFE7 | 2243 | 4F93FD9A2582CFF04CB92BB84012A1217049A8EE353FEA7F6560A7EA329A0E16 |
| 2242 | AAA8D671FFE2654B5E129B632D2F6AE861C0868F7567ECE49364558EEBE71069 | 2244 | 52A6687FC795F57D0C9A1C54522D18B9A18BBF8A62CC93FAE2B98820149956BF |
| 2243 | C1EBB2A01276A674D83944221FB6206A4CB07F451ECBEF842FC10C107ED7CF01 | 2245 | C8D0069F84CDDBF10D87E2459E0FA6DF4475AEB659F0C89DD652F25ACC69F19E |
| 2244 | 7B1584DC6B33A0BB78B9741433E59446427D272CC35EA60C69988FB24E5F8FC6 | 2246 | 9095CE72CE55263AB14F075FB439D5FBF36BF5088312DEE7556E12C4852ADB07 |
| 2245 | B8E8B5980FCD7381BFC34789377156F357B7D3A2165913DBC2D15DF5CF92E6FB | 2247 | FB99279C9465BF097FBAFAB6A381002ED4DE4797C61478E5A002C97E89BA81BA |
| 2246 | 42DB4B09628D45936F15456A007230CC9EA9703C14B12443497C8961A46055D8 | 2248 | 2B9A50EA5A1FEE07DC11DB4611A1A7D24F97004E2867A807C508F17FCDD11E9B |
| 2247 | FC5D1A2E3E03BB7993079353406FAB03AA50CE6D589EFAC8E186898D39A3B158 | 2249 | 91C9B72B563D938B38F392827AC23D05E414A3A1FE24199FE833CBF776E19E3C |
| 2248 | 73A86DBEC6D4BA9F706E3E66AC32510865C7FC495CBDD03482F48F77A7C68A56 | 2250 | 9408C38FE23BC89E8310D49F866F0B6034564BB21238733744ACC21D6FEECCD7 |
| 2249 | 7FD81C53FCD359F3518A810A9EBF8B3287B3498FD8DC09612F46F8933B24F230 | 2251 | E4AA08F377CFC6CBF44CAC348CABB8FE34A6C51F5AF753F0C67B1A18F524681F |
| 2250 | 6EA06D9CC090E62350DC87C37EE8C2A00B5B305B5F9DF024A354D218BBD6F893 | 2252 | 5E8053D13E460F59DEDC7EEF52CBB402C9E6A7988D07FA1928B1383D350E8A1E |
| 2251 | 29C2455C3A6FA80442CF96F71EF417766B36BEA9599A148C741019958E5D9D6F | 2253 | E06C576D198E12BB84C1CBCE4F47A93B569DF88BDC595E5A182E65418CAE4399 |
| 2252 | 57BD18C456126C9C2E61B26BA99CC24E381CF54DF698B638395DC4CF5646B297 | 2254 | E2B76AD0A8A073BAFAB2DEA554065E5A3191809390E23FD16842391B03DEC4B1 |
| 2253 | 35DF231EF503C8A9242ABEC825B86E6B1C396225DE9DD5A74CD4AB2E52CE5502 | 2255 | 3FC005A829DDEE375728DC73B3E2DB901F97491B827D688B949A07F78B10535F |
| 2254 | E64FE52B841E9C903B6041010CF762B9DA460DBE1B7AB6547E56967AD50A20A8 | 2256 | 662143A7D1772FA1DBCDACBE5F3527424DC787D6B404CE9714179DC10BBFBD9F |
| 2255 | A3562CE86FE628FCBD8D5A46CDC6928CC907883B3B223D1BB39FFEC99C295471 | 2257 | C3E3DB0771D2C47D54473C15587342E8FE9190A6FB55CC0EDA521C73ED249D2C |
| 2256 | 5819DA78E1A28E67BE9C9ECF030D17B750CF63A1FFCCE03488BBCD5AB8833229 | 2258 | 927DD0BB776BF83492CD40DFA5514BA3986629B3B7B50BAC7351408A958CBBF3 |
| 2257 | 129EFF723149ACCA53F3349F20A95175C634C1AECBA667E94A6EC7240CC73738 | 2259 | 8999CB05A73F244C1230391D6F89AF2A7ECC1755DA94C389305916CEBD43B233 |
| 2258 | 56853DA698EFBFBE8D4EA742115D056E60A5C563CE677211F762D78728F4A4FF | 2260 | 88CBAFEFBFEDD7D54D00A9B88E1A391AAB951283F1BCD9E3AAED990F53BFA5BF |
| 2259 | 16106B14CF733EC786BC81BF382D929C6E779BF2C5CAC1A7141311467B230972 | 2261 | 054DEBA1607F632C1F3D7AF66881600F84EC835F86663C12F02F084D419C8E1D |
| 2260 | 473561159C7F359C249A40CC0A2B78153B1407C9B5C58B61BE08EE79D2361242 | 2262 | AA77E6B3B627BC87A41A4B42B1744F410AD59846D246592AA804212BA2F38867 |
| 2261 | 7F796F70F131C8EB601DCAC36940A0432598B85A9808D2E3A3AE04481AC98AD4 | 2263 | A63E5EC0F71239113A3BB841435B80CAECA592F499755906A5F4D8255F003C9B |
| 2262 | 765F604A00F6BFBFABC92FCDAFDA89DAF343D56D8BB390DD8196E65823CCBE14 | 2264 | 7E6CE9A6AD93B41203C0912D4603B39A9071F7473A5265958BEE4CBD6BA5870E |
| 2263 | A44D12EC7460A65E46C3546D6A2C3B5E16B023DEE94A5F29CEEE87F773748F96 | 2265 | DE6307F6F32DE57998276F2D24D335305C3297C7B7CC3079845DF71FE32D093C |
| 2264 | 32EF586A0CE0E35DC20A2F79A398A52060A5A4ACAAC9F38A5C5F5E18C5F548B6 | 2266 | 545FAA90BE7119E3AB68E116EF3814521FEBD30724A1A3BE3217367D4221C1A6 |
| 2265 | 14EC4B3E3DCA73ECF7111C84980AB97DFBCC2B072D917EE0110248FF4728042E | 2267 | 3A042C0475116EC08951E0D413148A91B123166C569E22BCA891EBF87D6A2F5D |
| 2266 | F527F2B5BC1C5CA2FC93FA15ED3F83DC3992CA9ED5BF29EC2ACD3F65CFEFD598 | 2268 | C1E36AE701F0F5D78E7428AA902F84EE66A142D8B39A5F7EA6A85E1A000DD273 |
| 2267 | D3ED8D7F3D54D220D79CD51A599194E511A440B43F1976B944FBA750C80E786D | 2269 | 86A48E2E0A836679744003B9825DC3F511512954C01A877F540C02B775B2D692 |
| 2268 | 514014EB35E21B85CF8DE707B96B03B2BB973B9E215C1FC9816DB019765D5B25 | 2270 | 174EA54BF7C32F0DC93CC6E85EE8AAD0CD80B0D634B60B49DC1D0E55334C3470 |
| 2269 | 0A1B77FAAA4E048CA5BA20CEA9CA184F59BF87DE90BED9DD310C7FAFE3E93583 | 2271 | 54907964F269EA9840FC8F3D8A72DCD773ECC2EA26CD64D42693FCD2AD8EEDA5 |
| 2270 | DC243BA6CFDD104A3B126AC33F040E706D9EC76C986C1BC084623E58EA5E197B | 2272 | 7814FB8BF232E547D6783DAA15880758BC4ECD8C339C5C9E7A5847605C01B417 |
| 2271 | 2E35DC67BA1BC12FA7013F9212868299C2AA052521D0FE1C8117BA36553B8024 | 2273 | 5B378E0F1263B72D03AD49EE0D2893ECAD56F672B33E1652A664E87C4771B4CB |
| 2272 | 4FFD05A76B5AB7285E06584ED89DE8E7B6BD50CBA86B0E167BD86820AD60112A | 2274 | D3555B66D9E8B85B118881EAE0F13DD82A2F7F7A74CF71D23A7D26A6FA19C2BB |
| 2273 | 9C90BECB87FFEEEC23104B36BEEEF385FEDF701E9CED8C77D1BD04DB0F5C7616 | 2275 | 36D0B4E38237CA9D6268C55D9CCA670CF3AC1B045B30E500EB34D7406EA82B0E |
| 2274 | 373AC3D57A4E056E1A22238E4E4873084E29B993B43F382D90161084F3243769 | 2276 | 0E876235556505BFAFDE2808C85978A2D04F50BF7FDF608670AA846A4434E80B |
| 2275 | AEC08A9272E3F1FAC01BACD9FD24D0C7749423CF64078B39AF900305714A3980 | 2277 | 7960737EB91FAA6BA784E34FC21AE584696A87250DE7D95B315D57FF73E15FB4 |
| 2276 | 2CB0B3D6F122A6CEF41C2E290D8EFC54E4ECC8908FDAC9DFD7F3F0EE7A98D260 | 2278 | D124CBFFFD7A44764687B44F0470162CBCBD649F92C1FB7038D0A298CF33FECF |
| 2277 | EC5C7E3484AFBDE096CCC71D9C2E2DDFA1429C0845AD23A6D235663086C76716 | 2279 | 8F9554259983FE727592E644CCD32C3D821C1994D924813AA9AB08BC233BE5B4 |
| 2278 | F5A9EAA8BD0B23D6A9482E452E0BFE1B2FD9B24FC4495C212B4EF23D328AE080 | 2280 | 50DC095DAC33090D55B8B7D7C0D2261D45A923366E0595F57AA2B7D7D8DC22CE |
| 2279 | 8CD8DBF54981E161763D7F354A1A411A61D71C5CF36E551269024CEA701E9462 | 2281 | F7557E20252030E3C6D3980EE05700A59B8D620CF89083D6FF2E3E78E118B144 |
| 2280 | E09EC70BC5676B2F5DAA0202FBA4948E8E2F896DF94CF23CD93882F0C6F574F2 | 2282 | C92E2A6CDF33613CB1F74B59A6EA27E60C0156E287D05C5FA5EFCE3D4E864C39 |
| 2281 | C2508020035864D35D73E573105F13F1AF6CE24F4DDD537D52C1E04E1275BF48 | 2283 | CD87D636EE736F32A091F019B8E22429F50DCCA8B563A128F52C4157019DDC9B |
| 2282 | 7F28BFA941FEC50C43AC453CCF22645BEED3434AE099A63DCDAA368C2DBDBB65 | 2284 | 415524A99224287848685E353D92BE01BA661CE857F2C6172C81F5674044AE90 |
| 2283 | F1C83773639DC0E5E22521622A5A7F1FB6C05FA104E22AA914629A5599545712 | 2285 | 5ECDA6944F31B45F77434DCB074658847C1AE424418E9E05611D016416891078 |
| 2284 | 9612711D4D8702405003E5D3A94334E32AED660957DE864F657D0878A8636639 | 2286 | 2225718C42E8CCC730F90CACC6B97116BF183800AF69F01922856FF6B9B280C5 |
| 2285 | 3644D887B87ADB7148DEE4C3F40C302A018F0D8939D901080BDE7C64813DF7B5 | 2287 | 110DA3BA79447ABFE1B341AF90FDD05DC5FEBE1F2E7130A3D50AC68502C433DB |
| 2286 | 23D6484C7AD67B42AF576895873775C4D8BDFEF8D429317F10D9D344C429D5E8 | 2288 | 534ADD5562E501CE0A212E855F1AC4FC1FF8D5379C9701F8DB718194CD20462D |
| 2287 | 8C95A7CBD3BD08F28D46C620EAF97BC44FFF733970C76D2436BC46B04B5CB80D | 2289 | 155A814F7AE8F20892C88B0587EB52455276439C728B8AFB4ED2A51F1DB7F9B9 |
| 2288 | D6900BDE70957162C71B62F5E0B07637050ADFFF583014DA9F24DED2CA080F50 | 2290 | D35663433BE337AD1714E0B1488B062CF24D1763CB9AEE6E6C393ADDE0EDDD91 |
| 2289 | 574262A788352244EE07ACA41E7827C30D40BF3DD7BBD32F1EE757A661B8F83B | 2291 | 17EE00E06C4935F05F29CB4461DF3CEDEDCDC6434823CAD2B26FD43C24F6885B |
| 2290 | 7CD28FE74546961C5A6AE1E201ED17343522264D3CA4C149FD0AE2ECE287068A | 2292 | 37D6A22717992E0807E48E7876DA766F1B1CF264C70D0A3369B1F88D8E22023E |
| 2291 | 3A269B22C8CF8EC9D6B375B38AC613F0F1F4A47C99404D541674B7C40C4CED3B | 2293 | D1E58747EBE1AE3C32120E87FE87B76F7CED4053270A7E89AEDED4B6F24A5E8D |
| 2292 | 79105290D297F9771072FCBCC89502405BA5D927C01062B3A781C45EB6048E73 | 2294 | 4F0801E430D2104D6700AC07A211CBBC57A43AB300C631564453D826C5E97BDC |
| 2293 | 961ECA73E091FCE341EB6723439B38B188EA498FE9E77B2E5E97880A4CC9ADFD | 2295 | 3ED112A498A8398051492FE1B7A227AC36B18BDE5124A6650DFCE5846717DC0C |
| 2294 | A6F3AF790B84BDEBD1331F77DF164ABC9B969BB5C431BD9FAF52539B339BAA9C | 2296 | 2C388CC394AB0C398CEA7FC7FD2D7CA461D238AA6A0E22E1E507220225057BF5 |
| 2295 | 96ABC3D341722CD608CEF0F08D3E6AAE4962DB8198673B19F3C469559B993F5D | 2297 | C76EE2E2B58C865B229EF8C8A89F18355678937A3720C6A4C150CA3C124CEA6B |
| 2296 | DFF518F5EAF32191B9BC76165FA1A5CFE7B4BA741D140EFDF797F51807385F01 | 2298 | AA1862B18FA26E7F9E082D5F620B17FE5E5E1F85303D1719AAE1C3CA1B9AD700 |
| 2297 | A4DCD08030ADD12175887CBB60210FF5F275E8BD9706D69CE55F0D5030951A7B | 2299 | 05DBE2CBB952C6E97BFC43FE8AE9EEFD5B6CDF601C65761526A0AEEAB5CA3A91 |
| 2298 | B0D31DFA257ADFA67C9914D4A1EFDC365AEAAA4B31FDA0D401A542 | 2300 | FF7C201BCE050030628D6933DDE2F17C7A9D3D8C0E985004A1E21EEBDF785E8E |
| 2301 | 68EA0444A0C05DEEE046BB18A79C7ECFCBF5702B834459B78787D2A3513A0A39 | ||
| 2302 | 6CA03C25E2623919FA2B | ||
| 2299 | 0000000000000000000000000000000000000000000000000000000000000000 | 2303 | 0000000000000000000000000000000000000000000000000000000000000000 |
| 2300 | 0000000000000000000000000000000000000000000000000000000000000000 | 2304 | 0000000000000000000000000000000000000000000000000000000000000000 |
| 2301 | 0000000000000000000000000000000000000000000000000000000000000000 | 2305 | 0000000000000000000000000000000000000000000000000000000000000000 |
| @@ -2310,7 +2314,7 @@ TeXDict begin 55380996 39158280 1000 600 600 (orgcard.dvi) | |||
| 2310 | @start /Fa 242[61 13[{ TeXbbad153fEncoding ReEncodeFont }1 | 2314 | @start /Fa 242[61 13[{ TeXbbad153fEncoding ReEncodeFont }1 |
| 2311 | 49.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 | 2315 | 49.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 |
| 2312 | 30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 | 2316 | 30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 |
| 2313 | 1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 2[30 1[30 1[30 | 2317 | 1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 1[30 2[30 1[30 |
| 2314 | 30 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42 | 2318 | 30 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42 |
| 2315 | 49.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36 | 2319 | 49.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36 |
| 2316 | 2[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14 | 2320 | 2[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14 |
| @@ -2334,7 +2338,7 @@ TeXDict begin 55380996 39158280 1000 600 600 (orgcard.dvi) | |||
| 2334 | rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 | 2338 | rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 |
| 2335 | 20 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72 | 2339 | 20 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72 |
| 2336 | 53 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54 | 2340 | 53 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54 |
| 2337 | 51 50 53 6[20 2[35 3[35 35 35 1[35 20 24 20 55 35 27 | 2341 | 51 50 53 6[20 1[35 4[35 35 35 1[35 20 24 20 55 35 27 |
| 2338 | 27 20 2[35 59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont } | 2342 | 27 20 2[35 59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont } |
| 2339 | 71 66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 | 2343 | 71 66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 |
| 2340 | 61 1[67 14[103 2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 | 2344 | 61 1[67 14[103 2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 |
| @@ -2350,7 +2354,7 @@ TeXDict begin | |||
| 2350 | %%Page: 1 1 | 2354 | %%Page: 1 1 |
| 2351 | TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45 | 2355 | TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45 |
| 2352 | b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h | 2356 | b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h |
| 2353 | (3.17\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y | 2357 | (3.18\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y |
| 2354 | Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931 | 2358 | Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931 |
| 2355 | 102 y Ff(1)-150 199 y Fg(\(autoload)38 b('org-mode)g("org")e("Org)h | 2359 | 102 y Ff(1)-150 199 y Fg(\(autoload)38 b('org-mode)g("org")e("Org)h |
| 2356 | (mode")g(t\))-150 268 y(\(autoload)h('org-diary)g("org")f("Org)f(mode)h | 2360 | (mode")g(t\))-150 268 y(\(autoload)h('org-diary)g("org")f("Org)f(mode)h |
| @@ -2565,7 +2569,7 @@ end | |||
| 2565 | %%Page: 2 2 | 2569 | %%Page: 2 2 |
| 2566 | TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45 | 2570 | TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45 |
| 2567 | b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h | 2571 | b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h |
| 2568 | (3.17\))-150 -36 y Fh(Timeline)37 b(and)g(Agenda)-150 | 2572 | (3.18\))-150 -36 y Fh(Timeline)37 b(and)g(Agenda)-150 |
| 2569 | 120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 | 2573 | 120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 |
| 2570 | b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793 | 2574 | b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793 |
| 2571 | b Fg(C-u)36 b(C-c)g(C-r)-150 288 y Fi(add)24 b(curren)n(t)g(\014le)g | 2575 | b Fg(C-u)36 b(C-c)g(C-r)-150 288 y Fi(add)24 b(curren)n(t)g(\014le)g |
| @@ -2625,75 +2629,80 @@ Fg(H)-150 3852 y Fi(con)n(v)n(ert)25 b(date)g(to)f(other)g(calendars) | |||
| 2625 | y Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376 | 2629 | y Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376 |
| 2626 | b Fg(q)-150 4118 y Fi(exit)24 b(agenda,)h(remo)n(v)n(e)f(all)f(agenda)i | 2630 | b Fg(q)-150 4118 y Fi(exit)24 b(agenda,)h(remo)n(v)n(e)f(all)f(agenda)i |
| 2627 | (bu\013ers)258 b Fg(x)2046 -364 y Fh(Exp)s(orting)2046 | 2631 | (bu\013ers)258 b Fg(x)2046 -364 y Fh(Exp)s(orting)2046 |
| 2628 | -208 y Fi(Exp)r(orting)32 b(creates)g(\014les)g(with)f(extensions)i | 2632 | -229 y Fi(Exp)r(orting)32 b(creates)g(\014les)g(with)f(extensions)i |
| 2629 | Fc(.txt)k Fi(and)32 b Fc(.html)38 b Fi(in)31 b(the)2046 | 2633 | Fc(.txt)k Fi(and)32 b Fc(.html)38 b Fi(in)31 b(the)2046 |
| 2630 | -139 y(curren)n(t)24 b(directory)-6 b(.)2046 -40 y(exp)r(ort)25 | 2634 | -159 y(curren)n(t)24 b(directory)-6 b(.)2046 -66 y(exp)r(ort)25 |
| 2631 | b(as)e(ASCI)r(I)i(\014le)820 b Fg(C-c)36 b(C-x)g(a)2046 | 2635 | b(as)e(ASCI)r(I)i(\014le)820 b Fg(C-c)36 b(C-x)g(a)2046 |
| 2632 | 29 y Fi(exp)r(ort)25 b(visible)e(text)i(only)e(\(e.g.)32 | 2636 | 3 y Fi(exp)r(ort)25 b(visible)e(text)i(only)e(\(e.g.)32 |
| 2633 | b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046 | 2637 | b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046 |
| 2634 | 99 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36 | 2638 | 73 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36 |
| 2635 | b(C-x)g(h)2046 169 y Fi(exp)r(ort)25 b(as)e(HTML)g(and)h(op)r(en)h(in)e | 2639 | b(C-x)g(h)2046 143 y Fi(exp)r(ort)25 b(as)e(HTML)g(and)h(op)r(en)h(in)e |
| 2636 | (bro)n(wser)266 b Fg(C-c)36 b(C-x)g(b)2046 239 y Fi(pre\014x)24 | 2640 | (bro)n(wser)266 b Fg(C-c)36 b(C-x)g(b)2046 213 y Fi(pre\014x)24 |
| 2637 | b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182 | 2641 | b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182 |
| 2638 | b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 337 y Fi(insert)23 b(template)j(of)d | 2642 | b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 306 y Fi(exp)r(ort)25 |
| 2639 | (exp)r(ort)h(options)423 b Fg(C-c)36 b(C-x)g(t)2046 435 | 2643 | b(as)e(iCalendar)h(\014le)718 b Fg(C-c)36 b(C-x)g(i)2046 |
| 2640 | y Fi(toggle)25 b(\014xed)f(width)g(for)f(en)n(try)h(or)g(region)295 | 2644 | 376 y Fi(exp)r(ort)25 b(all)e(agenda)i(\014les)e(as)h(iCalendar)f |
| 2641 | b Fg(C-c)36 b(:)2046 534 y Fd(HTML)27 b(formatting)2046 | 2645 | (\014les)212 b Fg(C-c)36 b(C-x)g(C-i)2046 445 y Fi(compine)24 |
| 2642 | 632 y Fi(mak)n(e)d(w)n(ords)g Fd(b)r(old)897 b Fg(*bold*)2046 | 2646 | b(all)f(agenda)j(\014les)d(to)h(single)g(iCal)f(\014le)161 |
| 2643 | 702 y Fi(mak)n(e)24 b(w)n(ords)g Fc(italic)898 b Fg(/italic/)2046 | 2647 | b Fg(C-c)36 b(C-x)g(C-c)2046 538 y Fi(insert)23 b(template)j(of)d(exp)r |
| 2644 | 771 y Fi(mak)n(e)24 b(w)n(ords)g(underlined)p 2433 784 | 2648 | (ort)h(options)423 b Fg(C-c)36 b(C-x)g(t)2046 632 y Fi(toggle)25 |
| 2645 | 326 4 v 728 w Fg(_underlined_)2046 841 y Fi(sub-)f(and)i(sup)r | 2649 | b(\014xed)f(width)g(for)f(en)n(try)h(or)g(region)295 |
| 2646 | (erscripts)781 b Fg(x^3,)36 b(J_dust)2046 911 y Fi(T)2085 | 2650 | b Fg(C-c)36 b(:)2046 725 y Fd(HTML)27 b(formatting)2046 |
| 2647 | 925 y(E)2124 911 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37 | 2651 | 818 y Fi(mak)n(e)d(w)n(ords)g Fd(b)r(old)897 b Fg(*bold*)2046 |
| 2648 | b(\\to)2046 981 y Fi(t)n(yp)r(eset)25 b(lines)f(in)f(\014xed)h(width)g | 2652 | 888 y Fi(mak)n(e)24 b(w)n(ords)g Fc(italic)898 b Fg(/italic/)2046 |
| 2649 | (fon)n(t)460 b Fg(start)37 b(with)f(:)2046 1050 y Fi(tables)24 | 2653 | 957 y Fi(mak)n(e)24 b(w)n(ords)g(underlined)p 2433 970 |
| 2654 | 326 4 v 728 w Fg(_underlined_)2046 1027 y Fi(sub-)f(and)i(sup)r | ||
| 2655 | (erscripts)781 b Fg(x^3,)36 b(J_dust)2046 1097 y Fi(T)2085 | ||
| 2656 | 1111 y(E)2124 1097 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37 | ||
| 2657 | b(\\to)2046 1167 y Fi(t)n(yp)r(eset)25 b(lines)f(in)f(\014xed)h(width)g | ||
| 2658 | (fon)n(t)460 b Fg(start)37 b(with)f(:)2046 1236 y Fi(tables)24 | ||
| 2650 | b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37 | 2659 | b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37 |
| 2651 | b(with)f(|)2046 1120 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640 | 2660 | b(with)f(|)2046 1306 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640 |
| 2652 | b Fg(http:...)73 b(etc)2046 1190 y Fi(include)24 b(h)n(tml)g(tags)905 | 2661 | b Fg(http:...)73 b(etc)2046 1376 y Fi(include)24 b(h)n(tml)g(tags)905 |
| 2653 | b Fg(@<b>...@</b>)2046 1288 y Fd(Exp)r(ort)27 b(options)2046 | 2662 | b Fg(@<b>...@</b>)2046 1469 y Fd(Exp)r(ort)27 b(options)2046 |
| 2654 | 1386 y Fi(Include)20 b(additional)f(information)g(for)f(exp)r(ort)i(b)n | 2663 | 1562 y Fi(Include)20 b(additional)f(information)g(for)f(exp)r(ort)i(b)n |
| 2655 | (y)f(putting)h(these)g(an)n(y-)2046 1456 y(where)g(in)f(the)h(org)g | 2664 | (y)f(putting)h(these)g(an)n(y-)2046 1632 y(where)g(in)f(the)h(org)g |
| 2656 | (\014le.)30 b(Use)19 b Fg(M-TAB)i Fi(completion)f(to)g(mak)n(e)h(sure)e | 2665 | (\014le.)30 b(Use)19 b Fg(M-TAB)i Fi(completion)f(to)g(mak)n(e)h(sure)e |
| 2657 | (to)h(get)2046 1526 y(the)i(righ)n(t)e(k)n(eyw)n(ords.)31 | 2666 | (to)h(get)2046 1702 y(the)i(righ)n(t)e(k)n(eyw)n(ords.)31 |
| 2658 | b Fg(M-TAB)22 b Fi(again)f(just)g(after)g(k)n(eyw)n(ord)g(is)g | 2667 | b Fg(M-TAB)22 b Fi(again)f(just)g(after)g(k)n(eyw)n(ord)g(is)g |
| 2659 | (complete)2046 1596 y(inserts)i(examples.)2046 1694 y(the)i(title)f(to) | 2668 | (complete)2046 1771 y(inserts)i(examples.)2046 1864 y(the)i(title)f(to) |
| 2660 | g(b)r(e)g(sho)n(wn)797 b Fg(#+TITLE:)2046 1764 y Fi(the)25 | 2669 | g(b)r(e)g(sho)n(wn)797 b Fg(#+TITLE:)2046 1934 y Fi(the)25 |
| 2661 | b(author)1115 b Fg(#+AUTHOR:)2046 1834 y Fi(authors)24 | 2670 | b(author)1115 b Fg(#+AUTHOR:)2046 2004 y Fi(authors)24 |
| 2662 | b(email)f(address)769 b Fg(#+EMAIL:)2046 1903 y Fi(language)25 | 2671 | b(email)f(address)769 b Fg(#+EMAIL:)2046 2074 y Fi(language)25 |
| 2663 | b(co)r(de)g(for)e(h)n(tml)732 b Fg(#+LANGUAGE:)2046 1973 | 2672 | b(co)r(de)g(for)e(h)n(tml)732 b Fg(#+LANGUAGE:)2046 2143 |
| 2664 | y Fi(free)23 b(text)i(description)f(of)g(\014le)626 b | 2673 | y Fi(free)23 b(text)i(description)f(of)g(\014le)626 b |
| 2665 | Fg(#+TEXT:)2046 2043 y Fi(...)30 b(whic)n(h)24 b(can)g(carry)g(o)n(v)n | 2674 | Fg(#+TEXT:)2046 2213 y Fi(...)30 b(whic)n(h)24 b(can)g(carry)g(o)n(v)n |
| 2666 | (er)g(m)n(ultiple)f(lines)271 b Fg(#+TEXT:)2046 2112 | 2675 | (er)g(m)n(ultiple)f(lines)271 b Fg(#+TEXT:)2046 2283 |
| 2667 | y Fi(settings)25 b(for)d(the)j(exp)r(ort)f(pro)r(cess)g(-)f(see)h(b)r | 2676 | y Fi(settings)25 b(for)d(the)j(exp)r(ort)f(pro)r(cess)g(-)f(see)h(b)r |
| 2668 | (elo)n(w)145 b Fg(#+OPTIONS:)2046 2211 y Fd(Settings)26 | 2677 | (elo)n(w)145 b Fg(#+OPTIONS:)2046 2376 y Fd(Settings)26 |
| 2669 | b(for)h(the)g(OPTIONS)i(line)2046 2309 y Fi(set)24 b(n)n(um)n(b)r(er)g | 2678 | b(for)h(the)g(OPTIONS)i(line)2046 2469 y Fi(set)24 b(n)n(um)n(b)r(er)g |
| 2670 | (of)f(headline)i(lev)n(els)e(for)g(exp)r(ort)219 b Fg(H:2)2046 | 2679 | (of)f(headline)i(lev)n(els)e(for)g(exp)r(ort)219 b Fg(H:2)2046 |
| 2671 | 2379 y Fi(turn)24 b(on/o\013)h(section)f(n)n(um)n(b)r(ers)577 | 2680 | 2539 y Fi(turn)24 b(on/o\013)h(section)f(n)n(um)n(b)r(ers)577 |
| 2672 | b Fg(num:t)2046 2449 y Fi(turn)24 b(on/o\013)h(table)f(of)f(con)n(ten)n | 2681 | b Fg(num:t)2046 2609 y Fi(turn)24 b(on/o\013)h(table)f(of)f(con)n(ten)n |
| 2673 | (ts)564 b Fg(toc:t)2046 2518 y Fi(turn)24 b(on/o\013)h(linebreak)f | 2682 | (ts)564 b Fg(toc:t)2046 2678 y Fi(turn)24 b(on/o\013)h(linebreak)f |
| 2674 | (preserv)l(ation)395 b Fg(\\n:nil)2046 2588 y Fi(turn)24 | 2683 | (preserv)l(ation)395 b Fg(\\n:nil)2046 2748 y Fi(turn)24 |
| 2675 | b(on/o\013)h(quoted)g(h)n(tml)f(tags)548 b Fg(@:t)2046 | 2684 | b(on/o\013)h(quoted)g(h)n(tml)f(tags)548 b Fg(@:t)2046 |
| 2676 | 2658 y Fi(turn)24 b(on/o\013)h(\014xed)f(width)g(sections)464 | 2685 | 2818 y Fi(turn)24 b(on/o\013)h(\014xed)f(width)g(sections)464 |
| 2677 | b Fg(::t)2046 2728 y Fi(turn)24 b(on/o\013)h(tables)893 | 2686 | b Fg(::t)2046 2888 y Fi(turn)24 b(on/o\013)h(tables)893 |
| 2678 | b Fg(|:t)2046 2797 y Fi(turn)20 b(on/o\013)h(T)2444 2811 | 2687 | b Fg(|:t)2046 2957 y Fi(turn)20 b(on/o\013)h(T)2444 2971 |
| 2679 | y(E)2484 2797 y(X)e(syn)n(tax)i(for)f(sub/sup)r(er-scripts)70 | 2688 | y(E)2484 2957 y(X)e(syn)n(tax)i(for)f(sub/sup)r(er-scripts)70 |
| 2680 | b Fg(^:t)2046 2867 y Fi(turn)24 b(on/o\013)h(emphasised)f(text)578 | 2689 | b Fg(^:t)2046 3027 y Fi(turn)24 b(on/o\013)h(emphasised)f(text)578 |
| 2681 | b Fg(*:nil)2046 2937 y Fi(turn)24 b(on/o\013)h(T)2452 | 2690 | b Fg(*:nil)2046 3097 y Fi(turn)24 b(on/o\013)h(T)2452 |
| 2682 | 2951 y(E)2491 2937 y(X)e(macros)703 b Fg(TeX:t)2046 3035 | 2691 | 3111 y(E)2491 3097 y(X)e(macros)703 b Fg(TeX:t)2046 3190 |
| 2683 | y Fd(Commen)n(ts:)35 b(T)-7 b(ext)27 b(not)f(b)r(eing)i(exp)r(orted) | 2692 | y Fd(Commen)n(ts:)35 b(T)-7 b(ext)27 b(not)f(b)r(eing)i(exp)r(orted) |
| 2684 | 2046 3133 y Fi(T)-6 b(ext)22 b(b)r(efore)f(the)h(\014rst)f(headline)g | 2693 | 2046 3283 y Fi(T)-6 b(ext)22 b(b)r(efore)f(the)h(\014rst)f(headline)g |
| 2685 | (is)f(not)i(considered)g(part)f(of)g(the)h(do)r(c-)2046 | 2694 | (is)f(not)i(considered)g(part)f(of)g(the)h(do)r(c-)2046 |
| 2686 | 3203 y(umen)n(t)29 b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44 | 2695 | 3353 y(umen)n(t)29 b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44 |
| 2687 | b(Lines)28 b(starting)g(with)g Fg(#)2046 3273 y Fi(are)j(commen)n(ts)g | 2696 | b(Lines)28 b(starting)g(with)g Fg(#)2046 3423 y Fi(are)j(commen)n(ts)g |
| 2688 | (and)h(are)e(not)i(exp)r(orted.)53 b(Subtrees)32 b(whose)f(header)2046 | 2697 | (and)h(are)e(not)i(exp)r(orted.)53 b(Subtrees)32 b(whose)f(header)2046 |
| 2689 | 3343 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)2046 | 2698 | 3492 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)2046 |
| 2690 | 3441 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285 | 2699 | 3585 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285 |
| 2691 | b Fg(C-c)36 b(;)2046 3644 y Fh(Completion)2046 3800 y | 2700 | b Fg(C-c)36 b(;)2046 3763 y Fh(Completion)2046 3897 y |
| 2692 | Fi(In-bu\013er)e(completion)g(completes)h(TODO)d(k)n(eyw)n(ords)i(at)g | 2701 | Fi(In-bu\013er)e(completion)g(completes)h(TODO)d(k)n(eyw)n(ords)i(at)g |
| 2693 | (headline)2046 3869 y(start,)28 b(T)-6 b(eX)27 b(macros)g(after)g(\\)p | 2702 | (headline)2046 3967 y(start,)28 b(T)-6 b(eX)27 b(macros)g(after)g(\\)p |
| 2694 | Fg(\\)p Fi(",)h(option)g(k)n(eyw)n(ords)g(after)f(\\)p | 2703 | Fg(\\)p Fi(",)h(option)g(k)n(eyw)n(ords)g(after)f(\\)p |
| 2695 | Fg(#-)p Fi(",)h(and)2046 3939 y(dictionary)c(w)n(ords)g(elsewhere.)2046 | 2704 | Fg(#-)p Fi(",)h(and)2046 4037 y(dictionary)c(w)n(ords)g(elsewhere.)2046 |
| 2696 | 4037 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702 b Fg(M-TAB)4242 | 2705 | 4130 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702 b Fg(M-TAB)4242 |
| 2697 | -364 y Fh(Calendar)36 b(and)h(Diary)i(In)m(tegration)4242 | 2706 | -364 y Fh(Calendar)36 b(and)h(Diary)i(In)m(tegration)4242 |
| 2698 | -208 y Fi(T)-6 b(o)35 b(include)g(en)n(tries)g(from)f(the)i(Emacs)f | 2707 | -208 y Fi(T)-6 b(o)35 b(include)g(en)n(tries)g(from)f(the)i(Emacs)f |
| 2699 | (diary)g(in)f(y)n(our)h(Org-mo)r(de)4242 -139 y(agenda:)4242 | 2708 | (diary)g(in)f(y)n(our)h(Org-mo)r(de)4242 -139 y(agenda:)4242 |
| @@ -2751,7 +2760,7 @@ b Fi(with)g(the)h(cur-)4242 3574 y(sor)h(still)g(in)g(a)h(line)f(to)h | |||
| 2751 | Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838 | 2760 | Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838 |
| 2752 | 3768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21 | 2761 | 3768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21 |
| 2753 | b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826 | 2762 | b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826 |
| 2754 | y(v3.17)h(for)h(Org-Mo)r(de)e(3.17,)i(2005)4912 3882 | 2763 | y(v3.18)h(for)h(Org-Mo)r(de)e(3.18,)i(2005)4912 3882 |
| 2755 | y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3937 y(based)j(on)g(refcard)g | 2764 | y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3937 y(based)j(on)g(refcard)g |
| 2756 | (design)g(and)f(format)i(b)n(y)f(Stephen)f(Gildea)4242 | 2765 | (design)g(and)f(format)i(b)n(y)f(Stephen)f(Gildea)4242 |
| 2757 | 4022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e | 2766 | 4022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e |
diff --git a/etc/orgcard.tex b/etc/orgcard.tex index cd077848978..f3667755a0b 100644 --- a/etc/orgcard.tex +++ b/etc/orgcard.tex | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | % Reference Card for Org Mode 3.17 | 1 | % Reference Card for Org Mode 3.18 |
| 2 | % | 2 | % |
| 3 | %**start of header | 3 | %**start of header |
| 4 | \newcount\columnsperpage | 4 | \newcount\columnsperpage |
| @@ -58,7 +58,7 @@ | |||
| 58 | % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik | 58 | % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik |
| 59 | % for their many good ideas. | 59 | % for their many good ideas. |
| 60 | 60 | ||
| 61 | \def\orgversionnumber{3.17} | 61 | \def\orgversionnumber{3.18} |
| 62 | \def\year{2005} | 62 | \def\year{2005} |
| 63 | 63 | ||
| 64 | \def\shortcopyrightnotice{\vskip 1ex plus 2 fill | 64 | \def\shortcopyrightnotice{\vskip 1ex plus 2 fill |
| @@ -590,6 +590,10 @@ in the current directory. | |||
| 590 | \key{export as HTML and open in browser}{C-c C-x b} | 590 | \key{export as HTML and open in browser}{C-c C-x b} |
| 591 | \key{prefix arg sets nb. of headline levels, e.g.}{C-3 C-c C-x h} | 591 | \key{prefix arg sets nb. of headline levels, e.g.}{C-3 C-c C-x h} |
| 592 | 592 | ||
| 593 | \key{export as iCalendar file}{C-c C-x i} | ||
| 594 | \key{export all agenda files as iCalendar files}{C-c C-x C-i} | ||
| 595 | \key{compine all agenda files to single iCal file}{C-c C-x C-c} | ||
| 596 | |||
| 593 | \key{insert template of export options}{C-c C-x t} | 597 | \key{insert template of export options}{C-c C-x t} |
| 594 | 598 | ||
| 595 | \key{toggle fixed width for entry or region}{C-c :} | 599 | \key{toggle fixed width for entry or region}{C-c :} |
| @@ -731,3 +735,7 @@ $^4$ Keybinding affected by {\tt org-CUA-compatibility}. | |||
| 731 | 735 | ||
| 732 | % arch-tag: 139f6750-5cfc-49ca-92b5-237fe5795290 | 736 | % arch-tag: 139f6750-5cfc-49ca-92b5-237fe5795290 |
| 733 | 737 | ||
| 738 | %%% Local Variables: | ||
| 739 | %%% mode: latex | ||
| 740 | %%% TeX-master: t | ||
| 741 | %%% End: | ||
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index c2e6ef390ee..2f584879147 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2005-10-20 Olli Savia <ops@iki.fi> (tiny change) | ||
| 2 | |||
| 3 | * etags.c: Undef STDIN if defined. (LynxOS defines it in system | ||
| 4 | header files.) | ||
| 5 | |||
| 1 | 2005-09-27 Francesco Potort,Al(B <pot@gnu.org> | 6 | 2005-09-27 Francesco Potort,Al(B <pot@gnu.org> |
| 2 | 7 | ||
| 3 | * etags.c: Preliminary Forth support. | 8 | * etags.c: Preliminary Forth support. |
diff --git a/lib-src/etags.c b/lib-src/etags.c index c8102ec1548..de0a2cf950b 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c | |||
| @@ -477,6 +477,11 @@ static bool cplusplus; /* .[hc] means C++, not C */ | |||
| 477 | static bool ignoreindent; /* -I: ignore indentation in C */ | 477 | static bool ignoreindent; /* -I: ignore indentation in C */ |
| 478 | static bool packages_only; /* --packages-only: in Ada, only tag packages*/ | 478 | static bool packages_only; /* --packages-only: in Ada, only tag packages*/ |
| 479 | 479 | ||
| 480 | /* STDIN is defined in LynxOS system headers */ | ||
| 481 | #ifdef STDIN | ||
| 482 | #undef STDIN | ||
| 483 | #endif | ||
| 484 | |||
| 480 | #define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */ | 485 | #define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */ |
| 481 | static bool parsing_stdin; /* --parse-stdin used */ | 486 | static bool parsing_stdin; /* --parse-stdin used */ |
| 482 | 487 | ||
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index da7c1765255..395cf7a2c5e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,5 +1,285 @@ | |||
| 1 | 2005-10-22 Kenichi Handa <handa@m17n.org> | ||
| 2 | |||
| 3 | * tar-mode.el (tar-extract): Be sure to call | ||
| 4 | find-operation-coding-system if set-auto-coding doesn't find a | ||
| 5 | coding system. | ||
| 6 | |||
| 7 | 2005-10-22 Kim F. Storm <storm@cua.dk> | ||
| 8 | |||
| 9 | * image.el (image-type-header-regexps): Rename from image-type-regexps. | ||
| 10 | Change users. | ||
| 11 | (image-type-file-name-regexps): New defconst. | ||
| 12 | (image-type-from-data): Simplify loop. | ||
| 13 | (image-type-from-buffer): New defun. | ||
| 14 | (image-type-from-file-header): Use it instead of image-type-from-data. | ||
| 15 | Use image-search-load-path instead of only looking in data-directory. | ||
| 16 | (image-type-from-file-name): New defun. | ||
| 17 | (image-search-load-path): Make PATH arg optional, default to image-load-path. | ||
| 18 | Change `pathname' to `filename'. | ||
| 19 | |||
| 20 | 2005-10-21 Richard M. Stallman <rms@gnu.org> | ||
| 21 | |||
| 22 | * textmodes/texinfo.el (texinfo-mode): Set sentence-end-base. | ||
| 23 | |||
| 24 | * textmodes/paragraphs.el (sentence-end-base): New variable. | ||
| 25 | (sentence-end): Use sentence-end-base. | ||
| 26 | |||
| 27 | 2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 28 | |||
| 29 | * font-lock.el (font-lock-default-fontify-region): Check the multiline | ||
| 30 | property independently from the font-lock-multiline variable. | ||
| 31 | |||
| 32 | 2005-10-21 Richard M. Stallman <rms@gnu.org> | ||
| 33 | |||
| 34 | * emacs-lisp/find-func.el (find-library-name): Doc fix. | ||
| 35 | |||
| 36 | * startup.el (command-line): Convert library names | ||
| 37 | in `load-history' to absolute file names. | ||
| 38 | |||
| 39 | * subr.el (symbol-file): Doc fix. | ||
| 40 | |||
| 41 | * loadhist.el (file-loadhist-lookup): Call locate-library | ||
| 42 | instead of find-library-name. Don't try converting | ||
| 43 | abs file names to library names, since load-history no longer | ||
| 44 | has library names in it. | ||
| 45 | (file-dependents, file-provides, file-requires): Doc fixes. | ||
| 46 | |||
| 47 | 2005-10-21 Juri Linkov <juri@jurta.org> | ||
| 48 | |||
| 49 | * progmodes/etags.el (tags-table-mode): New function. | ||
| 50 | (tags-verify-table): Replace initialize-new-tags-table with | ||
| 51 | tags-table-mode. | ||
| 52 | |||
| 53 | * desktop.el (desktop-buffers-not-to-save): Remove TAGS from the | ||
| 54 | default value. | ||
| 55 | (desktop-modes-not-to-save): Add tags-table-mode to the | ||
| 56 | default value. | ||
| 57 | |||
| 58 | * info.el (Info-index-next): Add total number of index | ||
| 59 | alternatives to the message. | ||
| 60 | |||
| 61 | * textmodes/fill.el (fill-nobreak-p): Fix first two rules to skip | ||
| 62 | backward only space (instead of space and period) before looking | ||
| 63 | at sentence end. | ||
| 64 | |||
| 65 | * simple.el (set-variable): Use user-variable-p instead of symbolp. | ||
| 66 | Add the old variable value as 4th default-value arg of read-string. | ||
| 67 | |||
| 68 | 2005-10-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | ||
| 69 | |||
| 70 | * cus-face.el (custom-declare-face): Make face from X resources | ||
| 71 | also on Mac. | ||
| 72 | |||
| 73 | * disp-table.el (standard-display-g1, standard-display-graphic): | ||
| 74 | Refuse to use string glyphs also on Mac. | ||
| 75 | (standard-display-european): Don't set terminal coding system also | ||
| 76 | on Mac. | ||
| 77 | |||
| 78 | * frame.el (display-screens): Use x-display-screens also on Mac. | ||
| 79 | |||
| 80 | 2005-10-21 Romain Francoise <romain@orebokech.com> | ||
| 81 | |||
| 82 | * net/rcirc.el: Now part of GNU Emacs. Update FSF's address. | ||
| 83 | |||
| 84 | 2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 85 | |||
| 86 | * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): Make $@ | ||
| 87 | and $? into sexps. | ||
| 88 | |||
| 89 | * font-lock.el (font-lock-compile-keywords): Add a help-echo to the | ||
| 90 | warning face on open-paren-in-column-0. | ||
| 91 | |||
| 92 | * emacs-lisp/syntax.el (syntax-ppss-flush-cache): Fix corner | ||
| 93 | boundary case. Fix typo. | ||
| 94 | Suggested by Martin Rudalics <rudalics@gmx.at>. | ||
| 95 | |||
| 96 | 2005-10-21 Carsten Dominik <dominik@science.uva.nl> | ||
| 97 | |||
| 98 | * textmodes/org.el: (org-combined-agenda-icalendar-file) | ||
| 99 | (org-icalendar-include-todo, org-icalendar-combined-name): New options. | ||
| 100 | (org-export-icalendar-this-file) | ||
| 101 | (org-export-icalendar-all-agenda-files) | ||
| 102 | (org-export-icalendar-combine-agenda-files): New commands. | ||
| 103 | (org-export-icalendar, org-print-icalendar-entries) | ||
| 104 | (org-start-icalendar-file, org-finish-icalendar-file) | ||
| 105 | (org-ical-ts-to-string): New functions. | ||
| 106 | (org-read-date, org-goto-calendar) | ||
| 107 | (org-agenda-goto-calendar): Inhibit displaying diary entries by | ||
| 108 | call to `calendar'. | ||
| 109 | (orgtbl-setup): Remove the :keys arguments from the menu description. | ||
| 110 | (org-after-save-iCalendar-file-hook): New variable. | ||
| 111 | |||
| 112 | 2005-10-21 Kenichi Handa <handa@m17n.org> | ||
| 113 | |||
| 114 | * language/vietnamese.el (tcvn-5712): Make it an alias of | ||
| 115 | vietnamese-tcvn coding-system. | ||
| 116 | |||
| 117 | 2005-10-20 Michael Albinus <michael.albinus@gmx.de> | ||
| 118 | |||
| 119 | * net/ange-ftp.el (ange-ftp-date-regexp): Handle also the case no | ||
| 120 | group id is given. | ||
| 121 | |||
| 122 | 2005-10-20 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 123 | |||
| 124 | * progmodes/sh-script.el (sh-escaped-line-re): New var. | ||
| 125 | (sh-here-doc-open-re, sh-font-lock-close-heredoc): Use it. | ||
| 126 | (sh-font-lock-open-heredoc): Try to properly handle heredoc starters | ||
| 127 | whose line is either continued or ends with a comment. | ||
| 128 | |||
| 129 | 2005-10-20 Romain Francoise <romain@orebokech.com> | ||
| 130 | |||
| 131 | * net/rcirc.el (with-rcirc-process-buffer): Move above its first user. | ||
| 132 | |||
| 133 | * replace.el (occur-engine): Add follow-link property. | ||
| 134 | |||
| 135 | * font-core.el (font-lock-mode): Doc fix. | ||
| 136 | |||
| 137 | 2005-10-20 Richard M. Stallman <rms@gnu.org> | ||
| 138 | |||
| 139 | * net/rcirc.el: New file. | ||
| 140 | |||
| 141 | 2005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change) | ||
| 142 | |||
| 143 | * term.el (term-term-name): Initialize to "eterm-color". | ||
| 144 | |||
| 145 | 2005-10-20 Ken Manheimer <ken.manheimer@gmail.com> | ||
| 146 | |||
| 147 | * allout.el: Add autoloads of crypt++ and mailcrypt routines, all | ||
| 148 | for encryption functionality. | ||
| 149 | Move allout customization subgroup from `editing' to `outlines' group. | ||
| 150 | Fix commentary 'keywords' to legitimate ones. | ||
| 151 | Update author info (using my current email address, obscurified). | ||
| 152 | (allout-encrypt-string, allout-encryption-produce-work-buffer) | ||
| 153 | (allout-encrypted-topic-p, allout-encrypted-text-type) | ||
| 154 | (allout-mc-activate-passwd, allout-create-encryption-key-verifier) | ||
| 155 | (allout-situate-encryption-key-verifier) | ||
| 156 | (allout-get-encryption-key-verifier, allout-verify-key) | ||
| 157 | (allout-next-topic-pending-encryption) | ||
| 158 | (allout-encrypt-decrypted, allout-encrypted-type-prefix): New funcs. | ||
| 159 | (outline-topic-encryption-bullet, outline-default-encryption-scheme) | ||
| 160 | (outline-key-verifier-handling, outline-key-hint-handling) | ||
| 161 | (outline-encrypt-unencrypted-on-saves): New defcustoms. | ||
| 162 | (allout-file-key-verifier-string, allout-encryption-scheme) | ||
| 163 | (allout-key-verifier-string, allout-key-hint-string) | ||
| 164 | (allout-after-save-decrypt): New variables. | ||
| 165 | (allout-write-file-hook-handler, allout-auto-save-hook-handler) | ||
| 166 | (allout-after-saves-handler): New hook functions. | ||
| 167 | (allout-post-command-business): Do allout-after-save-decrypt. | ||
| 168 | (allout-enable-file-variable-adjustment): Custom var to enable | ||
| 169 | mechanism for adding and adjusting settings of Emacs file variables. | ||
| 170 | (allout-adjust-file-variable, allout-file-vars-section-data): | ||
| 171 | New functions, implement the mechanism. | ||
| 172 | (outlineify-sticky): Use the file vars mechanism. | ||
| 173 | (allout-inhibit-protection, allout-during-write-cue) | ||
| 174 | (allout-override-protect, allout-before-change-protect): Remove. | ||
| 175 | (allout-flag-region, allout-open-topic): Adjust read-only text. | ||
| 176 | (allout-open-line-not-read-only): Add to facilitate read-only | ||
| 177 | text based protection. | ||
| 178 | (allout-kill-line): Revise to adjust read-only text, clue the | ||
| 179 | user about the inhibition. | ||
| 180 | (allout-unprotected): Use unwind-protect. | ||
| 181 | (allout-shift-in, allout-shift-out): Disallow manually shifting a | ||
| 182 | topic deeper than the offspring depth of the previous topic - | ||
| 183 | avoiding confusing "containment discontinuities". | ||
| 184 | (allout-reindent-bodies): Fix retention of body relative hanging | ||
| 185 | indent during promotion of collapsed bodies. | ||
| 186 | (allout-open-topic): Make it easy to open new topic with same | ||
| 187 | bullet as current topic - topic creation functions provided with | ||
| 188 | any universal argument provokes now prompt for bullet, defaulting | ||
| 189 | to the bullet of the previous topic. | ||
| 190 | (allout-plain-bullets-string, allout-distinctive-bullets-string): | ||
| 191 | Plain bullet alternates '.' period and ',' comma only. All other | ||
| 192 | bullets are relegated to special status (but customizable). | ||
| 193 | (allout-end-of-entry): Rename from 'allout-end-of-current-entry | ||
| 194 | since it actually operates w.r.t. most immediately containing | ||
| 195 | entry, visible or not. | ||
| 196 | (allout-hide-current-entry, allout-show-current-entry): Use the | ||
| 197 | revised version. | ||
| 198 | (allout-old-expose-topic): Solidify deprecation. | ||
| 199 | (allout-end-of-subtree): Add so we can span concealed as well | ||
| 200 | as visible topics. | ||
| 201 | (allout-end-of-current-subtree): Use `allout-end-of-subtree'. | ||
| 202 | (allout-end-of-current-heading): Tweak to just respect the first line. | ||
| 203 | (allout-get-body-text): Add. | ||
| 204 | (allout-ascend-to-depth, allout-ascend): Position at end of prefix | ||
| 205 | when invoked interactively. | ||
| 206 | (allout-up-current-level): Use `interactive-p'. | ||
| 207 | (allout-mode, allout-init): Miscellaneous docstring and | ||
| 208 | operational refinements, as well as hookups of new encryption stuff. | ||
| 209 | (allout-beginning-of-current-entry): Now works as advertised. | ||
| 210 | (allout-end-of-current-entry): Remove of superfluous allout-show-entry. | ||
| 211 | (allout-isearch-rectification): Refine condition for isearching. | ||
| 212 | (allout-isearch-abort, allout-enwrap-isearch) | ||
| 213 | (allout-flag-region, my-region-active-p): Relocate some macros. | ||
| 214 | (allout-title): Fallback title is '(buffer-name)', not | ||
| 215 | non-existing '(current-buffer-name)'. | ||
| 216 | (subst-char-in-string): Define if absent (for some XEmacs versions). | ||
| 217 | |||
| 218 | 2005-10-20 Jari Aalto <jari.aalto@cante.net> | ||
| 219 | |||
| 220 | * mail/sendmail.el (mail-setup-hook, mail-aliases) | ||
| 221 | (mail-yank-prefix, mail-indentation-spaces, mail-yank-hooks) | ||
| 222 | (mail-citation-prefix-regexp, mail-signature-file) | ||
| 223 | (mail-default-headers, mail-bury-selects-summary) | ||
| 224 | (mail-send-nonascii): Add autoload cookies. | ||
| 225 | |||
| 226 | 2005-10-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change) | ||
| 227 | |||
| 228 | * frame.el (blink-cursor-mode): Add `mac' to the list of | ||
| 229 | window-system's that support blinking cursor. | ||
| 230 | |||
| 231 | 2005-10-20 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 232 | |||
| 233 | * textmodes/org.el (org-level-color-stars-only): Fix typo in docstring. | ||
| 234 | |||
| 235 | 2005-10-20 Eli Zaretskii <eliz@gnu.org> | ||
| 236 | |||
| 237 | * makefile.w32-in ($(lisp)/mh-e/mh-loaddefs.el): | ||
| 238 | Bind find-file-suppress-same-file-warnings to t, to avoid warnings due | ||
| 239 | to different drive letter case in D:/foo/bar.el vs d:/foo/bar.el. | ||
| 240 | |||
| 241 | 2005-10-20 Kim F. Storm <storm@cua.dk> | ||
| 242 | |||
| 243 | * ido.el (ido-is-tramp-root): Simplify regexp matching tramp root. | ||
| 244 | (ido-set-current-directory): Don't add / after final @. | ||
| 245 | (ido-file-name-all-completions-1): Adapt to fixed tramp completion. | ||
| 246 | Explicitly handle ange-ftp completion oddities. | ||
| 247 | (ido-make-file-list): Don't rotate list at tramp root to avoid | ||
| 248 | triggering tramp file handler for expand-file-name via get-file-buffer. | ||
| 249 | |||
| 250 | 2005-10-19 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 251 | |||
| 252 | * simple.el (eval-expression-print-format): Put the char-string | ||
| 253 | inside the parenthesis, like the other alternative notations. | ||
| 254 | (kill-new): Use push. | ||
| 255 | (copy-to-buffer): Use with-current-buffer. | ||
| 256 | (completion-setup-function): Simplify. | ||
| 257 | (minibuffer-local-must-match-map): Don't add redundant bindings which | ||
| 258 | are already present in its parent (minibuffer-local-completion-map). | ||
| 259 | |||
| 260 | * savehist.el (savehist-coding-system): Revert to checking XEmacs. | ||
| 261 | |||
| 262 | 2005-10-19 Jay Belanger <belanger@truman.edu> | ||
| 263 | |||
| 264 | * calc/calc-units.el (math-standard-units): Add units, adjust | ||
| 265 | symbols and update values. | ||
| 266 | (math-unit-prefixes): Add more prefixes. | ||
| 267 | |||
| 268 | 2005-10-19 Romain Francoise <romain@orebokech.com> | ||
| 269 | |||
| 270 | * bookmark.el (bookmark-menu-heading): New face. | ||
| 271 | (bookmark-bmenu-list): Use it. | ||
| 272 | Don't fiddle with `baud-rate' at top-level. | ||
| 273 | |||
| 274 | 2005-10-18 Chong Yidong <cyd@stupidchicken.com> | ||
| 275 | |||
| 276 | * image.el (create-image, find-image): Mention max-image-size in | ||
| 277 | docstring. | ||
| 278 | |||
| 1 | 2005-10-18 Stefan Monnier <monnier@iro.umontreal.ca> | 279 | 2005-10-18 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 280 | ||
| 281 | * savehist.el (savehist-load): Revert to checking XEmacs. | ||
| 282 | |||
| 3 | * textmodes/conf-mode.el: Don't use font-lock-defaults-alist. | 283 | * textmodes/conf-mode.el: Don't use font-lock-defaults-alist. |
| 4 | Various docstring and line-width fixups. | 284 | Various docstring and line-width fixups. |
| 5 | (conf-mode): Use cond. | 285 | (conf-mode): Use cond. |
| @@ -117,15 +397,14 @@ | |||
| 117 | 397 | ||
| 118 | 2005-10-18 Jay Belanger <belanger@truman.edu> | 398 | 2005-10-18 Jay Belanger <belanger@truman.edu> |
| 119 | 399 | ||
| 120 | * calc/calc-store (calc-store-into): Get the proper variable name | 400 | * calc/calc-store.el (calc-store-into): Get the proper variable name |
| 121 | to display in message. | 401 | to display in message. |
| 122 | 402 | ||
| 123 | 2005-10-18 Nick Roberts <nickrob@snap.net.nz> | 403 | 2005-10-18 Nick Roberts <nickrob@snap.net.nz> |
| 124 | 404 | ||
| 125 | * progmodes/gdb-ui.el (gdb-var-create-handler): Make watch | 405 | * progmodes/gdb-ui.el (gdb-var-create-handler): Make watch |
| 126 | expressions display in speedbar for all buffers when debugging. | 406 | expressions display in speedbar for all buffers when debugging. |
| 127 | (gdb-speedbar-expand-node): Ensure node contraction is always | 407 | (gdb-speedbar-expand-node): Ensure node contraction is always updated. |
| 128 | updated. | ||
| 129 | 408 | ||
| 130 | * speedbar.el (speedbar-set-mode-line-format): Indent properly. | 409 | * speedbar.el (speedbar-set-mode-line-format): Indent properly. |
| 131 | (speedbar-insert-button, speedbar-make-button): | 410 | (speedbar-insert-button, speedbar-make-button): |
| @@ -249,7 +528,6 @@ | |||
| 249 | * progmodes/pascal.el (pascal-complete-word) | 528 | * progmodes/pascal.el (pascal-complete-word) |
| 250 | (pascal-show-completions): Ditto. | 529 | (pascal-show-completions): Ditto. |
| 251 | 530 | ||
| 252 | |||
| 253 | * textmodes/bibtex.el (bibtex-complete-internal): Ditto. | 531 | * textmodes/bibtex.el (bibtex-complete-internal): Ditto. |
| 254 | 532 | ||
| 255 | * simple.el (completion-common-substring): New variable. | 533 | * simple.el (completion-common-substring): New variable. |
diff --git a/lisp/ChangeLog.10 b/lisp/ChangeLog.10 index 6467fef4e72..51cda269238 100644 --- a/lisp/ChangeLog.10 +++ b/lisp/ChangeLog.10 | |||
| @@ -14639,7 +14639,7 @@ | |||
| 14639 | * font-lock.el (font-lock-defaults, font-lock-defaults-alist) | 14639 | * font-lock.el (font-lock-defaults, font-lock-defaults-alist) |
| 14640 | (font-lock-multiline, font-lock-fontified, font-lock-mode) | 14640 | (font-lock-multiline, font-lock-fontified, font-lock-mode) |
| 14641 | (turn-on-font-lock, font-lock-add-keywords, global-font-lock-mode) | 14641 | (turn-on-font-lock, font-lock-add-keywords, global-font-lock-mode) |
| 14642 | (font-lock-global-modes): Moved to font-core.el. | 14642 | (font-lock-global-modes): Move to font-core.el. |
| 14643 | (font-lock-set-defaults-1): Partially moved to font-core.el. | 14643 | (font-lock-set-defaults-1): Partially moved to font-core.el. |
| 14644 | 14644 | ||
| 14645 | * font-core.el: New file, with functions taken from font-lock.el. | 14645 | * font-core.el: New file, with functions taken from font-lock.el. |
diff --git a/lisp/allout.el b/lisp/allout.el index a64ba4b8f9f..5dc16ee3546 100644 --- a/lisp/allout.el +++ b/lisp/allout.el | |||
| @@ -3,10 +3,10 @@ | |||
| 3 | ;; Copyright (C) 1992, 1993, 1994, 2001, 2002, 2003, 2004, | 3 | ;; Copyright (C) 1992, 1993, 1994, 2001, 2002, 2003, 2004, |
| 4 | ;; 2005 Free Software Foundation, Inc. | 4 | ;; 2005 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | ;; Author: Ken Manheimer <klm@zope.com> | 6 | ;; Author: Ken Manheimer <ken dot manheimer at gmail dot com> |
| 7 | ;; Maintainer: Ken Manheimer <klm@zope.com> | 7 | ;; Maintainer: Ken Manheimer <ken dot manheimer at gmail dot com> |
| 8 | ;; Created: Dec 1991 - first release to usenet | 8 | ;; Created: Dec 1991 - first release to usenet |
| 9 | ;; Keywords: outlines mode wp languages | 9 | ;; Keywords: outlines wp languages |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
| 12 | 12 | ||
| @@ -34,43 +34,68 @@ | |||
| 34 | ;; programming languages. (For an example, see the allout code | 34 | ;; programming languages. (For an example, see the allout code |
| 35 | ;; itself, which is organized in ;; an outline framework.) | 35 | ;; itself, which is organized in ;; an outline framework.) |
| 36 | ;; | 36 | ;; |
| 37 | ;; In addition to outline navigation and exposure, allout includes: | 37 | ;; Some features: |
| 38 | ;; | 38 | ;; |
| 39 | ;; - topic-oriented repositioning, cut, and paste | 39 | ;; - classic outline-mode topic-oriented navigation and exposure adjustment |
| 40 | ;; - integral outline exposure-layout | 40 | ;; - topic-oriented editing including coherent topic and subtopic |
| 41 | ;; - incremental search with dynamic exposure and reconcealment of hidden text | 41 | ;; creation, promotion, demotion, cut/paste across depths, etc |
| 42 | ;; - incremental search with dynamic exposure and reconcealment of text | ||
| 43 | ;; - customizable bullet format enbles programming-language specific | ||
| 44 | ;; outlining, for ultimate code-folding editing. (allout code itself is | ||
| 45 | ;; formatted as an outline - do ESC-x eval-current-buffer in allout.el | ||
| 46 | ;; to try it out.) | ||
| 47 | ;; - configurable per-file initial exposure settings | ||
| 48 | ;; - symmetric-key and key-pair topic encryption, plus reliable key | ||
| 49 | ;; verification and user-supplied hint maintenance. (see | ||
| 50 | ;; allout-toggle-current-subtree-encryption docstring.) | ||
| 42 | ;; - automatic topic-number maintenance | 51 | ;; - automatic topic-number maintenance |
| 43 | ;; - "Hot-spot" operation, for single-keystroke maneuvering and | 52 | ;; - "hot-spot" operation, for single-keystroke maneuvering and |
| 44 | ;; exposure control. (See the `allout-mode' docstring.) | 53 | ;; exposure control (see the allout-mode docstring) |
| 54 | ;; - easy rendering of exposed portions into numbered, latex, indented, etc | ||
| 55 | ;; outline styles | ||
| 45 | ;; | 56 | ;; |
| 46 | ;; and many other features. | 57 | ;; and more. |
| 47 | ;; | 58 | ;; |
| 48 | ;; The outline menubar additions provide quick reference to many of | 59 | ;; The outline menubar additions provide quick reference to many of |
| 49 | ;; the features, and see the docstring of the function `allout-init' | 60 | ;; the features, and see the docstring of the variable `allout-init' |
| 50 | ;; for instructions on priming your Emacs session for automatic | 61 | ;; for instructions on priming your emacs session for automatic |
| 51 | ;; activation of `allout-mode'. | 62 | ;; activation of allout-mode. |
| 52 | ;; | 63 | ;; |
| 53 | ;; See the docstring of the variables `allout-layout' and | 64 | ;; See the docstring of the variables `allout-layout' and |
| 54 | ;; `allout-auto-activation' for details on automatic activation of | 65 | ;; `allout-auto-activation' for details on automatic activation of |
| 55 | ;; allout `allout-mode' as a minor mode. (It has changed since allout | 66 | ;; `allout-mode' as a minor mode. (It has changed since allout |
| 56 | ;; 3.x, for those of you that depend on the old method.) | 67 | ;; 3.x, for those of you that depend on the old method.) |
| 57 | ;; | 68 | ;; |
| 58 | ;; Note - the lines beginning with `;;;_' are outline topic headers. | 69 | ;; Note - the lines beginning with `;;;_' are outline topic headers. |
| 59 | ;; Just `ESC-x eval-current-buffer' to give it a whirl. | 70 | ;; Just `ESC-x eval-current-buffer' to give it a whirl. |
| 60 | 71 | ||
| 61 | ;; Ken Manheimer klm@zope.com | 72 | ;; ken manheimer (ken dot manheimer at gmail dot com) |
| 62 | 73 | ||
| 63 | ;;; Code: | 74 | ;;; Code: |
| 64 | 75 | ||
| 65 | ;;;_* Provide | 76 | ;;;_* Provide |
| 77 | ;(provide 'outline) | ||
| 66 | (provide 'allout) | 78 | (provide 'allout) |
| 67 | 79 | ||
| 80 | ;;;_* Dependency autoloads | ||
| 81 | (eval-when-compile 'cl) ; otherwise, flet compilation fouls | ||
| 82 | (autoload 'crypt-encrypt-buffer "crypt++") | ||
| 83 | (setq-default crypt-encryption-type 'gpg) | ||
| 84 | |||
| 85 | (autoload 'mc-encrypt "mailcrypt" | ||
| 86 | "*Encrypt the current buffer") | ||
| 87 | (autoload 'mc-activate-passwd "mailcrypt" | ||
| 88 | "Activate the passphrase matching ID, using PROMPT for a prompt. | ||
| 89 | Return the passphrase. If PROMPT is nil, only return value if cached.") | ||
| 90 | (autoload 'mc-gpg-process-region "mc-gpg") | ||
| 91 | (autoload 'mc-dectivate-passwd "mailcrypt" | ||
| 92 | "*Deactivate the passphrase cache.") | ||
| 93 | |||
| 68 | ;;;_* USER CUSTOMIZATION VARIABLES: | 94 | ;;;_* USER CUSTOMIZATION VARIABLES: |
| 69 | (defgroup allout nil | 95 | (defgroup allout nil |
| 70 | "Extensive outline mode for use alone and with other modes." | 96 | "Extensive outline mode for use alone and with other modes." |
| 71 | :prefix "allout-" | 97 | :prefix "allout-" |
| 72 | :group 'editing | 98 | :group 'outlines) |
| 73 | :version "22.1") | ||
| 74 | 99 | ||
| 75 | ;;;_ + Layout, Mode, and Topic Header Configuration | 100 | ;;;_ + Layout, Mode, and Topic Header Configuration |
| 76 | 101 | ||
| @@ -111,8 +136,8 @@ Buffer-specific. | |||
| 111 | 136 | ||
| 112 | A list value specifies a default layout for the current buffer, to be | 137 | A list value specifies a default layout for the current buffer, to be |
| 113 | applied upon activation of `allout-mode'. Any non-nil value will | 138 | applied upon activation of `allout-mode'. Any non-nil value will |
| 114 | automatically trigger `allout-mode', provided `allout-init' | 139 | automatically trigger `allout-mode' \(provided `allout-init' has been called |
| 115 | has been called to enable it. | 140 | to enable this behavior). |
| 116 | 141 | ||
| 117 | See the docstring for `allout-init' for details on setting up for | 142 | See the docstring for `allout-init' for details on setting up for |
| 118 | auto-mode-activation, and for `allout-expose-topic' for the format of | 143 | auto-mode-activation, and for `allout-expose-topic' for the format of |
| @@ -171,7 +196,7 @@ bullets." | |||
| 171 | :group 'allout) | 196 | :group 'allout) |
| 172 | (make-variable-buffer-local 'allout-primary-bullet) | 197 | (make-variable-buffer-local 'allout-primary-bullet) |
| 173 | ;;;_ = allout-plain-bullets-string | 198 | ;;;_ = allout-plain-bullets-string |
| 174 | (defcustom allout-plain-bullets-string ".:,;" | 199 | (defcustom allout-plain-bullets-string ".," |
| 175 | "*The bullets normally used in outline topic prefixes. | 200 | "*The bullets normally used in outline topic prefixes. |
| 176 | 201 | ||
| 177 | See `allout-distinctive-bullets-string' for the other kind of | 202 | See `allout-distinctive-bullets-string' for the other kind of |
| @@ -185,7 +210,7 @@ of this var to take effect." | |||
| 185 | :group 'allout) | 210 | :group 'allout) |
| 186 | (make-variable-buffer-local 'allout-plain-bullets-string) | 211 | (make-variable-buffer-local 'allout-plain-bullets-string) |
| 187 | ;;;_ = allout-distinctive-bullets-string | 212 | ;;;_ = allout-distinctive-bullets-string |
| 188 | (defcustom allout-distinctive-bullets-string "*+-=>([{}&!?#%\"X@$~_\\" | 213 | (defcustom allout-distinctive-bullets-string "*+-=>()[{}&!?#%\"X@$~_\\:;^" |
| 189 | "*Persistent outline header bullets used to distinguish special topics. | 214 | "*Persistent outline header bullets used to distinguish special topics. |
| 190 | 215 | ||
| 191 | These bullets are used to distinguish topics from the run-of-the-mill | 216 | These bullets are used to distinguish topics from the run-of-the-mill |
| @@ -198,12 +223,13 @@ rebulleting, so they can be used to characterize topics, eg: | |||
| 198 | `?' question topics | 223 | `?' question topics |
| 199 | `\(' parenthetic comment \(with a matching close paren inside) | 224 | `\(' parenthetic comment \(with a matching close paren inside) |
| 200 | `[' meta-note \(with a matching close ] inside) | 225 | `[' meta-note \(with a matching close ] inside) |
| 201 | `\"' a quote | 226 | `\"' a quotation |
| 202 | `=' value settings | 227 | `=' value settings |
| 203 | `~' \"more or less\" | 228 | `~' \"more or less\" |
| 229 | `^' see above | ||
| 204 | 230 | ||
| 205 | ... just for example. (`#' typically has a special meaning to the | 231 | ... for example. (`#' typically has a special meaning to the software, |
| 206 | software, according to the value of `allout-numbered-bullet'.) | 232 | according to the value of `allout-numbered-bullet'.) |
| 207 | 233 | ||
| 208 | See `allout-plain-bullets-string' for the selection of | 234 | See `allout-plain-bullets-string' for the selection of |
| 209 | alternating bullets. | 235 | alternating bullets. |
| @@ -337,7 +363,6 @@ disables numbering maintenance." | |||
| 337 | Set this var to the bullet you want to use for file cross-references." | 363 | Set this var to the bullet you want to use for file cross-references." |
| 338 | :type '(choice (const nil) string) | 364 | :type '(choice (const nil) string) |
| 339 | :group 'allout) | 365 | :group 'allout) |
| 340 | |||
| 341 | ;;;_ = allout-presentation-padding | 366 | ;;;_ = allout-presentation-padding |
| 342 | (defcustom allout-presentation-padding 2 | 367 | (defcustom allout-presentation-padding 2 |
| 343 | "*Presentation-format white-space padding factor, for greater indent." | 368 | "*Presentation-format white-space padding factor, for greater indent." |
| @@ -381,7 +406,7 @@ numbers are always used." | |||
| 381 | :type 'string | 406 | :type 'string |
| 382 | :group 'allout) | 407 | :group 'allout) |
| 383 | ;;;_ - allout-title | 408 | ;;;_ - allout-title |
| 384 | (defcustom allout-title '(or buffer-file-name (current-buffer-name)) | 409 | (defcustom allout-title '(or buffer-file-name (buffer-name)) |
| 385 | "*Expression to be evaluated to determine the title for LaTeX | 410 | "*Expression to be evaluated to determine the title for LaTeX |
| 386 | formatted copy." | 411 | formatted copy." |
| 387 | :type 'sexp | 412 | :type 'sexp |
| @@ -397,6 +422,94 @@ formatted copy." | |||
| 397 | :type 'string | 422 | :type 'string |
| 398 | :group 'allout) | 423 | :group 'allout) |
| 399 | 424 | ||
| 425 | ;;;_ + Topic encryption | ||
| 426 | ;;;_ = allout-topic-encryption-bullet | ||
| 427 | (defcustom allout-topic-encryption-bullet "~" | ||
| 428 | "*Bullet signifying encryption of the entry's body." | ||
| 429 | :type '(choice (const nil) string) | ||
| 430 | :group 'allout) | ||
| 431 | ;;;_ = allout-default-encryption-scheme | ||
| 432 | (defcustom allout-default-encryption-scheme 'mc-scheme-gpg | ||
| 433 | "*Default allout outline topic encryption mode. | ||
| 434 | |||
| 435 | See mailcrypt variable `mc-schemes' and mailcrypt docs for encryption schemes." | ||
| 436 | :type 'symbol | ||
| 437 | :group 'allout) | ||
| 438 | ;;;_ = allout-key-verifier-handling | ||
| 439 | (defcustom allout-key-verifier-handling 'situate | ||
| 440 | "*Dictate outline encryption key verifier handling. | ||
| 441 | |||
| 442 | The key verifier is string associated with a file that is encrypted with | ||
| 443 | the file's current symmetric encryption key. It is used, if present, to | ||
| 444 | confirm that the key entered by the user is the same as the established | ||
| 445 | one, or explicitly presenting the user with the choice to go with a | ||
| 446 | new key when a difference is encountered. | ||
| 447 | |||
| 448 | The range of values are: | ||
| 449 | |||
| 450 | situate - include key verifier string as text in the file's local-vars | ||
| 451 | section | ||
| 452 | transient - establish the value as a variable in the file's buffer, but | ||
| 453 | don't preserve it as a file variable. | ||
| 454 | disabled - don't establish or do verification. | ||
| 455 | |||
| 456 | See the docstring for the `allout-enable-file-variable-adjustment' | ||
| 457 | variable for details about allout ajustment of file variables." | ||
| 458 | :type '(choice (const situate) | ||
| 459 | (const transient) | ||
| 460 | (const disabled)) | ||
| 461 | :group 'allout) | ||
| 462 | (make-variable-buffer-local 'allout-key-verifier-handling) | ||
| 463 | ;;;_ = allout-key-hint-handling | ||
| 464 | (defcustom allout-key-hint-handling 'always | ||
| 465 | "*Dictate outline encryption key reminder handling: | ||
| 466 | |||
| 467 | always - always show reminder when prompting | ||
| 468 | needed - show reminder on key entry failure | ||
| 469 | manage - never present reminder, but still manage a file-var entry for it | ||
| 470 | disabled - don't even manage the file variable entry | ||
| 471 | |||
| 472 | See the docstring for the `allout-enable-file-variable-adjustment' | ||
| 473 | variable for details about allout ajustment of file variables." | ||
| 474 | :type '(choice (const always) | ||
| 475 | (const needed) | ||
| 476 | (const manage) | ||
| 477 | (const disabled)) | ||
| 478 | :group 'allout) | ||
| 479 | (make-variable-buffer-local 'allout-key-hint-handling) | ||
| 480 | ;;;_ = allout-encrypt-unencrypted-on-saves | ||
| 481 | (defcustom allout-encrypt-unencrypted-on-saves 'except-current | ||
| 482 | "*When saving, should topics pending encryption be encrypted? | ||
| 483 | |||
| 484 | The idea is to prevent file-system exposure of any un-encrypted stuff, and | ||
| 485 | mostly covers both deliberate file writes and auto-saves. | ||
| 486 | |||
| 487 | - Yes: encrypt all topics pending encryption, even if it's the one | ||
| 488 | currently being edited. \(In that case, the currently edited topic | ||
| 489 | will be automatically decrypted before any user interaction, so they | ||
| 490 | can continue editing but the copy on the file system will be | ||
| 491 | encrypted.) | ||
| 492 | Auto-saves will use the \"All except current topic\" mode if this | ||
| 493 | one is selected, to avoid practical difficulties - see below. | ||
| 494 | - All except current topic: skip the topic currently being edited, even if | ||
| 495 | it's pending encryption. This may expose the current topic on the | ||
| 496 | file sytem, but avoids the nuisance of prompts for the encryption | ||
| 497 | key in the middle of editing for, eg, autosaves. | ||
| 498 | This mode is used for auto-saves for both this option and \"Yes\". | ||
| 499 | - No: leave it to the user to encrypt any unencrypted topics. | ||
| 500 | |||
| 501 | For practical reasons, auto-saves always use the 'except-current policy | ||
| 502 | when auto-encryption is enabled. \(Otherwise, spurious key prompts and | ||
| 503 | unavoidable timing collisions are too disruptive.) If security for a file | ||
| 504 | requires that even the current topic is never auto-saved in the clear, | ||
| 505 | disable auto-saves for that file." | ||
| 506 | |||
| 507 | :type '(choice (const :tag "Yes" t) | ||
| 508 | (const :tag "All except current topic" except-current) | ||
| 509 | (const :tag "No" nil)) | ||
| 510 | :group 'allout) | ||
| 511 | (make-variable-buffer-local 'allout-encrypt-unencrypted-on-saves) | ||
| 512 | |||
| 400 | ;;;_ + Miscellaneous customization | 513 | ;;;_ + Miscellaneous customization |
| 401 | 514 | ||
| 402 | ;;;_ = allout-command-prefix | 515 | ;;;_ = allout-command-prefix |
| @@ -422,13 +535,15 @@ unless optional third, non-nil element is present.") | |||
| 422 | ("\C-f" allout-forward-current-level) | 535 | ("\C-f" allout-forward-current-level) |
| 423 | ("\C-b" allout-backward-current-level) | 536 | ("\C-b" allout-backward-current-level) |
| 424 | ("\C-a" allout-beginning-of-current-entry) | 537 | ("\C-a" allout-beginning-of-current-entry) |
| 425 | ("\C-e" allout-end-of-current-entry) | 538 | ("\C-e" allout-end-of-entry) |
| 426 | ; Exposure commands: | 539 | ; Exposure commands: |
| 427 | ("\C-i" allout-show-children) | 540 | ("\C-i" allout-show-children) |
| 428 | ("\C-s" allout-show-current-subtree) | 541 | ("\C-s" allout-show-current-subtree) |
| 429 | ("\C-h" allout-hide-current-subtree) | 542 | ("\C-h" allout-hide-current-subtree) |
| 543 | ("h" allout-hide-current-subtree) | ||
| 430 | ("\C-o" allout-show-current-entry) | 544 | ("\C-o" allout-show-current-entry) |
| 431 | ("!" allout-show-all) | 545 | ("!" allout-show-all) |
| 546 | ("x" allout-toggle-current-subtree-encryption) | ||
| 432 | ; Alteration commands: | 547 | ; Alteration commands: |
| 433 | (" " allout-open-sibtopic) | 548 | (" " allout-open-sibtopic) |
| 434 | ("." allout-open-subtopic) | 549 | ("." allout-open-subtopic) |
| @@ -489,19 +604,22 @@ those that do not have the variable `comment-start' set. A value of | |||
| 489 | 604 | ||
| 490 | (make-variable-buffer-local 'allout-reindent-bodies) | 605 | (make-variable-buffer-local 'allout-reindent-bodies) |
| 491 | 606 | ||
| 492 | ;;;_ = allout-inhibit-protection | 607 | ;;;_ = allout-enable-file-variable-adjustment |
| 493 | (defcustom allout-inhibit-protection nil | 608 | (defcustom allout-enable-file-variable-adjustment t |
| 494 | "*Non-nil disables warnings and confirmation-checks for concealed-text edits. | 609 | "*If non-nil, some allout outline actions can edit Emacs file variables text. |
| 610 | |||
| 611 | This can range from changes to existing entries, addition of new ones, | ||
| 612 | and creation of a new local variables section when necessary. | ||
| 495 | 613 | ||
| 496 | Outline mode uses Emacs change-triggered functions to detect unruly | 614 | Emacs file variables adjustments are also inhibited if `enable-local-variables' |
| 497 | changes to concealed regions. Set this var non-nil to disable the | 615 | is nil. |
| 498 | protection, potentially increasing text-entry responsiveness a bit. | ||
| 499 | 616 | ||
| 500 | This var takes effect at `allout-mode' activation, so you may have to | 617 | Operations potentially causing edits include allout encryption routines. |
| 501 | deactivate and then reactivate the mode if you want to toggle the | 618 | See the docstring for `allout-toggle-current-subtree-encryption' for |
| 502 | behavior." | 619 | details." |
| 503 | :type 'boolean | 620 | :type 'boolean |
| 504 | :group 'allout) | 621 | :group 'allout) |
| 622 | (make-variable-buffer-local 'allout-enable-file-variable-adjustment) | ||
| 505 | 623 | ||
| 506 | ;;;_* CODE - no user customizations below. | 624 | ;;;_* CODE - no user customizations below. |
| 507 | 625 | ||
| @@ -728,7 +846,16 @@ See doc string for allout-keybindings-list for format of binding list." | |||
| 728 | (car (cdr cell))))))) | 846 | (car (cdr cell))))))) |
| 729 | keymap-list) | 847 | keymap-list) |
| 730 | map)) | 848 | map)) |
| 731 | 849 | ;;;_ = allout-prior-bindings - being deprecated. | |
| 850 | (defvar allout-prior-bindings nil | ||
| 851 | "Variable for use in V18, with allout-added-bindings, for | ||
| 852 | resurrecting, on mode deactivation, bindings that existed before | ||
| 853 | activation. Being deprecated.") | ||
| 854 | ;;;_ = allout-added-bindings - being deprecated | ||
| 855 | (defvar allout-added-bindings nil | ||
| 856 | "Variable for use in V18, with allout-prior-bindings, for | ||
| 857 | resurrecting, on mode deactivation, bindings that existed before | ||
| 858 | activation. Being deprecated.") | ||
| 732 | ;;;_ : Menu bar | 859 | ;;;_ : Menu bar |
| 733 | (defvar allout-mode-exposure-menu) | 860 | (defvar allout-mode-exposure-menu) |
| 734 | (defvar allout-mode-editing-menu) | 861 | (defvar allout-mode-editing-menu) |
| @@ -759,7 +886,11 @@ See doc string for allout-keybindings-list for format of binding list." | |||
| 759 | ["Shift Topic Out" allout-shift-out t] | 886 | ["Shift Topic Out" allout-shift-out t] |
| 760 | ["Rebullet Topic" allout-rebullet-topic t] | 887 | ["Rebullet Topic" allout-rebullet-topic t] |
| 761 | ["Rebullet Heading" allout-rebullet-current-heading t] | 888 | ["Rebullet Heading" allout-rebullet-current-heading t] |
| 762 | ["Number Siblings" allout-number-siblings t])) | 889 | ["Number Siblings" allout-number-siblings t] |
| 890 | "----" | ||
| 891 | ["Toggle Topic Encryption" | ||
| 892 | allout-toggle-current-subtree-encryption | ||
| 893 | (> (allout-current-depth) 1)])) | ||
| 763 | (easy-menu-define allout-mode-navigation-menu | 894 | (easy-menu-define allout-mode-navigation-menu |
| 764 | allout-mode-map | 895 | allout-mode-map |
| 765 | "Allout outline navigation menu." | 896 | "Allout outline navigation menu." |
| @@ -775,7 +906,7 @@ See doc string for allout-keybindings-list for format of binding list." | |||
| 775 | "----" | 906 | "----" |
| 776 | ["Beginning of Entry" | 907 | ["Beginning of Entry" |
| 777 | allout-beginning-of-current-entry t] | 908 | allout-beginning-of-current-entry t] |
| 778 | ["End of Entry" allout-end-of-current-entry t] | 909 | ["End of Entry" allout-end-of-entry t] |
| 779 | ["End of Subtree" allout-end-of-current-subtree t])) | 910 | ["End of Subtree" allout-end-of-current-subtree t])) |
| 780 | (easy-menu-define allout-mode-misc-menu | 911 | (easy-menu-define allout-mode-misc-menu |
| 781 | allout-mode-map | 912 | allout-mode-map |
| @@ -855,13 +986,6 @@ from the list." | |||
| 855 | (setq allout-mode-prior-settings rebuild))))) | 986 | (setq allout-mode-prior-settings rebuild))))) |
| 856 | ) | 987 | ) |
| 857 | ;;;_ : Mode-specific incidentals | 988 | ;;;_ : Mode-specific incidentals |
| 858 | ;;;_ = allout-during-write-cue nil | ||
| 859 | (defvar allout-during-write-cue nil | ||
| 860 | "Used to inhibit outline change-protection during file write. | ||
| 861 | |||
| 862 | See also `allout-post-command-business', `allout-write-file-hook', | ||
| 863 | `allout-before-change-protect', and `allout-post-command-business' | ||
| 864 | functions.") | ||
| 865 | ;;;_ = allout-pre-was-isearching nil | 989 | ;;;_ = allout-pre-was-isearching nil |
| 866 | (defvar allout-pre-was-isearching nil | 990 | (defvar allout-pre-was-isearching nil |
| 867 | "Cue for isearch-dynamic-exposure mechanism, implemented in | 991 | "Cue for isearch-dynamic-exposure mechanism, implemented in |
| @@ -869,22 +993,28 @@ allout-pre- and -post-command-hooks.") | |||
| 869 | (make-variable-buffer-local 'allout-pre-was-isearching) | 993 | (make-variable-buffer-local 'allout-pre-was-isearching) |
| 870 | ;;;_ = allout-isearch-prior-pos nil | 994 | ;;;_ = allout-isearch-prior-pos nil |
| 871 | (defvar allout-isearch-prior-pos nil | 995 | (defvar allout-isearch-prior-pos nil |
| 872 | "Cue for isearch-dynamic-exposure tracking, used by `allout-isearch-expose'.") | 996 | "Cue for isearch-dynamic-exposure tracking, used by |
| 997 | `allout-isearch-expose'.") | ||
| 873 | (make-variable-buffer-local 'allout-isearch-prior-pos) | 998 | (make-variable-buffer-local 'allout-isearch-prior-pos) |
| 874 | ;;;_ = allout-override-protect nil | 999 | ;;;_ = allout-isearch-did-quit |
| 875 | (defvar allout-override-protect nil | 1000 | (defvar allout-isearch-did-quit nil |
| 876 | "Used in `allout-mode' for regulate of concealed-text protection mechanism. | 1001 | "Distinguishes isearch conclusion and cancellation. |
| 877 | 1002 | ||
| 878 | Allout outline mode regulates alteration of concealed text to protect | 1003 | Maintained by allout-isearch-abort \(which is wrapped around the real |
| 879 | against inadvertent, unnoticed changes. This is for use by specific, | 1004 | isearch-abort), and monitored by allout-isearch-expose for action.") |
| 880 | native outline functions to temporarily override that protection. | 1005 | (make-variable-buffer-local 'allout-isearch-did-quit) |
| 881 | It's automatically reset to nil after every buffer modification.") | ||
| 882 | (make-variable-buffer-local 'allout-override-protect) | ||
| 883 | ;;;_ > allout-unprotected (expr) | 1006 | ;;;_ > allout-unprotected (expr) |
| 884 | (defmacro allout-unprotected (expression) | 1007 | (defmacro allout-unprotected (expr) |
| 885 | "Evaluate EXPRESSION with `allout-override-protect' let-bound to t." | 1008 | "Enable internal outline operations to alter read-only text." |
| 886 | `(let ((allout-override-protect t)) | 1009 | `(let ((was-inhibit-r-o inhibit-read-only)) |
| 887 | ,expression)) | 1010 | (unwind-protect |
| 1011 | (progn | ||
| 1012 | (setq inhibit-read-only t) | ||
| 1013 | ,expr) | ||
| 1014 | (setq inhibit-read-only was-inhibit-r-o) | ||
| 1015 | ) | ||
| 1016 | ) | ||
| 1017 | ) | ||
| 888 | ;;;_ = allout-undo-aggregation | 1018 | ;;;_ = allout-undo-aggregation |
| 889 | (defvar allout-undo-aggregation 30 | 1019 | (defvar allout-undo-aggregation 30 |
| 890 | "Amount of successive self-insert actions to bunch together per undo. | 1020 | "Amount of successive self-insert actions to bunch together per undo. |
| @@ -897,14 +1027,109 @@ the way that `before-change-functions' and undo interact.") | |||
| 897 | "Horrible hack used to prevent invalid multiple triggering of outline | 1027 | "Horrible hack used to prevent invalid multiple triggering of outline |
| 898 | mode from prop-line file-var activation. Used by `allout-mode' function | 1028 | mode from prop-line file-var activation. Used by `allout-mode' function |
| 899 | to track repeats.") | 1029 | to track repeats.") |
| 900 | ;;;_ > allout-write-file-hook () | 1030 | ;;;_ = allout-file-key-verifier-string |
| 901 | (defun allout-write-file-hook () | 1031 | (defvar allout-file-key-verifier-string nil |
| 902 | "In `allout-mode', run as a `write-contents-functions' activity. | 1032 | "Name for use as a file variable for verifying encryption key across |
| 903 | 1033 | sessions.") | |
| 904 | Currently just sets `allout-during-write-cue', so outline change-protection | 1034 | (make-variable-buffer-local 'allout-file-key-verifier-string) |
| 905 | knows to keep inactive during file write." | 1035 | ;;;_ = allout-encryption-scheme |
| 906 | (setq allout-during-write-cue t) | 1036 | (defvar allout-encryption-scheme nil |
| 907 | nil) | 1037 | "*Allout outline topic encryption scheme pending for the current buffer. |
| 1038 | |||
| 1039 | Intended as a file-specific (buffer local) setting, it defaults to the | ||
| 1040 | value of allout-default-encryption-scheme if nil.") | ||
| 1041 | (make-variable-buffer-local 'allout-encryption-scheme) | ||
| 1042 | ;;;_ = allout-key-verifier-string | ||
| 1043 | (defvar allout-key-verifier-string nil | ||
| 1044 | "Setting used to test solicited encryption keys against that already | ||
| 1045 | associated with a file. | ||
| 1046 | |||
| 1047 | It consists of an encrypted random string useful only to verify that a key | ||
| 1048 | entered by the user is effective for decryption. The key itself is \*not* | ||
| 1049 | recorded in the file anywhere, and the encrypted contents are random binary | ||
| 1050 | characters to avoid exposing greater susceptibility to search attacks. | ||
| 1051 | |||
| 1052 | The verifier string is retained as an Emacs file variable, as well as in | ||
| 1053 | the emacs buffer state, if file variable adjustments are enabled. See | ||
| 1054 | `allout-enable-file-variable-adjustment' for details about that.") | ||
| 1055 | (make-variable-buffer-local 'allout-key-verifier-string) | ||
| 1056 | (setq-default allout-key-verifier-string nil) | ||
| 1057 | ;;;_ = allout-key-hint-string | ||
| 1058 | (defvar allout-key-hint-string "" | ||
| 1059 | "Variable used to retain a reminder string for a file's encryption key. | ||
| 1060 | |||
| 1061 | See the description of `allout-key-hint-handling' for details about how | ||
| 1062 | the reminder is deployed. | ||
| 1063 | |||
| 1064 | The hint is retained as an Emacs file variable, as well as in the emacs buffer | ||
| 1065 | state, if file variable adjustments are enabled. See | ||
| 1066 | `allout-enable-file-variable-adjustment' for details about that.") | ||
| 1067 | (make-variable-buffer-local 'allout-key-hint-string) | ||
| 1068 | (setq-default allout-key-hint-string "") | ||
| 1069 | ;;;_ = allout-after-save-decrypt | ||
| 1070 | (defvar allout-after-save-decrypt nil | ||
| 1071 | "Internal variable, is nil or has the value of two points: | ||
| 1072 | |||
| 1073 | - the location of a topic to be decrypted after saving is done | ||
| 1074 | - where to situate the cursor after the decryption is performed | ||
| 1075 | |||
| 1076 | This is used to decrypt the topic that was currently being edited, if it | ||
| 1077 | was encrypted automatically as part of a file write or autosave.") | ||
| 1078 | (make-variable-buffer-local 'allout-after-save-decrypt) | ||
| 1079 | ;;;_ > allout-write-file-hook-handler () | ||
| 1080 | (defun allout-write-file-hook-handler () | ||
| 1081 | "Implement `allout-encrypt-unencrypted-on-saves' policy for file writes." | ||
| 1082 | |||
| 1083 | (if (or (not (boundp 'allout-encrypt-unencrypted-on-saves)) | ||
| 1084 | (not allout-encrypt-unencrypted-on-saves)) | ||
| 1085 | nil | ||
| 1086 | (let ((except-mark (and (equal allout-encrypt-unencrypted-on-saves | ||
| 1087 | 'except-current) | ||
| 1088 | (point-marker)))) | ||
| 1089 | (if (save-excursion (goto-char (point-min)) | ||
| 1090 | (allout-next-topic-pending-encryption except-mark)) | ||
| 1091 | (progn | ||
| 1092 | (message "auto-encrypting pending topics") | ||
| 1093 | (sit-for 2) | ||
| 1094 | (condition-case failure | ||
| 1095 | (setq allout-after-save-decrypt | ||
| 1096 | (allout-encrypt-decrypted except-mark)) | ||
| 1097 | (error (progn | ||
| 1098 | (message | ||
| 1099 | "allout-write-file-hook-handler suppressing error %s" | ||
| 1100 | failure) | ||
| 1101 | (sit-for 2)))))) | ||
| 1102 | )) | ||
| 1103 | nil) | ||
| 1104 | ;;;_ > allout-auto-save-hook-handler () | ||
| 1105 | (defun allout-auto-save-hook-handler () | ||
| 1106 | "Implement `allout-encrypt-unencrypted-on-saves' policy for auto saves." | ||
| 1107 | |||
| 1108 | (if allout-encrypt-unencrypted-on-saves | ||
| 1109 | ;; Always implement 'except-current policy when enabled. | ||
| 1110 | (let ((allout-encrypt-unencrypted-on-saves 'except-current)) | ||
| 1111 | (allout-write-file-hook-handler)))) | ||
| 1112 | ;;;_ > allout-after-saves-handler () | ||
| 1113 | (defun allout-after-saves-handler () | ||
| 1114 | "Decrypt topic encrypted for save, if it's currently being edited. | ||
| 1115 | |||
| 1116 | Ie, if it was pending encryption and contained the point in its body before | ||
| 1117 | the save. | ||
| 1118 | |||
| 1119 | We use values stored in `allout-after-save-decrypt' to locate the topic | ||
| 1120 | and the place for the cursor after the decryption is done." | ||
| 1121 | (if (not (and (allout-mode-p) | ||
| 1122 | (boundp 'allout-after-save-decrypt) | ||
| 1123 | allout-after-save-decrypt)) | ||
| 1124 | t | ||
| 1125 | (goto-char (car allout-after-save-decrypt)) | ||
| 1126 | (let ((was-modified (buffer-modified-p))) | ||
| 1127 | (allout-toggle-current-subtree-encryption) | ||
| 1128 | (if (not was-modified) | ||
| 1129 | (set-buffer-modified-p nil))) | ||
| 1130 | (goto-char (cadr allout-after-save-decrypt)) | ||
| 1131 | (setq allout-after-save-decrypt nil)) | ||
| 1132 | ) | ||
| 908 | 1133 | ||
| 909 | ;;;_ #2 Mode activation | 1134 | ;;;_ #2 Mode activation |
| 910 | ;;;_ = allout-mode | 1135 | ;;;_ = allout-mode |
| @@ -916,11 +1141,10 @@ knows to keep inactive during file write." | |||
| 916 | 'allout-mode) | 1141 | 'allout-mode) |
| 917 | ;;;_ = allout-explicitly-deactivated | 1142 | ;;;_ = allout-explicitly-deactivated |
| 918 | (defvar allout-explicitly-deactivated nil | 1143 | (defvar allout-explicitly-deactivated nil |
| 919 | "Non-nil if `allout-mode' was last deliberately deactivated. | 1144 | "If t, `allout-mode's last deactivation was deliberate. |
| 920 | So `allout-post-command-business' should not reactivate it...") | 1145 | So `allout-post-command-business' should not reactivate it...") |
| 921 | (make-variable-buffer-local 'allout-explicitly-deactivated) | 1146 | (make-variable-buffer-local 'allout-explicitly-deactivated) |
| 922 | ;;;_ > allout-init (&optional mode) | 1147 | ;;;_ > allout-init (&optional mode) |
| 923 | ;;;###autoload | ||
| 924 | (defun allout-init (&optional mode) | 1148 | (defun allout-init (&optional mode) |
| 925 | "Prime `allout-mode' to enable/disable auto-activation, wrt `allout-layout'. | 1149 | "Prime `allout-mode' to enable/disable auto-activation, wrt `allout-layout'. |
| 926 | 1150 | ||
| @@ -939,9 +1163,9 @@ of allout outline mode, contingent to the buffer-specific setting of | |||
| 939 | the `allout-layout' variable. (See `allout-layout' and | 1163 | the `allout-layout' variable. (See `allout-layout' and |
| 940 | `allout-expose-topic' docstrings for more details on auto layout). | 1164 | `allout-expose-topic' docstrings for more details on auto layout). |
| 941 | 1165 | ||
| 942 | `allout-init' works by setting up (or removing) | 1166 | `allout-init' works by setting up (or removing) the `allout-mode' |
| 943 | `allout-find-file-hook' in `find-file-hook', and giving | 1167 | find-file-hook, and giving `allout-auto-activation' a suitable |
| 944 | `allout-auto-activation' a suitable setting. | 1168 | setting. |
| 945 | 1169 | ||
| 946 | To prime your Emacs session for full auto-outline operation, include | 1170 | To prime your Emacs session for full auto-outline operation, include |
| 947 | the following two lines in your Emacs init file: | 1171 | the following two lines in your Emacs init file: |
| @@ -949,32 +1173,35 @@ the following two lines in your Emacs init file: | |||
| 949 | \(require 'allout) | 1173 | \(require 'allout) |
| 950 | \(allout-init t)" | 1174 | \(allout-init t)" |
| 951 | 1175 | ||
| 952 | (interactive | 1176 | (interactive) |
| 953 | (let ((m (completing-read | 1177 | (if (interactive-p) |
| 954 | (concat "Select outline auto setup mode " | 1178 | (progn |
| 955 | "(empty for report, ? for options) ") | 1179 | (setq mode |
| 956 | '(("nil")("full")("activate")("deactivate") | 1180 | (completing-read |
| 957 | ("ask") ("report") ("")) | 1181 | (concat "Select outline auto setup mode " |
| 958 | nil | 1182 | "(empty for report, ? for options) ") |
| 959 | t))) | 1183 | '(("nil")("full")("activate")("deactivate") |
| 960 | (if (string= m "") 'report | 1184 | ("ask") ("report") ("")) |
| 961 | (intern-soft m)))) | 1185 | nil |
| 1186 | t)) | ||
| 1187 | (if (string= mode "") | ||
| 1188 | (setq mode 'report) | ||
| 1189 | (setq mode (intern-soft mode))))) | ||
| 962 | (let | 1190 | (let |
| 963 | ;; convenience aliases, for consistent ref to respective vars: | 1191 | ;; convenience aliases, for consistent ref to respective vars: |
| 964 | ((hook 'allout-find-file-hook) | 1192 | ((hook 'allout-find-file-hook) |
| 965 | (curr-mode 'allout-auto-activation)) | 1193 | (curr-mode 'allout-auto-activation)) |
| 966 | 1194 | ||
| 967 | (cond ((not mode) | 1195 | (cond ((not mode) |
| 968 | (setq find-file-hook (delq hook find-file-hook)) | 1196 | (setq find-file-hooks (delq hook find-file-hooks)) |
| 969 | (if (interactive-p) | 1197 | (if (interactive-p) |
| 970 | (message "Allout outline mode auto-activation inhibited."))) | 1198 | (message "Allout outline mode auto-activation inhibited."))) |
| 971 | ((eq mode 'report) | 1199 | ((eq mode 'report) |
| 972 | (if (memq hook find-file-hook) | 1200 | (if (not (memq hook find-file-hooks)) |
| 973 | ;; Just punt and use the reports from each of the modes: | 1201 | (allout-init nil) |
| 974 | (allout-init (symbol-value curr-mode)) | 1202 | ;; Just punt and use the reports from each of the modes: |
| 975 | (allout-init nil) | 1203 | (allout-init (symbol-value curr-mode)))) |
| 976 | (message "Allout outline mode auto-activation inhibited."))) | 1204 | (t (add-hook 'find-file-hooks hook) |
| 977 | (t (add-hook 'find-file-hook hook) | ||
| 978 | (set curr-mode ; `set', not `setq'! | 1205 | (set curr-mode ; `set', not `setq'! |
| 979 | (cond ((eq mode 'activate) | 1206 | (cond ((eq mode 'activate) |
| 980 | (message | 1207 | (message |
| @@ -1022,10 +1249,11 @@ outline.) | |||
| 1022 | 1249 | ||
| 1023 | In addition to outline navigation and exposure, allout includes: | 1250 | In addition to outline navigation and exposure, allout includes: |
| 1024 | 1251 | ||
| 1025 | - topic-oriented repositioning, cut, and paste | 1252 | - topic-oriented repositioning, promotion/demotion, cut, and paste |
| 1026 | - integral outline exposure-layout | 1253 | - integral outline exposure-layout |
| 1027 | - incremental search with dynamic exposure and reconcealment of hidden text | 1254 | - incremental search with dynamic exposure and reconcealment of hidden text |
| 1028 | - automatic topic-number maintenance | 1255 | - automatic topic-number maintenance |
| 1256 | - easy topic encryption and decryption | ||
| 1029 | - \"Hot-spot\" operation, for single-keystroke maneuvering and | 1257 | - \"Hot-spot\" operation, for single-keystroke maneuvering and |
| 1030 | exposure control. \(See the allout-mode docstring.) | 1258 | exposure control. \(See the allout-mode docstring.) |
| 1031 | 1259 | ||
| @@ -1035,7 +1263,7 @@ Below is a description of the bindings, and then explanation of | |||
| 1035 | special `allout-mode' features and terminology. See also the outline | 1263 | special `allout-mode' features and terminology. See also the outline |
| 1036 | menubar additions for quick reference to many of the features, and see | 1264 | menubar additions for quick reference to many of the features, and see |
| 1037 | the docstring of the function `allout-init' for instructions on | 1265 | the docstring of the function `allout-init' for instructions on |
| 1038 | priming your Emacs session for automatic activation of `allout-mode'. | 1266 | priming your emacs session for automatic activation of `allout-mode'. |
| 1039 | 1267 | ||
| 1040 | 1268 | ||
| 1041 | The bindings are dictated by the `allout-keybindings-list' and | 1269 | The bindings are dictated by the `allout-keybindings-list' and |
| @@ -1048,7 +1276,7 @@ C-c C-p allout-previous-visible-heading | C-c C-i allout-show-children | |||
| 1048 | C-c C-u allout-up-current-level | C-c C-s allout-show-current-subtree | 1276 | C-c C-u allout-up-current-level | C-c C-s allout-show-current-subtree |
| 1049 | C-c C-f allout-forward-current-level | C-c C-o allout-show-current-entry | 1277 | C-c C-f allout-forward-current-level | C-c C-o allout-show-current-entry |
| 1050 | C-c C-b allout-backward-current-level | ^U C-c C-s allout-show-all | 1278 | C-c C-b allout-backward-current-level | ^U C-c C-s allout-show-all |
| 1051 | C-c C-e allout-end-of-current-entry | allout-hide-current-leaves | 1279 | C-c C-e allout-end-of-entry | allout-hide-current-leaves |
| 1052 | C-c C-a allout-beginning-of-current-entry, alternately, goes to hot-spot | 1280 | C-c C-a allout-beginning-of-current-entry, alternately, goes to hot-spot |
| 1053 | 1281 | ||
| 1054 | Topic Header Production: | 1282 | Topic Header Production: |
| @@ -1064,7 +1292,7 @@ C-c < allout-shift-out ... less deep. | |||
| 1064 | C-c<CR> allout-rebullet-topic Reconcile bullets of topic and its offspring | 1292 | C-c<CR> allout-rebullet-topic Reconcile bullets of topic and its offspring |
| 1065 | - distinctive bullets are not changed, others | 1293 | - distinctive bullets are not changed, others |
| 1066 | alternated according to nesting depth. | 1294 | alternated according to nesting depth. |
| 1067 | C-c * allout-rebullet-current-heading Prompt for alternate bullet for | 1295 | C-c b allout-rebullet-current-heading Prompt for alternate bullet for |
| 1068 | current topic. | 1296 | current topic. |
| 1069 | C-c # allout-number-siblings Number bullets of topic and siblings - the | 1297 | C-c # allout-number-siblings Number bullets of topic and siblings - the |
| 1070 | offspring are not affected. With repeat | 1298 | offspring are not affected. With repeat |
| @@ -1087,8 +1315,8 @@ M-x outlineify-sticky Activate outline mode for current buffer, | |||
| 1087 | C-c C-SPC allout-mark-topic | 1315 | C-c C-SPC allout-mark-topic |
| 1088 | C-c = c allout-copy-exposed-to-buffer | 1316 | C-c = c allout-copy-exposed-to-buffer |
| 1089 | Duplicate outline, sans concealed text, to | 1317 | Duplicate outline, sans concealed text, to |
| 1090 | buffer with name derived from derived from | 1318 | buffer with name derived from derived from that |
| 1091 | that of current buffer - \"*XXX exposed*\". | 1319 | of current buffer - \"*BUFFERNAME exposed*\". |
| 1092 | C-c = p allout-flatten-exposed-to-buffer | 1320 | C-c = p allout-flatten-exposed-to-buffer |
| 1093 | Like above 'copy-exposed', but convert topic | 1321 | Like above 'copy-exposed', but convert topic |
| 1094 | prefixes to section.subsection... numeric | 1322 | prefixes to section.subsection... numeric |
| @@ -1096,6 +1324,19 @@ C-c = p allout-flatten-exposed-to-buffer | |||
| 1096 | ESC ESC (allout-init t) Setup Emacs session for outline mode | 1324 | ESC ESC (allout-init t) Setup Emacs session for outline mode |
| 1097 | auto-activation. | 1325 | auto-activation. |
| 1098 | 1326 | ||
| 1327 | Encrypted Entries | ||
| 1328 | |||
| 1329 | Outline mode supports easily togglable gpg encryption of topics, with | ||
| 1330 | niceities like support for symmetric and key-pair modes, key timeout, key | ||
| 1331 | consistency checking, user-provided hinting for symmetric key mode, and | ||
| 1332 | auto-encryption of topics pending encryption on save. The aim is to enable | ||
| 1333 | reliable topic privacy while preventing accidents like neglected | ||
| 1334 | encryption, encryption with a mistaken key, forgetting which key was used, | ||
| 1335 | and other practical pitfalls. | ||
| 1336 | |||
| 1337 | See the `allout-toggle-current-subtree-encryption' function and | ||
| 1338 | `allout-encrypt-unencrypted-on-saves' customization variable for details. | ||
| 1339 | |||
| 1099 | HOT-SPOT Operation | 1340 | HOT-SPOT Operation |
| 1100 | 1341 | ||
| 1101 | Hot-spot operation provides a means for easy, single-keystroke outline | 1342 | Hot-spot operation provides a means for easy, single-keystroke outline |
| @@ -1148,11 +1389,11 @@ Topic text constituents: | |||
| 1148 | 1389 | ||
| 1149 | HEADER: The first line of a topic, include the topic PREFIX and header | 1390 | HEADER: The first line of a topic, include the topic PREFIX and header |
| 1150 | text. | 1391 | text. |
| 1151 | PREFIX: The leading text of a topic which distinguishes it from | 1392 | PREFIX: The leading text of a topic which distinguishes it from normal |
| 1152 | normal text. It has a strict form, which consists of a | 1393 | text. It has a strict form, which consists of a prefix-lead |
| 1153 | prefix-lead string, padding, and a bullet. The bullet may be | 1394 | string, padding, and a bullet. The bullet may be followed by a |
| 1154 | followed by a number, indicating the ordinal number of the | 1395 | number, indicating the ordinal number of the topic among its |
| 1155 | topic among its siblings, a space, and then the header text. | 1396 | siblings, a space, and then the header text. |
| 1156 | 1397 | ||
| 1157 | The relative length of the PREFIX determines the nesting depth | 1398 | The relative length of the PREFIX determines the nesting depth |
| 1158 | of the topic. | 1399 | of the topic. |
| @@ -1223,7 +1464,7 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1223 | ;; off on second invocation, so we detect it as best we can, and | 1464 | ;; off on second invocation, so we detect it as best we can, and |
| 1224 | ;; skip everything. | 1465 | ;; skip everything. |
| 1225 | ((and same-complex-command ; Still in same complex command | 1466 | ((and same-complex-command ; Still in same complex command |
| 1226 | ; as last time `allout-mode' invoked. | 1467 | ; as last time `allout-mode' invoked. |
| 1227 | active ; Already activated. | 1468 | active ; Already activated. |
| 1228 | (not explicit-activation) ; Prop-line file-vars don't have args. | 1469 | (not explicit-activation) ; Prop-line file-vars don't have args. |
| 1229 | (string-match "^19.1[89]" ; Bug only known to be in v19.18 and | 1470 | (string-match "^19.1[89]" ; Bug only known to be in v19.18 and |
| @@ -1238,6 +1479,19 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1238 | ; active state or *de*activation | 1479 | ; active state or *de*activation |
| 1239 | ; specifically requested: | 1480 | ; specifically requested: |
| 1240 | (setq allout-explicitly-deactivated t) | 1481 | (setq allout-explicitly-deactivated t) |
| 1482 | (if (string-match "^18\." emacs-version) | ||
| 1483 | ; Revoke those keys that remain | ||
| 1484 | ; as we set them: | ||
| 1485 | (let ((curr-loc (current-local-map))) | ||
| 1486 | (mapcar (function | ||
| 1487 | (lambda (cell) | ||
| 1488 | (if (eq (lookup-key curr-loc (car cell)) | ||
| 1489 | (car (cdr cell))) | ||
| 1490 | (define-key curr-loc (car cell) | ||
| 1491 | (assq (car cell) allout-prior-bindings))))) | ||
| 1492 | allout-added-bindings) | ||
| 1493 | (allout-resumptions 'allout-added-bindings) | ||
| 1494 | (allout-resumptions 'allout-prior-bindings))) | ||
| 1241 | 1495 | ||
| 1242 | (if allout-old-style-prefixes | 1496 | (if allout-old-style-prefixes |
| 1243 | (progn | 1497 | (progn |
| @@ -1246,9 +1500,12 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1246 | (allout-resumptions 'selective-display) | 1500 | (allout-resumptions 'selective-display) |
| 1247 | (if (and (boundp 'before-change-functions) before-change-functions) | 1501 | (if (and (boundp 'before-change-functions) before-change-functions) |
| 1248 | (allout-resumptions 'before-change-functions)) | 1502 | (allout-resumptions 'before-change-functions)) |
| 1249 | (setq write-contents-functions | 1503 | (setq local-write-file-hooks |
| 1250 | (delq 'allout-write-file-hook | 1504 | (delq 'allout-write-file-hook-handler |
| 1251 | write-contents-functions)) | 1505 | local-write-file-hooks)) |
| 1506 | (setq auto-save-hook | ||
| 1507 | (delq 'allout-auto-save-hook-handler | ||
| 1508 | auto-save-hook)) | ||
| 1252 | (allout-resumptions 'paragraph-start) | 1509 | (allout-resumptions 'paragraph-start) |
| 1253 | (allout-resumptions 'paragraph-separate) | 1510 | (allout-resumptions 'paragraph-separate) |
| 1254 | (allout-resumptions (if (string-match "^18" emacs-version) | 1511 | (allout-resumptions (if (string-match "^18" emacs-version) |
| @@ -1288,25 +1545,27 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1288 | (cons '(allout-mode . allout-mode-map) | 1545 | (cons '(allout-mode . allout-mode-map) |
| 1289 | minor-mode-map-alist)))) | 1546 | minor-mode-map-alist)))) |
| 1290 | 1547 | ||
| 1548 | ; V18 minor-mode key bindings: | ||
| 1549 | ; Stash record of added bindings | ||
| 1550 | ; for later revocation: | ||
| 1551 | (allout-resumptions 'allout-added-bindings | ||
| 1552 | (list allout-keybindings-list)) | ||
| 1553 | (allout-resumptions 'allout-prior-bindings | ||
| 1554 | (list (current-local-map))) | ||
| 1291 | ; and add them: | 1555 | ; and add them: |
| 1292 | (use-local-map (produce-allout-mode-map allout-keybindings-list | 1556 | (use-local-map (produce-allout-mode-map allout-keybindings-list |
| 1293 | (current-local-map))) | 1557 | (current-local-map))) |
| 1294 | ) | 1558 | ) |
| 1295 | 1559 | ||
| 1296 | ; selective-display is the | 1560 | ; selective-display is the |
| 1297 | ; Emacs conditional exposure | 1561 | ; emacs conditional exposure |
| 1298 | ; mechanism: | 1562 | ; mechanism: |
| 1299 | (allout-resumptions 'selective-display '(t)) | 1563 | (allout-resumptions 'selective-display '(t)) |
| 1300 | (if allout-inhibit-protection | ||
| 1301 | t | ||
| 1302 | (allout-resumptions 'before-change-functions | ||
| 1303 | '(allout-before-change-protect))) | ||
| 1304 | (add-hook 'pre-command-hook 'allout-pre-command-business) | 1564 | (add-hook 'pre-command-hook 'allout-pre-command-business) |
| 1305 | (add-hook 'post-command-hook 'allout-post-command-business) | 1565 | (add-hook 'post-command-hook 'allout-post-command-business) |
| 1306 | ; Temporarily set by any outline | 1566 | (add-hook 'local-write-file-hooks 'allout-write-file-hook-handler) |
| 1307 | ; functions that can be trusted to | 1567 | (make-variable-buffer-local 'auto-save-hook) |
| 1308 | ; deal properly with concealed text. | 1568 | (add-hook 'auto-save-hook 'allout-auto-save-hook-handler) |
| 1309 | (add-hook 'write-contents-functions 'allout-write-file-hook) | ||
| 1310 | ; Custom auto-fill func, to support | 1569 | ; Custom auto-fill func, to support |
| 1311 | ; respect for topic headline, | 1570 | ; respect for topic headline, |
| 1312 | ; hanging-indents, etc: | 1571 | ; hanging-indents, etc: |
| @@ -1337,7 +1596,8 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1337 | (if allout-layout | 1596 | (if allout-layout |
| 1338 | (setq do-layout t)) | 1597 | (setq do-layout t)) |
| 1339 | 1598 | ||
| 1340 | (if allout-isearch-dynamic-expose | 1599 | (if (and allout-isearch-dynamic-expose |
| 1600 | (not (fboundp 'allout-real-isearch-abort))) | ||
| 1341 | (allout-enwrap-isearch)) | 1601 | (allout-enwrap-isearch)) |
| 1342 | 1602 | ||
| 1343 | (run-hooks 'allout-mode-hook) | 1603 | (run-hooks 'allout-mode-hook) |
| @@ -1376,7 +1636,6 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1376 | ) ; let* | 1636 | ) ; let* |
| 1377 | ) ; defun | 1637 | ) ; defun |
| 1378 | ;;;_ > allout-minor-mode | 1638 | ;;;_ > allout-minor-mode |
| 1379 | ;;; XXX released verion doesn't do this? | ||
| 1380 | (defalias 'allout-minor-mode 'allout-mode) | 1639 | (defalias 'allout-minor-mode 'allout-mode) |
| 1381 | 1640 | ||
| 1382 | ;;;_ #3 Internal Position State-Tracking - "allout-recent-*" funcs | 1641 | ;;;_ #3 Internal Position State-Tracking - "allout-recent-*" funcs |
| @@ -1400,12 +1659,12 @@ OPEN: A topic that is not closed, though its offspring or body may be." | |||
| 1400 | "Buffer point last returned by `allout-end-of-current-subtree'.") | 1659 | "Buffer point last returned by `allout-end-of-current-subtree'.") |
| 1401 | (make-variable-buffer-local 'allout-recent-end-of-subtree) | 1660 | (make-variable-buffer-local 'allout-recent-end-of-subtree) |
| 1402 | ;;;_ > allout-prefix-data (beg end) | 1661 | ;;;_ > allout-prefix-data (beg end) |
| 1403 | (defmacro allout-prefix-data (beginning end) | 1662 | (defmacro allout-prefix-data (beg end) |
| 1404 | "Register allout-prefix state data - BEGINNING and END of prefix. | 1663 | "Register allout-prefix state data - BEGINNING and END of prefix. |
| 1405 | 1664 | ||
| 1406 | For reference by `allout-recent' funcs. Returns BEGINNING." | 1665 | For reference by `allout-recent' funcs. Returns BEGINNING." |
| 1407 | `(setq allout-recent-prefix-end ,end | 1666 | `(setq allout-recent-prefix-end ,end |
| 1408 | allout-recent-prefix-beginning ,beginning)) | 1667 | allout-recent-prefix-beginning ,beg)) |
| 1409 | ;;;_ > allout-recent-depth () | 1668 | ;;;_ > allout-recent-depth () |
| 1410 | (defmacro allout-recent-depth () | 1669 | (defmacro allout-recent-depth () |
| 1411 | "Return depth of last heading encountered by an outline maneuvering function. | 1670 | "Return depth of last heading encountered by an outline maneuvering function. |
| @@ -1612,9 +1871,12 @@ Return the location of the beginning of the heading, or nil if not found." | |||
| 1612 | "Produce a location \"chart\" of subtopics of the containing topic. | 1871 | "Produce a location \"chart\" of subtopics of the containing topic. |
| 1613 | 1872 | ||
| 1614 | Optional argument LEVELS specifies the depth \(relative to start | 1873 | Optional argument LEVELS specifies the depth \(relative to start |
| 1615 | depth) for the chart. | 1874 | depth) for the chart. Subsequent optional args are not for public |
| 1875 | use. | ||
| 1876 | |||
| 1877 | Point is left at the end of the subtree. | ||
| 1616 | 1878 | ||
| 1617 | Charts are used to capture outline structure, so that outline altering | 1879 | Charts are used to capture outline structure, so that outline-altering |
| 1618 | routines need assess the structure only once, and then use the chart | 1880 | routines need assess the structure only once, and then use the chart |
| 1619 | for their elaborate manipulations. | 1881 | for their elaborate manipulations. |
| 1620 | 1882 | ||
| @@ -1625,11 +1887,9 @@ list containing, recursively, the charts for the respective subtopics. | |||
| 1625 | The chart for a topics' offspring precedes the entry for the topic | 1887 | The chart for a topics' offspring precedes the entry for the topic |
| 1626 | itself. | 1888 | itself. |
| 1627 | 1889 | ||
| 1628 | \(fn &optional LEVELS)" | 1890 | The other function parameters are for internal recursion, and should |
| 1629 | 1891 | not be specified by external callers. ORIG-DEPTH is depth of topic at | |
| 1630 | ;; The other function parameters are for internal recursion, and should | 1892 | starting point, and PREV-DEPTH is depth of prior topic." |
| 1631 | ;; not be specified by external callers. ORIG-DEPTH is depth of topic at | ||
| 1632 | ;; starting point, and PREV-DEPTH is depth of prior topic." | ||
| 1633 | 1893 | ||
| 1634 | (let ((original (not orig-depth)) ; `orig-depth' set only in recursion. | 1894 | (let ((original (not orig-depth)) ; `orig-depth' set only in recursion. |
| 1635 | chart curr-depth) | 1895 | chart curr-depth) |
| @@ -1835,11 +2095,18 @@ Returns that character position." | |||
| 1835 | (if (re-search-forward allout-line-boundary-regexp nil 'move) | 2095 | (if (re-search-forward allout-line-boundary-regexp nil 'move) |
| 1836 | (prog1 (goto-char (match-beginning 0)) | 2096 | (prog1 (goto-char (match-beginning 0)) |
| 1837 | (allout-prefix-data (match-beginning 2)(match-end 2))))) | 2097 | (allout-prefix-data (match-beginning 2)(match-end 2))))) |
| 1838 | ;;;_ > allout-end-of-current-subtree () | 2098 | ;;;_ > allout-end-of-subtree (&optional current) |
| 1839 | (defun allout-end-of-current-subtree () | 2099 | (defun allout-end-of-subtree (&optional current) |
| 1840 | "Put point at the end of the last leaf in the currently visible topic." | 2100 | "Put point at the end of the last leaf in the containing topic. |
| 1841 | (interactive) | 2101 | |
| 1842 | (allout-back-to-current-heading) | 2102 | If optional CURRENT is true (default false), then put point at the end of |
| 2103 | the containing visible topic. | ||
| 2104 | |||
| 2105 | Returns the value of point." | ||
| 2106 | (interactive "P") | ||
| 2107 | (if current | ||
| 2108 | (allout-back-to-current-heading) | ||
| 2109 | (allout-goto-prefix)) | ||
| 1843 | (let ((level (allout-recent-depth))) | 2110 | (let ((level (allout-recent-depth))) |
| 1844 | (allout-next-heading) | 2111 | (allout-next-heading) |
| 1845 | (while (and (not (eobp)) | 2112 | (while (and (not (eobp)) |
| @@ -1851,9 +2118,16 @@ Returns that character position." | |||
| 1851 | '(?\n ?\r)) | 2118 | '(?\n ?\r)) |
| 1852 | (forward-char -1)) | 2119 | (forward-char -1)) |
| 1853 | (setq allout-recent-end-of-subtree (point)))) | 2120 | (setq allout-recent-end-of-subtree (point)))) |
| 2121 | ;;;_ > allout-end-of-current-subtree () | ||
| 2122 | (defun allout-end-of-current-subtree () | ||
| 2123 | "Put point at end of last leaf in currently visible containing topic. | ||
| 2124 | |||
| 2125 | Returns the value of point." | ||
| 2126 | (interactive) | ||
| 2127 | (allout-end-of-subtree t)) | ||
| 1854 | ;;;_ > allout-beginning-of-current-entry () | 2128 | ;;;_ > allout-beginning-of-current-entry () |
| 1855 | (defun allout-beginning-of-current-entry () | 2129 | (defun allout-beginning-of-current-entry () |
| 1856 | "When not already there, position point at beginning of current topic's body. | 2130 | "When not already there, position point at beginning of current topic header. |
| 1857 | 2131 | ||
| 1858 | If already there, move cursor to bullet for hot-spot operation. | 2132 | If already there, move cursor to bullet for hot-spot operation. |
| 1859 | \(See `allout-mode' doc string for details on hot-spot operation.)" | 2133 | \(See `allout-mode' doc string for details on hot-spot operation.)" |
| @@ -1863,11 +2137,10 @@ If already there, move cursor to bullet for hot-spot operation. | |||
| 1863 | (if (and (interactive-p) | 2137 | (if (and (interactive-p) |
| 1864 | (= (point) start-point)) | 2138 | (= (point) start-point)) |
| 1865 | (goto-char (allout-current-bullet-pos))))) | 2139 | (goto-char (allout-current-bullet-pos))))) |
| 1866 | ;;;_ > allout-end-of-current-entry () | 2140 | ;;;_ > allout-end-of-entry () |
| 1867 | (defun allout-end-of-current-entry () | 2141 | (defun allout-end-of-entry () |
| 1868 | "Position the point at the end of the current topics' entry." | 2142 | "Position the point at the end of the current topics' entry." |
| 1869 | (interactive) | 2143 | (interactive) |
| 1870 | (allout-show-entry) | ||
| 1871 | (prog1 (allout-pre-next-preface) | 2144 | (prog1 (allout-pre-next-preface) |
| 1872 | (if (and (not (bobp))(looking-at "^$")) | 2145 | (if (and (not (bobp))(looking-at "^$")) |
| 1873 | (forward-char -1)))) | 2146 | (forward-char -1)))) |
| @@ -1875,9 +2148,27 @@ If already there, move cursor to bullet for hot-spot operation. | |||
| 1875 | (defun allout-end-of-current-heading () | 2148 | (defun allout-end-of-current-heading () |
| 1876 | (interactive) | 2149 | (interactive) |
| 1877 | (allout-beginning-of-current-entry) | 2150 | (allout-beginning-of-current-entry) |
| 1878 | (forward-line -1) | 2151 | (re-search-forward "[\n\r]" nil t) |
| 1879 | (end-of-line)) | 2152 | (forward-char -1)) |
| 1880 | (defalias 'allout-end-of-heading 'allout-end-of-current-heading) | 2153 | (defalias 'allout-end-of-heading 'allout-end-of-current-heading) |
| 2154 | ;;;_ > allout-get-body-text () | ||
| 2155 | (defun allout-get-body-text () | ||
| 2156 | "Return the unmangled body text of the topic immediately containing point." | ||
| 2157 | (save-excursion | ||
| 2158 | (allout-end-of-prefix) | ||
| 2159 | (if (not (re-search-forward "[\n\r]" nil t)) | ||
| 2160 | nil | ||
| 2161 | (backward-char 1) | ||
| 2162 | (let ((pre-body (point))) | ||
| 2163 | (if (not pre-body) | ||
| 2164 | nil | ||
| 2165 | (allout-end-of-entry) | ||
| 2166 | (if (not (= pre-body (point))) | ||
| 2167 | (buffer-substring-no-properties (1+ pre-body) (point)))) | ||
| 2168 | ) | ||
| 2169 | ) | ||
| 2170 | ) | ||
| 2171 | ) | ||
| 1881 | 2172 | ||
| 1882 | ;;;_ - Depth-wise | 2173 | ;;;_ - Depth-wise |
| 1883 | ;;;_ > allout-ascend-to-depth (depth) | 2174 | ;;;_ > allout-ascend-to-depth (depth) |
| @@ -1892,12 +2183,16 @@ If already there, move cursor to bullet for hot-spot operation. | |||
| 1892 | (if (= (allout-recent-depth) depth) | 2183 | (if (= (allout-recent-depth) depth) |
| 1893 | (progn (goto-char allout-recent-prefix-beginning) | 2184 | (progn (goto-char allout-recent-prefix-beginning) |
| 1894 | depth) | 2185 | depth) |
| 1895 | (goto-char last-good))))) | 2186 | (goto-char last-good) |
| 2187 | nil)) | ||
| 2188 | (if (interactive-p) (allout-end-of-prefix)))) | ||
| 1896 | ;;;_ > allout-ascend () | 2189 | ;;;_ > allout-ascend () |
| 1897 | (defun allout-ascend () | 2190 | (defun allout-ascend () |
| 1898 | "Ascend one level, returning t if successful, nil if not." | 2191 | "Ascend one level, returning t if successful, nil if not." |
| 1899 | (if (allout-beginning-of-level) | 2192 | (prog1 |
| 1900 | (allout-previous-heading))) | 2193 | (if (allout-beginning-of-level) |
| 2194 | (allout-previous-heading)) | ||
| 2195 | (if (interactive-p) (allout-end-of-prefix)))) | ||
| 1901 | ;;;_ > allout-descend-to-depth (depth) | 2196 | ;;;_ > allout-descend-to-depth (depth) |
| 1902 | (defun allout-descend-to-depth (depth) | 2197 | (defun allout-descend-to-depth (depth) |
| 1903 | "Descend to depth DEPTH within current topic. | 2198 | "Descend to depth DEPTH within current topic. |
| @@ -1917,13 +2212,13 @@ Returning depth if successful, nil if not." | |||
| 1917 | nil)) | 2212 | nil)) |
| 1918 | ) | 2213 | ) |
| 1919 | ;;;_ > allout-up-current-level (arg &optional dont-complain) | 2214 | ;;;_ > allout-up-current-level (arg &optional dont-complain) |
| 1920 | (defun allout-up-current-level (arg &optional dont-complain interactive) | 2215 | (defun allout-up-current-level (arg &optional dont-complain) |
| 1921 | "Move out ARG levels from current visible topic. | 2216 | "Move out ARG levels from current visible topic. |
| 1922 | 2217 | ||
| 1923 | Positions on heading line of containing topic. Error if unable to | 2218 | Positions on heading line of containing topic. Error if unable to |
| 1924 | ascend that far, or nil if unable to ascend but optional arg | 2219 | ascend that far, or nil if unable to ascend but optional arg |
| 1925 | DONT-COMPLAIN is non-nil." | 2220 | DONT-COMPLAIN is non-nil." |
| 1926 | (interactive "p\np") | 2221 | (interactive "p") |
| 1927 | (allout-back-to-current-heading) | 2222 | (allout-back-to-current-heading) |
| 1928 | (let ((present-level (allout-recent-depth)) | 2223 | (let ((present-level (allout-recent-depth)) |
| 1929 | (last-good (point)) | 2224 | (last-good (point)) |
| @@ -1944,12 +2239,12 @@ DONT-COMPLAIN is non-nil." | |||
| 1944 | (if (or failed | 2239 | (if (or failed |
| 1945 | (> arg 0)) | 2240 | (> arg 0)) |
| 1946 | (progn (goto-char last-good) | 2241 | (progn (goto-char last-good) |
| 1947 | (if interactive (allout-end-of-prefix)) | 2242 | (if (interactive-p) (allout-end-of-prefix)) |
| 1948 | (if (not dont-complain) | 2243 | (if (not dont-complain) |
| 1949 | (error "Can't ascend past outermost level") | 2244 | (error "Can't ascend past outermost level") |
| 1950 | (if interactive (allout-end-of-prefix)) | 2245 | (if (interactive-p) (allout-end-of-prefix)) |
| 1951 | nil)) | 2246 | nil)) |
| 1952 | (if interactive (allout-end-of-prefix)) | 2247 | (if (interactive-p) (allout-end-of-prefix)) |
| 1953 | allout-recent-prefix-beginning))) | 2248 | allout-recent-prefix-beginning))) |
| 1954 | 2249 | ||
| 1955 | ;;;_ - Linear | 2250 | ;;;_ - Linear |
| @@ -1981,7 +2276,7 @@ Return depth if successful, nil otherwise." | |||
| 1981 | nil)))) | 2276 | nil)))) |
| 1982 | ;;;_ > allout-previous-sibling (&optional depth backward) | 2277 | ;;;_ > allout-previous-sibling (&optional depth backward) |
| 1983 | (defun allout-previous-sibling (&optional depth backward) | 2278 | (defun allout-previous-sibling (&optional depth backward) |
| 1984 | "Like `allout-forward-current-level', but backwards & respect invisible topics. | 2279 | "Like `allout-forward-current-level' backwards, respecting invisible topics. |
| 1985 | 2280 | ||
| 1986 | Optional DEPTH specifies depth to traverse, default current depth. | 2281 | Optional DEPTH specifies depth to traverse, default current depth. |
| 1987 | 2282 | ||
| @@ -2015,7 +2310,7 @@ Presumes point is at the start of a topic prefix." | |||
| 2015 | (let ((depth (allout-depth))) | 2310 | (let ((depth (allout-depth))) |
| 2016 | (while (allout-previous-sibling depth nil)) | 2311 | (while (allout-previous-sibling depth nil)) |
| 2017 | (prog1 (allout-recent-depth) | 2312 | (prog1 (allout-recent-depth) |
| 2018 | (allout-end-of-prefix)))) | 2313 | (if (interactive-p) (allout-end-of-prefix))))) |
| 2019 | ;;;_ > allout-next-visible-heading (arg) | 2314 | ;;;_ > allout-next-visible-heading (arg) |
| 2020 | (defun allout-next-visible-heading (arg) | 2315 | (defun allout-next-visible-heading (arg) |
| 2021 | "Move to the next ARG'th visible heading line, backward if arg is negative. | 2316 | "Move to the next ARG'th visible heading line, backward if arg is negative. |
| @@ -2053,13 +2348,13 @@ matches)." | |||
| 2053 | (interactive "p") | 2348 | (interactive "p") |
| 2054 | (allout-next-visible-heading (- arg))) | 2349 | (allout-next-visible-heading (- arg))) |
| 2055 | ;;;_ > allout-forward-current-level (arg) | 2350 | ;;;_ > allout-forward-current-level (arg) |
| 2056 | (defun allout-forward-current-level (arg &optional interactive) | 2351 | (defun allout-forward-current-level (arg) |
| 2057 | "Position point at the next heading of the same level. | 2352 | "Position point at the next heading of the same level. |
| 2058 | 2353 | ||
| 2059 | Takes optional repeat-count, goes backward if count is negative. | 2354 | Takes optional repeat-count, goes backward if count is negative. |
| 2060 | 2355 | ||
| 2061 | Returns resulting position, else nil if none found." | 2356 | Returns resulting position, else nil if none found." |
| 2062 | (interactive "p\np") | 2357 | (interactive "p") |
| 2063 | (let ((start-depth (allout-current-depth)) | 2358 | (let ((start-depth (allout-current-depth)) |
| 2064 | (start-point (point)) | 2359 | (start-point (point)) |
| 2065 | (start-arg arg) | 2360 | (start-arg arg) |
| @@ -2087,7 +2382,7 @@ Returns resulting position, else nil if none found." | |||
| 2087 | (= (allout-recent-depth) start-depth))) | 2382 | (= (allout-recent-depth) start-depth))) |
| 2088 | allout-recent-prefix-beginning | 2383 | allout-recent-prefix-beginning |
| 2089 | (goto-char last-good) | 2384 | (goto-char last-good) |
| 2090 | (if (not interactive) | 2385 | (if (not (interactive-p)) |
| 2091 | nil | 2386 | nil |
| 2092 | (allout-end-of-prefix) | 2387 | (allout-end-of-prefix) |
| 2093 | (error "Hit %s level %d topic, traversed %d of %d requested" | 2388 | (error "Hit %s level %d topic, traversed %d of %d requested" |
| @@ -2096,10 +2391,10 @@ Returns resulting position, else nil if none found." | |||
| 2096 | (- (abs start-arg) arg) | 2391 | (- (abs start-arg) arg) |
| 2097 | (abs start-arg)))))) | 2392 | (abs start-arg)))))) |
| 2098 | ;;;_ > allout-backward-current-level (arg) | 2393 | ;;;_ > allout-backward-current-level (arg) |
| 2099 | (defun allout-backward-current-level (arg &optional interactive) | 2394 | (defun allout-backward-current-level (arg) |
| 2100 | "Inverse of `allout-forward-current-level'." | 2395 | "Inverse of `allout-forward-current-level'." |
| 2101 | (interactive "p\np") | 2396 | (interactive "p") |
| 2102 | (if interactive | 2397 | (if (interactive-p) |
| 2103 | (let ((current-prefix-arg (* -1 arg))) | 2398 | (let ((current-prefix-arg (* -1 arg))) |
| 2104 | (call-interactively 'allout-forward-current-level)) | 2399 | (call-interactively 'allout-forward-current-level)) |
| 2105 | (allout-forward-current-level (* -1 arg)))) | 2400 | (allout-forward-current-level (* -1 arg)))) |
| @@ -2107,121 +2402,6 @@ Returns resulting position, else nil if none found." | |||
| 2107 | ;;;_ #5 Alteration | 2402 | ;;;_ #5 Alteration |
| 2108 | 2403 | ||
| 2109 | ;;;_ - Fundamental | 2404 | ;;;_ - Fundamental |
| 2110 | ;;;_ > allout-before-change-protect (beg end) | ||
| 2111 | (defun allout-before-change-protect (beg end) | ||
| 2112 | "Outline before-change hook, regulates changes to concealed text. | ||
| 2113 | |||
| 2114 | Reveal concealed text that would be changed by current command, and | ||
| 2115 | offer user choice to commit or forego the change. Unchanged text is | ||
| 2116 | reconcealed. User has option to have changed text reconcealed. | ||
| 2117 | |||
| 2118 | Undo commands are specially treated - the user is not prompted for | ||
| 2119 | choice, the undoes are always committed (based on presumption that the | ||
| 2120 | things being undone were already subject to this regulation routine), | ||
| 2121 | and undoes always leave the changed stuff exposed. | ||
| 2122 | |||
| 2123 | Changes to concealed regions are ignored while file is being written. | ||
| 2124 | \(This is for the sake of functions that do change the file during | ||
| 2125 | writes, like crypt and zip modes.) | ||
| 2126 | |||
| 2127 | Locally bound in outline buffers to `before-change-functions', which | ||
| 2128 | in Emacs 19 is run before any change to the buffer. | ||
| 2129 | |||
| 2130 | Any functions which set [`this-command' to `undo', or which set] | ||
| 2131 | `allout-override-protect' non-nil (as does, eg, allout-flag-chars) | ||
| 2132 | are exempt from this restriction." | ||
| 2133 | (if (and (allout-mode-p) | ||
| 2134 | ; allout-override-protect | ||
| 2135 | ; set by functions that know what | ||
| 2136 | ; they're doing, eg outline internals: | ||
| 2137 | (not allout-override-protect) | ||
| 2138 | (not allout-during-write-cue) | ||
| 2139 | (save-match-data ; Preserve operation position state. | ||
| 2140 | ; Both beginning and end chars must | ||
| 2141 | ; be exposed: | ||
| 2142 | (save-excursion (if (memq this-command '(newline open-line)) | ||
| 2143 | ;; Compensate for stupid Emacs {new, | ||
| 2144 | ;; open-}line display optimization: | ||
| 2145 | (setq beg (1+ beg) | ||
| 2146 | end (1+ end))) | ||
| 2147 | (goto-char beg) | ||
| 2148 | (or (allout-hidden-p) | ||
| 2149 | (and (not (= beg end)) | ||
| 2150 | (goto-char end) | ||
| 2151 | (allout-hidden-p)))))) | ||
| 2152 | (save-match-data | ||
| 2153 | (if (equal this-command 'undo) | ||
| 2154 | ;; Allow undo without inhibition. | ||
| 2155 | ;; - Undoing new and open-line hits stupid Emacs redisplay | ||
| 2156 | ;; optimization (em 19 cmds.c, ~ line 200). | ||
| 2157 | ;; - Presumably, undoing what was properly protected when | ||
| 2158 | ;; done. | ||
| 2159 | ;; - Undo may be users' only recourse in protection faults. | ||
| 2160 | ;; So, expose what getting changed: | ||
| 2161 | (progn (message "Undo! - exposing concealed target...") | ||
| 2162 | (if (allout-hidden-p) | ||
| 2163 | (allout-show-children)) | ||
| 2164 | (message "Undo!")) | ||
| 2165 | (let (response | ||
| 2166 | (rehide-completely (save-excursion (allout-goto-prefix) | ||
| 2167 | (allout-hidden-p))) | ||
| 2168 | rehide-place) | ||
| 2169 | |||
| 2170 | (save-excursion | ||
| 2171 | (if (condition-case err | ||
| 2172 | ;; Condition case to catch keyboard quits during reads. | ||
| 2173 | (progn | ||
| 2174 | ; Give them a peek where | ||
| 2175 | (save-excursion | ||
| 2176 | (if (eolp) (setq rehide-place | ||
| 2177 | (allout-goto-prefix))) | ||
| 2178 | (allout-show-entry)) | ||
| 2179 | ; Present the message, but... | ||
| 2180 | ; leave the cursor at the location | ||
| 2181 | ; until they respond: | ||
| 2182 | ; Then interpret the response: | ||
| 2183 | (while | ||
| 2184 | (progn | ||
| 2185 | (message (concat "Change inside concealed" | ||
| 2186 | " region - do it? " | ||
| 2187 | "(n or 'y'/'r'eclose)")) | ||
| 2188 | (setq response (read-char)) | ||
| 2189 | (not | ||
| 2190 | (cond ((memq response '(?r ?R)) | ||
| 2191 | (setq response 'reclose)) | ||
| 2192 | ((memq response '(?y ?Y ? )) | ||
| 2193 | (setq response t)) | ||
| 2194 | ((memq response '(?n ?N 127)) | ||
| 2195 | (setq response nil) | ||
| 2196 | t) | ||
| 2197 | ((eq response ??) | ||
| 2198 | (message | ||
| 2199 | "`r' means `yes, then reclose'") | ||
| 2200 | nil) | ||
| 2201 | (t (message "Please answer y, n, or r") | ||
| 2202 | (sit-for 1) | ||
| 2203 | nil))))) | ||
| 2204 | response) | ||
| 2205 | ('quit nil)) | ||
| 2206 | ; Continue: | ||
| 2207 | (if (eq response 'reclose) | ||
| 2208 | (save-excursion | ||
| 2209 | (if rehide-place (goto-char rehide-place)) | ||
| 2210 | (if rehide-completely | ||
| 2211 | (allout-hide-current-entry-completely) | ||
| 2212 | (allout-hide-current-entry))) | ||
| 2213 | (if (allout-ascend-to-depth (1- (allout-recent-depth))) | ||
| 2214 | (allout-show-children) | ||
| 2215 | (allout-show-to-offshoot))) | ||
| 2216 | ; Prevent: | ||
| 2217 | (if rehide-completely | ||
| 2218 | (save-excursion | ||
| 2219 | (if rehide-place (goto-char rehide-place)) | ||
| 2220 | (allout-hide-current-entry-completely)) | ||
| 2221 | (allout-hide-current-entry)) | ||
| 2222 | (error "Change within concealed region prevented")))))) | ||
| 2223 | ) ; if | ||
| 2224 | ) ; defun | ||
| 2225 | ;;;_ = allout-post-goto-bullet | 2405 | ;;;_ = allout-post-goto-bullet |
| 2226 | (defvar allout-post-goto-bullet nil | 2406 | (defvar allout-post-goto-bullet nil |
| 2227 | "Outline internal var, for `allout-pre-command-business' hot-spot operation. | 2407 | "Outline internal var, for `allout-pre-command-business' hot-spot operation. |
| @@ -2236,24 +2416,20 @@ are mapped to the command of the corresponding control-key on the | |||
| 2236 | (defun allout-post-command-business () | 2416 | (defun allout-post-command-business () |
| 2237 | "Outline `post-command-hook' function. | 2417 | "Outline `post-command-hook' function. |
| 2238 | 2418 | ||
| 2239 | - Null `allout-override-protect', so it's not left open. | ||
| 2240 | |||
| 2241 | - Implement (and clear) `allout-post-goto-bullet', for hot-spot | 2419 | - Implement (and clear) `allout-post-goto-bullet', for hot-spot |
| 2242 | outline commands. | 2420 | outline commands. |
| 2243 | 2421 | ||
| 2244 | - Massages `buffer-undo-list' so successive, standard character self-inserts | 2422 | - Decrypt topic currently being edited if it was encrypted for a save. |
| 2245 | are aggregated. This kludge compensates for lack of undo bunching when | 2423 | |
| 2246 | `before-change-functions' is used." | 2424 | - Massage buffer-undo-list so successive, standard character self-inserts are |
| 2425 | aggregated. This kludge compensates for lack of undo bunching when | ||
| 2426 | before-change-functions is used." | ||
| 2247 | 2427 | ||
| 2248 | ; Apply any external change func: | 2428 | ; Apply any external change func: |
| 2249 | (if (not (allout-mode-p)) ; In allout-mode. | 2429 | (if (not (allout-mode-p)) ; In allout-mode. |
| 2250 | nil | 2430 | nil |
| 2251 | (setq allout-override-protect nil) | ||
| 2252 | (if allout-isearch-dynamic-expose | 2431 | (if allout-isearch-dynamic-expose |
| 2253 | (allout-isearch-rectification)) | 2432 | (allout-isearch-rectification)) |
| 2254 | (if allout-during-write-cue | ||
| 2255 | ;; Was used by allout-before-change-protect, done with it now: | ||
| 2256 | (setq allout-during-write-cue nil)) | ||
| 2257 | ;; Undo bunching business: | 2433 | ;; Undo bunching business: |
| 2258 | (if (and (listp buffer-undo-list) ; Undo history being kept. | 2434 | (if (and (listp buffer-undo-list) ; Undo history being kept. |
| 2259 | (equal this-command 'self-insert-command) | 2435 | (equal this-command 'self-insert-command) |
| @@ -2282,6 +2458,11 @@ are mapped to the command of the corresponding control-key on the | |||
| 2282 | (setq buffer-undo-list | 2458 | (setq buffer-undo-list |
| 2283 | (cons (cons prev-from cur-to) | 2459 | (cons (cons prev-from cur-to) |
| 2284 | (cdr (cdr (cdr buffer-undo-list)))))))) | 2460 | (cdr (cdr (cdr buffer-undo-list)))))))) |
| 2461 | |||
| 2462 | (if (and (boundp 'allout-after-save-decrypt) | ||
| 2463 | allout-after-save-decrypt) | ||
| 2464 | (allout-after-saves-handler)) | ||
| 2465 | |||
| 2285 | ;; Implement -post-goto-bullet, if set: (must be after undo business) | 2466 | ;; Implement -post-goto-bullet, if set: (must be after undo business) |
| 2286 | (if (and allout-post-goto-bullet | 2467 | (if (and allout-post-goto-bullet |
| 2287 | (allout-current-bullet-pos)) | 2468 | (allout-current-bullet-pos)) |
| @@ -2304,8 +2485,9 @@ outline maneuvering operations by positioning the cursor on the bullet | |||
| 2304 | char. When in this mode you can use regular cursor-positioning | 2485 | char. When in this mode you can use regular cursor-positioning |
| 2305 | command/keystrokes to relocate the cursor off of a bullet character to | 2486 | command/keystrokes to relocate the cursor off of a bullet character to |
| 2306 | return to regular interpretation of self-insert characters." | 2487 | return to regular interpretation of self-insert characters." |
| 2488 | |||
| 2307 | (if (not (allout-mode-p)) | 2489 | (if (not (allout-mode-p)) |
| 2308 | ;; Shouldn't be invoked if not in allout allout-mode, but just in case: | 2490 | ;; Shouldn't be invoked if not in allout-mode, but just in case: |
| 2309 | nil | 2491 | nil |
| 2310 | ;; Register isearch status: | 2492 | ;; Register isearch status: |
| 2311 | (if (and (boundp 'isearch-mode) isearch-mode) | 2493 | (if (and (boundp 'isearch-mode) isearch-mode) |
| @@ -2317,7 +2499,9 @@ return to regular interpretation of self-insert characters." | |||
| 2317 | (let* ((this-key-num (cond | 2499 | (let* ((this-key-num (cond |
| 2318 | ((numberp last-command-char) | 2500 | ((numberp last-command-char) |
| 2319 | last-command-char) | 2501 | last-command-char) |
| 2320 | ((fboundp 'char-to-int) | 2502 | ;; Only xemacs has characterp. |
| 2503 | ((and (fboundp 'characterp) | ||
| 2504 | (characterp last-command-char)) | ||
| 2321 | (char-to-int last-command-char)) | 2505 | (char-to-int last-command-char)) |
| 2322 | (t 0))) | 2506 | (t 0))) |
| 2323 | mapped-binding) | 2507 | mapped-binding) |
| @@ -2340,7 +2524,7 @@ return to regular interpretation of self-insert characters." | |||
| 2340 | this-command mapped-binding))))))) | 2524 | this-command mapped-binding))))))) |
| 2341 | ;;;_ > allout-find-file-hook () | 2525 | ;;;_ > allout-find-file-hook () |
| 2342 | (defun allout-find-file-hook () | 2526 | (defun allout-find-file-hook () |
| 2343 | "Activate `allout-mode' when `allout-auto-activation' & `allout-layout' are non-nil. | 2527 | "Activate `allout-mode' when `allout-auto-activation', `allout-layout' non-nil. |
| 2344 | 2528 | ||
| 2345 | See `allout-init' for setup instructions." | 2529 | See `allout-init' for setup instructions." |
| 2346 | (if (and allout-auto-activation | 2530 | (if (and allout-auto-activation |
| @@ -2353,7 +2537,7 @@ See `allout-init' for setup instructions." | |||
| 2353 | 2537 | ||
| 2354 | Called as part of `allout-post-command-business'." | 2538 | Called as part of `allout-post-command-business'." |
| 2355 | 2539 | ||
| 2356 | (let ((isearching isearch-mode)) | 2540 | (let ((isearching (and (boundp 'isearch-mode) isearch-mode))) |
| 2357 | (cond ((and isearching (not allout-pre-was-isearching)) | 2541 | (cond ((and isearching (not allout-pre-was-isearching)) |
| 2358 | (allout-isearch-expose 'start)) | 2542 | (allout-isearch-expose 'start)) |
| 2359 | ((and isearching allout-pre-was-isearching) | 2543 | ((and isearching allout-pre-was-isearching) |
| @@ -2361,24 +2545,11 @@ Called as part of `allout-post-command-business'." | |||
| 2361 | ((and (not isearching) allout-pre-was-isearching) | 2545 | ((and (not isearching) allout-pre-was-isearching) |
| 2362 | (allout-isearch-expose 'final)) | 2546 | (allout-isearch-expose 'final)) |
| 2363 | ;; Not and wasn't isearching: | 2547 | ;; Not and wasn't isearching: |
| 2364 | (t (setq allout-isearch-prior-pos nil))))) | 2548 | (t (setq allout-isearch-prior-pos nil) |
| 2549 | (setq allout-isearch-did-quit nil))))) | ||
| 2365 | ;;;_ = allout-isearch-was-font-lock | 2550 | ;;;_ = allout-isearch-was-font-lock |
| 2366 | (defvar allout-isearch-was-font-lock | 2551 | (defvar allout-isearch-was-font-lock |
| 2367 | (and (boundp 'font-lock-mode) font-lock-mode)) | 2552 | (and (boundp 'font-lock-mode) font-lock-mode)) |
| 2368 | |||
| 2369 | ;;;_ > allout-flag-region (from to flag) | ||
| 2370 | (defmacro allout-flag-region (from to flag) | ||
| 2371 | "Hide or show lines from FROM to TO, via Emacs `selective-display' FLAG char. | ||
| 2372 | Ie, text following flag C-m \(carriage-return) is hidden until the | ||
| 2373 | next C-j (newline) char. | ||
| 2374 | |||
| 2375 | Returns the endpoint of the region." | ||
| 2376 | `(let ((buffer-read-only nil) | ||
| 2377 | (allout-override-protect t)) | ||
| 2378 | (subst-char-in-region ,from ,to | ||
| 2379 | (if (= ,flag ?\n) ?\r ?\n) | ||
| 2380 | ,flag t))) | ||
| 2381 | |||
| 2382 | ;;;_ > allout-isearch-expose (mode) | 2553 | ;;;_ > allout-isearch-expose (mode) |
| 2383 | (defun allout-isearch-expose (mode) | 2554 | (defun allout-isearch-expose (mode) |
| 2384 | "MODE is either 'clear, 'start, 'continue, or 'final." | 2555 | "MODE is either 'clear, 'start, 'continue, or 'final." |
| @@ -2403,21 +2574,56 @@ Returns the endpoint of the region." | |||
| 2403 | (setq allout-isearch-prior-pos nil) | 2574 | (setq allout-isearch-prior-pos nil) |
| 2404 | (if (not (eq mode 'final)) | 2575 | (if (not (eq mode 'final)) |
| 2405 | (setq allout-isearch-prior-pos (cons (point) (allout-show-entry))) | 2576 | (setq allout-isearch-prior-pos (cons (point) (allout-show-entry))) |
| 2406 | (if isearch-mode-end-hook-quit | 2577 | (if allout-isearch-did-quit |
| 2407 | nil | 2578 | nil |
| 2408 | (setq allout-isearch-prior-pos nil) | 2579 | (setq allout-isearch-prior-pos nil) |
| 2409 | (allout-show-children))))) | 2580 | (allout-show-children)))) |
| 2581 | (setq allout-isearch-did-quit nil)) | ||
| 2410 | ;;;_ > allout-enwrap-isearch () | 2582 | ;;;_ > allout-enwrap-isearch () |
| 2411 | (defun allout-enwrap-isearch () | 2583 | (defun allout-enwrap-isearch () |
| 2412 | "Impose `isearch-abort' wrapper for dynamic exposure in isearch. | 2584 | "Impose `allout-mode' isearch-abort wrapper for dynamic exposure in isearch. |
| 2413 | 2585 | ||
| 2414 | The function checks to ensure that the rebinding is done only once." | 2586 | The function checks to ensure that the rebinding is done only once." |
| 2415 | (add-hook 'isearch-mode-end-hook 'allout-isearch-rectification)) | 2587 | |
| 2588 | (add-hook 'isearch-mode-end-hook 'allout-isearch-rectification) | ||
| 2589 | (if (fboundp 'allout-real-isearch-abort) | ||
| 2590 | ;; | ||
| 2591 | nil | ||
| 2592 | ; Ensure load of isearch-mode: | ||
| 2593 | (if (or (and (fboundp 'isearch-mode) | ||
| 2594 | (fboundp 'isearch-abort)) | ||
| 2595 | (condition-case error | ||
| 2596 | (load-library "isearch-mode") | ||
| 2597 | ('file-error (message | ||
| 2598 | "Skipping isearch-mode provisions - %s '%s'" | ||
| 2599 | (car (cdr error)) | ||
| 2600 | (car (cdr (cdr error)))) | ||
| 2601 | (sit-for 1) | ||
| 2602 | ;; Inhibit subsequent tries and return nil: | ||
| 2603 | (setq allout-isearch-dynamic-expose nil)))) | ||
| 2604 | ;; Isearch-mode loaded, encapsulate specific entry points for | ||
| 2605 | ;; outline dynamic-exposure business: | ||
| 2606 | (progn | ||
| 2607 | ;; stash crucial isearch-mode funcs under known, private | ||
| 2608 | ;; names, then register wrapper functions under the old | ||
| 2609 | ;; names, in their stead: | ||
| 2610 | (fset 'allout-real-isearch-abort (symbol-function 'isearch-abort)) | ||
| 2611 | (fset 'isearch-abort 'allout-isearch-abort))))) | ||
| 2612 | ;;;_ > allout-isearch-abort () | ||
| 2613 | (defun allout-isearch-abort () | ||
| 2614 | "Wrapper for allout-real-isearch-abort \(which see), to register | ||
| 2615 | actual quits." | ||
| 2616 | (interactive) | ||
| 2617 | (setq allout-isearch-did-quit nil) | ||
| 2618 | (condition-case what | ||
| 2619 | (allout-real-isearch-abort) | ||
| 2620 | ('quit (setq allout-isearch-did-quit t) | ||
| 2621 | (signal 'quit nil)))) | ||
| 2416 | 2622 | ||
| 2417 | ;;; Prevent unnecessary font-lock while isearching! | 2623 | ;;; Prevent unnecessary font-lock while isearching! |
| 2418 | (defvar isearch-was-font-locking nil) | 2624 | (defvar isearch-was-font-locking nil) |
| 2419 | (defun isearch-inhibit-font-lock () | 2625 | (defun isearch-inhibit-font-lock () |
| 2420 | "Inhibit `font-lock-mode' while isearching - for use on `isearch-mode-hook'." | 2626 | "Inhibit `font-lock' while isearching - for use on `isearch-mode-hook'." |
| 2421 | (if (and (allout-mode-p) (boundp 'font-lock-mode) font-lock-mode) | 2627 | (if (and (allout-mode-p) (boundp 'font-lock-mode) font-lock-mode) |
| 2422 | (setq isearch-was-font-locking t | 2628 | (setq isearch-was-font-locking t |
| 2423 | font-lock-mode nil))) | 2629 | font-lock-mode nil))) |
| @@ -2465,6 +2671,14 @@ Offer one suitable for current depth DEPTH as default." | |||
| 2465 | (if prefix | 2671 | (if prefix |
| 2466 | (allout-get-prefix-bullet prefix) | 2672 | (allout-get-prefix-bullet prefix) |
| 2467 | (allout-get-bullet))))) | 2673 | (allout-get-bullet))))) |
| 2674 | ;;;_ > allout-encrypted-type-prefix (&optional prefix) | ||
| 2675 | (defun allout-encrypted-type-prefix (&optional prefix) | ||
| 2676 | "True if current header prefix bullet is for an encrypted entry \(body)." | ||
| 2677 | (and allout-topic-encryption-bullet | ||
| 2678 | (string= allout-topic-encryption-bullet | ||
| 2679 | (if prefix | ||
| 2680 | (allout-get-prefix-bullet prefix) | ||
| 2681 | (allout-get-bullet))))) | ||
| 2468 | ;;;_ > allout-bullet-for-depth (&optional depth) | 2682 | ;;;_ > allout-bullet-for-depth (&optional depth) |
| 2469 | (defun allout-bullet-for-depth (&optional depth) | 2683 | (defun allout-bullet-for-depth (&optional depth) |
| 2470 | "Return outline topic bullet suited to optional DEPTH, or current depth." | 2684 | "Return outline topic bullet suited to optional DEPTH, or current depth." |
| @@ -2625,15 +2839,15 @@ index for each successive sibling)." | |||
| 2625 | ((allout-sibling-index)))))) | 2839 | ((allout-sibling-index)))))) |
| 2626 | ) | 2840 | ) |
| 2627 | ) | 2841 | ) |
| 2628 | ;;;_ > allout-open-topic (relative-depth &optional before use-sib-bullet) | 2842 | ;;;_ > allout-open-topic (relative-depth &optional before use_recent_bullet) |
| 2629 | (defun allout-open-topic (relative-depth &optional before use-sib-bullet) | 2843 | (defun allout-open-topic (relative-depth &optional before use_recent_bullet) |
| 2630 | "Open a new topic at depth RELATIVE-DEPTH. | 2844 | "Open a new topic at depth DEPTH. |
| 2631 | 2845 | ||
| 2632 | New topic is situated after current one, unless optional flag BEFORE | 2846 | New topic is situated after current one, unless optional flag BEFORE |
| 2633 | is non-nil, or unless current line is complete empty (not even | 2847 | is non-nil, or unless current line is complete empty (not even |
| 2634 | whitespace), in which case open is done on current line. | 2848 | whitespace), in which case open is done on current line. |
| 2635 | 2849 | ||
| 2636 | If USE-SIB-BULLET is true, use the bullet of the prior sibling. | 2850 | If USE_RECENT_BULLET is true, offer to use the bullet of the prior sibling. |
| 2637 | 2851 | ||
| 2638 | Nuances: | 2852 | Nuances: |
| 2639 | 2853 | ||
| @@ -2660,9 +2874,11 @@ Nuances: | |||
| 2660 | (let* ((depth (+ (allout-current-depth) relative-depth)) | 2874 | (let* ((depth (+ (allout-current-depth) relative-depth)) |
| 2661 | (opening-on-blank (if (looking-at "^\$") | 2875 | (opening-on-blank (if (looking-at "^\$") |
| 2662 | (not (setq before nil)))) | 2876 | (not (setq before nil)))) |
| 2663 | opening-numbered ; Will get while computing ref-topic, below | 2877 | ;; bunch o vars set while computing ref-topic |
| 2664 | ref-depth ; Will get while computing ref-topic, below | 2878 | opening-numbered |
| 2665 | ref-bullet ; Will get while computing ref-topic, next | 2879 | opening-encrypted |
| 2880 | ref-depth | ||
| 2881 | ref-bullet | ||
| 2666 | (ref-topic (save-excursion | 2882 | (ref-topic (save-excursion |
| 2667 | (cond ((< relative-depth 0) | 2883 | (cond ((< relative-depth 0) |
| 2668 | (allout-ascend-to-depth depth)) | 2884 | (allout-ascend-to-depth depth)) |
| @@ -2680,6 +2896,13 @@ Nuances: | |||
| 2680 | (allout-descend-to-depth depth)) | 2896 | (allout-descend-to-depth depth)) |
| 2681 | (if (allout-numbered-type-prefix) | 2897 | (if (allout-numbered-type-prefix) |
| 2682 | allout-numbered-bullet)))) | 2898 | allout-numbered-bullet)))) |
| 2899 | (setq opening-encrypted | ||
| 2900 | (save-excursion | ||
| 2901 | (and allout-topic-encryption-bullet | ||
| 2902 | (or (<= relative-depth 0) | ||
| 2903 | (allout-descend-to-depth depth)) | ||
| 2904 | (if (allout-numbered-type-prefix) | ||
| 2905 | allout-numbered-bullet)))) | ||
| 2683 | (point))) | 2906 | (point))) |
| 2684 | dbl-space | 2907 | dbl-space |
| 2685 | doing-beginning) | 2908 | doing-beginning) |
| @@ -2718,19 +2941,24 @@ Nuances: | |||
| 2718 | (if (not (bobp)) | 2941 | (if (not (bobp)) |
| 2719 | (allout-previous-heading))) | 2942 | (allout-previous-heading))) |
| 2720 | (if (and before (bobp)) | 2943 | (if (and before (bobp)) |
| 2721 | (allout-unprotected (open-line 1)))) | 2944 | (allout-unprotected (allout-open-line-not-read-only)))) |
| 2722 | 2945 | ||
| 2723 | (if (<= relative-depth 0) | 2946 | (if (<= relative-depth 0) |
| 2724 | ;; Not going inwards, don't snug up: | 2947 | ;; Not going inwards, don't snug up: |
| 2725 | (if doing-beginning | 2948 | (if doing-beginning |
| 2726 | (allout-unprotected (open-line (if dbl-space 2 1))) | 2949 | (allout-unprotected |
| 2950 | (if (not dbl-space) | ||
| 2951 | (allout-open-line-not-read-only) | ||
| 2952 | (allout-open-line-not-read-only) | ||
| 2953 | (allout-open-line-not-read-only))) | ||
| 2727 | (if before | 2954 | (if before |
| 2728 | (progn (end-of-line) | 2955 | (progn (end-of-line) |
| 2729 | (allout-pre-next-preface) | 2956 | (allout-pre-next-preface) |
| 2730 | (while (= ?\r (following-char)) | 2957 | (while (= ?\r (following-char)) |
| 2731 | (forward-char 1)) | 2958 | (forward-char 1)) |
| 2732 | (if (not (looking-at "^$")) | 2959 | (if (not (looking-at "^$")) |
| 2733 | (allout-unprotected (open-line 1)))) | 2960 | (allout-unprotected |
| 2961 | (allout-open-line-not-read-only)))) | ||
| 2734 | (allout-end-of-current-subtree))) | 2962 | (allout-end-of-current-subtree))) |
| 2735 | ;; Going inwards - double-space if first offspring is, | 2963 | ;; Going inwards - double-space if first offspring is, |
| 2736 | ;; otherwise snug up. | 2964 | ;; otherwise snug up. |
| @@ -2748,38 +2976,47 @@ Nuances: | |||
| 2748 | (progn (forward-line -1) | 2976 | (progn (forward-line -1) |
| 2749 | (looking-at "^\\s-*$")))) | 2977 | (looking-at "^\\s-*$")))) |
| 2750 | (progn (forward-line 1) | 2978 | (progn (forward-line 1) |
| 2751 | (allout-unprotected (open-line 1)))) | 2979 | (allout-unprotected |
| 2980 | (allout-open-line-not-read-only)) | ||
| 2981 | (forward-line 1))) | ||
| 2752 | (end-of-line)) | 2982 | (end-of-line)) |
| 2753 | ;;(if doing-beginning (goto-char doing-beginning)) | 2983 | ;;(if doing-beginning (goto-char doing-beginning)) |
| 2754 | (if (not (bobp)) | 2984 | (if (not (bobp)) |
| 2985 | ;; We insert a newline char rather than using open-line to | ||
| 2986 | ;; avoid rear-stickiness inheritence of read-only property. | ||
| 2755 | (progn (if (and (not (> depth ref-depth)) | 2987 | (progn (if (and (not (> depth ref-depth)) |
| 2756 | (not before)) | 2988 | (not before)) |
| 2757 | (allout-unprotected (open-line 1)) | 2989 | (allout-unprotected |
| 2990 | (allout-open-line-not-read-only)) | ||
| 2758 | (if (> depth ref-depth) | 2991 | (if (> depth ref-depth) |
| 2759 | (allout-unprotected (newline 1)) | 2992 | (allout-unprotected |
| 2993 | (allout-open-line-not-read-only)) | ||
| 2760 | (if dbl-space | 2994 | (if dbl-space |
| 2761 | (allout-unprotected (open-line 1)) | 2995 | (allout-unprotected |
| 2996 | (allout-open-line-not-read-only)) | ||
| 2762 | (if (not before) | 2997 | (if (not before) |
| 2763 | (allout-unprotected (newline 1)))))) | 2998 | (allout-unprotected (newline 1)))))) |
| 2764 | (if dbl-space | 2999 | (if dbl-space |
| 2765 | (allout-unprotected (newline 1))) | 3000 | (allout-unprotected (newline 1))) |
| 2766 | (if (and (not (eobp)) | 3001 | (if (and (not (eobp)) |
| 2767 | (not (bolp))) | 3002 | (not (bolp))) |
| 2768 | (forward-char 1)))) | 3003 | (forward-char 1)))) |
| 2769 | )) | 3004 | )) |
| 2770 | (insert (concat (allout-make-topic-prefix opening-numbered | 3005 | (insert (concat (allout-make-topic-prefix opening-numbered |
| 2771 | t | 3006 | t |
| 2772 | depth) | 3007 | depth) |
| 2773 | " ")) | 3008 | " ")) |
| 2774 | 3009 | ||
| 2775 | ;;(if doing-beginning (save-excursion (newline (if dbl-space 2 1)))) | 3010 | ;;(if doing-beginning (save-excursion (newline (if dbl-space 2 1)))) |
| 2776 | 3011 | ||
| 2777 | 3012 | ||
| 2778 | (allout-rebullet-heading (and use-sib-bullet ref-bullet);;; solicit | 3013 | (allout-rebullet-heading (and use_recent_bullet ;;; solicit |
| 3014 | ref-bullet) | ||
| 2779 | depth ;;; depth | 3015 | depth ;;; depth |
| 2780 | nil ;;; number-control | 3016 | nil ;;; number-control |
| 2781 | nil ;;; index | 3017 | nil ;;; index |
| 2782 | t) (end-of-line) | 3018 | t) |
| 3019 | (end-of-line) | ||
| 2783 | ) | 3020 | ) |
| 2784 | ) | 3021 | ) |
| 2785 | ;;;_ . open-topic contingencies | 3022 | ;;;_ . open-topic contingencies |
| @@ -2795,6 +3032,13 @@ Nuances: | |||
| 2795 | ;;;_ ; buffer boundaries - special provisions for beginning and end ob | 3032 | ;;;_ ; buffer boundaries - special provisions for beginning and end ob |
| 2796 | ;;;_ ; level 1 topics have special provisions also - double space. | 3033 | ;;;_ ; level 1 topics have special provisions also - double space. |
| 2797 | ;;;_ ; location of new topic | 3034 | ;;;_ ; location of new topic |
| 3035 | ;;;_ > allout-open-line-not-read-only () | ||
| 3036 | (defun allout-open-line-not-read-only () | ||
| 3037 | "Open line and remove inherited read-only text prop from new char, if any." | ||
| 3038 | (open-line 1) | ||
| 3039 | (if (plist-get (text-properties-at (point)) 'read-only) | ||
| 3040 | (allout-unprotected | ||
| 3041 | (remove-text-properties (point) (+ 1 (point)) '(read-only nil))))) | ||
| 2798 | ;;;_ > allout-open-subtopic (arg) | 3042 | ;;;_ > allout-open-subtopic (arg) |
| 2799 | (defun allout-open-subtopic (arg) | 3043 | (defun allout-open-subtopic (arg) |
| 2800 | "Open new topic header at deeper level than the current one. | 3044 | "Open new topic header at deeper level than the current one. |
| @@ -2802,7 +3046,7 @@ Nuances: | |||
| 2802 | Negative universal arg means to open deeper, but place the new topic | 3046 | Negative universal arg means to open deeper, but place the new topic |
| 2803 | prior to the current one." | 3047 | prior to the current one." |
| 2804 | (interactive "p") | 3048 | (interactive "p") |
| 2805 | (allout-open-topic 1 (> 0 arg))) | 3049 | (allout-open-topic 1 (> 0 arg) (< 1 arg))) |
| 2806 | ;;;_ > allout-open-sibtopic (arg) | 3050 | ;;;_ > allout-open-sibtopic (arg) |
| 2807 | (defun allout-open-sibtopic (arg) | 3051 | (defun allout-open-sibtopic (arg) |
| 2808 | "Open new topic header at same level as the current one. | 3052 | "Open new topic header at same level as the current one. |
| @@ -2812,7 +3056,7 @@ Positive universal arg means to use the bullet of the prior sibling. | |||
| 2812 | Negative universal arg means to place the new topic prior to the current | 3056 | Negative universal arg means to place the new topic prior to the current |
| 2813 | one." | 3057 | one." |
| 2814 | (interactive "p") | 3058 | (interactive "p") |
| 2815 | (allout-open-topic 0 (> 0 arg) (< 1 arg))) | 3059 | (allout-open-topic 0 (> 0 arg) (not (= 1 arg)))) |
| 2816 | ;;;_ > allout-open-supertopic (arg) | 3060 | ;;;_ > allout-open-supertopic (arg) |
| 2817 | (defun allout-open-supertopic (arg) | 3061 | (defun allout-open-supertopic (arg) |
| 2818 | "Open new topic header at shallower level than the current one. | 3062 | "Open new topic header at shallower level than the current one. |
| @@ -2821,7 +3065,7 @@ Negative universal arg means to open shallower, but place the new | |||
| 2821 | topic prior to the current one." | 3065 | topic prior to the current one." |
| 2822 | 3066 | ||
| 2823 | (interactive "p") | 3067 | (interactive "p") |
| 2824 | (allout-open-topic -1 (> 0 arg))) | 3068 | (allout-open-topic -1 (> 0 arg) (< 1 arg))) |
| 2825 | 3069 | ||
| 2826 | ;;;_ - Outline Alteration | 3070 | ;;;_ - Outline Alteration |
| 2827 | ;;;_ : Topic Modification | 3071 | ;;;_ : Topic Modification |
| @@ -2877,15 +3121,15 @@ Note that refill of indented paragraphs is not done." | |||
| 2877 | (setq old-indent-begin (match-beginning 1) | 3121 | (setq old-indent-begin (match-beginning 1) |
| 2878 | old-indent-end (match-end 1)) | 3122 | old-indent-end (match-end 1)) |
| 2879 | (not (looking-at allout-regexp))) | 3123 | (not (looking-at allout-regexp))) |
| 2880 | (if (> 0 (setq excess (- (current-column) | 3124 | (if (> 0 (setq excess (- (- old-indent-end old-indent-begin) |
| 2881 | old-margin))) | 3125 | old-margin))) |
| 2882 | ;; Text starts left of old margin - don't adjust: | 3126 | ;; Text starts left of old margin - don't adjust: |
| 2883 | nil | 3127 | nil |
| 2884 | ;; Text was hanging at or right of old left margin - | 3128 | ;; Text was hanging at or right of old left margin - |
| 2885 | ;; reindent it, preserving its existing indentation | 3129 | ;; reindent it, preserving its existing indentation |
| 2886 | ;; beyond the old margin: | 3130 | ;; beyond the old margin: |
| 2887 | (delete-region old-indent-begin old-indent-end) | 3131 | (delete-region old-indent-begin old-indent-end) |
| 2888 | (indent-to (+ new-margin excess))))))))) | 3132 | (indent-to (+ new-margin excess (current-column)))))))))) |
| 2889 | ;;;_ > allout-rebullet-current-heading (arg) | 3133 | ;;;_ > allout-rebullet-current-heading (arg) |
| 2890 | (defun allout-rebullet-current-heading (arg) | 3134 | (defun allout-rebullet-current-heading (arg) |
| 2891 | "Solicit new bullet for current visible heading." | 3135 | "Solicit new bullet for current visible heading." |
| @@ -2922,28 +3166,30 @@ Note that refill of indented paragraphs is not done." | |||
| 2922 | 3166 | ||
| 2923 | "Adjust bullet of current topic prefix. | 3167 | "Adjust bullet of current topic prefix. |
| 2924 | 3168 | ||
| 3169 | All args are optional. | ||
| 3170 | |||
| 2925 | If SOLICIT is non-nil, then the choice of bullet is solicited from | 3171 | If SOLICIT is non-nil, then the choice of bullet is solicited from |
| 2926 | user. If it's a character, then that character is offered as the | 3172 | user. If it's a character, then that character is offered as the |
| 2927 | default, otherwise the one suited to the context \(according to | 3173 | default, otherwise the one suited to the context \(according to |
| 2928 | distinction or depth) is offered. If non-nil, then the | 3174 | distinction or depth) is offered. If non-nil, then the |
| 2929 | context-specific bullet is just used. | 3175 | context-specific bullet is just used. |
| 2930 | 3176 | ||
| 2931 | Second arg NEW-DEPTH forces the topic prefix to that depth, regardless | 3177 | Second arg DEPTH forces the topic prefix to that depth, regardless |
| 2932 | of the topic's current depth. | 3178 | of the topic's current depth. |
| 2933 | 3179 | ||
| 2934 | Third arg NUMBER-CONTROL can force the prefix to or away from | 3180 | Third arg NUMBER-CONTROL can force the prefix to or away from |
| 2935 | numbered form. It has effect only if `allout-numbered-bullet' is | 3181 | numbered form. It has effect only if `allout-numbered-bullet' is |
| 2936 | non-nil and soliciting was not explicitly invoked (via first arg). | 3182 | non-nil and soliciting was not explicitly invoked (via first arg). |
| 2937 | Its effect, numbering or denumbering, then depends on the setting | 3183 | Its effect, numbering or denumbering, then depends on the setting |
| 2938 | of the fourth arg, INDEX. | 3184 | of the forth arg, INDEX. |
| 2939 | 3185 | ||
| 2940 | If NUMBER-CONTROL is non-nil and fourth arg INDEX is nil, then the | 3186 | If NUMBER-CONTROL is non-nil and forth arg INDEX is nil, then the |
| 2941 | prefix of the topic is forced to be non-numbered. Null index and | 3187 | prefix of the topic is forced to be non-numbered. Null index and |
| 2942 | non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and | 3188 | non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and |
| 2943 | non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil | 3189 | non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil |
| 2944 | INDEX is a number, then that number is used for the numbered | 3190 | INDEX is a number, then that number is used for the numbered |
| 2945 | prefix. Non-nil and non-number means that the index for the | 3191 | prefix. Non-nil and non-number means that the index for the |
| 2946 | numbered prefix will be derived by `allout-make-topic-prefix'. | 3192 | numbered prefix will be derived by allout-make-topic-prefix. |
| 2947 | 3193 | ||
| 2948 | Fifth arg DO-SUCCESSORS t means re-resolve count on succeeding | 3194 | Fifth arg DO-SUCCESSORS t means re-resolve count on succeeding |
| 2949 | siblings. | 3195 | siblings. |
| @@ -2986,9 +3232,10 @@ this function." | |||
| 2986 | ; Put in new prefix: | 3232 | ; Put in new prefix: |
| 2987 | (allout-unprotected (insert new-prefix)) | 3233 | (allout-unprotected (insert new-prefix)) |
| 2988 | 3234 | ||
| 2989 | ;; Reindent the body if elected and margin changed: | 3235 | ;; Reindent the body if elected, margin changed, and not encrypted body: |
| 2990 | (if (and allout-reindent-bodies | 3236 | (if (and allout-reindent-bodies |
| 2991 | (not (= new-depth current-depth))) | 3237 | (not (= new-depth current-depth)) |
| 3238 | (not (allout-encrypted-topic-p))) | ||
| 2992 | (allout-reindent-body current-depth new-depth)) | 3239 | (allout-reindent-body current-depth new-depth)) |
| 2993 | 3240 | ||
| 2994 | ;; Recursively rectify successive siblings of orig topic if | 3241 | ;; Recursively rectify successive siblings of orig topic if |
| @@ -3010,7 +3257,7 @@ this function." | |||
| 3010 | ) ; defun | 3257 | ) ; defun |
| 3011 | ;;;_ > allout-rebullet-topic (arg) | 3258 | ;;;_ > allout-rebullet-topic (arg) |
| 3012 | (defun allout-rebullet-topic (arg) | 3259 | (defun allout-rebullet-topic (arg) |
| 3013 | "Like `allout-rebullet-topic-grunt', but start from topic visible at point. | 3260 | "Rebullet the visible topic containing point and all contained subtopics. |
| 3014 | 3261 | ||
| 3015 | Descends into invisible as well as visible topics, however. | 3262 | Descends into invisible as well as visible topics, however. |
| 3016 | 3263 | ||
| @@ -3036,18 +3283,18 @@ With repeat count, shift topic depth by that amount." | |||
| 3036 | starting-point | 3283 | starting-point |
| 3037 | index | 3284 | index |
| 3038 | do-successors) | 3285 | do-successors) |
| 3286 | "Like `allout-rebullet-topic', but on nearest containing topic | ||
| 3287 | \(visible or not). | ||
| 3039 | 3288 | ||
| 3040 | "Rebullet the topic at point, visible or invisible, and all | 3289 | See `allout-rebullet-heading' for rebulleting behavior. |
| 3041 | contained subtopics. See `allout-rebullet-heading' for rebulleting | ||
| 3042 | behavior. | ||
| 3043 | 3290 | ||
| 3044 | Arg RELATIVE-DEPTH means to shift the depth of the entire | 3291 | All arguments are optional. |
| 3045 | topic that amount. | ||
| 3046 | 3292 | ||
| 3047 | \(fn &optional RELATIVE-DEPTH)" | 3293 | First arg RELATIVE-DEPTH means to shift the depth of the entire |
| 3294 | topic that amount. | ||
| 3048 | 3295 | ||
| 3049 | ;; All args except the first one are for internal recursive use by the | 3296 | The rest of the args are for internal recursive use by the function |
| 3050 | ;; function itself. | 3297 | itself. The are STARTING-DEPTH, STARTING-POINT, and INDEX." |
| 3051 | 3298 | ||
| 3052 | (let* ((relative-depth (or relative-depth 0)) | 3299 | (let* ((relative-depth (or relative-depth 0)) |
| 3053 | (new-depth (allout-depth)) | 3300 | (new-depth (allout-depth)) |
| @@ -3177,13 +3424,42 @@ rebulleting each topic at this level." | |||
| 3177 | (setq more (allout-next-sibling depth nil)))))) | 3424 | (setq more (allout-next-sibling depth nil)))))) |
| 3178 | ;;;_ > allout-shift-in (arg) | 3425 | ;;;_ > allout-shift-in (arg) |
| 3179 | (defun allout-shift-in (arg) | 3426 | (defun allout-shift-in (arg) |
| 3180 | "Increase depth of current heading and any topics collapsed within it." | 3427 | "Increase depth of current heading and any topics collapsed within it. |
| 3428 | |||
| 3429 | We disallow shifts that would result in the topic having a depth more than | ||
| 3430 | one level greater than the immediately previous topic, to avoid containment | ||
| 3431 | discontinuity. The first topic in the file can be adjusted to any positive | ||
| 3432 | depth, however." | ||
| 3181 | (interactive "p") | 3433 | (interactive "p") |
| 3434 | (if (> arg 0) | ||
| 3435 | (save-excursion | ||
| 3436 | (allout-back-to-current-heading) | ||
| 3437 | (if (not (bobp)) | ||
| 3438 | (let* ((current-depth (allout-recent-depth)) | ||
| 3439 | (start-point (point)) | ||
| 3440 | (predecessor-depth (progn | ||
| 3441 | (forward-char -1) | ||
| 3442 | (allout-goto-prefix) | ||
| 3443 | (if (< (point) start-point) | ||
| 3444 | (allout-recent-depth) | ||
| 3445 | 0)))) | ||
| 3446 | (if (and (> predecessor-depth 0) | ||
| 3447 | (> (+ current-depth arg) | ||
| 3448 | (1+ predecessor-depth))) | ||
| 3449 | (error (concat "May not shift deeper than offspring depth" | ||
| 3450 | " of previous topic"))))))) | ||
| 3182 | (allout-rebullet-topic arg)) | 3451 | (allout-rebullet-topic arg)) |
| 3183 | ;;;_ > allout-shift-out (arg) | 3452 | ;;;_ > allout-shift-out (arg) |
| 3184 | (defun allout-shift-out (arg) | 3453 | (defun allout-shift-out (arg) |
| 3185 | "Decrease depth of current heading and any topics collapsed within it." | 3454 | "Decrease depth of current heading and any topics collapsed within it. |
| 3455 | |||
| 3456 | We disallow shifts that would result in the topic having a depth more than | ||
| 3457 | one level greater than the immediately previous topic, to avoid containment | ||
| 3458 | discontinuity. The first topic in the file can be adjusted to any positive | ||
| 3459 | depth, however." | ||
| 3186 | (interactive "p") | 3460 | (interactive "p") |
| 3461 | (if (< arg 0) | ||
| 3462 | (allout-shift-in (* arg -1))) | ||
| 3187 | (allout-rebullet-topic (* arg -1))) | 3463 | (allout-rebullet-topic (* arg -1))) |
| 3188 | ;;;_ : Surgery (kill-ring) functions with special provisions for outlines: | 3464 | ;;;_ : Surgery (kill-ring) functions with special provisions for outlines: |
| 3189 | ;;;_ > allout-kill-line (&optional arg) | 3465 | ;;;_ > allout-kill-line (&optional arg) |
| @@ -3191,24 +3467,56 @@ rebulleting each topic at this level." | |||
| 3191 | "Kill line, adjusting subsequent lines suitably for outline mode." | 3467 | "Kill line, adjusting subsequent lines suitably for outline mode." |
| 3192 | 3468 | ||
| 3193 | (interactive "*P") | 3469 | (interactive "*P") |
| 3194 | (if (not (and (allout-mode-p) ; active outline mode, | 3470 | |
| 3195 | allout-numbered-bullet ; numbers may need adjustment, | 3471 | (let ((start-point (point)) |
| 3196 | (bolp) ; may be clipping topic head, | 3472 | (leading-kill-ring-entry (car kill-ring)) |
| 3197 | (looking-at allout-regexp))) ; are clipping topic head. | 3473 | binding) |
| 3198 | ;; Above conditions do not obtain - just do a regular kill: | 3474 | |
| 3199 | (kill-line arg) | 3475 | (condition-case err |
| 3200 | ;; Ah, have to watch out for adjustments: | 3476 | |
| 3201 | (let* ((depth (allout-depth))) | 3477 | (if (not (and (allout-mode-p) ; active outline mode, |
| 3202 | ; Do the kill: | 3478 | allout-numbered-bullet ; numbers may need adjustment, |
| 3203 | (kill-line arg) | 3479 | (bolp) ; may be clipping topic head, |
| 3480 | (looking-at allout-regexp))) ; are clipping topic head. | ||
| 3481 | ;; Above conditions do not obtain - just do a regular kill: | ||
| 3482 | (kill-line arg) | ||
| 3483 | ;; Ah, have to watch out for adjustments: | ||
| 3484 | (let* ((depth (allout-depth)) | ||
| 3485 | (start-point (point)) | ||
| 3486 | binding) | ||
| 3487 | ; Do the kill, presenting option | ||
| 3488 | ; for read-only text: | ||
| 3489 | (kill-line arg) | ||
| 3204 | ; Provide some feedback: | 3490 | ; Provide some feedback: |
| 3205 | (sit-for 0) | 3491 | (sit-for 0) |
| 3206 | (save-excursion | 3492 | (save-excursion |
| 3207 | ; Start with the topic | 3493 | ; Start with the topic |
| 3208 | ; following killed line: | 3494 | ; following killed line: |
| 3209 | (if (not (looking-at allout-regexp)) | 3495 | (if (not (looking-at allout-regexp)) |
| 3210 | (allout-next-heading)) | 3496 | (allout-next-heading)) |
| 3211 | (allout-renumber-to-depth depth))))) | 3497 | (allout-renumber-to-depth depth)))) |
| 3498 | ;; condition case handler: | ||
| 3499 | (text-read-only | ||
| 3500 | (goto-char start-point) | ||
| 3501 | (setq binding (where-is-internal 'allout-kill-topic nil t)) | ||
| 3502 | (cond ((not binding) (setq binding "")) | ||
| 3503 | ((arrayp binding) | ||
| 3504 | (setq binding (mapconcat 'key-description (list binding) ", "))) | ||
| 3505 | (t (setq binding (format "%s" binding)))) | ||
| 3506 | ;; ensure prior kill-ring leader is properly restored: | ||
| 3507 | (if (eq leading-kill-ring-entry (cadr kill-ring)) | ||
| 3508 | ;; Aborted kill got pushed on front - ditch it: | ||
| 3509 | (pop kill-ring) | ||
| 3510 | ;; Aborted kill got appended to prior - resurrect prior: | ||
| 3511 | (setcar kill-ring leading-kill-ring-entry)) | ||
| 3512 | ;; make last-command skip this failed command, so kill-appending | ||
| 3513 | ;; conditions track: | ||
| 3514 | (setq this-command last-command) | ||
| 3515 | (error (concat "read-only text hit - use %s allout-kill-topic to" | ||
| 3516 | " discard collapsed stuff") | ||
| 3517 | binding))) | ||
| 3518 | ) | ||
| 3519 | ) | ||
| 3212 | ;;;_ > allout-kill-topic () | 3520 | ;;;_ > allout-kill-topic () |
| 3213 | (defun allout-kill-topic () | 3521 | (defun allout-kill-topic () |
| 3214 | "Kill topic together with subtopics. | 3522 | "Kill topic together with subtopics. |
| @@ -3236,14 +3544,14 @@ Leaves primary topic's trailing vertical whitespace, if any." | |||
| 3236 | (>= (allout-recent-depth) depth)))) | 3544 | (>= (allout-recent-depth) depth)))) |
| 3237 | (forward-char 1))) | 3545 | (forward-char 1))) |
| 3238 | 3546 | ||
| 3239 | (kill-region beg (point)) | 3547 | (allout-unprotected (kill-region beg (point))) |
| 3240 | (sit-for 0) | 3548 | (sit-for 0) |
| 3241 | (save-excursion | 3549 | (save-excursion |
| 3242 | (allout-renumber-to-depth depth)))) | 3550 | (allout-renumber-to-depth depth)))) |
| 3243 | ;;;_ > allout-yank-processing () | 3551 | ;;;_ > allout-yank-processing () |
| 3244 | (defun allout-yank-processing (&optional arg) | 3552 | (defun allout-yank-processing (&optional arg) |
| 3245 | 3553 | ||
| 3246 | "Incidental outline specific business to be done just after text yanks. | 3554 | "Incidental outline-specific business to be done just after text yanks. |
| 3247 | 3555 | ||
| 3248 | Does depth adjustment of yanked topics, when: | 3556 | Does depth adjustment of yanked topics, when: |
| 3249 | 3557 | ||
| @@ -3259,7 +3567,7 @@ header into which it's being yanked. | |||
| 3259 | 3567 | ||
| 3260 | The point is left in front of yanked, adjusted topics, rather than | 3568 | The point is left in front of yanked, adjusted topics, rather than |
| 3261 | at the end (and vice-versa with the mark). Non-adjusted yanks, | 3569 | at the end (and vice-versa with the mark). Non-adjusted yanks, |
| 3262 | however, are left exactly like normal, not outline specific yanks." | 3570 | however, are left exactly like normal, non-allout-specific yanks." |
| 3263 | 3571 | ||
| 3264 | (interactive "*P") | 3572 | (interactive "*P") |
| 3265 | ; Get to beginning, leaving | 3573 | ; Get to beginning, leaving |
| @@ -3463,6 +3771,60 @@ by pops to non-distinctive yanks. Bug..." | |||
| 3463 | ;;;_ #6 Exposure Control | 3771 | ;;;_ #6 Exposure Control |
| 3464 | 3772 | ||
| 3465 | ;;;_ - Fundamental | 3773 | ;;;_ - Fundamental |
| 3774 | ;;;_ > allout-flag-region (from to flag) | ||
| 3775 | (defun allout-flag-region (from to flag) | ||
| 3776 | "Hide or show lines from FROM to TO, via Emacs selective-display FLAG char. | ||
| 3777 | Ie, text following flag C-m \(carriage-return) is hidden until the | ||
| 3778 | next C-j (newline) char. | ||
| 3779 | |||
| 3780 | Returns the endpoint of the region." | ||
| 3781 | ;; "OFR-" prefixes to avoid collisions with vars in code calling the macro. | ||
| 3782 | ;; ie, elisp macro vars are not 'hygenic', so distinct names are necessary. | ||
| 3783 | (let ((was-inhibit-r-o inhibit-read-only) | ||
| 3784 | (was-undo-list buffer-undo-list) | ||
| 3785 | (was-modified (buffer-modified-p)) | ||
| 3786 | trans) | ||
| 3787 | (unwind-protect | ||
| 3788 | (save-excursion | ||
| 3789 | (setq inhibit-read-only t) | ||
| 3790 | (setq buffer-undo-list t) | ||
| 3791 | (if (> from to) | ||
| 3792 | (setq trans from from to to trans)) | ||
| 3793 | (subst-char-in-region from to | ||
| 3794 | (if (= flag ?\n) ?\r ?\n) | ||
| 3795 | flag t) | ||
| 3796 | ;; adjust character read-protection on all the affected lines. | ||
| 3797 | ;; we handle the region line-by-line. | ||
| 3798 | (goto-char to) | ||
| 3799 | (end-of-line) | ||
| 3800 | (setq to (min (+ 2 (point)) (point-max))) | ||
| 3801 | (goto-char from) | ||
| 3802 | (beginning-of-line) | ||
| 3803 | (while (< (point) to) | ||
| 3804 | ;; handle from start of exposed to beginning of hidden, or eol: | ||
| 3805 | (remove-text-properties (point) | ||
| 3806 | (progn (if (re-search-forward "[\r\n]" | ||
| 3807 | nil t) | ||
| 3808 | (forward-char -1)) | ||
| 3809 | (point)) | ||
| 3810 | '(read-only nil)) | ||
| 3811 | ;; handle from start of hidden, if any, to eol: | ||
| 3812 | (if (and (not (eobp)) (= (char-after (point)) ?\r)) | ||
| 3813 | (put-text-property (point) (progn (end-of-line) (point)) | ||
| 3814 | 'read-only t)) | ||
| 3815 | ;; Handle the end-of-line to beginning of next line: | ||
| 3816 | (if (not (eobp)) | ||
| 3817 | (progn (forward-char 1) | ||
| 3818 | (remove-text-properties (1- (point)) (point) | ||
| 3819 | '(read-only nil))))) | ||
| 3820 | ) | ||
| 3821 | (if (not was-modified) | ||
| 3822 | (set-buffer-modified-p nil)) | ||
| 3823 | (setq inhibit-read-only was-inhibit-r-o) | ||
| 3824 | (setq buffer-undo-list was-undo-list) | ||
| 3825 | ) | ||
| 3826 | ) | ||
| 3827 | ) | ||
| 3466 | ;;;_ > allout-flag-current-subtree (flag) | 3828 | ;;;_ > allout-flag-current-subtree (flag) |
| 3467 | (defun allout-flag-current-subtree (flag) | 3829 | (defun allout-flag-current-subtree (flag) |
| 3468 | "Hide or show subtree of currently-visible topic. | 3830 | "Hide or show subtree of currently-visible topic. |
| @@ -3471,9 +3833,9 @@ See `allout-flag-region' for more details." | |||
| 3471 | 3833 | ||
| 3472 | (save-excursion | 3834 | (save-excursion |
| 3473 | (allout-back-to-current-heading) | 3835 | (allout-back-to-current-heading) |
| 3474 | (allout-flag-region (point) | 3836 | (let ((from (point)) |
| 3475 | (progn (allout-end-of-current-subtree) (1- (point))) | 3837 | (to (progn (allout-end-of-current-subtree) (1- (point))))) |
| 3476 | flag))) | 3838 | (allout-flag-region from to flag)))) |
| 3477 | 3839 | ||
| 3478 | ;;;_ - Topic-specific | 3840 | ;;;_ - Topic-specific |
| 3479 | ;;;_ > allout-show-entry () | 3841 | ;;;_ > allout-show-entry () |
| @@ -3482,7 +3844,7 @@ See `allout-flag-region' for more details." | |||
| 3482 | 3844 | ||
| 3483 | This is a way to give restricted peek at a concealed locality without the | 3845 | This is a way to give restricted peek at a concealed locality without the |
| 3484 | expense of exposing its context, but can leave the outline with aberrant | 3846 | expense of exposing its context, but can leave the outline with aberrant |
| 3485 | exposure. `allout-hide-current-entry-completely' or `allout-show-to-offshoot' | 3847 | exposure. `allout-hide-current-entry-completely' or `allout-show-offshoot' |
| 3486 | should be used after the peek to rectify the exposure." | 3848 | should be used after the peek to rectify the exposure." |
| 3487 | 3849 | ||
| 3488 | (interactive) | 3850 | (interactive) |
| @@ -3602,7 +3964,7 @@ aberrant exposure states produced by `allout-show-entry'." | |||
| 3602 | (allout-back-to-current-heading) | 3964 | (allout-back-to-current-heading) |
| 3603 | (save-excursion | 3965 | (save-excursion |
| 3604 | (allout-flag-region (point) | 3966 | (allout-flag-region (point) |
| 3605 | (progn (allout-end-of-current-entry) (point)) | 3967 | (progn (allout-end-of-entry) (point)) |
| 3606 | ?\r))) | 3968 | ?\r))) |
| 3607 | ;;;_ > allout-show-current-entry (&optional arg) | 3969 | ;;;_ > allout-show-current-entry (&optional arg) |
| 3608 | (defun allout-show-current-entry (&optional arg) | 3970 | (defun allout-show-current-entry (&optional arg) |
| @@ -3614,8 +3976,9 @@ aberrant exposure states produced by `allout-show-entry'." | |||
| 3614 | (allout-hide-current-entry) | 3976 | (allout-hide-current-entry) |
| 3615 | (save-excursion | 3977 | (save-excursion |
| 3616 | (allout-flag-region (point) | 3978 | (allout-flag-region (point) |
| 3617 | (progn (allout-end-of-current-entry) (point)) | 3979 | (progn (allout-end-of-entry) (point)) |
| 3618 | ?\n)))) | 3980 | ?\n) |
| 3981 | ))) | ||
| 3619 | ;;;_ > allout-hide-current-entry-completely () | 3982 | ;;;_ > allout-hide-current-entry-completely () |
| 3620 | ; ... allout-hide-current-entry-completely also for isearch dynamic exposure: | 3983 | ; ... allout-hide-current-entry-completely also for isearch dynamic exposure: |
| 3621 | (defun allout-hide-current-entry-completely () | 3984 | (defun allout-hide-current-entry-completely () |
| @@ -3846,7 +4209,11 @@ Examples: | |||
| 3846 | max-pos))) | 4209 | max-pos))) |
| 3847 | ;;;_ > allout-old-expose-topic (spec &rest followers) | 4210 | ;;;_ > allout-old-expose-topic (spec &rest followers) |
| 3848 | (defun allout-old-expose-topic (spec &rest followers) | 4211 | (defun allout-old-expose-topic (spec &rest followers) |
| 3849 | "Dictate wholesale exposure scheme for current topic, according to SPEC. | 4212 | |
| 4213 | "Deprecated. Use `allout-expose-topic' \(with different schema | ||
| 4214 | format) instead. | ||
| 4215 | |||
| 4216 | Dictate wholesale exposure scheme for current topic, according to SPEC. | ||
| 3850 | 4217 | ||
| 3851 | SPEC is either a number or a list. Optional successive args | 4218 | SPEC is either a number or a list. Optional successive args |
| 3852 | dictate exposure for subsequent siblings of current topic. | 4219 | dictate exposure for subsequent siblings of current topic. |
| @@ -3918,9 +4285,6 @@ Optional FOLLOWERS arguments dictate exposure for succeeding siblings." | |||
| 3918 | (allout-old-expose-topic (car followers)) | 4285 | (allout-old-expose-topic (car followers)) |
| 3919 | (setq followers (cdr followers))) | 4286 | (setq followers (cdr followers))) |
| 3920 | max-pos)) | 4287 | max-pos)) |
| 3921 | (make-obsolete 'allout-old-expose-topic | ||
| 3922 | "use `allout-expose-topic' (with different schema format) instead." | ||
| 3923 | "19.23") | ||
| 3924 | ;;;_ > allout-new-exposure '() | 4288 | ;;;_ > allout-new-exposure '() |
| 3925 | (defmacro allout-new-exposure (&rest spec) | 4289 | (defmacro allout-new-exposure (&rest spec) |
| 3926 | "Literal frontend for `allout-expose-topic', doesn't evaluate arguments. | 4290 | "Literal frontend for `allout-expose-topic', doesn't evaluate arguments. |
| @@ -3929,6 +4293,8 @@ need not be quoted in `allout-new-exposure'. | |||
| 3929 | 4293 | ||
| 3930 | Cursor is left at start position. | 4294 | Cursor is left at start position. |
| 3931 | 4295 | ||
| 4296 | Use this instead of obsolete `allout-exposure'. | ||
| 4297 | |||
| 3932 | Examples: | 4298 | Examples: |
| 3933 | \(allout-new-exposure (-1 () () () 1) 0) | 4299 | \(allout-new-exposure (-1 () () () 1) 0) |
| 3934 | Close current topic at current level so only the immediate | 4300 | Close current topic at current level so only the immediate |
| @@ -4151,13 +4517,20 @@ header and body. The elements of that list are: | |||
| 4151 | (cdr format))))))) | 4517 | (cdr format))))))) |
| 4152 | ;; Put the list with first at front, to last at back: | 4518 | ;; Put the list with first at front, to last at back: |
| 4153 | (nreverse result)))) | 4519 | (nreverse result)))) |
| 4520 | ;;;_ > my-region-active-p () | ||
| 4521 | (defmacro my-region-active-p () | ||
| 4522 | (if (fboundp 'region-active-p) | ||
| 4523 | '(region-active-p) | ||
| 4524 | 'mark-active)) | ||
| 4154 | ;;;_ > allout-process-exposed (&optional func from to frombuf | 4525 | ;;;_ > allout-process-exposed (&optional func from to frombuf |
| 4155 | ;;; tobuf format) | 4526 | ;;; tobuf format) |
| 4156 | (defun allout-process-exposed (&optional func from to frombuf tobuf | 4527 | (defun allout-process-exposed (&optional func from to frombuf tobuf |
| 4157 | format start-num) | 4528 | format &optional start-num) |
| 4158 | "Map function on exposed parts of current topic; results to another buffer. | 4529 | "Map function on exposed parts of current topic; results to another buffer. |
| 4159 | 4530 | ||
| 4160 | Apply FUNC to exposed portions FROM position TO position in buffer | 4531 | All args are options; default values itemized below. |
| 4532 | |||
| 4533 | Apply FUNCTION to exposed portions FROM position TO position in buffer | ||
| 4161 | FROMBUF to buffer TOBUF. Sixth optional arg, FORMAT, designates an | 4534 | FROMBUF to buffer TOBUF. Sixth optional arg, FORMAT, designates an |
| 4162 | alternate presentation form: | 4535 | alternate presentation form: |
| 4163 | 4536 | ||
| @@ -4170,7 +4543,7 @@ alternate presentation form: | |||
| 4170 | except for distinctive bullets. | 4543 | except for distinctive bullets. |
| 4171 | 4544 | ||
| 4172 | Defaults: | 4545 | Defaults: |
| 4173 | FUNC: `allout-insert-listified' | 4546 | FUNCTION: `allout-insert-listified' |
| 4174 | FROM: region start, if region active, else start of buffer | 4547 | FROM: region start, if region active, else start of buffer |
| 4175 | TO: region end, if region active, else end of buffer | 4548 | TO: region end, if region active, else end of buffer |
| 4176 | FROMBUF: current buffer | 4549 | FROMBUF: current buffer |
| @@ -4219,9 +4592,7 @@ LISTIFIED is a list representing each topic header and body: | |||
| 4219 | 4592 | ||
| 4220 | \`(depth prefix text)' | 4593 | \`(depth prefix text)' |
| 4221 | 4594 | ||
| 4222 | or | 4595 | or \`(depth prefix text bullet-plus)' |
| 4223 | |||
| 4224 | \`(depth prefix text bullet-plus)' | ||
| 4225 | 4596 | ||
| 4226 | If `bullet-plus' is specified, it is inserted just after the entire prefix." | 4597 | If `bullet-plus' is specified, it is inserted just after the entire prefix." |
| 4227 | (setq listified (cdr listified)) | 4598 | (setq listified (cdr listified)) |
| @@ -4237,7 +4608,7 @@ If `bullet-plus' is specified, it is inserted just after the entire prefix." | |||
| 4237 | (while text | 4608 | (while text |
| 4238 | (insert (car text)) | 4609 | (insert (car text)) |
| 4239 | (if (setq text (cdr text)) | 4610 | (if (setq text (cdr text)) |
| 4240 | (insert "\n"))) | 4611 | (insert-string "\n"))) |
| 4241 | (insert "\n"))) | 4612 | (insert "\n"))) |
| 4242 | ;;;_ > allout-copy-exposed-to-buffer (&optional arg tobuf format) | 4613 | ;;;_ > allout-copy-exposed-to-buffer (&optional arg tobuf format) |
| 4243 | (defun allout-copy-exposed-to-buffer (&optional arg tobuf format) | 4614 | (defun allout-copy-exposed-to-buffer (&optional arg tobuf format) |
| @@ -4440,14 +4811,14 @@ BULLET string, and a list of TEXT strings for the body." | |||
| 4440 | body-content bop) | 4811 | body-content bop) |
| 4441 | ; Do the head line: | 4812 | ; Do the head line: |
| 4442 | (insert (concat "\\OneHeadLine{\\verb\1 " | 4813 | (insert (concat "\\OneHeadLine{\\verb\1 " |
| 4443 | (allout-latex-verb-quote bullet) | 4814 | (allout-latex-verb-quote bullet) |
| 4444 | "\1}{" | 4815 | "\1}{" |
| 4445 | depth | 4816 | depth |
| 4446 | "}{\\verb\1 " | 4817 | "}{\\verb\1 " |
| 4447 | (if head-line | 4818 | (if head-line |
| 4448 | (allout-latex-verb-quote head-line) | 4819 | (allout-latex-verb-quote head-line) |
| 4449 | "") | 4820 | "") |
| 4450 | "\1}\n")) | 4821 | "\1}\n")) |
| 4451 | (if (not body-lines) | 4822 | (if (not body-lines) |
| 4452 | nil | 4823 | nil |
| 4453 | ;;(insert "\\beginlines\n") | 4824 | ;;(insert "\\beginlines\n") |
| @@ -4509,7 +4880,615 @@ With repeat count, copy the exposed portions of entire buffer." | |||
| 4509 | (pop-to-buffer buf) | 4880 | (pop-to-buffer buf) |
| 4510 | (goto-char start-pt))) | 4881 | (goto-char start-pt))) |
| 4511 | 4882 | ||
| 4512 | ;;;_ #8 miscellaneous | 4883 | ;;;_ #8 Encryption |
| 4884 | ;;;_ > allout-toggle-current-subtree-encryption (&optional fetch-key) | ||
| 4885 | (defun allout-toggle-current-subtree-encryption (&optional fetch-key) | ||
| 4886 | "Encrypt clear text or decrypt encoded contents of a topic. | ||
| 4887 | |||
| 4888 | Contents includes body and subtopics. | ||
| 4889 | |||
| 4890 | Currently only GnuPG encryption is supported. | ||
| 4891 | |||
| 4892 | \**NOTE WELL** that the encrypted text must be ascii-armored. For gnupg | ||
| 4893 | encryption, include the option ``armor'' in your ~/.gnupg/gpg.conf file. | ||
| 4894 | |||
| 4895 | Both symmetric-key and key-pair encryption is implemented. Symmetric is | ||
| 4896 | the default, use a single \(x4) universal argument for keypair mode. | ||
| 4897 | |||
| 4898 | Encrypted topic's bullet is set to a `~' to signal that the contents of the | ||
| 4899 | topic \(body and subtopics, but not heading) is pending encryption or | ||
| 4900 | encrypted. An `*' asterisk immediately after the bullet signals that the | ||
| 4901 | body is encrypted, its absence means it's meant to be encrypted but is not | ||
| 4902 | - it's \"disclosed\". When a file with disclosed topics is saved, the user | ||
| 4903 | prompted for an ok to \(symmetric-key) encrypt the disclosed topics. NOTE | ||
| 4904 | WELL that you must explicitly \(re)encrypt key-pair encrypted topics if you | ||
| 4905 | want them to continue to be in key-pair mode. | ||
| 4906 | |||
| 4907 | Level-1 topics, with prefix consisting solely of an `*' asterisk, cannot be | ||
| 4908 | encrypted. If you want to encrypt the contents of a top-level topic, use | ||
| 4909 | \\[allout-shift-in] to increase its depth. | ||
| 4910 | |||
| 4911 | Failed transformation does not change the an entry being encrypted - | ||
| 4912 | instead, the key is re-solicited and the transformation is retried. | ||
| 4913 | \\[keyboard-quit] to abort. | ||
| 4914 | |||
| 4915 | Decryption does symmetric or key-pair key mode depending on how the text | ||
| 4916 | was encrypted. The encryption key is solicited if not currently available | ||
| 4917 | from the key cache from a recent prior encryption action. | ||
| 4918 | |||
| 4919 | Optional FETCH-KEY universal argument is used for two purposes - to provoke | ||
| 4920 | key-pair instead of symmetric encryption, or to provoke clearing of the key | ||
| 4921 | cache so keys are freshly fetched. | ||
| 4922 | |||
| 4923 | - Without any universal arguments, then the appropriate key for the is | ||
| 4924 | obtained from the cache, if available, else from the user. | ||
| 4925 | |||
| 4926 | - If FETCH-KEY is the result of one universal argument - ie, equal to 4 - | ||
| 4927 | then key-pair encryption is used. | ||
| 4928 | |||
| 4929 | - With repeated universal argument - equal to 16 - then the key cache is | ||
| 4930 | cleared before any encryption transformations, to force prompting of the | ||
| 4931 | user for the key. | ||
| 4932 | |||
| 4933 | The solicited key is retained for reuse in a buffer-specific cache for some | ||
| 4934 | set period of time \(default, 60 seconds), after which the string is | ||
| 4935 | nulled. `mailcrypt' provides the key caching functionality. You can | ||
| 4936 | adjust the key cache timeout by ajdusting the setting of the elisp variable | ||
| 4937 | `mc-passwd-timeout'. | ||
| 4938 | |||
| 4939 | If the file previously had no associated key, or had a different key than | ||
| 4940 | specified, the user is prompted to repeat the new one for corroboration. A | ||
| 4941 | random string encrypted by the new key is set on the buffer-specific | ||
| 4942 | variable `allout-key-verifier-string', for confirmation of the key when | ||
| 4943 | next obtained, before encrypting or decrypting anything with it. This | ||
| 4944 | helps avoid mistakenly shifting between keys. | ||
| 4945 | |||
| 4946 | If allout customization var `allout-key-verifier-handling' is non-nil, an | ||
| 4947 | entry for `allout-key-verifier-string' and its value is added to an Emacs | ||
| 4948 | 'local variables' section at the end of the file, which is created if | ||
| 4949 | necessary. That setting is for retention of the key verifier across emacs | ||
| 4950 | sessions. | ||
| 4951 | |||
| 4952 | Similarly, `allout-key-hint-string' stores a user-provided reminder about | ||
| 4953 | their key, and `allout-key-hint-handling' specifies when the hint is | ||
| 4954 | presented, or if key hints are disabled. If enabled \(see the | ||
| 4955 | `allout-key-hint-handling' docstring for details), the hint string is | ||
| 4956 | stored in the local-variables section of the file, and solicited whenever | ||
| 4957 | the key is changed." | ||
| 4958 | |||
| 4959 | ;;; This routine handles allout-specific business, dispatching | ||
| 4960 | ;;; encryption-specific business to allout-encrypt-string. | ||
| 4961 | |||
| 4962 | (interactive "P") | ||
| 4963 | (save-excursion | ||
| 4964 | (allout-end-of-prefix t) | ||
| 4965 | |||
| 4966 | (if (= (allout-recent-depth) 1) | ||
| 4967 | (error (concat "Cannot encrypt or decrypt level 1 topics -" | ||
| 4968 | " shift it in to make it encryptable"))) | ||
| 4969 | |||
| 4970 | (if (and fetch-key | ||
| 4971 | (not (equal fetch-key '(4)))) | ||
| 4972 | (mc-deactivate-passwd)) | ||
| 4973 | |||
| 4974 | (let* ((allout-buffer (current-buffer)) | ||
| 4975 | ;; Asses location: | ||
| 4976 | (after-bullet-pos (point)) | ||
| 4977 | (was-encrypted | ||
| 4978 | (progn (if (= (point-max) after-bullet-pos) | ||
| 4979 | (error "no body to encrypt")) | ||
| 4980 | (looking-at "\\*"))) | ||
| 4981 | (was-collapsed (if (not (re-search-forward "[\n\r]" nil t)) | ||
| 4982 | nil | ||
| 4983 | (backward-char 1) | ||
| 4984 | (looking-at "\r"))) | ||
| 4985 | (subtree-beg (1+ (point))) | ||
| 4986 | (subtree-end (allout-end-of-subtree)) | ||
| 4987 | (subject-text (buffer-substring-no-properties subtree-beg | ||
| 4988 | subtree-end)) | ||
| 4989 | (subtree-end-char (char-after (1- subtree-end))) | ||
| 4990 | (subtree-trailling-char (char-after subtree-end)) | ||
| 4991 | (place-holder (if (or (string= "" subject-text) | ||
| 4992 | (string= "\n" subject-text)) | ||
| 4993 | (error "No topic contents to %scrypt" | ||
| 4994 | (if was-encrypted "de" "en")))) | ||
| 4995 | ;; Assess key parameters: | ||
| 4996 | (key-type (or | ||
| 4997 | ;; detect the type by which it is already encrypted | ||
| 4998 | (and was-encrypted | ||
| 4999 | (allout-encrypted-text-type subject-text)) | ||
| 5000 | (and (member fetch-key '(4 (4))) | ||
| 5001 | (yes-or-no-p "Use key-pair encryption instead? ") | ||
| 5002 | 'keypair) | ||
| 5003 | 'symmetric)) | ||
| 5004 | (fetch-key (and fetch-key (not (member fetch-key '(16 (16)))))) | ||
| 5005 | result-text) | ||
| 5006 | |||
| 5007 | (setq result-text | ||
| 5008 | (allout-encrypt-string subject-text was-encrypted | ||
| 5009 | (current-buffer) key-type fetch-key)) | ||
| 5010 | |||
| 5011 | ;; Replace the subtree with the processed product. | ||
| 5012 | (allout-unprotected | ||
| 5013 | (progn | ||
| 5014 | (set-buffer allout-buffer) | ||
| 5015 | (delete-region subtree-beg subtree-end) | ||
| 5016 | (insert result-text) | ||
| 5017 | (if was-collapsed | ||
| 5018 | (allout-flag-region subtree-beg (1- (point)) ?\r)) | ||
| 5019 | ;; adjust trailling-blank-lines to preserve topic spacing: | ||
| 5020 | (if (not was-encrypted) | ||
| 5021 | (if (and (member subtree-end-char '(?\r ?\n)) | ||
| 5022 | (member subtree-trailling-char '(?\r ?\n))) | ||
| 5023 | (insert subtree-trailling-char))) | ||
| 5024 | ;; Ensure that the item has an encrypted-entry bullet: | ||
| 5025 | (if (not (string= (buffer-substring-no-properties | ||
| 5026 | (1- after-bullet-pos) after-bullet-pos) | ||
| 5027 | allout-topic-encryption-bullet)) | ||
| 5028 | (progn (goto-char (1- after-bullet-pos)) | ||
| 5029 | (delete-char 1) | ||
| 5030 | (insert allout-topic-encryption-bullet))) | ||
| 5031 | (if was-encrypted | ||
| 5032 | ;; Remove the is-encrypted bullet qualifier: | ||
| 5033 | (progn (goto-char after-bullet-pos) | ||
| 5034 | (delete-char 1)) | ||
| 5035 | ;; Add the is-encrypted bullet qualifier: | ||
| 5036 | (goto-char after-bullet-pos) | ||
| 5037 | (insert "*")) | ||
| 5038 | ) | ||
| 5039 | ) | ||
| 5040 | ) | ||
| 5041 | ) | ||
| 5042 | ) | ||
| 5043 | ;;;_ > allout-encrypt-string (text decrypt allout-buffer key-type rekey | ||
| 5044 | ;;; &optional retried verifying) | ||
| 5045 | (defun allout-encrypt-string (text decrypt allout-buffer key-type rekey | ||
| 5046 | &optional retried verifying) | ||
| 5047 | "Encrypt or decrypt a string TEXT using KEY. | ||
| 5048 | |||
| 5049 | If optional DECRYPT is true (default false), then decrypt instead of | ||
| 5050 | encrypt. | ||
| 5051 | |||
| 5052 | Optional REKEY (default false) provokes clearing of the key cache to force | ||
| 5053 | fresh prompting for the key. | ||
| 5054 | |||
| 5055 | Optional RETRIED is for internal use - conveys the number of failed keys have | ||
| 5056 | been solicited in sequence leading to this current call. | ||
| 5057 | |||
| 5058 | Optional VERIFYING is for internal use, signifying processing of text | ||
| 5059 | solely for verification of the cached key. | ||
| 5060 | |||
| 5061 | Returns the resulting string, or nil if the transformation fails." | ||
| 5062 | |||
| 5063 | ;; Ensure that we have an alternate handle on the real mc-activate-passwd: | ||
| 5064 | (if (not (fboundp 'real-mc-activate-passwd)) | ||
| 5065 | ;; Force loads of the primary mailcrypt packages, so flet below holds. | ||
| 5066 | (progn (require 'mailcrypt) | ||
| 5067 | (load "mc-toplev") | ||
| 5068 | (fset 'real-mc-activate-passwd | ||
| 5069 | (symbol-function 'mc-activate-passwd)))) | ||
| 5070 | |||
| 5071 | (if (and rekey (not verifying)) (mc-deactivate-passwd)) | ||
| 5072 | |||
| 5073 | (catch 'encryption-failed | ||
| 5074 | (save-excursion | ||
| 5075 | |||
| 5076 | (let* ((mc-default-scheme (or allout-encryption-scheme | ||
| 5077 | allout-default-encryption-scheme)) | ||
| 5078 | (id (format "%s-%s" key-type | ||
| 5079 | (or (buffer-file-name allout-buffer) | ||
| 5080 | (buffer-name allout-buffer)))) | ||
| 5081 | (cached (real-mc-activate-passwd id nil)) | ||
| 5082 | (comment "Processed by allout driving mailcrypt") | ||
| 5083 | key work-buffer result result-text encryption-process-status) | ||
| 5084 | |||
| 5085 | (unwind-protect | ||
| 5086 | |||
| 5087 | ;; Interject our mc-activate-passwd wrapper: | ||
| 5088 | (flet ((mc-activate-passwd (id &optional prompt) | ||
| 5089 | (allout-mc-activate-passwd id prompt))) | ||
| 5090 | |||
| 5091 | (setq work-buffer | ||
| 5092 | (set-buffer (allout-encryption-produce-work-buffer text))) | ||
| 5093 | |||
| 5094 | (cond | ||
| 5095 | |||
| 5096 | ;; symmetric: | ||
| 5097 | ((equal key-type 'symmetric) | ||
| 5098 | (setq key (if verifying | ||
| 5099 | (real-mc-activate-passwd id nil) | ||
| 5100 | (allout-mc-activate-passwd id))) | ||
| 5101 | (setq encryption-process-status | ||
| 5102 | (crypt-encrypt-buffer key decrypt)) | ||
| 5103 | (if (zerop encryption-process-status) | ||
| 5104 | t | ||
| 5105 | (if verifying | ||
| 5106 | (throw 'encryption-failed nil) | ||
| 5107 | (mc-deactivate-passwd) | ||
| 5108 | (error "Symmetric-key encryption failed (%s) - wrong key?" | ||
| 5109 | encryption-process-status)))) | ||
| 5110 | |||
| 5111 | ;; encrypt 'keypair: | ||
| 5112 | ((not decrypt) | ||
| 5113 | (condition-case result | ||
| 5114 | (mailcrypt-encrypt 1) | ||
| 5115 | (error (mc-deactivate-passwd) | ||
| 5116 | (error "encryption failed: %s" | ||
| 5117 | (cadr result))))) | ||
| 5118 | |||
| 5119 | ;; decrypt 'keypair: | ||
| 5120 | (t (condition-case result | ||
| 5121 | (mc-decrypt) | ||
| 5122 | (error (mc-deactivate-passwd) | ||
| 5123 | (error "decryption failed: %s" | ||
| 5124 | (cadr result)))))) | ||
| 5125 | |||
| 5126 | (setq result-text (if (or (equal key-type 'keypair) | ||
| 5127 | (not decrypt)) | ||
| 5128 | (buffer-substring 1 (1- (point-max))) | ||
| 5129 | (buffer-string))) | ||
| 5130 | ;; validate result - non-empty | ||
| 5131 | (cond ((not result-text) | ||
| 5132 | (if verifying | ||
| 5133 | nil | ||
| 5134 | ;; Transformation was fruitless - retry with new key. | ||
| 5135 | (mc-deactivate-passwd) | ||
| 5136 | (allout-encrypt-string text allout-buffer decrypt nil | ||
| 5137 | (if retried (1+ retried) 1) | ||
| 5138 | verifying))) | ||
| 5139 | |||
| 5140 | ;; Barf if encryption yields extraordinary control chars: | ||
| 5141 | ((and (not decrypt) | ||
| 5142 | (string-match "[\C-a\C-k\C-o-\C-z\C-@]" result-text)) | ||
| 5143 | (error (concat "encryption produced unusable" | ||
| 5144 | " non-armored text - reconfigure!"))) | ||
| 5145 | |||
| 5146 | ;; valid result and just verifying or non-symmetric: | ||
| 5147 | ((or verifying (not (equal key-type 'symmetric))) | ||
| 5148 | result-text) | ||
| 5149 | |||
| 5150 | ;; valid result and regular symmetric - situate validator: | ||
| 5151 | (t | ||
| 5152 | ;; valid result and verifier needs to be situated in | ||
| 5153 | ;; allout-buffer: | ||
| 5154 | (set-buffer allout-buffer) | ||
| 5155 | (if (and (or rekey (not cached)) | ||
| 5156 | (not (allout-verify-key key allout-buffer))) | ||
| 5157 | (allout-situate-encryption-key-verifier key id)) | ||
| 5158 | result-text) | ||
| 5159 | ) | ||
| 5160 | ) | ||
| 5161 | |||
| 5162 | ;; unwind-protect emergence: | ||
| 5163 | (if work-buffer | ||
| 5164 | (kill-buffer work-buffer)) | ||
| 5165 | ) | ||
| 5166 | ) | ||
| 5167 | ) | ||
| 5168 | ) | ||
| 5169 | ) | ||
| 5170 | ;;;_ > allout-mc-activate-passwd (id &optional prompt) | ||
| 5171 | (defun allout-mc-activate-passwd (id &optional prompt) | ||
| 5172 | "Substituted for mc-activate-passwd during allout outline encryption. | ||
| 5173 | |||
| 5174 | We add key-verification to vanilla mc-activate-passwd. | ||
| 5175 | |||
| 5176 | We depend in some cases on values of the following allout-encrypt-string | ||
| 5177 | internal or prevailing variables: | ||
| 5178 | - key-type - 'symmetric or 'keypair | ||
| 5179 | - id - id associated with current key in key cache | ||
| 5180 | - allout-buffer - where subject text resides | ||
| 5181 | - retried - number of current attempts to obtain this key | ||
| 5182 | - rekey - user asked to present a new key - needs to be confirmed" | ||
| 5183 | |||
| 5184 | ;; - if we're doing non-symmetric key, just do normal mc-activate-passwd | ||
| 5185 | ;; - otherwise, if we are have a cached version of the key, then assume | ||
| 5186 | ;; it's verified and return it | ||
| 5187 | ;; - otherwise, prompt for a key, and: | ||
| 5188 | ;; - if we have a key verifier \(a string value which should decrypt | ||
| 5189 | ;; against a symmetric key), validate against the verifier | ||
| 5190 | ;; - if successful, return the verified key | ||
| 5191 | ;; - if unsuccessful: | ||
| 5192 | ;; - offer to use the new key | ||
| 5193 | ;; - if accepted, do confirm process | ||
| 5194 | ;; - if refused, try again until we get a correctly spelled one or the | ||
| 5195 | ;; user quits | ||
| 5196 | ;; - if no key verifier, resolicit the key to get corroboration and return | ||
| 5197 | ;; the corroborated key if spelled identically, or error if not. | ||
| 5198 | |||
| 5199 | (if (not (equal key-type 'symmetric)) | ||
| 5200 | ;; do regular mc-activate-passwd on non-symmetric key | ||
| 5201 | (real-mc-activate-passwd id prompt) | ||
| 5202 | |||
| 5203 | ;; Symmetric hereon: | ||
| 5204 | |||
| 5205 | (save-excursion | ||
| 5206 | (set-buffer allout-buffer) | ||
| 5207 | (let* ((hint (if (and (not (string= allout-key-hint-string "")) | ||
| 5208 | (or (equal allout-key-hint-handling 'always) | ||
| 5209 | (and (equal allout-key-hint-handling 'needed) | ||
| 5210 | retried))) | ||
| 5211 | (format " [%s]" allout-key-hint-string) | ||
| 5212 | "")) | ||
| 5213 | (retry-message (if retried (format " (%s retry)" retried) "")) | ||
| 5214 | (prompt-sans-hint (format "'%s' symmetric key%s: " | ||
| 5215 | (buffer-name allout-buffer) | ||
| 5216 | retry-message)) | ||
| 5217 | (full-prompt (format "'%s' symmetric key%s%s: " | ||
| 5218 | (buffer-name allout-buffer) | ||
| 5219 | hint retry-message)) | ||
| 5220 | (prompt full-prompt) | ||
| 5221 | (verifier-string (allout-get-encryption-key-verifier)) | ||
| 5222 | ;; force retention of cached passwords for five minutes while | ||
| 5223 | ;; we're in this particular routine: | ||
| 5224 | (mc-passwd-timeout 300) | ||
| 5225 | (cached (real-mc-activate-passwd id nil)) | ||
| 5226 | (got (or cached (real-mc-activate-passwd id full-prompt))) | ||
| 5227 | confirmation) | ||
| 5228 | |||
| 5229 | (if (not got) | ||
| 5230 | nil | ||
| 5231 | |||
| 5232 | ;; Duplicate our handle on the key so it's not clobbered by | ||
| 5233 | ;; deactivate-passwd memory clearing: | ||
| 5234 | (setq got (format "%s" got)) | ||
| 5235 | |||
| 5236 | (cond (verifier-string | ||
| 5237 | (if (and (not (allout-encrypt-string | ||
| 5238 | verifier-string 'decrypt allout-buffer | ||
| 5239 | 'symmetric nil 0 'verifying)) | ||
| 5240 | (if (yes-or-no-p | ||
| 5241 | (concat "Key differs from established" | ||
| 5242 | " - use new one instead? ")) | ||
| 5243 | ;; deactivate password for subsequent | ||
| 5244 | ;; confirmation: | ||
| 5245 | (progn (mc-deactivate-passwd) | ||
| 5246 | (setq prompt prompt-sans-hint) | ||
| 5247 | nil) | ||
| 5248 | t)) | ||
| 5249 | (progn (mc-deactivate-passwd) | ||
| 5250 | (error "Wrong key.")))) | ||
| 5251 | ;; Force confirmation by repetition for new key: | ||
| 5252 | ((or rekey (not cached)) (mc-deactivate-passwd)))) | ||
| 5253 | ;; we have a key and it's either verified and cached. | ||
| 5254 | ;; confirmation vs new input - doing mc-activate-passwd will do the | ||
| 5255 | ;; right thing, in either case: | ||
| 5256 | (setq confirmation | ||
| 5257 | (real-mc-activate-passwd id (concat prompt | ||
| 5258 | " ... confirm spelling: "))) | ||
| 5259 | (prog1 | ||
| 5260 | (if (equal got confirmation) | ||
| 5261 | confirmation | ||
| 5262 | (if (yes-or-no-p (concat "spelling of original and" | ||
| 5263 | " confirmation differ - retry? ")) | ||
| 5264 | (progn (setq retried (if retried (1+ retried) 1)) | ||
| 5265 | (mc-deactivate-passwd) | ||
| 5266 | ;; recurse to this routine: | ||
| 5267 | (mc-activate-passwd id prompt-sans-hint)) | ||
| 5268 | (mc-deactivate-passwd) | ||
| 5269 | (error "Confirmation failed."))) | ||
| 5270 | ;; reduce opportunity for memory cherry-picking by zeroing duplicate: | ||
| 5271 | (dotimes (i (length got)) | ||
| 5272 | (aset got i 0)) | ||
| 5273 | ) | ||
| 5274 | ) | ||
| 5275 | ) | ||
| 5276 | ) | ||
| 5277 | ) | ||
| 5278 | ;;;_ > allout-encryption-produce-work-buffer (text) | ||
| 5279 | (defun allout-encryption-produce-work-buffer (text) | ||
| 5280 | "Establish a new buffer filled with TEXT, for outline encrypion processing. | ||
| 5281 | |||
| 5282 | TEXT is massaged so outline collapsing, if any, is removed." | ||
| 5283 | (let ((work-buffer (generate-new-buffer " *allout encryption*"))) | ||
| 5284 | (save-excursion | ||
| 5285 | (set-buffer work-buffer) | ||
| 5286 | (insert (subst-char-in-string ?\r ?\n text))) | ||
| 5287 | work-buffer)) | ||
| 5288 | ;;;_ > allout-encrypted-topic-p () | ||
| 5289 | (defun allout-encrypted-topic-p () | ||
| 5290 | "True if the current topic is encryptable and encrypted." | ||
| 5291 | (save-excursion | ||
| 5292 | (allout-end-of-prefix t) | ||
| 5293 | (and (string= (buffer-substring-no-properties (1- (point)) (point)) | ||
| 5294 | allout-topic-encryption-bullet) | ||
| 5295 | (looking-at "\\*")) | ||
| 5296 | ) | ||
| 5297 | ) | ||
| 5298 | ;;;_ > allout-encrypted-text-type (text) | ||
| 5299 | ;;; XXX gpg-specific, not generic! | ||
| 5300 | (defun allout-encrypted-text-type (text) | ||
| 5301 | "For gpg encrypted text, return 'symmetric or 'keypair." | ||
| 5302 | |||
| 5303 | ;; Ensure mc-gpg-path has a value: | ||
| 5304 | (if (not (boundp 'mc-gpg-path)) | ||
| 5305 | (load-library "mc-gpg")) | ||
| 5306 | |||
| 5307 | (save-excursion | ||
| 5308 | (let* ((work-buffer (set-buffer | ||
| 5309 | (allout-encryption-produce-work-buffer text))) | ||
| 5310 | (result (mc-gpg-process-region (point-min) (point-max) | ||
| 5311 | nil mc-gpg-path | ||
| 5312 | '("--batch" "--decrypt") | ||
| 5313 | 'mc-gpg-decrypt-parser | ||
| 5314 | work-buffer nil))) | ||
| 5315 | (cond ((equal (nth 0 result) 'symmetric) | ||
| 5316 | 'symmetric) | ||
| 5317 | ((equal (nth 0 result) t) | ||
| 5318 | 'keypair) | ||
| 5319 | (t (error "Unrecognized/unsupported encryption type %S" | ||
| 5320 | (nth 0 result)))) | ||
| 5321 | ) | ||
| 5322 | ) | ||
| 5323 | ) | ||
| 5324 | ;;;_ > allout-create-encryption-key-verifier (key id) | ||
| 5325 | (defun allout-create-encryption-key-verifier (key id) | ||
| 5326 | "Encrypt a random message for later validation of symmetric key." | ||
| 5327 | ;; use 20 random ascii characters, across the entire ascii range. | ||
| 5328 | (random t) | ||
| 5329 | (let ((spew (make-string 20 ?\0))) | ||
| 5330 | (dotimes (i (length spew)) | ||
| 5331 | (aset spew i (1+ (random 254)))) | ||
| 5332 | (allout-encrypt-string spew nil nil 'symmetric nil nil t)) | ||
| 5333 | ) | ||
| 5334 | ;;;_ > allout-situate-encryption-key-verifier (key id) | ||
| 5335 | (defun allout-situate-encryption-key-verifier (key id) | ||
| 5336 | "Establish key verifier string on file variable. | ||
| 5337 | |||
| 5338 | We also prompt for and situate a new reminder, if reminders are enabled. | ||
| 5339 | |||
| 5340 | We massage the string to simplify programmatic adjustment. File variable | ||
| 5341 | is `allout-file-key-verifier-string'." | ||
| 5342 | (let ((verifier-string | ||
| 5343 | ;; Collapse to a single line and enclose in string quotes: | ||
| 5344 | (subst-char-in-string ?\n ?\C-a | ||
| 5345 | (allout-create-encryption-key-verifier | ||
| 5346 | key id))) | ||
| 5347 | (reminder (if (not (equal allout-key-hint-handling 'disabled)) | ||
| 5348 | (read-from-minibuffer | ||
| 5349 | "Key hint to jog your memory next time: " | ||
| 5350 | allout-key-hint-string)))) | ||
| 5351 | (setq allout-key-verifier-string verifier-string) | ||
| 5352 | (allout-adjust-file-variable "allout-key-verifier-string" | ||
| 5353 | verifier-string) | ||
| 5354 | (cond ((equal allout-key-hint-handling 'disabled) | ||
| 5355 | nil) | ||
| 5356 | ((not (string= reminder allout-key-hint-string)) | ||
| 5357 | (setq allout-key-hint-string reminder) | ||
| 5358 | (allout-adjust-file-variable "allout-key-hint-string" | ||
| 5359 | reminder))) | ||
| 5360 | ) | ||
| 5361 | ) | ||
| 5362 | ;;;_ > allout-get-encryption-key-verifier () | ||
| 5363 | (defun allout-get-encryption-key-verifier () | ||
| 5364 | "Return the text of the encrypt key verifier, unmassaged, or nil if none. | ||
| 5365 | |||
| 5366 | Derived from value of `allout-file-key-verifier-string'." | ||
| 5367 | |||
| 5368 | (let ((verifier-string (and (boundp 'allout-key-verifier-string) | ||
| 5369 | allout-key-verifier-string))) | ||
| 5370 | (if verifier-string | ||
| 5371 | ;; Return it uncollapsed | ||
| 5372 | (subst-char-in-string ?\C-a ?\n verifier-string) | ||
| 5373 | nil) | ||
| 5374 | ) | ||
| 5375 | ) | ||
| 5376 | ;;;_ > allout-verify-key (key) | ||
| 5377 | (defun allout-verify-key (key allout-buffer) | ||
| 5378 | "True if key successfully decrypts key verifier, nil otherwise. | ||
| 5379 | |||
| 5380 | \"Otherwise\" includes absence of key verifier." | ||
| 5381 | (save-excursion | ||
| 5382 | (set-buffer allout-buffer) | ||
| 5383 | (and (boundp 'allout-key-verifier-string) | ||
| 5384 | allout-key-verifier-string | ||
| 5385 | (allout-encrypt-string (allout-get-encryption-key-verifier) | ||
| 5386 | 'decrypt allout-buffer 'symmetric | ||
| 5387 | nil nil 'verifying) | ||
| 5388 | t))) | ||
| 5389 | ;;;_ > allout-next-topic-pending-encryption (&optional except-mark) | ||
| 5390 | (defun allout-next-topic-pending-encryption (&optional except-mark) | ||
| 5391 | "Return the point of the next topic pending encryption, or nil if none. | ||
| 5392 | |||
| 5393 | EXCEPT-MARK identifies a point whose containing topics should be excluded | ||
| 5394 | from encryption. This supports 'except-current mode of | ||
| 5395 | `allout-encrypt-unencrypted-on-saves'. | ||
| 5396 | |||
| 5397 | Such a topic has the allout-topic-encryption-bullet without an | ||
| 5398 | immediately following '*' that would mark the topic as being encrypted. It | ||
| 5399 | must also have content." | ||
| 5400 | (let (done got content-beg) | ||
| 5401 | (while (not done) | ||
| 5402 | |||
| 5403 | (if (not (re-search-forward | ||
| 5404 | (format "\\(\\`\\|[\n\r]\\)%s *%s[^*]" | ||
| 5405 | (regexp-quote allout-header-prefix) | ||
| 5406 | (regexp-quote allout-topic-encryption-bullet)) | ||
| 5407 | nil t)) | ||
| 5408 | (setq got nil | ||
| 5409 | done t) | ||
| 5410 | (goto-char (setq got (match-beginning 0))) | ||
| 5411 | (if (looking-at "[\n\r]") | ||
| 5412 | (forward-char 1)) | ||
| 5413 | (setq got (point))) | ||
| 5414 | |||
| 5415 | (cond ((not got) | ||
| 5416 | (setq done t)) | ||
| 5417 | |||
| 5418 | ((not (re-search-forward "[\n\r]")) | ||
| 5419 | (setq got nil | ||
| 5420 | done t)) | ||
| 5421 | |||
| 5422 | ((eobp) | ||
| 5423 | (setq got nil | ||
| 5424 | done t)) | ||
| 5425 | |||
| 5426 | (t | ||
| 5427 | (setq content-beg (point)) | ||
| 5428 | (backward-char 1) | ||
| 5429 | (allout-end-of-subtree) | ||
| 5430 | (if (or (<= (point) content-beg) | ||
| 5431 | (and except-mark | ||
| 5432 | (<= content-beg except-mark) | ||
| 5433 | (>= (point) except-mark))) | ||
| 5434 | ;; Continue looking | ||
| 5435 | (setq got nil) | ||
| 5436 | ;; Got it! | ||
| 5437 | (setq done t))) | ||
| 5438 | ) | ||
| 5439 | ) | ||
| 5440 | (if got | ||
| 5441 | (goto-char got)) | ||
| 5442 | ) | ||
| 5443 | ) | ||
| 5444 | ;;;_ > allout-encrypt-decrypted (&optional except-mark) | ||
| 5445 | (defun allout-encrypt-decrypted (&optional except-mark) | ||
| 5446 | "Encrypt topics pending encryption except those containing exemption point. | ||
| 5447 | |||
| 5448 | EXCEPT-MARK identifies a point whose containing topics should be excluded | ||
| 5449 | from encryption. This supports 'except-current mode of | ||
| 5450 | `allout-encrypt-unencrypted-on-saves'. | ||
| 5451 | |||
| 5452 | If a topic that is currently being edited was encrypted, we return a list | ||
| 5453 | containing the location of the topic and the location of the cursor just | ||
| 5454 | before the topic was encrypted. This can be used, eg, to decrypt the topic | ||
| 5455 | and exactly resituate the cursor if this is being done as part of a file | ||
| 5456 | save. See `allout-encrypt-unencrypted-on-saves' for more info." | ||
| 5457 | |||
| 5458 | (interactive "p") | ||
| 5459 | (save-excursion | ||
| 5460 | (let ((current-mark (point-marker)) | ||
| 5461 | was-modified | ||
| 5462 | bo-subtree | ||
| 5463 | editing-topic editing-point) | ||
| 5464 | (goto-char (point-min)) | ||
| 5465 | (while (allout-next-topic-pending-encryption except-mark) | ||
| 5466 | (setq was-modified (buffer-modified-p)) | ||
| 5467 | (if (save-excursion | ||
| 5468 | (and (boundp 'allout-encrypt-unencrypted-on-saves) | ||
| 5469 | allout-encrypt-unencrypted-on-saves | ||
| 5470 | (setq bo-subtree (re-search-forward "[\n\r]")) | ||
| 5471 | ;; Not collapsed: | ||
| 5472 | (string= (match-string 0) "\n") | ||
| 5473 | (>= current-mark (point)) | ||
| 5474 | (allout-end-of-current-subtree) | ||
| 5475 | (<= current-mark (point)))) | ||
| 5476 | (setq editing-topic (point) | ||
| 5477 | ;; we had to wait for this 'til now so prior topics are | ||
| 5478 | ;; encrypted, any relevant text shifts are in place: | ||
| 5479 | editing-point (marker-position current-mark))) | ||
| 5480 | (allout-toggle-current-subtree-encryption) | ||
| 5481 | (if (not was-modified) | ||
| 5482 | (set-buffer-modified-p nil)) | ||
| 5483 | ) | ||
| 5484 | (if (not was-modified) | ||
| 5485 | (set-buffer-modified-p nil)) | ||
| 5486 | (if editing-topic (list editing-topic editing-point)) | ||
| 5487 | ) | ||
| 5488 | ) | ||
| 5489 | ) | ||
| 5490 | |||
| 5491 | ;;;_ #9 miscellaneous | ||
| 4513 | ;;;_ > allout-mark-topic () | 5492 | ;;;_ > allout-mark-topic () |
| 4514 | (defun allout-mark-topic () | 5493 | (defun allout-mark-topic () |
| 4515 | "Put the region around topic currently containing point." | 5494 | "Put the region around topic currently containing point." |
| @@ -4538,22 +5517,100 @@ setup for auto-startup." | |||
| 4538 | t | 5517 | t |
| 4539 | (allout-open-topic 2) | 5518 | (allout-open-topic 2) |
| 4540 | (insert (concat "Dummy outline topic header - see" | 5519 | (insert (concat "Dummy outline topic header - see" |
| 4541 | "`allout-mode' docstring: `^Hm'.")) | 5520 | "`allout-mode' docstring: `^Hm'.")) |
| 4542 | (forward-line 1) | 5521 | (allout-adjust-file-variable |
| 5522 | "allout-layout" (format "%s" (or allout-layout '(-1 : 0))))))) | ||
| 5523 | ;;;_ > allout-file-vars-section-data () | ||
| 5524 | (defun allout-file-vars-section-data () | ||
| 5525 | "Return data identifying the file-vars section, or nil if none. | ||
| 5526 | |||
| 5527 | Returns list `(beginning-point prefix-string suffix-string)'." | ||
| 5528 | ;; minimally gleaned from emacs 21.4 files.el hack-local-variables function. | ||
| 5529 | (let (beg prefix suffix) | ||
| 5530 | (save-excursion | ||
| 4543 | (goto-char (point-max)) | 5531 | (goto-char (point-max)) |
| 4544 | (open-line 1) | 5532 | (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move) |
| 4545 | (allout-open-topic 0) | 5533 | (if (let ((case-fold-search t)) |
| 4546 | (insert "Local emacs vars.\n") | 5534 | (not (search-forward "Local Variables:" nil t))) |
| 4547 | (allout-open-topic 1) | 5535 | nil |
| 4548 | (insert "(`allout-layout' is for allout.el allout-mode)\n") | 5536 | (setq beg (- (point) 16)) |
| 4549 | (allout-open-topic 0) | 5537 | (setq suffix (buffer-substring-no-properties |
| 4550 | (insert "Local variables:\n") | 5538 | (point) |
| 4551 | (allout-open-topic 0) | 5539 | (progn (if (re-search-forward "[\n\r]" nil t) |
| 4552 | (insert (format "allout-layout: %s\n" | 5540 | (forward-char -1)) |
| 4553 | (or allout-layout | 5541 | (point)))) |
| 4554 | '(-1 : 0)))) | 5542 | (setq prefix (buffer-substring-no-properties |
| 4555 | (allout-open-topic 0) | 5543 | (progn (if (re-search-backward "[\n\r]" nil t) |
| 4556 | (insert "End:\n")))) | 5544 | (forward-char 1)) |
| 5545 | (point)) | ||
| 5546 | beg)) | ||
| 5547 | (list beg prefix suffix)) | ||
| 5548 | ) | ||
| 5549 | ) | ||
| 5550 | ) | ||
| 5551 | ;;;_ > allout-adjust-file-variable (varname value) | ||
| 5552 | (defun allout-adjust-file-variable (varname value) | ||
| 5553 | "Adjust the setting of an emacs file variable named VARNAME to VALUE. | ||
| 5554 | |||
| 5555 | This activity is inhibited if either `enable-local-variables' | ||
| 5556 | `allout-enable-file-variable-adjustment' are nil. | ||
| 5557 | |||
| 5558 | When enabled, an entry for the variable is created if not already present, | ||
| 5559 | or changed if established with a different value. The section for the file | ||
| 5560 | variables, itself, is created if not already present. When created, the | ||
| 5561 | section lines \(including the section line) exist as second-level topics in | ||
| 5562 | a top-level topic at the end of the file. | ||
| 5563 | |||
| 5564 | enable-local-variables must be true for any of this to happen." | ||
| 5565 | (if (not (and enable-local-variables | ||
| 5566 | allout-enable-file-variable-adjustment)) | ||
| 5567 | nil | ||
| 5568 | (save-excursion | ||
| 5569 | (let ((section-data (allout-file-vars-section-data)) | ||
| 5570 | beg prefix suffix) | ||
| 5571 | (if section-data | ||
| 5572 | (setq beg (car section-data) | ||
| 5573 | prefix (cadr section-data) | ||
| 5574 | suffix (car (cddr section-data))) | ||
| 5575 | ;; create the section | ||
| 5576 | (goto-char (point-max)) | ||
| 5577 | (open-line 1) | ||
| 5578 | (allout-open-topic 0) | ||
| 5579 | (end-of-line) | ||
| 5580 | (insert "Local emacs vars.\n") | ||
| 5581 | (allout-open-topic 1) | ||
| 5582 | (setq beg (point) | ||
| 5583 | suffix "" | ||
| 5584 | prefix (buffer-substring-no-properties (progn | ||
| 5585 | (beginning-of-line) | ||
| 5586 | (point)) | ||
| 5587 | beg)) | ||
| 5588 | (goto-char beg) | ||
| 5589 | (insert "Local variables:\n") | ||
| 5590 | (allout-open-topic 0) | ||
| 5591 | (insert "End:\n") | ||
| 5592 | ) | ||
| 5593 | ;; look for existing entry or create one, leaving point for insertion | ||
| 5594 | ;; of new value: | ||
| 5595 | (goto-char beg) | ||
| 5596 | (allout-show-to-offshoot) | ||
| 5597 | (if (search-forward (concat "\n" prefix varname ":") nil t) | ||
| 5598 | (let* ((value-beg (point)) | ||
| 5599 | (line-end (progn (if (re-search-forward "[\n\r]" nil t) | ||
| 5600 | (forward-char -1)) | ||
| 5601 | (point))) | ||
| 5602 | (value-end (- line-end (length suffix)))) | ||
| 5603 | (if (> value-end value-beg) | ||
| 5604 | (delete-region value-beg value-end))) | ||
| 5605 | (end-of-line) | ||
| 5606 | (open-line 1) | ||
| 5607 | (forward-line 1) | ||
| 5608 | (insert (concat prefix varname ":"))) | ||
| 5609 | (insert (format " %S%s" value suffix)) | ||
| 5610 | ) | ||
| 5611 | ) | ||
| 5612 | ) | ||
| 5613 | ) | ||
| 4557 | ;;;_ > solicit-char-in-string (prompt string &optional do-defaulting) | 5614 | ;;;_ > solicit-char-in-string (prompt string &optional do-defaulting) |
| 4558 | (defun solicit-char-in-string (prompt string &optional do-defaulting) | 5615 | (defun solicit-char-in-string (prompt string &optional do-defaulting) |
| 4559 | "Solicit (with first arg PROMPT) choice of a character from string STRING. | 5616 | "Solicit (with first arg PROMPT) choice of a character from string STRING. |
| @@ -4594,8 +5651,7 @@ Optional arg DO-DEFAULTING indicates to accept empty input (CR)." | |||
| 4594 | Representations of actual backslashes - '\\\\\\\\' - are left as a | 5651 | Representations of actual backslashes - '\\\\\\\\' - are left as a |
| 4595 | single backslash. | 5652 | single backslash. |
| 4596 | 5653 | ||
| 4597 | \(fn REGEXP)" | 5654 | Optional arg SUCCESSIVE-BACKSLASHES is used internally for recursion." |
| 4598 | ;; Optional arg SUCCESSIVE-BACKSLASHES is used internally for recursion. | ||
| 4599 | 5655 | ||
| 4600 | (if (string= regexp "") | 5656 | (if (string= regexp "") |
| 4601 | "" | 5657 | "" |
| @@ -4611,11 +5667,6 @@ single backslash. | |||
| 4611 | (regexp-sans-escapes (substring regexp 1))) | 5667 | (regexp-sans-escapes (substring regexp 1))) |
| 4612 | ;; Exclude first char, but maintain count: | 5668 | ;; Exclude first char, but maintain count: |
| 4613 | (regexp-sans-escapes (substring regexp 1) successive-backslashes)))) | 5669 | (regexp-sans-escapes (substring regexp 1) successive-backslashes)))) |
| 4614 | ;;;_ > my-region-active-p () | ||
| 4615 | (defmacro my-region-active-p () | ||
| 4616 | (if (fboundp 'region-active-p) | ||
| 4617 | '(region-active-p) | ||
| 4618 | 'mark-active)) | ||
| 4619 | ;;;_ - add-hook definition for divergent emacsen | 5670 | ;;;_ - add-hook definition for divergent emacsen |
| 4620 | ;;;_ > add-hook (hook function &optional append) | 5671 | ;;;_ > add-hook (hook function &optional append) |
| 4621 | (if (not (fboundp 'add-hook)) | 5672 | (if (not (fboundp 'add-hook)) |
| @@ -4636,17 +5687,30 @@ function. If HOOK is void, it is first set to nil." | |||
| 4636 | (if append | 5687 | (if append |
| 4637 | (nconc (symbol-value hook) (list function)) | 5688 | (nconc (symbol-value hook) (list function)) |
| 4638 | (cons function (symbol-value hook))))))) | 5689 | (cons function (symbol-value hook))))))) |
| 5690 | ;;;_ > subst-char-in-string if necessary | ||
| 5691 | (if (not (fboundp 'subst-char-in-string)) | ||
| 5692 | (defun subst-char-in-string (fromchar tochar string &optional inplace) | ||
| 5693 | "Replace FROMCHAR with TOCHAR in STRING each time it occurs. | ||
| 5694 | Unless optional argument INPLACE is non-nil, return a new string." | ||
| 5695 | (let ((i (length string)) | ||
| 5696 | (newstr (if inplace string (copy-sequence string)))) | ||
| 5697 | (while (> i 0) | ||
| 5698 | (setq i (1- i)) | ||
| 5699 | (if (eq (aref newstr i) fromchar) | ||
| 5700 | (aset newstr i tochar))) | ||
| 5701 | newstr))) | ||
| 5702 | |||
| 4639 | ;;;_ : my-mark-marker to accommodate divergent emacsen: | 5703 | ;;;_ : my-mark-marker to accommodate divergent emacsen: |
| 4640 | (defun my-mark-marker (&optional force buffer) | 5704 | (defun my-mark-marker (&optional force buffer) |
| 4641 | "Accommodate the different signature for `mark-marker' across Emacsen. | 5705 | "Accommodate the different signature for `mark-marker' across Emacsen. |
| 4642 | 5706 | ||
| 4643 | XEmacs takes two optional args, while GNU Emacs does not, | 5707 | XEmacs takes two optional args, while mainline GNU Emacs does not, |
| 4644 | so pass them along when appropriate." | 5708 | so pass them along when appropriate." |
| 4645 | (if (featurep 'xemacs) | 5709 | (if (string-match " XEmacs " emacs-version) |
| 4646 | (mark-marker force buffer) | 5710 | (mark-marker force buffer) |
| 4647 | (mark-marker))) | 5711 | (mark-marker))) |
| 4648 | 5712 | ||
| 4649 | ;;;_ #9 Under development | 5713 | ;;;_ #10 Under development |
| 4650 | ;;;_ > allout-bullet-isearch (&optional bullet) | 5714 | ;;;_ > allout-bullet-isearch (&optional bullet) |
| 4651 | (defun allout-bullet-isearch (&optional bullet) | 5715 | (defun allout-bullet-isearch (&optional bullet) |
| 4652 | "Isearch \(regexp) for topic with bullet BULLET." | 5716 | "Isearch \(regexp) for topic with bullet BULLET." |
diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 75228288fff..86fa6e489f0 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el | |||
| @@ -198,6 +198,13 @@ following in your `.emacs' file: | |||
| 198 | :group 'bookmark) | 198 | :group 'bookmark) |
| 199 | 199 | ||
| 200 | 200 | ||
| 201 | (defface bookmark-menu-heading | ||
| 202 | '((t (:inherit font-lock-type-face))) | ||
| 203 | "Face used to highlight the heading in bookmark menu buffers." | ||
| 204 | :group 'bookmark | ||
| 205 | :version "22.1") | ||
| 206 | |||
| 207 | |||
| 201 | ;;; No user-serviceable parts beyond this point. | 208 | ;;; No user-serviceable parts beyond this point. |
| 202 | 209 | ||
| 203 | ;; Is it XEmacs? | 210 | ;; Is it XEmacs? |
| @@ -211,12 +218,6 @@ following in your `.emacs' file: | |||
| 211 | ;; suggested for lucid compatibility by david hughes: | 218 | ;; suggested for lucid compatibility by david hughes: |
| 212 | (or (fboundp 'frame-height) (defalias 'frame-height 'screen-height)) | 219 | (or (fboundp 'frame-height) (defalias 'frame-height 'screen-height)) |
| 213 | 220 | ||
| 214 | ;; This variable is probably obsolete now... | ||
| 215 | (or (boundp 'baud-rate) | ||
| 216 | ;; some random value higher than 9600 | ||
| 217 | (setq baud-rate 19200)) | ||
| 218 | |||
| 219 | |||
| 220 | 221 | ||
| 221 | ;;; Keymap stuff: | 222 | ;;; Keymap stuff: |
| 222 | 223 | ||
| @@ -1555,6 +1556,8 @@ deletion, or > if it is flagged for displaying." | |||
| 1555 | (let ((inhibit-read-only t)) | 1556 | (let ((inhibit-read-only t)) |
| 1556 | (erase-buffer) | 1557 | (erase-buffer) |
| 1557 | (insert "% Bookmark\n- --------\n") | 1558 | (insert "% Bookmark\n- --------\n") |
| 1559 | (add-text-properties (point-min) (point) | ||
| 1560 | '(font-lock-face bookmark-menu-heading)) | ||
| 1558 | (bookmark-maybe-sort-alist) | 1561 | (bookmark-maybe-sort-alist) |
| 1559 | (mapcar | 1562 | (mapcar |
| 1560 | (lambda (full-record) | 1563 | (lambda (full-record) |
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 8fcbe7c0943..c1673508897 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el | |||
| @@ -43,200 +43,208 @@ | |||
| 43 | ;;; for CODATA 1998 see one of | 43 | ;;; for CODATA 1998 see one of |
| 44 | ;;; - Journal of Physical and Chemical Reference Data, 28(6), 1713-1852, 1999. | 44 | ;;; - Journal of Physical and Chemical Reference Data, 28(6), 1713-1852, 1999. |
| 45 | ;;; - Reviews of Modern Physics, 72(2), 351-495, 2000. | 45 | ;;; - Reviews of Modern Physics, 72(2), 351-495, 2000. |
| 46 | ;;; for CODATA 2005 see | ||
| 46 | ;;; - http://physics.nist.gov/cuu/Constants/index.html | 47 | ;;; - http://physics.nist.gov/cuu/Constants/index.html |
| 47 | 48 | ||
| 48 | (defvar math-standard-units | 49 | (defvar math-standard-units |
| 49 | '( ;; Length | 50 | '( ;; Length |
| 50 | ( m nil "*Meter" ) | 51 | ( m nil "*Meter" ) |
| 51 | ( in "2.54 cm" "Inch" ) | 52 | ( in "2.54 cm" "Inch" ) |
| 52 | ( ft "12 in" "Foot" ) | 53 | ( ft "12 in" "Foot" ) |
| 53 | ( yd "3 ft" "Yard" ) | 54 | ( yd "3 ft" "Yard" ) |
| 54 | ( mi "5280 ft" "Mile" ) | 55 | ( mi "5280 ft" "Mile" ) |
| 55 | ( au "149597870691 m" "Astronomical Unit" ) ;; NASA JPL (http://neo.jpl.nasa.gov/glossary/au.html) | 56 | ( au "149597870691 m" "Astronomical Unit" ) ;; NASA JPL (http://neo.jpl.nasa.gov/glossary/au.html) |
| 56 | ( lyr "9460536207068016 m" "Light Year" ) | 57 | ( lyr "9460536207068016 m" "Light Year" ) |
| 57 | ( pc "206264.80625 au" "Parsec" ) | 58 | ( pc "206264.80625 au" "Parsec" ) |
| 58 | ( nmi "1852 m" "Nautical Mile" ) | 59 | ( nmi "1852 m" "Nautical Mile" ) |
| 59 | ( fath "6 ft" "Fathom" ) | 60 | ( fath "6 ft" "Fathom" ) |
| 60 | ( u "1 um" "Micron" ) | 61 | ( mu "1 um" "Micron" ) |
| 61 | ( mil "in/1000" "Mil" ) | 62 | ( mil "in/1000" "Mil" ) |
| 62 | ( point "in/72" "Point (1/72 inch)" ) | 63 | ( point "in/72" "Point (1/72 inch)" ) |
| 63 | ( tpt "in/72.27" "Point (TeX conventions)" ) | 64 | ( Ang "1e-10 m" "Angstrom" ) |
| 64 | ( Ang "1e-10 m" "Angstrom" ) | 65 | ( mfi "mi+ft+in" "Miles + feet + inches" ) |
| 65 | ( mfi "mi+ft+in" "Miles + feet + inches" ) | 66 | ;; TeX lengths |
| 67 | ( texpt "in/72.27" "Point (TeX conventions)" ) | ||
| 68 | ( texpc "12 texpt" "Pica" ) | ||
| 69 | ( texbp "point" "Big point (TeX conventions)" ) | ||
| 70 | ( texdd "1238/1157 texpt" "Didot point" ) | ||
| 71 | ( texcc "12 texdd" "Cicero" ) | ||
| 72 | ( texsp "1/66536 texpt" "Scaled TeX point" ) | ||
| 66 | 73 | ||
| 67 | ;; Area | 74 | ;; Area |
| 68 | ( hect "10000 m^2" "*Hectare" ) | 75 | ( hect "10000 m^2" "*Hectare" ) |
| 69 | ( acre "mi^2 / 640" "Acre" ) | 76 | ( a "100 m^2" "Are") |
| 70 | ( b "1e-28 m^2" "Barn" ) | 77 | ( acre "mi^2 / 640" "Acre" ) |
| 78 | ( b "1e-28 m^2" "Barn" ) | ||
| 71 | 79 | ||
| 72 | ;; Volume | 80 | ;; Volume |
| 73 | ( l "1e-3 m^3" "*Liter" ) | 81 | ( L "1e-3 m^3" "*Liter" ) |
| 74 | ( L "1e-3 m^3" "Liter" ) | 82 | ( l "L" "Liter" ) |
| 75 | ( gal "4 qt" "US Gallon" ) | 83 | ( gal "4 qt" "US Gallon" ) |
| 76 | ( qt "2 pt" "Quart" ) | 84 | ( qt "2 pt" "Quart" ) |
| 77 | ( pt "2 cup" "Pint" ) | 85 | ( pt "2 cup" "Pint" ) |
| 78 | ( cup "8 ozfl" "Cup" ) | 86 | ( cup "8 ozfl" "Cup" ) |
| 79 | ( ozfl "2 tbsp" "Fluid Ounce" ) | 87 | ( ozfl "2 tbsp" "Fluid Ounce" ) |
| 80 | ( floz "2 tbsp" "Fluid Ounce" ) | 88 | ( floz "2 tbsp" "Fluid Ounce" ) |
| 81 | ( tbsp "3 tsp" "Tablespoon" ) | 89 | ( tbsp "3 tsp" "Tablespoon" ) |
| 82 | ( tsp "4.92892159375 ml" "Teaspoon" ) | 90 | ( tsp "4.92892159375 ml" "Teaspoon" ) |
| 83 | ( vol "tsp+tbsp+ozfl+cup+pt+qt+gal" "Gallons + ... + teaspoons" ) | 91 | ( vol "tsp+tbsp+ozfl+cup+pt+qt+gal" "Gallons + ... + teaspoons" ) |
| 84 | ( galC "4.54609 l" "Canadian Gallon" ) | 92 | ( galC "4.54609 L" "Canadian Gallon" ) |
| 85 | ( galUK "4.546092 l" "UK Gallon" ) | 93 | ( galUK "4.546092 L" "UK Gallon" ) |
| 86 | 94 | ||
| 87 | ;; Time | 95 | ;; Time |
| 88 | ( s nil "*Second" ) | 96 | ( s nil "*Second" ) |
| 89 | ( sec "s" "Second" ) | 97 | ( sec "s" "Second" ) |
| 90 | ( min "60 s" "Minute" ) | 98 | ( min "60 s" "Minute" ) |
| 91 | ( hr "60 min" "Hour" ) | 99 | ( hr "60 min" "Hour" ) |
| 92 | ( day "24 hr" "Day" ) | 100 | ( day "24 hr" "Day" ) |
| 93 | ( wk "7 day" "Week" ) | 101 | ( wk "7 day" "Week" ) |
| 94 | ( hms "wk+day+hr+min+s" "Hours, minutes, seconds" ) | 102 | ( hms "wk+day+hr+min+s" "Hours, minutes, seconds" ) |
| 95 | ( yr "365.25 day" "Year" ) | 103 | ( yr "365.25 day" "Year" ) |
| 96 | ( Hz "1/s" "Hertz" ) | 104 | ( Hz "1/s" "Hertz" ) |
| 97 | 105 | ||
| 98 | ;; Speed | 106 | ;; Speed |
| 99 | ( mph "mi/hr" "*Miles per hour" ) | 107 | ( mph "mi/hr" "*Miles per hour" ) |
| 100 | ( kph "km/hr" "Kilometers per hour" ) | 108 | ( kph "km/hr" "Kilometers per hour" ) |
| 101 | ( knot "nmi/hr" "Knot" ) | 109 | ( knot "nmi/hr" "Knot" ) |
| 102 | ( c "2.99792458e8 m/s" "Speed of light" ) | 110 | ( c "299792458 m/s" "Speed of light" ) ;;; CODATA 2005 |
| 103 | 111 | ||
| 104 | ;; Acceleration | 112 | ;; Acceleration |
| 105 | ( ga "9.80665 m/s^2" "*\"g\" acceleration" ) | 113 | ( ga "9.80665 m/s^2" "*\"g\" acceleration" ) ;; CODATA 2005 |
| 106 | 114 | ||
| 107 | ;; Mass | 115 | ;; Mass |
| 108 | ( g nil "*Gram" ) | 116 | ( g nil "*Gram" ) |
| 109 | ( lb "16 oz" "Pound (mass)" ) | 117 | ( lb "16 oz" "Pound (mass)" ) |
| 110 | ( oz "28.349523125 g" "Ounce (mass)" ) | 118 | ( oz "28.349523125 g" "Ounce (mass)" ) |
| 111 | ( ton "2000 lb" "Ton" ) | 119 | ( ton "2000 lb" "Ton" ) |
| 112 | ( tpo "ton+lb+oz" "Tons + pounds + ounces (mass)" ) | 120 | ( tpo "ton+lb+oz" "Tons + pounds + ounces (mass)" ) |
| 113 | ( t "1000 kg" "Metric ton" ) | 121 | ( t "1000 kg" "Metric ton" ) |
| 114 | ( tonUK "1016.0469088 kg" "UK ton" ) | 122 | ( tonUK "1016.0469088 kg" "UK ton" ) |
| 115 | ( lbt "12 ozt" "Troy pound" ) | 123 | ( lbt "12 ozt" "Troy pound" ) |
| 116 | ( ozt "31.103475 g" "Troy ounce" ) | 124 | ( ozt "31.103475 g" "Troy ounce" ) |
| 117 | ( ct ".2 g" "Carat" ) | 125 | ( ct ".2 g" "Carat" ) |
| 118 | ( amu "1.66053873e-27 kg" "Unified atomic mass" ) ;; CODATA 1998 | 126 | ( u "1.66053886e-27 kg" "Unified atomic mass" ) ;; CODATA 2005 |
| 119 | 127 | ||
| 120 | ;; Force | 128 | ;; Force |
| 121 | ( N "m kg/s^2" "*Newton" ) | 129 | ( N "m kg/s^2" "*Newton" ) |
| 122 | ( dyn "1e-5 N" "Dyne" ) | 130 | ( dyn "1e-5 N" "Dyne" ) |
| 123 | ( gf "ga g" "Gram (force)" ) | 131 | ( gf "ga g" "Gram (force)" ) |
| 124 | ( lbf "4.44822161526 N" "Pound (force)" ) | 132 | ( lbf "4.44822161526 N" "Pound (force)" ) |
| 125 | ( kip "1000 lbf" "Kilopound (force)" ) | 133 | ( kip "1000 lbf" "Kilopound (force)" ) |
| 126 | ( pdl "0.138255 N" "Poundal" ) | 134 | ( pdl "0.138255 N" "Poundal" ) |
| 127 | 135 | ||
| 128 | ;; Energy | 136 | ;; Energy |
| 129 | ( J "N m" "*Joule" ) | 137 | ( J "N m" "*Joule" ) |
| 130 | ( erg "1e-7 J" "Erg" ) | 138 | ( erg "1e-7 J" "Erg" ) |
| 131 | ( cal "4.1868 J" "International Table Calorie" ) | 139 | ( cal "4.1868 J" "International Table Calorie" ) |
| 132 | ( Btu "1055.05585262 J" "International Table Btu" ) | 140 | ( Btu "1055.05585262 J" "International Table Btu" ) |
| 133 | ( eV "ech V" "Electron volt" ) | 141 | ( eV "ech V" "Electron volt" ) |
| 134 | ( ev "eV" "Electron volt" ) | 142 | ( ev "eV" "Electron volt" ) |
| 135 | ( therm "105506000 J" "EEC therm" ) | 143 | ( therm "105506000 J" "EEC therm" ) |
| 136 | ( invcm "h c/cm" "Energy in inverse centimeters" ) | 144 | ( invcm "h c/cm" "Energy in inverse centimeters" ) |
| 137 | ( Kayser "invcm" "Kayser (inverse centimeter energy)" ) | 145 | ( Kayser "invcm" "Kayser (inverse centimeter energy)" ) |
| 138 | ( men "100/invcm" "Inverse energy in meters" ) | 146 | ( men "100/invcm" "Inverse energy in meters" ) |
| 139 | ( Hzen "h Hz" "Energy in Hertz") | 147 | ( Hzen "h Hz" "Energy in Hertz") |
| 140 | ( Ken "k K" "Energy in Kelvins") | 148 | ( Ken "k K" "Energy in Kelvins") |
| 141 | ( Wh "W hr" "Watt hour") | 149 | ( Wh "W hr" "Watt hour") |
| 142 | ( Ws "W s" "Watt second") | 150 | ( Ws "W s" "Watt second") |
| 143 | 151 | ||
| 144 | ;; Power | 152 | ;; Power |
| 145 | ( W "J/s" "*Watt" ) | 153 | ( W "J/s" "*Watt" ) |
| 146 | ( hp "745.7 W" "Horsepower" ) | 154 | ( hp "745.7 W" "Horsepower" ) |
| 147 | 155 | ||
| 148 | ;; Temperature | 156 | ;; Temperature |
| 149 | ( K nil "*Degree Kelvin" K ) | 157 | ( K nil "*Degree Kelvin" K ) |
| 150 | ( dK "K" "Degree Kelvin" K ) | 158 | ( dK "K" "Degree Kelvin" K ) |
| 151 | ( degK "K" "Degree Kelvin" K ) | 159 | ( degK "K" "Degree Kelvin" K ) |
| 152 | ( dC "K" "Degree Celsius" C ) | 160 | ( dC "K" "Degree Celsius" C ) |
| 153 | ( degC "K" "Degree Celsius" C ) | 161 | ( degC "K" "Degree Celsius" C ) |
| 154 | ( dF "(5/9) K" "Degree Fahrenheit" F ) | 162 | ( dF "(5/9) K" "Degree Fahrenheit" F ) |
| 155 | ( degF "(5/9) K" "Degree Fahrenheit" F ) | 163 | ( degF "(5/9) K" "Degree Fahrenheit" F ) |
| 156 | 164 | ||
| 157 | ;; Pressure | 165 | ;; Pressure |
| 158 | ( Pa "N/m^2" "*Pascal" ) | 166 | ( Pa "N/m^2" "*Pascal" ) |
| 159 | ( bar "1e5 Pa" "Bar" ) | 167 | ( bar "1e5 Pa" "Bar" ) |
| 160 | ( atm "101325 Pa" "Standard atmosphere" ) | 168 | ( atm "101325 Pa" "Standard atmosphere" ) ;; CODATA 2005 |
| 161 | ( torr " 1.333224e2 Pa" "Torr" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) | 169 | ( Torr " 1.333224e2 Pa" "Torr" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) |
| 162 | ( mHg "1000 torr" "Meter of mercury" ) | 170 | ( mHg "1000 Torr" "Meter of mercury" ) |
| 163 | ( inHg "25.4 mmHg" "Inch of mercury" ) | 171 | ( inHg "25.4 mmHg" "Inch of mercury" ) |
| 164 | ( inH2O "2.490889e2 Pa" "Inch of water" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) | 172 | ( inH2O "2.490889e2 Pa" "Inch of water" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) |
| 165 | ( psi "6894.75729317 Pa" "Pound per square inch" ) | 173 | ( psi "6894.75729317 Pa" "Pound per square inch" ) |
| 166 | 174 | ||
| 167 | ;; Viscosity | 175 | ;; Viscosity |
| 168 | ( P "0.1 Pa s" "*Poise" ) | 176 | ( P "0.1 Pa s" "*Poise" ) |
| 169 | ( St "1e-4 m^2/s" "Stokes" ) | 177 | ( St "1e-4 m^2/s" "Stokes" ) |
| 170 | 178 | ||
| 171 | ;; Electromagnetism | 179 | ;; Electromagnetism |
| 172 | ( A nil "*Ampere" ) | 180 | ( A nil "*Ampere" ) |
| 173 | ( C "A s" "Coulomb" ) | 181 | ( C "A s" "Coulomb" ) |
| 174 | ( Fdy "ech Nav" "Faraday" ) | 182 | ( Fdy "ech Nav" "Faraday" ) |
| 175 | ( e "1.602176462e-19 C" "Elementary charge" ) ;; CODATA 1998 | 183 | ( e "1.60217653e-19 C" "Elementary charge" ) ;; CODATA 2005 |
| 176 | ( ech "1.602176462e-19 C" "Elementary charge" ) ;; CODATA 1998 | 184 | ( ech "1.60217653e-19 C" "Elementary charge" ) ;; CODATA 2005 |
| 177 | ( V "W/A" "Volt" ) | 185 | ( V "W/A" "Volt" ) |
| 178 | ( ohm "V/A" "Ohm" ) | 186 | ( ohm "V/A" "Ohm" ) |
| 179 | ( mho "A/V" "Mho" ) | 187 | ( mho "A/V" "Mho" ) |
| 180 | ( S "A/V" "Siemens" ) | 188 | ( S "A/V" "Siemens" ) |
| 181 | ( F "C/V" "Farad" ) | 189 | ( F "C/V" "Farad" ) |
| 182 | ( H "Wb/A" "Henry" ) | 190 | ( H "Wb/A" "Henry" ) |
| 183 | ( T "Wb/m^2" "Tesla" ) | 191 | ( T "Wb/m^2" "Tesla" ) |
| 184 | ( G "1e-4 T" "Gauss" ) | 192 | ( Gs "1e-4 T" "Gauss" ) |
| 185 | ( Wb "V s" "Weber" ) | 193 | ( Wb "V s" "Weber" ) |
| 186 | 194 | ||
| 187 | ;; Luminous intensity | 195 | ;; Luminous intensity |
| 188 | ( cd nil "*Candela" ) | 196 | ( cd nil "*Candela" ) |
| 189 | ( sb "1e4 cd/m^2" "Stilb" ) | 197 | ( sb "1e4 cd/m^2" "Stilb" ) |
| 190 | ( lm "cd sr" "Lumen" ) | 198 | ( lm "cd sr" "Lumen" ) |
| 191 | ( lx "lm/m^2" "Lux" ) | 199 | ( lx "lm/m^2" "Lux" ) |
| 192 | ( ph "1e4 lx" "Phot" ) | 200 | ( ph "1e4 lx" "Phot" ) |
| 193 | ( fc "10.76391 lx" "Footcandle" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) | 201 | ( fc "10.76391 lx" "Footcandle" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) |
| 194 | ( lam "1e4 lm/m^2" "Lambert" ) | 202 | ( lam "1e4 lm/m^2" "Lambert" ) |
| 195 | ( flam "3.426259 cd/m^2" "Footlambert" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) | 203 | ( flam "3.426259 cd/m^2" "Footlambert" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html) |
| 196 | 204 | ||
| 197 | ;; Radioactivity | 205 | ;; Radioactivity |
| 198 | ( Bq "1/s" "*Becquerel" ) | 206 | ( Bq "1/s" "*Becquerel" ) |
| 199 | ( Ci "3.7e10 Bq" "Curie" ) | 207 | ( Ci "3.7e10 Bq" "Curie" ) |
| 200 | ( Gy "J/kg" "Gray" ) | 208 | ( Gy "J/kg" "Gray" ) |
| 201 | ( Sv "Gy" "Sievert" ) | 209 | ( Sv "Gy" "Sievert" ) |
| 202 | ( R "2.58e-4 C/kg" "Roentgen" ) | 210 | ( R "2.58e-4 C/kg" "Roentgen" ) |
| 203 | ( rd ".01 Gy" "Rad" ) | 211 | ( rd ".01 Gy" "Rad" ) |
| 204 | ( rem "rd" "Rem" ) | 212 | ( rem "rd" "Rem" ) |
| 205 | 213 | ||
| 206 | ;; Amount of substance | 214 | ;; Amount of substance |
| 207 | ( mol nil "*Mole" ) | 215 | ( mol nil "*Mole" ) |
| 208 | 216 | ||
| 209 | ;; Plane angle | 217 | ;; Plane angle |
| 210 | ( rad nil "*Radian" ) | 218 | ( rad nil "*Radian" ) |
| 211 | ( circ "2 pi rad" "Full circle" ) | 219 | ( circ "2 pi rad" "Full circle" ) |
| 212 | ( rev "circ" "Full revolution" ) | 220 | ( rev "circ" "Full revolution" ) |
| 213 | ( deg "circ/360" "Degree" ) | 221 | ( deg "circ/360" "Degree" ) |
| 214 | ( arcmin "deg/60" "Arc minute" ) | 222 | ( arcmin "deg/60" "Arc minute" ) |
| 215 | ( arcsec "arcmin/60" "Arc second" ) | 223 | ( arcsec "arcmin/60" "Arc second" ) |
| 216 | ( grad "circ/400" "Grade" ) | 224 | ( grad "circ/400" "Grade" ) |
| 217 | ( rpm "rev/min" "Revolutions per minute" ) | 225 | ( rpm "rev/min" "Revolutions per minute" ) |
| 218 | 226 | ||
| 219 | ;; Solid angle | 227 | ;; Solid angle |
| 220 | ( sr nil "*Steradian" ) | 228 | ( sr nil "*Steradian" ) |
| 221 | 229 | ||
| 222 | ;; Other physical quantities (CODATA 1998) | 230 | ;; Other physical quantities |
| 223 | ( h "6.62606876e-34 J s" "*Planck's constant" ) | 231 | ( h "6.6260693e-34 J s" "*Planck's constant" ) ;; CODATA 2005 |
| 224 | ( hbar "h / 2 pi" "Planck's constant" ) | 232 | ( hbar "h / 2 pi" "Planck's constant" ) |
| 225 | ( mu0 "4 pi 1e-7 H/m" "Permeability of vacuum" ) | 233 | ( mu0 "4 pi 1e-7 H/m" "Permeability of vacuum" ) |
| 226 | ( Grav "6.673e-11 m^3/kg^1/s^2" "Gravitational constant" ) | 234 | ( G "6.6742e-11 m^3/kg^1/s^2" "Gravitational constant" ) ;; CODATA 2005 |
| 227 | ( Nav "6.02214199e23 / mol" "Avagadro's constant" ) | 235 | ( Nav "6.02214115e23 / mol" "Avagadro's constant" ) ;; CODATA 2005 |
| 228 | ( me "9.10938188e-31 kg" "Electron rest mass" ) | 236 | ( me "9.1093826e-31 kg" "Electron rest mass" ) ;; CODATA 2005 |
| 229 | ( mp "1.67262158e-27 kg" "Proton rest mass" ) | 237 | ( mp "1.67262171e-27 kg" "Proton rest mass" ) ;; CODATA 2005 |
| 230 | ( mn "1.67492716e-27 kg" "Neutron rest mass" ) | 238 | ( mn "1.67492728e-27 kg" "Neutron rest mass" ) ;; CODATA 2005 |
| 231 | ( mu "1.88353109e-28 kg" "Muon rest mass" ) | 239 | ( mmu "1.88353140e-28 kg" "Muon rest mass" ) ;; CODATA 2005 |
| 232 | ( Ryd "10973731.568549 /m" "Rydberg's constant" ) | 240 | ( Ryd "10973731.568525 /m" "Rydberg's constant" ) ;; CODATA 2005 |
| 233 | ( k "1.3806503e-23 J/K" "Boltzmann's constant" ) | 241 | ( k "1.3806505e-23 J/K" "Boltzmann's constant" ) ;; CODATA 2005 |
| 234 | ( fsc "7.297352533e-3" "Fine structure constant" ) | 242 | ( alpha "7.297352568e-3" "Fine structure constant" ) ;; CODATA 2005 |
| 235 | ( muB "927.400899e-26 J/T" "Bohr magneton" ) | 243 | ( muB "927.400949e-26 J/T" "Bohr magneton" ) ;; CODATA 2005 |
| 236 | ( muN "5.05078317e-27 J/T" "Nuclear magneton" ) | 244 | ( muN "5.05078343e-27 J/T" "Nuclear magneton" ) ;; CODATA 2005 |
| 237 | ( mue "-928.476362e-26 J/T" "Electron magnetic moment" ) | 245 | ( mue "-928.476412e-26 J/T" "Electron magnetic moment" ) ;; CODATA 2005 |
| 238 | ( mup "1.410606633e-26 J/T" "Proton magnetic moment" ) | 246 | ( mup "1.41060671e-26 J/T" "Proton magnetic moment" ) ;; CODATA 2005 |
| 239 | ( R0 "8.314472 J/mol/K" "Molar gas constant" ) | 247 | ( R0 "8.314472 J/mol/K" "Molar gas constant" ) ;; CODATA 2005 |
| 240 | ( V0 "22.710981e-3 m^3/mol" "Standard volume of ideal gas" ))) | 248 | ( V0 "22.710981e-3 m^3/mol" "Standard volume of ideal gas" ))) |
| 241 | 249 | ||
| 242 | 250 | ||
| @@ -247,7 +255,9 @@ If this is changed, be sure to set math-units-table to nil to ensure | |||
| 247 | that the combined units table will be rebuilt.") | 255 | that the combined units table will be rebuilt.") |
| 248 | 256 | ||
| 249 | (defvar math-unit-prefixes | 257 | (defvar math-unit-prefixes |
| 250 | '( ( ?E (float 1 18) "Exa" ) | 258 | '( ( ?Y (float 1 24) "Yotta" ) |
| 259 | ( ?Z (float 1 21) "Zetta" ) | ||
| 260 | ( ?E (float 1 18) "Exa" ) | ||
| 251 | ( ?P (float 1 15) "Peta" ) | 261 | ( ?P (float 1 15) "Peta" ) |
| 252 | ( ?T (float 1 12) "Tera" ) | 262 | ( ?T (float 1 12) "Tera" ) |
| 253 | ( ?G (float 1 9) "Giga" ) | 263 | ( ?G (float 1 9) "Giga" ) |
| @@ -265,7 +275,9 @@ that the combined units table will be rebuilt.") | |||
| 265 | ( ?n (float 1 -9) "Nano" ) | 275 | ( ?n (float 1 -9) "Nano" ) |
| 266 | ( ?p (float 1 -12) "Pico" ) | 276 | ( ?p (float 1 -12) "Pico" ) |
| 267 | ( ?f (float 1 -15) "Femto" ) | 277 | ( ?f (float 1 -15) "Femto" ) |
| 268 | ( ?a (float 1 -18) "Atto" ))) | 278 | ( ?a (float 1 -18) "Atto" ) |
| 279 | ( ?z (float 1 -21) "zepto" ) | ||
| 280 | ( ?y (float 1 -24) "yocto" ))) | ||
| 269 | 281 | ||
| 270 | (defvar math-standard-units-systems | 282 | (defvar math-standard-units-systems |
| 271 | '( ( base nil ) | 283 | '( ( base nil ) |
diff --git a/lisp/cus-face.el b/lisp/cus-face.el index 5dba9f7de5d..449efa5fe66 100644 --- a/lisp/cus-face.el +++ b/lisp/cus-face.el | |||
| @@ -47,7 +47,7 @@ | |||
| 47 | ;; Create frame-local faces | 47 | ;; Create frame-local faces |
| 48 | (dolist (frame (frame-list)) | 48 | (dolist (frame (frame-list)) |
| 49 | (face-spec-set face value frame) | 49 | (face-spec-set face value frame) |
| 50 | (when (memq (window-system frame) '(x w32)) | 50 | (when (memq (window-system frame) '(x w32 mac)) |
| 51 | (setq have-window-system t))) | 51 | (setq have-window-system t))) |
| 52 | ;; When making a face after frames already exist | 52 | ;; When making a face after frames already exist |
| 53 | (if have-window-system | 53 | (if have-window-system |
diff --git a/lisp/desktop.el b/lisp/desktop.el index 0d5d18da191..087cb77f39d 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el | |||
| @@ -293,9 +293,8 @@ modes are restored automatically; they should not be listed here." | |||
| 293 | 293 | ||
| 294 | ;; We skip .log files because they are normally temporary. | 294 | ;; We skip .log files because they are normally temporary. |
| 295 | ;; (ftp) files because they require passwords and whatnot. | 295 | ;; (ftp) files because they require passwords and whatnot. |
| 296 | ;; TAGS files to save time (tags-file-name is saved instead). | ||
| 297 | (defcustom desktop-buffers-not-to-save | 296 | (defcustom desktop-buffers-not-to-save |
| 298 | "\\(^nn\\.a[0-9]+\\|\\.log\\|(ftp)\\|^tags\\|^TAGS\\)$" | 297 | "\\(^nn\\.a[0-9]+\\|\\.log\\|(ftp)\\)$" |
| 299 | "Regexp identifying buffers that are to be excluded from saving." | 298 | "Regexp identifying buffers that are to be excluded from saving." |
| 300 | :type 'regexp | 299 | :type 'regexp |
| 301 | :group 'desktop) | 300 | :group 'desktop) |
| @@ -307,7 +306,9 @@ modes are restored automatically; they should not be listed here." | |||
| 307 | :type 'regexp | 306 | :type 'regexp |
| 308 | :group 'desktop) | 307 | :group 'desktop) |
| 309 | 308 | ||
| 310 | (defcustom desktop-modes-not-to-save nil | 309 | ;; We skip TAGS files to save time (tags-file-name is saved instead). |
| 310 | (defcustom desktop-modes-not-to-save | ||
| 311 | '(tags-table-mode) | ||
| 311 | "List of major modes whose buffers should not be saved." | 312 | "List of major modes whose buffers should not be saved." |
| 312 | :type '(repeat symbol) | 313 | :type '(repeat symbol) |
| 313 | :group 'desktop) | 314 | :group 'desktop) |
diff --git a/lisp/disp-table.el b/lisp/disp-table.el index 778ea092e43..3c862bcc421 100644 --- a/lisp/disp-table.el +++ b/lisp/disp-table.el | |||
| @@ -145,7 +145,7 @@ Valid symbols are `truncation', `wrap', `escape', `control', | |||
| 145 | "Display character C as character SC in the g1 character set. | 145 | "Display character C as character SC in the g1 character set. |
| 146 | This function assumes that your terminal uses the SO/SI characters; | 146 | This function assumes that your terminal uses the SO/SI characters; |
| 147 | it is meaningless for an X frame." | 147 | it is meaningless for an X frame." |
| 148 | (if (memq window-system '(x w32)) | 148 | (if (memq window-system '(x w32 mac)) |
| 149 | (error "Cannot use string glyphs in a windowing system")) | 149 | (error "Cannot use string glyphs in a windowing system")) |
| 150 | (or standard-display-table | 150 | (or standard-display-table |
| 151 | (setq standard-display-table (make-display-table))) | 151 | (setq standard-display-table (make-display-table))) |
| @@ -157,7 +157,7 @@ it is meaningless for an X frame." | |||
| 157 | "Display character C as character GC in graphics character set. | 157 | "Display character C as character GC in graphics character set. |
| 158 | This function assumes VT100-compatible escapes; it is meaningless for an | 158 | This function assumes VT100-compatible escapes; it is meaningless for an |
| 159 | X frame." | 159 | X frame." |
| 160 | (if (memq window-system '(x w32)) | 160 | (if (memq window-system '(x w32 mac)) |
| 161 | (error "Cannot use string glyphs in a windowing system")) | 161 | (error "Cannot use string glyphs in a windowing system")) |
| 162 | (or standard-display-table | 162 | (or standard-display-table |
| 163 | (setq standard-display-table (make-display-table))) | 163 | (setq standard-display-table (make-display-table))) |
| @@ -217,7 +217,7 @@ for users who call this function in `.emacs'." | |||
| 217 | (equal (aref standard-display-table 161) [161]))) | 217 | (equal (aref standard-display-table 161) [161]))) |
| 218 | (progn | 218 | (progn |
| 219 | (standard-display-default 160 255) | 219 | (standard-display-default 160 255) |
| 220 | (unless (or (memq window-system '(x w32))) | 220 | (unless (or (memq window-system '(x w32 mac))) |
| 221 | (and (terminal-coding-system) | 221 | (and (terminal-coding-system) |
| 222 | (set-terminal-coding-system nil)))) | 222 | (set-terminal-coding-system nil)))) |
| 223 | 223 | ||
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index dea72fc7567..0cebeeb6f7f 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el | |||
| @@ -141,7 +141,7 @@ See the functions `find-function' and `find-variable'." | |||
| 141 | (unless (string-match "elc" suffix) (push suffix suffixes))))) | 141 | (unless (string-match "elc" suffix) (push suffix suffixes))))) |
| 142 | 142 | ||
| 143 | (defun find-library-name (library) | 143 | (defun find-library-name (library) |
| 144 | "Return the full name of the elisp source of LIBRARY." | 144 | "Return the absolute file name of the Lisp source of LIBRARY." |
| 145 | ;; If the library is byte-compiled, try to find a source library by | 145 | ;; If the library is byte-compiled, try to find a source library by |
| 146 | ;; the same name. | 146 | ;; the same name. |
| 147 | (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library) | 147 | (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library) |
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index 126c8d50dd9..9c2ac336b9b 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el | |||
| @@ -83,10 +83,14 @@ point (where the PPSS is equivalent to nil).") | |||
| 83 | (setq syntax-ppss-cache (cdr syntax-ppss-cache))) | 83 | (setq syntax-ppss-cache (cdr syntax-ppss-cache))) |
| 84 | ;; Throw away `last' value if made invalid. | 84 | ;; Throw away `last' value if made invalid. |
| 85 | (when (< beg (or (car syntax-ppss-last) 0)) | 85 | (when (< beg (or (car syntax-ppss-last) 0)) |
| 86 | (if (< beg (or (car (nth 10 syntax-ppss-last)) | 86 | ;; If syntax-begin-function jumped to BEG, then the old state at BEG can |
| 87 | (nth 9 syntax-ppss-last) | 87 | ;; depend on the text after BEG (which is presumably changed). So if |
| 88 | (nth 2 syntax-ppss-last) | 88 | ;; BEG=(car (nth 10 syntax-ppss-last)) don't reuse that data because the |
| 89 | 0)) | 89 | ;; assumed nil state at BEG may not be valid any more. |
| 90 | (if (<= beg (or (car (nth 10 syntax-ppss-last)) | ||
| 91 | (nth 9 syntax-ppss-last) | ||
| 92 | (nth 3 syntax-ppss-last) | ||
| 93 | 0)) | ||
| 90 | (setq syntax-ppss-last nil) | 94 | (setq syntax-ppss-last nil) |
| 91 | (setcar syntax-ppss-last nil))) | 95 | (setcar syntax-ppss-last nil))) |
| 92 | ;; Unregister if there's no cache left. Sadly this doesn't work | 96 | ;; Unregister if there's no cache left. Sadly this doesn't work |
| @@ -293,5 +297,5 @@ Point is at POS when this function returns." | |||
| 293 | 297 | ||
| 294 | (provide 'syntax) | 298 | (provide 'syntax) |
| 295 | 299 | ||
| 296 | ;;; arch-tag: 302f1eeb-e77c-4680-a8c5-c543e01161a5 | 300 | ;; arch-tag: 302f1eeb-e77c-4680-a8c5-c543e01161a5 |
| 297 | ;;; syntax.el ends here | 301 | ;;; syntax.el ends here |
diff --git a/lisp/font-core.el b/lisp/font-core.el index 4af6e1c41f0..27212f9fc68 100644 --- a/lisp/font-core.el +++ b/lisp/font-core.el | |||
| @@ -118,17 +118,14 @@ of `font-lock-global-modes'. For example, put in your ~/.emacs: | |||
| 118 | 118 | ||
| 119 | (global-font-lock-mode t) | 119 | (global-font-lock-mode t) |
| 120 | 120 | ||
| 121 | There are a number of support modes that may be used to speed up Font Lock mode | 121 | Where major modes support different levels of fontification, you can use |
| 122 | in various ways, specified via the variable `font-lock-support-mode'. Where | 122 | the variable `font-lock-maximum-decoration' to specify which level you |
| 123 | major modes support different levels of fontification, you can use the variable | 123 | generally prefer. When you turn Font Lock mode on/off the buffer is |
| 124 | `font-lock-maximum-decoration' to specify which level you generally prefer. | 124 | fontified/defontified, though fontification occurs only if the buffer is |
| 125 | When you turn Font Lock mode on/off the buffer is fontified/defontified, though | 125 | less than `font-lock-maximum-size'. |
| 126 | fontification occurs only if the buffer is less than `font-lock-maximum-size'. | ||
| 127 | 126 | ||
| 128 | For example, to specify that Font Lock mode uses Lazy Lock mode as a support | 127 | For example, to use maximum levels of fontification, put in your ~/.emacs: |
| 129 | mode and use maximum levels of fontification, put in your ~/.emacs: | ||
| 130 | 128 | ||
| 131 | (setq font-lock-support-mode 'lazy-lock-mode) | ||
| 132 | (setq font-lock-maximum-decoration t) | 129 | (setq font-lock-maximum-decoration t) |
| 133 | 130 | ||
| 134 | To add your own highlighting for some major mode, and modify the highlighting | 131 | To add your own highlighting for some major mode, and modify the highlighting |
diff --git a/lisp/font-lock.el b/lisp/font-lock.el index fceb3e17f78..c0e9e9ab16b 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el | |||
| @@ -1048,8 +1048,7 @@ a very meaningful entity to highlight.") | |||
| 1048 | (setq beg (line-beginning-position (- 1 font-lock-lines-before))) | 1048 | (setq beg (line-beginning-position (- 1 font-lock-lines-before))) |
| 1049 | ;; check to see if we should expand the beg/end area for | 1049 | ;; check to see if we should expand the beg/end area for |
| 1050 | ;; proper multiline matches | 1050 | ;; proper multiline matches |
| 1051 | (when (and font-lock-multiline | 1051 | (when (and (> beg (point-min)) |
| 1052 | (> beg (point-min)) | ||
| 1053 | (get-text-property (1- beg) 'font-lock-multiline)) | 1052 | (get-text-property (1- beg) 'font-lock-multiline)) |
| 1054 | ;; We are just after or in a multiline match. | 1053 | ;; We are just after or in a multiline match. |
| 1055 | (setq beg (or (previous-single-property-change | 1054 | (setq beg (or (previous-single-property-change |
| @@ -1057,10 +1056,9 @@ a very meaningful entity to highlight.") | |||
| 1057 | (point-min))) | 1056 | (point-min))) |
| 1058 | (goto-char beg) | 1057 | (goto-char beg) |
| 1059 | (setq beg (line-beginning-position))) | 1058 | (setq beg (line-beginning-position))) |
| 1060 | (when font-lock-multiline | 1059 | (setq end (or (text-property-any end (point-max) |
| 1061 | (setq end (or (text-property-any end (point-max) | 1060 | 'font-lock-multiline nil) |
| 1062 | 'font-lock-multiline nil) | 1061 | (point-max))) |
| 1063 | (point-max)))) | ||
| 1064 | (goto-char end) | 1062 | (goto-char end) |
| 1065 | ;; Round up to a whole line. | 1063 | ;; Round up to a whole line. |
| 1066 | (unless (bolp) (setq end (line-beginning-position 2))) | 1064 | (unless (bolp) (setq end (line-beginning-position 2))) |
| @@ -1184,35 +1182,35 @@ Optional argument OBJECT is the string or buffer containing the text." | |||
| 1184 | 1182 | ||
| 1185 | ;; For completeness: this is to `remove-text-properties' as `put-text-property' | 1183 | ;; For completeness: this is to `remove-text-properties' as `put-text-property' |
| 1186 | ;; is to `add-text-properties', etc. | 1184 | ;; is to `add-text-properties', etc. |
| 1187 | ;(defun remove-text-property (start end property &optional object) | 1185 | ;;(defun remove-text-property (start end property &optional object) |
| 1188 | ; "Remove a property from text from START to END. | 1186 | ;; "Remove a property from text from START to END. |
| 1189 | ;Argument PROPERTY is the property to remove. | 1187 | ;;Argument PROPERTY is the property to remove. |
| 1190 | ;Optional argument OBJECT is the string or buffer containing the text. | 1188 | ;;Optional argument OBJECT is the string or buffer containing the text. |
| 1191 | ;Return t if the property was actually removed, nil otherwise." | 1189 | ;;Return t if the property was actually removed, nil otherwise." |
| 1192 | ; (remove-text-properties start end (list property) object)) | 1190 | ;; (remove-text-properties start end (list property) object)) |
| 1193 | 1191 | ||
| 1194 | ;; For consistency: maybe this should be called `remove-single-property' like | 1192 | ;; For consistency: maybe this should be called `remove-single-property' like |
| 1195 | ;; `next-single-property-change' (not `next-single-text-property-change'), etc. | 1193 | ;; `next-single-property-change' (not `next-single-text-property-change'), etc. |
| 1196 | ;(defun remove-single-text-property (start end prop value &optional object) | 1194 | ;;(defun remove-single-text-property (start end prop value &optional object) |
| 1197 | ; "Remove a specific property value from text from START to END. | 1195 | ;; "Remove a specific property value from text from START to END. |
| 1198 | ;Arguments PROP and VALUE specify the property and value to remove. The | 1196 | ;;Arguments PROP and VALUE specify the property and value to remove. The |
| 1199 | ;resulting property values are not equal to VALUE nor lists containing VALUE. | 1197 | ;;resulting property values are not equal to VALUE nor lists containing VALUE. |
| 1200 | ;Optional argument OBJECT is the string or buffer containing the text." | 1198 | ;;Optional argument OBJECT is the string or buffer containing the text." |
| 1201 | ; (let ((start (text-property-not-all start end prop nil object)) next prev) | 1199 | ;; (let ((start (text-property-not-all start end prop nil object)) next prev) |
| 1202 | ; (while start | 1200 | ;; (while start |
| 1203 | ; (setq next (next-single-property-change start prop object end) | 1201 | ;; (setq next (next-single-property-change start prop object end) |
| 1204 | ; prev (get-text-property start prop object)) | 1202 | ;; prev (get-text-property start prop object)) |
| 1205 | ; (cond ((and (symbolp prev) (eq value prev)) | 1203 | ;; (cond ((and (symbolp prev) (eq value prev)) |
| 1206 | ; (remove-text-property start next prop object)) | 1204 | ;; (remove-text-property start next prop object)) |
| 1207 | ; ((and (listp prev) (memq value prev)) | 1205 | ;; ((and (listp prev) (memq value prev)) |
| 1208 | ; (let ((new (delq value prev))) | 1206 | ;; (let ((new (delq value prev))) |
| 1209 | ; (cond ((null new) | 1207 | ;; (cond ((null new) |
| 1210 | ; (remove-text-property start next prop object)) | 1208 | ;; (remove-text-property start next prop object)) |
| 1211 | ; ((= (length new) 1) | 1209 | ;; ((= (length new) 1) |
| 1212 | ; (put-text-property start next prop (car new) object)) | 1210 | ;; (put-text-property start next prop (car new) object)) |
| 1213 | ; (t | 1211 | ;; (t |
| 1214 | ; (put-text-property start next prop new object)))))) | 1212 | ;; (put-text-property start next prop new object)))))) |
| 1215 | ; (setq start (text-property-not-all next end prop nil object))))) | 1213 | ;; (setq start (text-property-not-all next end prop nil object))))) |
| 1216 | 1214 | ||
| 1217 | ;;; End of Additional text property functions. | 1215 | ;;; End of Additional text property functions. |
| 1218 | 1216 | ||
| @@ -1534,7 +1532,8 @@ If REGEXP is non-nil, it means these keywords are used for | |||
| 1534 | (if (memq (get-text-property (match-beginning 0) 'face) | 1532 | (if (memq (get-text-property (match-beginning 0) 'face) |
| 1535 | '(font-lock-string-face font-lock-doc-face | 1533 | '(font-lock-string-face font-lock-doc-face |
| 1536 | font-lock-comment-face)) | 1534 | font-lock-comment-face)) |
| 1537 | font-lock-warning-face) | 1535 | (list 'face font-lock-warning-face |
| 1536 | 'help-echo "Looks like a toplevel defun: escape the parenthesis")) | ||
| 1538 | prepend))))) | 1537 | prepend))))) |
| 1539 | keywords)) | 1538 | keywords)) |
| 1540 | 1539 | ||
| @@ -1602,7 +1601,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using | |||
| 1602 | (let* ((defaults (or font-lock-defaults | 1601 | (let* ((defaults (or font-lock-defaults |
| 1603 | (cdr (assq major-mode | 1602 | (cdr (assq major-mode |
| 1604 | (with-no-warnings | 1603 | (with-no-warnings |
| 1605 | font-lock-defaults-alist))))) | 1604 | font-lock-defaults-alist))))) |
| 1606 | (keywords | 1605 | (keywords |
| 1607 | (font-lock-choose-keywords (nth 0 defaults) | 1606 | (font-lock-choose-keywords (nth 0 defaults) |
| 1608 | (font-lock-value-in-major-mode font-lock-maximum-decoration))) | 1607 | (font-lock-value-in-major-mode font-lock-maximum-decoration))) |
| @@ -1854,95 +1853,95 @@ Sets various variables using `font-lock-defaults' (or, if nil, using | |||
| 1854 | ;; buttons and when they are on or off needs tweaking. I have assumed that the | 1853 | ;; buttons and when they are on or off needs tweaking. I have assumed that the |
| 1855 | ;; mechanism is via `menu-toggle' and `menu-selected' symbol properties. sm. | 1854 | ;; mechanism is via `menu-toggle' and `menu-selected' symbol properties. sm. |
| 1856 | 1855 | ||
| 1857 | ;;;;###autoload | 1856 | ;;;;;###autoload |
| 1858 | ;(progn | 1857 | ;;(progn |
| 1859 | ; ;; Make the Font Lock menu. | 1858 | ;; ;; Make the Font Lock menu. |
| 1860 | ; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting")) | 1859 | ;; (defvar font-lock-menu (make-sparse-keymap "Syntax Highlighting")) |
| 1861 | ; ;; Add the menu items in reverse order. | 1860 | ;; ;; Add the menu items in reverse order. |
| 1862 | ; (define-key font-lock-menu [fontify-less] | 1861 | ;; (define-key font-lock-menu [fontify-less] |
| 1863 | ; '("Less In Current Buffer" . font-lock-fontify-less)) | 1862 | ;; '("Less In Current Buffer" . font-lock-fontify-less)) |
| 1864 | ; (define-key font-lock-menu [fontify-more] | 1863 | ;; (define-key font-lock-menu [fontify-more] |
| 1865 | ; '("More In Current Buffer" . font-lock-fontify-more)) | 1864 | ;; '("More In Current Buffer" . font-lock-fontify-more)) |
| 1866 | ; (define-key font-lock-menu [font-lock-sep] | 1865 | ;; (define-key font-lock-menu [font-lock-sep] |
| 1867 | ; '("--")) | 1866 | ;; '("--")) |
| 1868 | ; (define-key font-lock-menu [font-lock-mode] | 1867 | ;; (define-key font-lock-menu [font-lock-mode] |
| 1869 | ; '("In Current Buffer" . font-lock-mode)) | 1868 | ;; '("In Current Buffer" . font-lock-mode)) |
| 1870 | ; (define-key font-lock-menu [global-font-lock-mode] | 1869 | ;; (define-key font-lock-menu [global-font-lock-mode] |
| 1871 | ; '("In All Buffers" . global-font-lock-mode))) | 1870 | ;; '("In All Buffers" . global-font-lock-mode))) |
| 1872 | ; | 1871 | ;; |
| 1873 | ;;;;###autoload | 1872 | ;;;;;###autoload |
| 1874 | ;(progn | 1873 | ;;(progn |
| 1875 | ; ;; We put the appropriate `menu-enable' etc. symbol property values on when | 1874 | ;; ;; We put the appropriate `menu-enable' etc. symbol property values on when |
| 1876 | ; ;; font-lock.el is loaded, so we don't need to autoload the three variables. | 1875 | ;; ;; font-lock.el is loaded, so we don't need to autoload the three variables. |
| 1877 | ; (put 'global-font-lock-mode 'menu-toggle t) | 1876 | ;; (put 'global-font-lock-mode 'menu-toggle t) |
| 1878 | ; (put 'font-lock-mode 'menu-toggle t) | 1877 | ;; (put 'font-lock-mode 'menu-toggle t) |
| 1879 | ; (put 'font-lock-fontify-more 'menu-enable '(identity)) | 1878 | ;; (put 'font-lock-fontify-more 'menu-enable '(identity)) |
| 1880 | ; (put 'font-lock-fontify-less 'menu-enable '(identity))) | 1879 | ;; (put 'font-lock-fontify-less 'menu-enable '(identity))) |
| 1881 | ; | 1880 | ;; |
| 1882 | ; ;; Put the appropriate symbol property values on now. See above. | 1881 | ;; ;; Put the appropriate symbol property values on now. See above. |
| 1883 | ;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode) | 1882 | ;;(put 'global-font-lock-mode 'menu-selected 'global-font-lock-mode) |
| 1884 | ;(put 'font-lock-mode 'menu-selected 'font-lock-mode) | 1883 | ;;(put 'font-lock-mode 'menu-selected 'font-lock-mode) |
| 1885 | ;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level)) | 1884 | ;;(put 'font-lock-fontify-more 'menu-enable '(nth 2 font-lock-fontify-level)) |
| 1886 | ;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level)) | 1885 | ;;(put 'font-lock-fontify-less 'menu-enable '(nth 1 font-lock-fontify-level)) |
| 1887 | ; | 1886 | ;; |
| 1888 | ;(defvar font-lock-fontify-level nil) ; For less/more fontification. | 1887 | ;;(defvar font-lock-fontify-level nil) ; For less/more fontification. |
| 1889 | ; | 1888 | ;; |
| 1890 | ;(defun font-lock-fontify-level (level) | 1889 | ;;(defun font-lock-fontify-level (level) |
| 1891 | ; (let ((font-lock-maximum-decoration level)) | 1890 | ;; (let ((font-lock-maximum-decoration level)) |
| 1892 | ; (when font-lock-mode | 1891 | ;; (when font-lock-mode |
| 1893 | ; (font-lock-mode)) | 1892 | ;; (font-lock-mode)) |
| 1894 | ; (font-lock-mode) | 1893 | ;; (font-lock-mode) |
| 1895 | ; (when font-lock-verbose | 1894 | ;; (when font-lock-verbose |
| 1896 | ; (message "Fontifying %s... level %d" (buffer-name) level)))) | 1895 | ;; (message "Fontifying %s... level %d" (buffer-name) level)))) |
| 1897 | ; | 1896 | ;; |
| 1898 | ;(defun font-lock-fontify-less () | 1897 | ;;(defun font-lock-fontify-less () |
| 1899 | ; "Fontify the current buffer with less decoration. | 1898 | ;; "Fontify the current buffer with less decoration. |
| 1900 | ;See `font-lock-maximum-decoration'." | 1899 | ;;See `font-lock-maximum-decoration'." |
| 1901 | ; (interactive) | 1900 | ;; (interactive) |
| 1902 | ; ;; Check in case we get called interactively. | 1901 | ;; ;; Check in case we get called interactively. |
| 1903 | ; (if (nth 1 font-lock-fontify-level) | 1902 | ;; (if (nth 1 font-lock-fontify-level) |
| 1904 | ; (font-lock-fontify-level (1- (car font-lock-fontify-level))) | 1903 | ;; (font-lock-fontify-level (1- (car font-lock-fontify-level))) |
| 1905 | ; (error "No less decoration"))) | 1904 | ;; (error "No less decoration"))) |
| 1906 | ; | 1905 | ;; |
| 1907 | ;(defun font-lock-fontify-more () | 1906 | ;;(defun font-lock-fontify-more () |
| 1908 | ; "Fontify the current buffer with more decoration. | 1907 | ;; "Fontify the current buffer with more decoration. |
| 1909 | ;See `font-lock-maximum-decoration'." | 1908 | ;;See `font-lock-maximum-decoration'." |
| 1910 | ; (interactive) | 1909 | ;; (interactive) |
| 1911 | ; ;; Check in case we get called interactively. | 1910 | ;; ;; Check in case we get called interactively. |
| 1912 | ; (if (nth 2 font-lock-fontify-level) | 1911 | ;; (if (nth 2 font-lock-fontify-level) |
| 1913 | ; (font-lock-fontify-level (1+ (car font-lock-fontify-level))) | 1912 | ;; (font-lock-fontify-level (1+ (car font-lock-fontify-level))) |
| 1914 | ; (error "No more decoration"))) | 1913 | ;; (error "No more decoration"))) |
| 1915 | ; | 1914 | ;; |
| 1916 | ; ;; This should be called by `font-lock-set-defaults'. | 1915 | ;; ;; This should be called by `font-lock-set-defaults'. |
| 1917 | ;(defun font-lock-set-menu () | 1916 | ;;(defun font-lock-set-menu () |
| 1918 | ; ;; Activate less/more fontification entries if there are multiple levels for | 1917 | ;; ;; Activate less/more fontification entries if there are multiple levels for |
| 1919 | ; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form | 1918 | ;; ;; the current buffer. Sets `font-lock-fontify-level' to be of the form |
| 1920 | ; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation. | 1919 | ;; ;; (CURRENT-LEVEL IS-LOWER-LEVEL-P IS-HIGHER-LEVEL-P) for menu activation. |
| 1921 | ; (let ((keywords (or (nth 0 font-lock-defaults) | 1920 | ;; (let ((keywords (or (nth 0 font-lock-defaults) |
| 1922 | ; (nth 1 (assq major-mode font-lock-defaults-alist)))) | 1921 | ;; (nth 1 (assq major-mode font-lock-defaults-alist)))) |
| 1923 | ; (level (font-lock-value-in-major-mode font-lock-maximum-decoration))) | 1922 | ;; (level (font-lock-value-in-major-mode font-lock-maximum-decoration))) |
| 1924 | ; (make-local-variable 'font-lock-fontify-level) | 1923 | ;; (make-local-variable 'font-lock-fontify-level) |
| 1925 | ; (if (or (symbolp keywords) (= (length keywords) 1)) | 1924 | ;; (if (or (symbolp keywords) (= (length keywords) 1)) |
| 1926 | ; (font-lock-unset-menu) | 1925 | ;; (font-lock-unset-menu) |
| 1927 | ; (cond ((eq level t) | 1926 | ;; (cond ((eq level t) |
| 1928 | ; (setq level (1- (length keywords)))) | 1927 | ;; (setq level (1- (length keywords)))) |
| 1929 | ; ((or (null level) (zerop level)) | 1928 | ;; ((or (null level) (zerop level)) |
| 1930 | ; ;; The default level is usually, but not necessarily, level 1. | 1929 | ;; ;; The default level is usually, but not necessarily, level 1. |
| 1931 | ; (setq level (- (length keywords) | 1930 | ;; (setq level (- (length keywords) |
| 1932 | ; (length (member (eval (car keywords)) | 1931 | ;; (length (member (eval (car keywords)) |
| 1933 | ; (mapcar 'eval (cdr keywords)))))))) | 1932 | ;; (mapcar 'eval (cdr keywords)))))))) |
| 1934 | ; (setq font-lock-fontify-level (list level (> level 1) | 1933 | ;; (setq font-lock-fontify-level (list level (> level 1) |
| 1935 | ; (< level (1- (length keywords)))))))) | 1934 | ;; (< level (1- (length keywords)))))))) |
| 1936 | ; | 1935 | ;; |
| 1937 | ; ;; This should be called by `font-lock-unset-defaults'. | 1936 | ;; ;; This should be called by `font-lock-unset-defaults'. |
| 1938 | ;(defun font-lock-unset-menu () | 1937 | ;;(defun font-lock-unset-menu () |
| 1939 | ; ;; Deactivate less/more fontification entries. | 1938 | ;; ;; Deactivate less/more fontification entries. |
| 1940 | ; (setq font-lock-fontify-level nil)) | 1939 | ;; (setq font-lock-fontify-level nil)) |
| 1941 | 1940 | ||
| 1942 | ;;; End of Menu support. | 1941 | ;;; End of Menu support. |
| 1943 | 1942 | ||
| 1944 | ;;; Various regexp information shared by several modes. | 1943 | ;;; Various regexp information shared by several modes. |
| 1945 | ; ;; Information specific to a single mode should go in its load library. | 1944 | ;; ;; Information specific to a single mode should go in its load library. |
| 1946 | 1945 | ||
| 1947 | ;; Font Lock support for C, C++, Objective-C and Java modes is now in | 1946 | ;; Font Lock support for C, C++, Objective-C and Java modes is now in |
| 1948 | ;; cc-fonts.el (and required by cc-mode.el). However, the below function | 1947 | ;; cc-fonts.el (and required by cc-mode.el). However, the below function |
diff --git a/lisp/frame.el b/lisp/frame.el index c8085762d2a..8342d8e6aac 100644 --- a/lisp/frame.el +++ b/lisp/frame.el | |||
| @@ -1132,9 +1132,9 @@ frame's display)." | |||
| 1132 | "Return the number of screens associated with DISPLAY." | 1132 | "Return the number of screens associated with DISPLAY." |
| 1133 | (let ((frame-type (framep-on-display display))) | 1133 | (let ((frame-type (framep-on-display display))) |
| 1134 | (cond | 1134 | (cond |
| 1135 | ((memq frame-type '(x w32)) | 1135 | ((memq frame-type '(x w32 mac)) |
| 1136 | (x-display-screens display)) | 1136 | (x-display-screens display)) |
| 1137 | (t ;; FIXME: is this correct for the Mac? | 1137 | (t |
| 1138 | 1)))) | 1138 | 1)))) |
| 1139 | 1139 | ||
| 1140 | (defun display-pixel-height (&optional display) | 1140 | (defun display-pixel-height (&optional display) |
| @@ -1342,7 +1342,7 @@ cursor display. On a text-only terminal, this is not implemented." | |||
| 1342 | :init-value (not (or noninteractive | 1342 | :init-value (not (or noninteractive |
| 1343 | no-blinking-cursor | 1343 | no-blinking-cursor |
| 1344 | (eq system-type 'ms-dos) | 1344 | (eq system-type 'ms-dos) |
| 1345 | (not (memq initial-window-system '(x w32))))) | 1345 | (not (memq initial-window-system '(x w32 mac))))) |
| 1346 | :initialize 'custom-initialize-safe-default | 1346 | :initialize 'custom-initialize-safe-default |
| 1347 | :group 'cursor | 1347 | :group 'cursor |
| 1348 | :global t | 1348 | :global t |
diff --git a/lisp/ido.el b/lisp/ido.el index b234795d3be..cc4eab4bb4d 100644 --- a/lisp/ido.el +++ b/lisp/ido.el | |||
| @@ -1084,9 +1084,9 @@ it doesn't interfere with other minibuffer usage.") | |||
| 1084 | (setq truncate-lines t))))) | 1084 | (setq truncate-lines t))))) |
| 1085 | 1085 | ||
| 1086 | (defun ido-is-tramp-root (&optional dir) | 1086 | (defun ido-is-tramp-root (&optional dir) |
| 1087 | (setq dir (or dir ido-current-directory)) | ||
| 1088 | (and ido-enable-tramp-completion | 1087 | (and ido-enable-tramp-completion |
| 1089 | (string-match "\\`/[^/][^/]+:\\([^/:@]+@\\)?\\'" dir))) | 1088 | (string-match "\\`/[^/]+[@:]\\'" |
| 1089 | (or dir ido-current-directory)))) | ||
| 1090 | 1090 | ||
| 1091 | (defun ido-is-root-directory (&optional dir) | 1091 | (defun ido-is-root-directory (&optional dir) |
| 1092 | (setq dir (or dir ido-current-directory)) | 1092 | (setq dir (or dir ido-current-directory)) |
| @@ -1507,11 +1507,16 @@ With ARG, turn ido speed-up on if arg is positive, off otherwise." | |||
| 1507 | 1507 | ||
| 1508 | (defun ido-set-current-directory (dir &optional subdir no-merge) | 1508 | (defun ido-set-current-directory (dir &optional subdir no-merge) |
| 1509 | ;; Set ido's current directory to DIR or DIR/SUBDIR | 1509 | ;; Set ido's current directory to DIR or DIR/SUBDIR |
| 1510 | (setq dir (ido-final-slash dir t)) | 1510 | (unless (and ido-enable-tramp-completion |
| 1511 | (string-match "\\`/[^/]*@\\'" dir)) | ||
| 1512 | (setq dir (ido-final-slash dir t))) | ||
| 1511 | (setq ido-use-merged-list nil | 1513 | (setq ido-use-merged-list nil |
| 1512 | ido-try-merged-list (not no-merge)) | 1514 | ido-try-merged-list (not no-merge)) |
| 1513 | (if subdir | 1515 | (when subdir |
| 1514 | (setq dir (ido-final-slash (concat dir subdir) t))) | 1516 | (setq dir (concat dir subdir)) |
| 1517 | (unless (and ido-enable-tramp-completion | ||
| 1518 | (string-match "\\`/[^/]*@\\'" dir)) | ||
| 1519 | (setq dir (ido-final-slash dir t)))) | ||
| 1515 | (if (equal dir ido-current-directory) | 1520 | (if (equal dir ido-current-directory) |
| 1516 | nil | 1521 | nil |
| 1517 | (ido-trace "cd" dir) | 1522 | (ido-trace "cd" dir) |
| @@ -3102,27 +3107,29 @@ for first matching file." | |||
| 3102 | ((ido-nonreadable-directory-p dir) '()) | 3107 | ((ido-nonreadable-directory-p dir) '()) |
| 3103 | ;; do not check (ido-directory-too-big-p dir) here. | 3108 | ;; do not check (ido-directory-too-big-p dir) here. |
| 3104 | ;; Caller must have done that if necessary. | 3109 | ;; Caller must have done that if necessary. |
| 3110 | |||
| 3105 | ((and ido-enable-tramp-completion | 3111 | ((and ido-enable-tramp-completion |
| 3106 | (string-match "\\`/\\([^/:]+:\\([^/:@]+@\\)?\\)\\'" dir)) | 3112 | (or (fboundp 'tramp-completion-mode) |
| 3107 | 3113 | (require 'tramp nil t)) | |
| 3108 | ;; Trick tramp's file-name-all-completions handler to DTRT, as it | 3114 | (string-match "\\`/[^/]+[:@]\\'" dir)) |
| 3109 | ;; has some pretty obscure requirements. This seems to work... | 3115 | ;; Strip method:user@host: part of tramp completions. |
| 3110 | ;; /ftp: => (f-n-a-c "/ftp:" "") | 3116 | ;; Tramp completions do not include leading slash. |
| 3111 | ;; /ftp:kfs: => (f-n-a-c "" "/ftp:kfs:") | 3117 | (let ((len (1- (length dir))) |
| 3112 | ;; /ftp:kfs@ => (f-n-a-c "ftp:kfs@" "/") | 3118 | (compl |
| 3113 | ;; /ftp:kfs@kfs: => (f-n-a-c "" "/ftp:kfs@kfs:") | 3119 | (or (file-name-all-completions "" dir) |
| 3114 | ;; Currently no attempt is made to handle multi: stuff. | 3120 | ;; work around bug in ange-ftp. |
| 3115 | 3121 | ;; /ftp:user@host: => nil | |
| 3116 | (let* ((prefix (match-string 1 dir)) | 3122 | ;; /ftp:user@host:./ => ok |
| 3117 | (user-flag (match-beginning 2)) | 3123 | (and |
| 3118 | (len (and prefix (length prefix))) | 3124 | (not (string= "/ftp:" dir)) |
| 3119 | compl) | 3125 | (tramp-tramp-file-p dir) |
| 3120 | (if user-flag | 3126 | (fboundp 'tramp-ftp-file-name-p) |
| 3121 | (setq dir (substring dir 1))) | 3127 | (funcall 'tramp-ftp-file-name-p dir) |
| 3122 | (require 'tramp nil t) | 3128 | (string-match ":\\'" dir) |
| 3123 | (ido-trace "tramp complete" dir) | 3129 | (file-name-all-completions "" (concat dir "./")))))) |
| 3124 | (setq compl (file-name-all-completions dir (if user-flag "/" ""))) | 3130 | (if (and compl |
| 3125 | (if (> len 0) | 3131 | (> (length (car compl)) len) |
| 3132 | (string= (substring (car compl) 0 len) (substring dir 1))) | ||
| 3126 | (mapcar (lambda (c) (substring c len)) compl) | 3133 | (mapcar (lambda (c) (substring c len)) compl) |
| 3127 | compl))) | 3134 | compl))) |
| 3128 | (t | 3135 | (t |
| @@ -3193,13 +3200,14 @@ for first matching file." | |||
| 3193 | (if ido-file-extensions-order | 3200 | (if ido-file-extensions-order |
| 3194 | #'ido-file-extension-lessp | 3201 | #'ido-file-extension-lessp |
| 3195 | #'ido-file-lessp))) | 3202 | #'ido-file-lessp))) |
| 3196 | (let ((default-directory ido-current-directory)) | 3203 | (unless (ido-is-tramp-root ido-current-directory) |
| 3197 | (ido-to-end ;; move ftp hosts and visited files to end | 3204 | (let ((default-directory ido-current-directory)) |
| 3198 | (delq nil (mapcar | 3205 | (ido-to-end ;; move ftp hosts and visited files to end |
| 3199 | (lambda (x) (if (or (string-match "..:\\'" x) | 3206 | (delq nil (mapcar |
| 3200 | (and (not (ido-final-slash x)) | 3207 | (lambda (x) (if (or (string-match "..:\\'" x) |
| 3201 | (get-file-buffer x))) x)) | 3208 | (and (not (ido-final-slash x)) |
| 3202 | ido-temp-list)))) | 3209 | (get-file-buffer x))) x)) |
| 3210 | ido-temp-list))))) | ||
| 3203 | (ido-to-end ;; move . files to end | 3211 | (ido-to-end ;; move . files to end |
| 3204 | (delq nil (mapcar | 3212 | (delq nil (mapcar |
| 3205 | (lambda (x) (if (string-equal (substring x 0 1) ".") x)) | 3213 | (lambda (x) (if (string-equal (substring x 0 1) ".") x)) |
diff --git a/lisp/image.el b/lisp/image.el index ee188677517..72e6ee8e633 100644 --- a/lisp/image.el +++ b/lisp/image.el | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | :group 'multimedia) | 33 | :group 'multimedia) |
| 34 | 34 | ||
| 35 | 35 | ||
| 36 | (defconst image-type-regexps | 36 | (defconst image-type-header-regexps |
| 37 | '(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm) | 37 | '(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm) |
| 38 | ("\\`P[1-6]" . pbm) | 38 | ("\\`P[1-6]" . pbm) |
| 39 | ("\\`GIF8" . gif) | 39 | ("\\`GIF8" . gif) |
| @@ -49,6 +49,21 @@ IMAGE-TYPE must be a pair (PREDICATE . TYPE). PREDICATE is called | |||
| 49 | with one argument, a string containing the image data. If PREDICATE returns | 49 | with one argument, a string containing the image data. If PREDICATE returns |
| 50 | a non-nil value, TYPE is the image's type.") | 50 | a non-nil value, TYPE is the image's type.") |
| 51 | 51 | ||
| 52 | (defconst image-type-file-name-regexps | ||
| 53 | '(("\\.png\\'" . png) | ||
| 54 | ("\\.gif\\'" . gif) | ||
| 55 | ("\\.jpe?g\\'" . jpeg) | ||
| 56 | ("\\.bmp\\'" . bmp) | ||
| 57 | ("\\.xpm\\'" . xpm) | ||
| 58 | ("\\.pbm\\'" . pbm) | ||
| 59 | ("\\.xbm\\'" . xbm) | ||
| 60 | ("\\.ps\\'" . postscript) | ||
| 61 | ("\\.tiff?\\'" . tiff)) | ||
| 62 | "Alist of (REGEXP . IMAGE-TYPE) pairs used to identify image files. | ||
| 63 | When the name of an image file match REGEXP, it is assumed to | ||
| 64 | be of image type IMAGE-TYPE.") | ||
| 65 | |||
| 66 | |||
| 52 | (defvar image-load-path | 67 | (defvar image-load-path |
| 53 | (list (file-name-as-directory (expand-file-name "images" data-directory)) | 68 | (list (file-name-as-directory (expand-file-name "images" data-directory)) |
| 54 | 'data-directory 'load-path) | 69 | 'data-directory 'load-path) |
| @@ -87,18 +102,50 @@ We accept the tag Exif because that is the same format." | |||
| 87 | "Determine the image type from image data DATA. | 102 | "Determine the image type from image data DATA. |
| 88 | Value is a symbol specifying the image type or nil if type cannot | 103 | Value is a symbol specifying the image type or nil if type cannot |
| 89 | be determined." | 104 | be determined." |
| 90 | (let ((types image-type-regexps) | 105 | (let ((types image-type-header-regexps) |
| 91 | type) | 106 | type) |
| 92 | (while (and types (null type)) | 107 | (while types |
| 93 | (let ((regexp (car (car types))) | 108 | (let ((regexp (car (car types))) |
| 94 | (image-type (cdr (car types)))) | 109 | (image-type (cdr (car types)))) |
| 95 | (when (or (and (symbolp image-type) | 110 | (if (or (and (symbolp image-type) |
| 96 | (string-match regexp data)) | 111 | (string-match regexp data)) |
| 97 | (and (consp image-type) | 112 | (and (consp image-type) |
| 98 | (funcall (car image-type) data) | 113 | (funcall (car image-type) data) |
| 99 | (setq image-type (cdr image-type)))) | 114 | (setq image-type (cdr image-type)))) |
| 100 | (setq type image-type)) | 115 | (setq type image-type |
| 101 | (setq types (cdr types)))) | 116 | types nil) |
| 117 | (setq types (cdr types))))) | ||
| 118 | type)) | ||
| 119 | |||
| 120 | |||
| 121 | ;;;###autoload | ||
| 122 | (defun image-type-from-buffer () | ||
| 123 | "Determine the image type from data in the current buffer. | ||
| 124 | Value is a symbol specifying the image type or nil if type cannot | ||
| 125 | be determined." | ||
| 126 | (let ((types image-type-header-regexps) | ||
| 127 | type | ||
| 128 | (opoint (point))) | ||
| 129 | (goto-char (point-min)) | ||
| 130 | (while types | ||
| 131 | (let ((regexp (car (car types))) | ||
| 132 | (image-type (cdr (car types))) | ||
| 133 | data) | ||
| 134 | (if (or (and (symbolp image-type) | ||
| 135 | (looking-at regexp)) | ||
| 136 | (and (consp image-type) | ||
| 137 | (funcall (car image-type) | ||
| 138 | (or data | ||
| 139 | (setq data | ||
| 140 | (buffer-substring | ||
| 141 | (point-min) | ||
| 142 | (min (point-max) | ||
| 143 | (+ (point-min) 256)))))) | ||
| 144 | (setq image-type (cdr image-type)))) | ||
| 145 | (setq type image-type | ||
| 146 | types nil) | ||
| 147 | (setq types (cdr types))))) | ||
| 148 | (goto-char opoint) | ||
| 102 | type)) | 149 | type)) |
| 103 | 150 | ||
| 104 | 151 | ||
| @@ -107,14 +154,30 @@ be determined." | |||
| 107 | "Determine the type of image file FILE from its first few bytes. | 154 | "Determine the type of image file FILE from its first few bytes. |
| 108 | Value is a symbol specifying the image type, or nil if type cannot | 155 | Value is a symbol specifying the image type, or nil if type cannot |
| 109 | be determined." | 156 | be determined." |
| 110 | (unless (file-name-directory file) | 157 | (unless (or (file-readable-p file) |
| 111 | (setq file (expand-file-name file data-directory))) | 158 | (file-name-absolute-p file)) |
| 112 | (setq file (expand-file-name file)) | 159 | (setq file (image-search-load-path file))) |
| 113 | (let ((header (with-temp-buffer | 160 | (and file |
| 114 | (set-buffer-multibyte nil) | 161 | (file-readable-p file) |
| 115 | (insert-file-contents-literally file nil 0 256) | 162 | (with-temp-buffer |
| 116 | (buffer-string)))) | 163 | (set-buffer-multibyte nil) |
| 117 | (image-type-from-data header))) | 164 | (insert-file-contents-literally file nil 0 256) |
| 165 | (image-type-from-buffer)))) | ||
| 166 | |||
| 167 | |||
| 168 | ;;;###autoload | ||
| 169 | (defun image-type-from-file-name (file) | ||
| 170 | "Determine the type of image file FILE from its name. | ||
| 171 | Value is a symbol specifying the image type, or nil if type cannot | ||
| 172 | be determined." | ||
| 173 | (let ((types image-type-file-name-regexps) | ||
| 174 | type) | ||
| 175 | (while types | ||
| 176 | (if (string-match (car (car types)) file) | ||
| 177 | (setq type (cdr (car types)) | ||
| 178 | types nil) | ||
| 179 | (setq types (cdr types)))) | ||
| 180 | type)) | ||
| 118 | 181 | ||
| 119 | 182 | ||
| 120 | ;;;###autoload | 183 | ;;;###autoload |
| @@ -124,6 +187,7 @@ Image types are symbols like `xbm' or `jpeg'." | |||
| 124 | (and (fboundp 'init-image-library) | 187 | (and (fboundp 'init-image-library) |
| 125 | (init-image-library type image-library-alist))) | 188 | (init-image-library type image-library-alist))) |
| 126 | 189 | ||
| 190 | |||
| 127 | ;;;###autoload | 191 | ;;;###autoload |
| 128 | (defun create-image (file-or-data &optional type data-p &rest props) | 192 | (defun create-image (file-or-data &optional type data-p &rest props) |
| 129 | "Create an image. | 193 | "Create an image. |
| @@ -135,7 +199,9 @@ use its file extension as image type. | |||
| 135 | Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data. | 199 | Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data. |
| 136 | Optional PROPS are additional image attributes to assign to the image, | 200 | Optional PROPS are additional image attributes to assign to the image, |
| 137 | like, e.g. `:mask MASK'. | 201 | like, e.g. `:mask MASK'. |
| 138 | Value is the image created, or nil if images of type TYPE are not supported." | 202 | Value is the image created, or nil if images of type TYPE are not supported. |
| 203 | |||
| 204 | Images should not be larger than specified by `max-image-size'." | ||
| 139 | (when (and (not data-p) (not (stringp file-or-data))) | 205 | (when (and (not data-p) (not (stringp file-or-data))) |
| 140 | (error "Invalid image file name `%s'" file-or-data)) | 206 | (error "Invalid image file name `%s'" file-or-data)) |
| 141 | (cond ((null data-p) | 207 | (cond ((null data-p) |
| @@ -279,27 +345,29 @@ BUFFER nil or omitted means use the current buffer." | |||
| 279 | (delete-overlay overlay))) | 345 | (delete-overlay overlay))) |
| 280 | (setq overlays (cdr overlays))))) | 346 | (setq overlays (cdr overlays))))) |
| 281 | 347 | ||
| 282 | (defun image-search-load-path (file path) | 348 | (defun image-search-load-path (file &optional path) |
| 283 | (let (element found pathname) | 349 | (unless path |
| 350 | (setq path image-load-path)) | ||
| 351 | (let (element found filename) | ||
| 284 | (while (and (not found) (consp path)) | 352 | (while (and (not found) (consp path)) |
| 285 | (setq element (car path)) | 353 | (setq element (car path)) |
| 286 | (cond | 354 | (cond |
| 287 | ((stringp element) | 355 | ((stringp element) |
| 288 | (setq found | 356 | (setq found |
| 289 | (file-readable-p | 357 | (file-readable-p |
| 290 | (setq pathname (expand-file-name file element))))) | 358 | (setq filename (expand-file-name file element))))) |
| 291 | ((and (symbolp element) (boundp element)) | 359 | ((and (symbolp element) (boundp element)) |
| 292 | (setq element (symbol-value element)) | 360 | (setq element (symbol-value element)) |
| 293 | (cond | 361 | (cond |
| 294 | ((stringp element) | 362 | ((stringp element) |
| 295 | (setq found | 363 | (setq found |
| 296 | (file-readable-p | 364 | (file-readable-p |
| 297 | (setq pathname (expand-file-name file element))))) | 365 | (setq filename (expand-file-name file element))))) |
| 298 | ((consp element) | 366 | ((consp element) |
| 299 | (if (setq pathname (image-search-load-path file element)) | 367 | (if (setq filename (image-search-load-path file element)) |
| 300 | (setq found t)))))) | 368 | (setq found t)))))) |
| 301 | (setq path (cdr path))) | 369 | (setq path (cdr path))) |
| 302 | (if found pathname))) | 370 | (if found filename))) |
| 303 | 371 | ||
| 304 | ;;;###autoload | 372 | ;;;###autoload |
| 305 | (defun find-image (specs) | 373 | (defun find-image (specs) |
| @@ -317,7 +385,9 @@ is supported, and FILE exists, is used to construct the image | |||
| 317 | specification to be returned. Return nil if no specification is | 385 | specification to be returned. Return nil if no specification is |
| 318 | satisfied. | 386 | satisfied. |
| 319 | 387 | ||
| 320 | The image is looked for in `image-load-path'." | 388 | The image is looked for in `image-load-path'. |
| 389 | |||
| 390 | Image files should not be larger than specified by `max-image-size'." | ||
| 321 | (let (image) | 391 | (let (image) |
| 322 | (while (and specs (null image)) | 392 | (while (and specs (null image)) |
| 323 | (let* ((spec (car specs)) | 393 | (let* ((spec (car specs)) |
| @@ -327,8 +397,7 @@ The image is looked for in `image-load-path'." | |||
| 327 | found) | 397 | found) |
| 328 | (when (image-type-available-p type) | 398 | (when (image-type-available-p type) |
| 329 | (cond ((stringp file) | 399 | (cond ((stringp file) |
| 330 | (if (setq found (image-search-load-path | 400 | (if (setq found (image-search-load-path file)) |
| 331 | file image-load-path)) | ||
| 332 | (setq image | 401 | (setq image |
| 333 | (cons 'image (plist-put (copy-sequence spec) | 402 | (cons 'image (plist-put (copy-sequence spec) |
| 334 | :file found))))) | 403 | :file found))))) |
diff --git a/lisp/info.el b/lisp/info.el index 6594d76fa03..c94e4121dc8 100644 --- a/lisp/info.el +++ b/lisp/info.el | |||
| @@ -2819,7 +2819,8 @@ Give a blank topic name to go to the Index node itself." | |||
| 2819 | (car (car Info-index-alternatives)) | 2819 | (car (car Info-index-alternatives)) |
| 2820 | (nth 2 (car Info-index-alternatives)) | 2820 | (nth 2 (car Info-index-alternatives)) |
| 2821 | (if (cdr Info-index-alternatives) | 2821 | (if (cdr Info-index-alternatives) |
| 2822 | "(`,' tries to find next)" | 2822 | (format "(%s total; use `,' for next)" |
| 2823 | (length Info-index-alternatives)) | ||
| 2823 | "(Only match)"))) | 2824 | "(Only match)"))) |
| 2824 | 2825 | ||
| 2825 | (defun Info-find-index-name (name) | 2826 | (defun Info-find-index-name (name) |
diff --git a/lisp/language/vietnamese.el b/lisp/language/vietnamese.el index 7c10a10d35a..9849fd0c538 100644 --- a/lisp/language/vietnamese.el +++ b/lisp/language/vietnamese.el | |||
| @@ -266,6 +266,7 @@ | |||
| 266 | (valid-codes (0 . 255)))) | 266 | (valid-codes (0 . 255)))) |
| 267 | 267 | ||
| 268 | (define-coding-system-alias 'tcvn 'vietnamese-tcvn) | 268 | (define-coding-system-alias 'tcvn 'vietnamese-tcvn) |
| 269 | (define-coding-system-alias 'tcvn-5712 'vietnamese-tcvn) | ||
| 269 | 270 | ||
| 270 | ;; (make-coding-system | 271 | ;; (make-coding-system |
| 271 | ;; 'vietnamese-vps 4 ?p | 272 | ;; 'vietnamese-vps 4 ?p |
diff --git a/lisp/loadhist.el b/lisp/loadhist.el index 61c4192387d..f23715f3825 100644 --- a/lisp/loadhist.el +++ b/lisp/loadhist.el | |||
| @@ -53,24 +53,23 @@ a buffer with no associated file, or an `eval-region', return nil." | |||
| 53 | (car (feature-symbols feature)))) | 53 | (car (feature-symbols feature)))) |
| 54 | 54 | ||
| 55 | (defun file-loadhist-lookup (file) | 55 | (defun file-loadhist-lookup (file) |
| 56 | "Return the `load-history' element for FILE." | 56 | "Return the `load-history' element for FILE. |
| 57 | FILE can be a file name, or a library name. | ||
| 58 | A library name is equivalent to the file name that `load-library' would load." | ||
| 57 | ;; First look for FILE as given. | 59 | ;; First look for FILE as given. |
| 58 | (let ((symbols (assoc file load-history))) | 60 | (let ((symbols (assoc file load-history))) |
| 59 | ;; Try converting a library name to an absolute file name. | 61 | ;; Try converting a library name to an absolute file name. |
| 60 | (and (null symbols) | 62 | (and (null symbols) |
| 61 | (let ((absname (find-library-name file))) | 63 | (let ((absname |
| 62 | (if (not (equal absname file)) | 64 | (locate-file file load-path load-suffixes))) |
| 63 | (setq symbols (cdr (assoc absname load-history)))))) | 65 | (and absname (not (equal absname file)) |
| 64 | ;; Try converting an absolute file name to a library name. | 66 | (setq symbols (cdr (assoc absname load-history)))))) |
| 65 | (and (null symbols) (string-match "[.]el\\'" file) | ||
| 66 | (let ((libname (file-name-nondirectory file))) | ||
| 67 | (string-match "[.]el\\'" libname) | ||
| 68 | (setq libname (substring libname 0 (match-beginning 0))) | ||
| 69 | (setq symbols (cdr (assoc libname load-history))))) | ||
| 70 | symbols)) | 67 | symbols)) |
| 71 | 68 | ||
| 72 | (defun file-provides (file) | 69 | (defun file-provides (file) |
| 73 | "Return the list of features provided by FILE." | 70 | "Return the list of features provided by FILE as it was loaded. |
| 71 | FILE can be a file name, or a library name. | ||
| 72 | A library name is equivalent to the file name that `load-library' would load." | ||
| 74 | (let ((symbols (file-loadhist-lookup file)) | 73 | (let ((symbols (file-loadhist-lookup file)) |
| 75 | provides) | 74 | provides) |
| 76 | (mapc (lambda (x) | 75 | (mapc (lambda (x) |
| @@ -80,7 +79,9 @@ a buffer with no associated file, or an `eval-region', return nil." | |||
| 80 | provides)) | 79 | provides)) |
| 81 | 80 | ||
| 82 | (defun file-requires (file) | 81 | (defun file-requires (file) |
| 83 | "Return the list of features required by FILE." | 82 | "Return the list of features required by FILE as it was loaded. |
| 83 | FILE can be a file name, or a library name. | ||
| 84 | A library name is equivalent to the file name that `load-library' would load." | ||
| 84 | (let ((symbols (file-loadhist-lookup file)) | 85 | (let ((symbols (file-loadhist-lookup file)) |
| 85 | requires) | 86 | requires) |
| 86 | (mapc (lambda (x) | 87 | (mapc (lambda (x) |
| @@ -98,7 +99,9 @@ a buffer with no associated file, or an `eval-region', return nil." | |||
| 98 | 99 | ||
| 99 | (defun file-dependents (file) | 100 | (defun file-dependents (file) |
| 100 | "Return the list of loaded libraries that depend on FILE. | 101 | "Return the list of loaded libraries that depend on FILE. |
| 101 | This can include FILE itself." | 102 | This can include FILE itself. |
| 103 | FILE can be a file name, or a library name. | ||
| 104 | A library name is equivalent to the file name that `load-library' would load." | ||
| 102 | (let ((provides (file-provides file)) | 105 | (let ((provides (file-provides file)) |
| 103 | (dependents nil)) | 106 | (dependents nil)) |
| 104 | (dolist (x load-history dependents) | 107 | (dolist (x load-history dependents) |
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 81afe688c10..8e7a71d65ab 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el | |||
| @@ -185,6 +185,7 @@ This file need not actually exist." | |||
| 185 | :type '(choice (const nil) file) | 185 | :type '(choice (const nil) file) |
| 186 | :group 'sendmail) | 186 | :group 'sendmail) |
| 187 | 187 | ||
| 188 | ;;;###autoload | ||
| 188 | (defcustom mail-setup-hook nil | 189 | (defcustom mail-setup-hook nil |
| 189 | "Normal hook, run each time a new outgoing mail message is initialized. | 190 | "Normal hook, run each time a new outgoing mail message is initialized. |
| 190 | The function `mail-setup' runs this hook." | 191 | The function `mail-setup' runs this hook." |
| @@ -192,6 +193,7 @@ The function `mail-setup' runs this hook." | |||
| 192 | :options '(fortune-to-signature spook mail-abbrevs-setup) | 193 | :options '(fortune-to-signature spook mail-abbrevs-setup) |
| 193 | :group 'sendmail) | 194 | :group 'sendmail) |
| 194 | 195 | ||
| 196 | ;;;###autoload | ||
| 195 | (defvar mail-aliases t | 197 | (defvar mail-aliases t |
| 196 | "Alist of mail address aliases, | 198 | "Alist of mail address aliases, |
| 197 | or t meaning should be initialized from your mail aliases file. | 199 | or t meaning should be initialized from your mail aliases file. |
| @@ -203,17 +205,20 @@ The alias definitions in the file have this form: | |||
| 203 | (defvar mail-alias-modtime nil | 205 | (defvar mail-alias-modtime nil |
| 204 | "The modification time of your mail alias file when it was last examined.") | 206 | "The modification time of your mail alias file when it was last examined.") |
| 205 | 207 | ||
| 208 | ;;;###autoload | ||
| 206 | (defcustom mail-yank-prefix nil | 209 | (defcustom mail-yank-prefix nil |
| 207 | "*Prefix insert on lines of yanked message being replied to. | 210 | "*Prefix insert on lines of yanked message being replied to. |
| 208 | nil means use indentation." | 211 | nil means use indentation." |
| 209 | :type '(choice (const nil) string) | 212 | :type '(choice (const nil) string) |
| 210 | :group 'sendmail) | 213 | :group 'sendmail) |
| 211 | 214 | ||
| 215 | ;;;###autoload | ||
| 212 | (defcustom mail-indentation-spaces 3 | 216 | (defcustom mail-indentation-spaces 3 |
| 213 | "*Number of spaces to insert at the beginning of each cited line. | 217 | "*Number of spaces to insert at the beginning of each cited line. |
| 214 | Used by `mail-yank-original' via `mail-indent-citation'." | 218 | Used by `mail-yank-original' via `mail-indent-citation'." |
| 215 | :type 'integer | 219 | :type 'integer |
| 216 | :group 'sendmail) | 220 | :group 'sendmail) |
| 221 | |||
| 217 | (defvar mail-yank-hooks nil | 222 | (defvar mail-yank-hooks nil |
| 218 | "Obsolete hook for modifying a citation just inserted in the mail buffer. | 223 | "Obsolete hook for modifying a citation just inserted in the mail buffer. |
| 219 | Each hook function can find the citation between (point) and (mark t). | 224 | Each hook function can find the citation between (point) and (mark t). |
| @@ -242,6 +247,7 @@ instead of no action." | |||
| 242 | This enables the hook functions to see the whole message header | 247 | This enables the hook functions to see the whole message header |
| 243 | regardless of what part of it (if any) is included in the cited text.") | 248 | regardless of what part of it (if any) is included in the cited text.") |
| 244 | 249 | ||
| 250 | ;;;###autoload | ||
| 245 | (defcustom mail-citation-prefix-regexp "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|[ \t]*" | 251 | (defcustom mail-citation-prefix-regexp "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|[ \t]*" |
| 246 | "*Regular expression to match a citation prefix plus whitespace. | 252 | "*Regular expression to match a citation prefix plus whitespace. |
| 247 | It should match whatever sort of citation prefixes you want to handle, | 253 | It should match whatever sort of citation prefixes you want to handle, |
| @@ -281,6 +287,7 @@ and should insert whatever you want to insert." | |||
| 281 | :group 'sendmail) | 287 | :group 'sendmail) |
| 282 | (put 'mail-signature 'risky-local-variable t) | 288 | (put 'mail-signature 'risky-local-variable t) |
| 283 | 289 | ||
| 290 | ;;;###autoload | ||
| 284 | (defcustom mail-signature-file "~/.signature" | 291 | (defcustom mail-signature-file "~/.signature" |
| 285 | "*File containing the text inserted at end of mail buffer." | 292 | "*File containing the text inserted at end of mail buffer." |
| 286 | :type 'file | 293 | :type 'file |
| @@ -301,6 +308,7 @@ This directory is used for auto-save files of mail buffers." | |||
| 301 | (put 'mail-reply-action 'permanent-local t) | 308 | (put 'mail-reply-action 'permanent-local t) |
| 302 | (put 'mail-send-actions 'permanent-local t) | 309 | (put 'mail-send-actions 'permanent-local t) |
| 303 | 310 | ||
| 311 | ;;;###autoload | ||
| 304 | (defcustom mail-default-headers nil | 312 | (defcustom mail-default-headers nil |
| 305 | "*A string containing header lines, to be inserted in outgoing messages. | 313 | "*A string containing header lines, to be inserted in outgoing messages. |
| 306 | It is inserted before you edit the message, | 314 | It is inserted before you edit the message, |
| @@ -308,6 +316,7 @@ so you can edit or delete these lines." | |||
| 308 | :type '(choice (const nil) string) | 316 | :type '(choice (const nil) string) |
| 309 | :group 'sendmail) | 317 | :group 'sendmail) |
| 310 | 318 | ||
| 319 | ;;;###autoload | ||
| 311 | (defcustom mail-bury-selects-summary t | 320 | (defcustom mail-bury-selects-summary t |
| 312 | "*If non-nil, try to show RMAIL summary buffer after returning from mail. | 321 | "*If non-nil, try to show RMAIL summary buffer after returning from mail. |
| 313 | The functions \\[mail-send-on-exit] or \\[mail-dont-send] select | 322 | The functions \\[mail-send-on-exit] or \\[mail-dont-send] select |
| @@ -316,6 +325,7 @@ is non-nil." | |||
| 316 | :type 'boolean | 325 | :type 'boolean |
| 317 | :group 'sendmail) | 326 | :group 'sendmail) |
| 318 | 327 | ||
| 328 | ;;;###autoload | ||
| 319 | (defcustom mail-send-nonascii 'mime | 329 | (defcustom mail-send-nonascii 'mime |
| 320 | "*Specify whether to allow sending non-ASCII characters in mail. | 330 | "*Specify whether to allow sending non-ASCII characters in mail. |
| 321 | If t, that means do allow it. nil means don't allow it. | 331 | If t, that means do allow it. nil means don't allow it. |
diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in index d909c909b10..059351cf4be 100644 --- a/lisp/makefile.w32-in +++ b/lisp/makefile.w32-in | |||
| @@ -306,6 +306,7 @@ $(lisp)/mh-e/mh-loaddefs.el: $(MH_E_SRC) | |||
| 306 | -l autoload \ | 306 | -l autoload \ |
| 307 | --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \ | 307 | --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \ |
| 308 | --eval "(setq generated-autoload-file \"$(lisp)/mh-e/mh-loaddefs.el\")" \ | 308 | --eval "(setq generated-autoload-file \"$(lisp)/mh-e/mh-loaddefs.el\")" \ |
| 309 | --eval "(setq find-file-suppress-same-file-warnings t)" \ | ||
| 309 | --eval "(setq make-backup-files nil)" \ | 310 | --eval "(setq make-backup-files nil)" \ |
| 310 | -f batch-update-autoloads $(lisp)/mh-e | 311 | -f batch-update-autoloads $(lisp)/mh-e |
| 311 | 312 | ||
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index bf3b1427ac2..f50ca07a488 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el | |||
| @@ -2686,7 +2686,12 @@ away in the internal cache." | |||
| 2686 | ;; Require the previous column to end in a digit. | 2686 | ;; Require the previous column to end in a digit. |
| 2687 | ;; This avoids recognizing `1 may 1997' as a date in the line: | 2687 | ;; This avoids recognizing `1 may 1997' as a date in the line: |
| 2688 | ;; -r--r--r-- 1 may 1997 1168 Oct 19 16:49 README | 2688 | ;; -r--r--r-- 1 may 1997 1168 Oct 19 16:49 README |
| 2689 | (concat "[0-9]" s "\\(" western "\\|" japanese "\\)" s)) | 2689 | ;; albinus: |
| 2690 | ;; Require also the following column to start in a digit. | ||
| 2691 | ;; This avoids recognizing `kfs 10' as a date in the line: | ||
| 2692 | ;; -rw------- 1 kfs 10 May 27 2003 .autorun.lck | ||
| 2693 | ;; (concat "[0-9]" s "\\(" western "\\|" japanese "\\)" s)) | ||
| 2694 | (concat "[0-9]" s "\\(" western "\\|" japanese "\\)" s "+[0-9]")) | ||
| 2690 | "Regular expression to match up to the column before the file name in a | 2695 | "Regular expression to match up to the column before the file name in a |
| 2691 | directory listing. This regular expression is designed to recognize dates | 2696 | directory listing. This regular expression is designed to recognize dates |
| 2692 | regardless of the language.") | 2697 | regardless of the language.") |
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el new file mode 100644 index 00000000000..4448043056c --- /dev/null +++ b/lisp/net/rcirc.el | |||
| @@ -0,0 +1,1720 @@ | |||
| 1 | ;;; rcirc.el --- default, simple IRC client. | ||
| 2 | |||
| 3 | ;; Copyright (C) 2005 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Author: Ryan Yeske | ||
| 6 | ;; URL: http://www.nongnu.org/rcirc | ||
| 7 | ;; Keywords: comm | ||
| 8 | |||
| 9 | ;; This file is part of GNU Emacs. | ||
| 10 | |||
| 11 | ;; This file is free software; you can redistribute it and/or modify | ||
| 12 | ;; it under the terms of the GNU General Public License as published by | ||
| 13 | ;; the Free Software Foundation; either version 2, or (at your option) | ||
| 14 | ;; any later version. | ||
| 15 | |||
| 16 | ;; This file is distributed in the hope that it will be useful, | ||
| 17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 19 | ;; GNU General Public License for more details. | ||
| 20 | |||
| 21 | ;; You should have received a copy of the GNU General Public License | ||
| 22 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | ||
| 23 | ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
| 24 | ;; Boston, MA 02110-1301, USA. | ||
| 25 | |||
| 26 | ;;; Commentary: | ||
| 27 | |||
| 28 | ;; rcirc is an Internet Relay Chat (IRC) client for Emacs | ||
| 29 | |||
| 30 | ;; IRC is a form of instant communication over the Internet. It is | ||
| 31 | ;; mainly designed for group (many-to-many) communication in | ||
| 32 | ;; discussion forums called channels, but also allows one-to-one | ||
| 33 | ;; communication. | ||
| 34 | |||
| 35 | ;; Open a new irc connection with: | ||
| 36 | ;; M-x irc RET | ||
| 37 | |||
| 38 | ;;; Code: | ||
| 39 | |||
| 40 | (require 'ring) | ||
| 41 | (require 'time-date) | ||
| 42 | (eval-when-compile (require 'cl)) | ||
| 43 | |||
| 44 | (defvar rcirc-server "irc.freenode.net" | ||
| 45 | "The default server to connect to.") | ||
| 46 | |||
| 47 | (defvar rcirc-port 6667 | ||
| 48 | "The default port to connect to.") | ||
| 49 | |||
| 50 | (defvar rcirc-nick (user-login-name) | ||
| 51 | "Your nick.") | ||
| 52 | |||
| 53 | (defvar rcirc-user-name (user-login-name) | ||
| 54 | "Your user name sent to the server when connecting.") | ||
| 55 | |||
| 56 | (defvar rcirc-user-full-name (if (string= (user-full-name) "") | ||
| 57 | rcirc-user-name | ||
| 58 | (user-full-name)) | ||
| 59 | "The full name sent to the server when connecting.") | ||
| 60 | |||
| 61 | (defvar rcirc-startup-channels-alist nil | ||
| 62 | "Alist of channels to join at startup. | ||
| 63 | Each element looks like (REGEXP . CHANNEL-LIST).") | ||
| 64 | |||
| 65 | (defvar rcirc-fill-flag t | ||
| 66 | "*Non-nil means fill messages printed in channel buffers.") | ||
| 67 | |||
| 68 | (defvar rcirc-fill-column nil | ||
| 69 | "*If non-nil, fill to this column, otherwise use value of `fill-column'.") | ||
| 70 | |||
| 71 | (defvar rcirc-fill-prefix nil | ||
| 72 | "*Text to insert before filled lines. | ||
| 73 | If nil, calculate the prefix dynamically to line up text | ||
| 74 | underneath each nick.") | ||
| 75 | |||
| 76 | (defvar rcirc-ignore-channel-activity nil | ||
| 77 | "If non-nil, ignore activity in this channel.") | ||
| 78 | (make-variable-buffer-local 'rcirc-ignore-channel-activity) | ||
| 79 | |||
| 80 | (defvar rcirc-ignore-all-activity-flag nil | ||
| 81 | "*Non-nil means track activity, but do not display it in the modeline.") | ||
| 82 | |||
| 83 | (defvar rcirc-time-format "%H:%M " | ||
| 84 | "*Describes how timestamps are printed. | ||
| 85 | Used as the first arg to `format-time-string'.") | ||
| 86 | |||
| 87 | (defvar rcirc-input-ring-size 1024 | ||
| 88 | "*Size of input history ring.") | ||
| 89 | |||
| 90 | (defvar rcirc-read-only-flag t | ||
| 91 | "*Non-nil means make text in irc buffers read-only.") | ||
| 92 | |||
| 93 | (defvar rcirc-buffer-maximum-lines nil | ||
| 94 | "*The maximum size in lines for rcirc buffers. | ||
| 95 | Channel buffers are truncated from the top to be no greater than this | ||
| 96 | number. If zero or nil, no truncating is done.") | ||
| 97 | |||
| 98 | (defvar rcirc-authinfo-file-name | ||
| 99 | "~/.rcirc-authinfo" | ||
| 100 | "File containing rcirc authentication passwords. | ||
| 101 | The file consists of a single list, with each element itself a | ||
| 102 | list with a SERVER-REGEXP string, a NICK-REGEXP string, a METHOD | ||
| 103 | and the remaining method specific ARGUMENTS. The valid METHOD | ||
| 104 | symbols are `nickserv', `chanserv' and `bitlbee'. | ||
| 105 | |||
| 106 | The required ARGUMENTS for each METHOD symbol are: | ||
| 107 | `nickserv': PASSWORD | ||
| 108 | `chanserv': CHANNEL PASSWORD | ||
| 109 | `bitlbee': PASSWORD | ||
| 110 | |||
| 111 | Example: | ||
| 112 | ((\"freenode\" \"bob\" nickserv \"p455w0rd\") | ||
| 113 | (\"freenode\" \"bob\" chanserv \"#bobland\" \"passwd99\") | ||
| 114 | (\"bitlbee\" \"robert\" bitlbee \"sekrit\"))") | ||
| 115 | |||
| 116 | (defvar rcirc-auto-authenticate-flag (file-readable-p rcirc-authinfo-file-name) | ||
| 117 | "*Non-nil means automatically send authentication string to server. | ||
| 118 | See also `rcirc-authinfo-file-name'.") | ||
| 119 | |||
| 120 | (defvar rcirc-print-hooks nil | ||
| 121 | "Hook run after text is printed. | ||
| 122 | Called with 5 arguments, PROCESS, SENDER, RESPONSE, TARGET and TEXT.") | ||
| 123 | |||
| 124 | (defvar rcirc-prompt "%n> " | ||
| 125 | "Prompt string to use in irc buffers. | ||
| 126 | |||
| 127 | The following replacements are made: | ||
| 128 | %n is your nick. | ||
| 129 | %s is the server. | ||
| 130 | %t is the buffer target, a channel or a user. | ||
| 131 | |||
| 132 | Setting this alone will not affect the prompt; | ||
| 133 | use `rcirc-update-prompt' after changing this variable.") | ||
| 134 | |||
| 135 | (defvar rcirc-prompt-start-marker nil) | ||
| 136 | (defvar rcirc-prompt-end-marker nil) | ||
| 137 | |||
| 138 | (defvar rcirc-nick-table nil) | ||
| 139 | |||
| 140 | (defvar rcirc-activity nil | ||
| 141 | "List of channels with unviewed activity.") | ||
| 142 | |||
| 143 | (defvar rcirc-activity-string "" | ||
| 144 | "String displayed in modeline representing `rcirc-activity'.") | ||
| 145 | (put 'rcirc-activity-string 'risky-local-variable t) | ||
| 146 | |||
| 147 | (defvar rcirc-process nil | ||
| 148 | "The server process associated with this buffer.") | ||
| 149 | |||
| 150 | (defvar rcirc-target nil | ||
| 151 | "The channel or user associated with this buffer.") | ||
| 152 | |||
| 153 | (defvar rcirc-channels nil | ||
| 154 | "Joined channels.") | ||
| 155 | |||
| 156 | (defvar rcirc-private-chats nil | ||
| 157 | "Private chats open.") | ||
| 158 | |||
| 159 | (defvar rcirc-urls nil | ||
| 160 | "List of urls seen in the current buffer.") | ||
| 161 | |||
| 162 | (defvar rcirc-keepalive-seconds 60 | ||
| 163 | "Number of seconds between keepalive pings.") | ||
| 164 | |||
| 165 | |||
| 166 | (defun rcirc-version (&optional here) | ||
| 167 | "Return rcirc version string. | ||
| 168 | If optional argument HERE is non-nil, insert string at point." | ||
| 169 | (interactive "P") | ||
| 170 | (let ((version "rcirc.el 0.9 $Revision: 1.5 $")) | ||
| 171 | (if here | ||
| 172 | (insert version) | ||
| 173 | (if (interactive-p) | ||
| 174 | (message "%s" version) | ||
| 175 | version)))) | ||
| 176 | |||
| 177 | (defvar rcirc-startup-channels nil) | ||
| 178 | ;;;###autoload | ||
| 179 | (defun rcirc (&optional server port nick channels) | ||
| 180 | "Connect to IRC. | ||
| 181 | |||
| 182 | If any of the the optional SERVER, PORT, NICK or CHANNELS are not | ||
| 183 | supplied, they are taken from the variables `rcirc-server', | ||
| 184 | `rcirc-port', `rcirc-nick', and `rcirc-startup-channels', | ||
| 185 | respectively." | ||
| 186 | (interactive (list (read-string "IRC Server: " rcirc-server) | ||
| 187 | (read-string "IRC Port: " (number-to-string rcirc-port)) | ||
| 188 | (read-string "IRC Nick: " rcirc-nick))) | ||
| 189 | (or server (setq server rcirc-server)) | ||
| 190 | (or port (setq port rcirc-port)) | ||
| 191 | (or nick (setq nick rcirc-nick)) | ||
| 192 | (or channels | ||
| 193 | (setq channels | ||
| 194 | (if (interactive-p) | ||
| 195 | (delete "" | ||
| 196 | (split-string | ||
| 197 | (read-string "Channels: " | ||
| 198 | (mapconcat 'identity | ||
| 199 | (rcirc-startup-channels server) | ||
| 200 | " ")) | ||
| 201 | "[, ]+")) | ||
| 202 | (rcirc-startup-channels server)))) | ||
| 203 | (or global-mode-string (setq global-mode-string '(""))) | ||
| 204 | (and (not (memq 'rcirc-activity-string global-mode-string)) | ||
| 205 | (setq global-mode-string | ||
| 206 | (append global-mode-string '(rcirc-activity-string)))) | ||
| 207 | (add-hook 'window-configuration-change-hook 'rcirc-update-activity) | ||
| 208 | (rcirc-connect server port nick rcirc-user-name rcirc-user-full-name | ||
| 209 | channels)) | ||
| 210 | |||
| 211 | ;;;###autoload | ||
| 212 | (defalias 'irc 'rcirc) | ||
| 213 | |||
| 214 | |||
| 215 | (defvar rcirc-process-output nil) | ||
| 216 | (defvar rcirc-last-buffer nil) | ||
| 217 | (defvar rcirc-topic nil) | ||
| 218 | (defvar rcirc-keepalive-timer nil) | ||
| 219 | (make-variable-buffer-local 'rcirc-topic) | ||
| 220 | (defun rcirc-connect (server port nick user-name full-name startup-channels) | ||
| 221 | "Return a connection to SERVER on PORT. | ||
| 222 | |||
| 223 | User will identify using the values of NICK, USER-NAME and | ||
| 224 | FULL-NAME. The variable list of channel names in | ||
| 225 | STARTUP-CHANNELS will automatically be joined on startup." | ||
| 226 | (save-excursion | ||
| 227 | (message "Connecting to %s..." server) | ||
| 228 | (let* ((inhibit-eol-conversion) | ||
| 229 | (port-number (if (stringp port) | ||
| 230 | (string-to-number port) | ||
| 231 | port)) | ||
| 232 | (process (open-network-stream server nil server port-number))) | ||
| 233 | ;; set up process | ||
| 234 | (set-process-coding-system process 'raw-text 'raw-text) | ||
| 235 | (set-process-filter process 'rcirc-filter) | ||
| 236 | (switch-to-buffer (concat "*" (process-name process) "*")) | ||
| 237 | (set-process-buffer process (current-buffer)) | ||
| 238 | (set-process-sentinel process 'rcirc-sentinel) | ||
| 239 | (rcirc-mode process nil) | ||
| 240 | (make-local-variable 'rcirc-nick-table) | ||
| 241 | (setq rcirc-nick-table (make-hash-table :test 'equal)) | ||
| 242 | (make-local-variable 'rcirc-server) | ||
| 243 | (setq rcirc-server server) | ||
| 244 | (make-local-variable 'rcirc-nick) | ||
| 245 | (setq rcirc-nick nick) | ||
| 246 | (make-local-variable 'rcirc-process-output) | ||
| 247 | (setq rcirc-process-output nil) | ||
| 248 | (make-local-variable 'rcirc-last-buffer) | ||
| 249 | (setq rcirc-last-buffer (current-buffer)) | ||
| 250 | (make-local-variable 'rcirc-channels) | ||
| 251 | (setq rcirc-channels nil) | ||
| 252 | (make-local-variable 'rcirc-private-chats) | ||
| 253 | (setq rcirc-private-chats nil) | ||
| 254 | (make-local-variable 'rcirc-startup-channels) | ||
| 255 | (setq rcirc-startup-channels startup-channels) | ||
| 256 | |||
| 257 | ;; identify | ||
| 258 | (rcirc-send-string process (concat "NICK " nick)) | ||
| 259 | (rcirc-send-string process (concat "USER " user-name | ||
| 260 | " hostname servername :" | ||
| 261 | full-name)) | ||
| 262 | |||
| 263 | ;; setup ping timer if necessary | ||
| 264 | (unless rcirc-keepalive-timer | ||
| 265 | (setq rcirc-keepalive-timer | ||
| 266 | (run-at-time 0 rcirc-keepalive-seconds 'rcirc-keepalive))) | ||
| 267 | |||
| 268 | (message "Connecting to %s...done" server) | ||
| 269 | |||
| 270 | ;; return process object | ||
| 271 | process))) | ||
| 272 | |||
| 273 | (defun rcirc-keepalive () | ||
| 274 | "Send keep alive pings to active rcirc processes." | ||
| 275 | (if (rcirc-process-list) | ||
| 276 | (mapc (lambda (process) | ||
| 277 | (with-current-buffer (process-buffer process) | ||
| 278 | (rcirc-send-string process (concat "PING " rcirc-server)))) | ||
| 279 | (rcirc-process-list)) | ||
| 280 | (cancel-timer rcirc-keepalive-timer) | ||
| 281 | (setq rcirc-keepalive-timer nil))) | ||
| 282 | |||
| 283 | (defvar rcirc-log-buffer "*rcirc log*") | ||
| 284 | (defvar rcirc-log-p nil | ||
| 285 | "If non-nil, write information to `rcirc-log-buffer'.") | ||
| 286 | (defun rcirc-log (process text) | ||
| 287 | "Add an entry to the debug log including PROCESS and TEXT. | ||
| 288 | Debug text is written to `rcirc-log-buffer' if `rcirc-log-p' is | ||
| 289 | non-nil." | ||
| 290 | (when rcirc-log-p | ||
| 291 | (save-excursion | ||
| 292 | (save-window-excursion | ||
| 293 | (set-buffer (get-buffer-create rcirc-log-buffer)) | ||
| 294 | (goto-char (point-max)) | ||
| 295 | (insert (concat | ||
| 296 | "[" | ||
| 297 | (format-time-string "%Y-%m-%dT%T ") (process-name process) | ||
| 298 | "] " | ||
| 299 | text)))))) | ||
| 300 | |||
| 301 | (defvar rcirc-sentinel-hooks nil | ||
| 302 | "Hook functions called when the process sentinel is called. | ||
| 303 | Functions are called with PROCESS and SENTINEL arguments.") | ||
| 304 | |||
| 305 | (defun rcirc-sentinel (process sentinel) | ||
| 306 | "Called when PROCESS receives SENTINEL." | ||
| 307 | (let ((sentinel (replace-regexp-in-string "\n" "" sentinel))) | ||
| 308 | (rcirc-log process (format "SENTINEL: %S %S\n" process sentinel)) | ||
| 309 | (with-current-buffer (process-buffer process) | ||
| 310 | (dolist (target (append rcirc-channels | ||
| 311 | rcirc-private-chats | ||
| 312 | (list (current-buffer)))) | ||
| 313 | (rcirc-print process "rcirc.el" "ERROR" target | ||
| 314 | (format "%s: %s (%S)" | ||
| 315 | (process-name process) | ||
| 316 | sentinel | ||
| 317 | (process-status process)) t) | ||
| 318 | ;; remove the prompt from buffers | ||
| 319 | (with-current-buffer (if (eq target (current-buffer)) | ||
| 320 | (current-buffer) | ||
| 321 | (rcirc-get-buffer process target)) | ||
| 322 | (let ((inhibit-read-only t)) | ||
| 323 | (delete-region rcirc-prompt-start-marker | ||
| 324 | rcirc-prompt-end-marker))))) | ||
| 325 | (run-hook-with-args 'rcirc-sentinel-hooks process sentinel))) | ||
| 326 | |||
| 327 | (defun rcirc-process-list () | ||
| 328 | "Return a list of rcirc processes." | ||
| 329 | (let (ps) | ||
| 330 | (mapc (lambda (p) | ||
| 331 | (when (process-buffer p) | ||
| 332 | (with-current-buffer (process-buffer p) | ||
| 333 | (when (eq major-mode 'rcirc-mode) | ||
| 334 | (setq ps (cons p ps)))))) | ||
| 335 | (process-list)) | ||
| 336 | ps)) | ||
| 337 | |||
| 338 | (defvar rcirc-receive-message-hooks nil | ||
| 339 | "Hook functions run when a message is recieved from server. | ||
| 340 | Function is called with PROCESS COMMAND SENDER ARGS and LINE.") | ||
| 341 | (defun rcirc-filter (process output) | ||
| 342 | "Called when PROCESS receives OUTPUT." | ||
| 343 | (rcirc-log process output) | ||
| 344 | (with-current-buffer (process-buffer process) | ||
| 345 | (setq rcirc-process-output (concat rcirc-process-output output)) | ||
| 346 | (when (= (aref rcirc-process-output | ||
| 347 | (1- (length rcirc-process-output))) ?\n) | ||
| 348 | (mapc (lambda (line) | ||
| 349 | (rcirc-process-server-response process line)) | ||
| 350 | (delete "" (split-string rcirc-process-output "[\n\r]"))) | ||
| 351 | (setq rcirc-process-output nil)))) | ||
| 352 | |||
| 353 | (defvar rcirc-trap-errors nil) | ||
| 354 | (defun rcirc-process-server-response (process text) | ||
| 355 | (if rcirc-trap-errors | ||
| 356 | (condition-case err | ||
| 357 | (rcirc-process-server-response-1 process text) | ||
| 358 | (error | ||
| 359 | (rcirc-print process "RCIRC" "ERROR" nil | ||
| 360 | (format "rcirc: error processing: \"%s\" %s" text err)))) | ||
| 361 | (rcirc-process-server-response-1 process text))) | ||
| 362 | |||
| 363 | (defun rcirc-process-server-response-1 (process text) | ||
| 364 | (if (string-match "^\\(:\\([^ ]+\\) \\)?\\([^ ]+\\) \\(.+\\)$" text) | ||
| 365 | (let* ((sender (match-string 2 text)) | ||
| 366 | (cmd (match-string 3 text)) | ||
| 367 | (args (match-string 4 text)) | ||
| 368 | (handler (intern-soft (concat "rcirc-handler-" cmd)))) | ||
| 369 | (string-match "^\\([^:]*\\):?\\(.+\\)?$" args) | ||
| 370 | (let* ((args1 (match-string 1 args)) | ||
| 371 | (args2 (match-string 2 args)) | ||
| 372 | (args (append (delete "" (split-string args1 " ")) | ||
| 373 | (list args2)))) | ||
| 374 | (if (not (fboundp handler)) | ||
| 375 | (rcirc-handler-generic process cmd sender args text) | ||
| 376 | (funcall handler process sender args text)) | ||
| 377 | (run-hook-with-args 'rcirc-receive-message-hooks | ||
| 378 | process cmd sender args text))) | ||
| 379 | (message "UNHANDLED: %s" text))) | ||
| 380 | |||
| 381 | (defun rcirc-handler-generic (process command sender args text) | ||
| 382 | "Generic server response handler." | ||
| 383 | (rcirc-print process sender command nil | ||
| 384 | (mapconcat 'identity (cdr args) " "))) | ||
| 385 | |||
| 386 | (defun rcirc-send-string (process string) | ||
| 387 | "Send PROCESS a STRING plus a newline." | ||
| 388 | (let ((string (concat (encode-coding-string string | ||
| 389 | buffer-file-coding-system) | ||
| 390 | "\n"))) | ||
| 391 | (rcirc-log process string) | ||
| 392 | (process-send-string process string))) | ||
| 393 | |||
| 394 | (defun rcirc-server (process) | ||
| 395 | "Return PROCESS server, given by the 001 response." | ||
| 396 | (with-current-buffer (process-buffer process) | ||
| 397 | rcirc-server)) | ||
| 398 | |||
| 399 | (defun rcirc-nick (process) | ||
| 400 | "Return PROCESS nick." | ||
| 401 | (with-current-buffer (process-buffer process) | ||
| 402 | rcirc-nick)) | ||
| 403 | |||
| 404 | (defvar rcirc-max-message-length 450 | ||
| 405 | "Messages longer than this value will be split.") | ||
| 406 | |||
| 407 | (defun rcirc-send-message (process target message &optional noticep) | ||
| 408 | "Send TARGET associated with PROCESS a privmsg with text MESSAGE. | ||
| 409 | If NOTICEP is non-nil, send a notice instead of privmsg." | ||
| 410 | ;; max message length is 512 including CRLF | ||
| 411 | (let* ((response (if noticep "NOTICE" "PRIVMSG")) | ||
| 412 | (oversize (> (length message) rcirc-max-message-length)) | ||
| 413 | (text (if oversize | ||
| 414 | (substring message 0 rcirc-max-message-length) | ||
| 415 | message)) | ||
| 416 | (text (if (string= text "") | ||
| 417 | " " | ||
| 418 | text)) | ||
| 419 | (more (if oversize | ||
| 420 | (substring message rcirc-max-message-length)))) | ||
| 421 | (rcirc-print process (rcirc-nick process) response target text) | ||
| 422 | (rcirc-send-string process (concat response " " target " :" text)) | ||
| 423 | (if more | ||
| 424 | (rcirc-send-message process target more noticep)))) | ||
| 425 | |||
| 426 | (defvar rcirc-input-ring nil) | ||
| 427 | (defvar rcirc-input-ring-index 0) | ||
| 428 | (defun rcirc-prev-input-string (arg) | ||
| 429 | (ring-ref rcirc-input-ring (+ rcirc-input-ring-index arg))) | ||
| 430 | |||
| 431 | (defun rcirc-insert-prev-input (arg) | ||
| 432 | (interactive "p") | ||
| 433 | (when (<= rcirc-prompt-end-marker (point)) | ||
| 434 | (delete-region rcirc-prompt-end-marker (point-max)) | ||
| 435 | (insert (rcirc-prev-input-string 0)) | ||
| 436 | (setq rcirc-input-ring-index (1+ rcirc-input-ring-index)))) | ||
| 437 | |||
| 438 | (defun rcirc-insert-next-input (arg) | ||
| 439 | (interactive "p") | ||
| 440 | (when (<= rcirc-prompt-end-marker (point)) | ||
| 441 | (delete-region rcirc-prompt-end-marker (point-max)) | ||
| 442 | (setq rcirc-input-ring-index (1- rcirc-input-ring-index)) | ||
| 443 | (insert (rcirc-prev-input-string -1)))) | ||
| 444 | |||
| 445 | (defvar rcirc-nick-completions nil) | ||
| 446 | (defvar rcirc-nick-completion-start-offset nil) | ||
| 447 | (defun rcirc-complete-nick () | ||
| 448 | "Cycle through nick completions from list of nicks in channel." | ||
| 449 | (interactive) | ||
| 450 | (if (eq last-command 'rcirc-complete-nick) | ||
| 451 | (setq rcirc-nick-completions | ||
| 452 | (append (cdr rcirc-nick-completions) | ||
| 453 | (list (car rcirc-nick-completions)))) | ||
| 454 | (setq rcirc-nick-completion-start-offset | ||
| 455 | (- (save-excursion | ||
| 456 | (if (re-search-backward " " rcirc-prompt-end-marker t) | ||
| 457 | (1+ (point)) | ||
| 458 | rcirc-prompt-end-marker)) | ||
| 459 | rcirc-prompt-end-marker)) | ||
| 460 | (setq rcirc-nick-completions | ||
| 461 | (let ((completion-ignore-case t)) | ||
| 462 | (all-completions | ||
| 463 | (buffer-substring | ||
| 464 | (+ rcirc-prompt-end-marker | ||
| 465 | rcirc-nick-completion-start-offset) | ||
| 466 | (point)) | ||
| 467 | (mapcar (lambda (x) (cons x nil)) | ||
| 468 | (rcirc-channel-nicks rcirc-process | ||
| 469 | (rcirc-buffer-target))))))) | ||
| 470 | (let ((completion (car rcirc-nick-completions))) | ||
| 471 | (when completion | ||
| 472 | (delete-region (+ rcirc-prompt-end-marker | ||
| 473 | rcirc-nick-completion-start-offset) | ||
| 474 | (point)) | ||
| 475 | (insert (concat completion | ||
| 476 | (if (= (+ rcirc-prompt-end-marker | ||
| 477 | rcirc-nick-completion-start-offset) | ||
| 478 | rcirc-prompt-end-marker) | ||
| 479 | ": ")))))) | ||
| 480 | |||
| 481 | (defun rcirc-buffer-target (&optional buffer) | ||
| 482 | "Return the name of target for BUFFER. | ||
| 483 | If buffer is nil, return the target of the current buffer." | ||
| 484 | (with-current-buffer (or buffer (current-buffer)) | ||
| 485 | rcirc-target)) | ||
| 486 | |||
| 487 | (defvar rcirc-mode-map (make-sparse-keymap) | ||
| 488 | "Keymap for rcirc mode.") | ||
| 489 | |||
| 490 | (define-key rcirc-mode-map (kbd "RET") 'rcirc-send-input) | ||
| 491 | (define-key rcirc-mode-map (kbd "M-p") 'rcirc-insert-prev-input) | ||
| 492 | (define-key rcirc-mode-map (kbd "M-n") 'rcirc-insert-next-input) | ||
| 493 | (define-key rcirc-mode-map (kbd "TAB") 'rcirc-complete-nick) | ||
| 494 | (define-key rcirc-mode-map (kbd "C-c C-b") 'rcirc-browse-url) | ||
| 495 | (define-key rcirc-mode-map (kbd "C-c C-c") 'rcirc-edit-multiline) | ||
| 496 | (define-key rcirc-mode-map (kbd "C-c C-j") 'rcirc-cmd-join) | ||
| 497 | (define-key rcirc-mode-map (kbd "C-c C-k") 'rcirc-cmd-kick) | ||
| 498 | (define-key rcirc-mode-map (kbd "C-c C-l") 'rcirc-cmd-list) | ||
| 499 | (define-key rcirc-mode-map (kbd "C-c C-d") 'rcirc-cmd-mode) | ||
| 500 | (define-key rcirc-mode-map (kbd "C-c C-m") 'rcirc-cmd-msg) | ||
| 501 | (define-key rcirc-mode-map (kbd "C-c C-r") 'rcirc-cmd-nick) ; rename | ||
| 502 | (define-key rcirc-mode-map (kbd "C-c C-o") 'rcirc-cmd-oper) | ||
| 503 | (define-key rcirc-mode-map (kbd "C-c C-p") 'rcirc-cmd-part) | ||
| 504 | (define-key rcirc-mode-map (kbd "C-c C-q") 'rcirc-cmd-query) | ||
| 505 | (define-key rcirc-mode-map (kbd "C-c C-t") 'rcirc-cmd-topic) | ||
| 506 | (define-key rcirc-mode-map (kbd "C-c C-n") 'rcirc-cmd-names) | ||
| 507 | (define-key rcirc-mode-map (kbd "C-c C-w") 'rcirc-cmd-whois) | ||
| 508 | (define-key rcirc-mode-map (kbd "C-c C-x") 'rcirc-cmd-quit) | ||
| 509 | (define-key rcirc-mode-map (kbd "C-c TAB") ; C-i | ||
| 510 | 'rcirc-toggle-ignore-channel-activity) | ||
| 511 | (define-key rcirc-mode-map (kbd "C-c C-s") 'rcirc-switch-to-server-buffer) | ||
| 512 | (define-key rcirc-mode-map (kbd "C-c C-a") 'rcirc-jump-to-first-unread-line) | ||
| 513 | |||
| 514 | (define-key global-map (kbd "C-c `") 'rcirc-next-active-buffer) | ||
| 515 | (define-key global-map (kbd "C-c C-@") 'rcirc-next-active-buffer) | ||
| 516 | (define-key global-map (kbd "C-c C-SPC") 'rcirc-next-active-buffer) | ||
| 517 | |||
| 518 | (defvar rcirc-mode-hook nil | ||
| 519 | "Hook run when setting up rcirc buffer.") | ||
| 520 | |||
| 521 | (defun rcirc-mode (process target) | ||
| 522 | "Major mode for irc channel buffers. | ||
| 523 | |||
| 524 | \\{rcirc-mode-map}" | ||
| 525 | (kill-all-local-variables) | ||
| 526 | (use-local-map rcirc-mode-map) | ||
| 527 | (setq mode-name "rcirc") | ||
| 528 | (setq major-mode 'rcirc-mode) | ||
| 529 | |||
| 530 | (make-local-variable 'rcirc-input-ring) | ||
| 531 | (setq rcirc-input-ring (make-ring rcirc-input-ring-size)) | ||
| 532 | (make-local-variable 'rcirc-process) | ||
| 533 | (setq rcirc-process process) | ||
| 534 | (make-local-variable 'rcirc-target) | ||
| 535 | (setq rcirc-target target) | ||
| 536 | (make-local-variable 'rcirc-urls) | ||
| 537 | (setq rcirc-urls nil) | ||
| 538 | (setq use-hard-newlines t) | ||
| 539 | (when (rcirc-channel-p rcirc-target) | ||
| 540 | (setq header-line-format 'rcirc-topic)) | ||
| 541 | |||
| 542 | ;; setup the prompt and markers | ||
| 543 | (make-local-variable 'rcirc-prompt-start-marker) | ||
| 544 | (setq rcirc-prompt-start-marker (make-marker)) | ||
| 545 | (set-marker rcirc-prompt-start-marker (point-max)) | ||
| 546 | (make-local-variable 'rcirc-prompt-end-marker) | ||
| 547 | (setq rcirc-prompt-end-marker (make-marker)) | ||
| 548 | (set-marker rcirc-prompt-end-marker (point-max)) | ||
| 549 | (rcirc-update-prompt) | ||
| 550 | (goto-char rcirc-prompt-end-marker) | ||
| 551 | (make-local-variable 'overlay-arrow-position) | ||
| 552 | (setq overlay-arrow-position (make-marker)) | ||
| 553 | (set-marker overlay-arrow-position nil) | ||
| 554 | |||
| 555 | (run-hooks 'rcirc-mode-hook)) | ||
| 556 | |||
| 557 | (defmacro with-rcirc-process-buffer (process &rest body) | ||
| 558 | (declare (indent 1) (debug t)) | ||
| 559 | `(with-current-buffer (process-buffer ,process) | ||
| 560 | ,@body)) | ||
| 561 | |||
| 562 | (defun rcirc-update-prompt () | ||
| 563 | "Reset the prompt string in the current buffer." | ||
| 564 | (let ((inhibit-read-only t) | ||
| 565 | (prompt (or rcirc-prompt ""))) | ||
| 566 | (mapc (lambda (rep) | ||
| 567 | (setq prompt | ||
| 568 | (replace-regexp-in-string (car rep) (cdr rep) prompt))) | ||
| 569 | (list (cons "%n" (with-rcirc-process-buffer rcirc-process | ||
| 570 | rcirc-nick)) | ||
| 571 | (cons "%s" (with-rcirc-process-buffer rcirc-process | ||
| 572 | rcirc-server)) | ||
| 573 | (cons "%t" (or rcirc-target "")))) | ||
| 574 | (save-excursion | ||
| 575 | (delete-region rcirc-prompt-start-marker rcirc-prompt-end-marker) | ||
| 576 | (goto-char rcirc-prompt-start-marker) | ||
| 577 | (let ((start (point))) | ||
| 578 | (insert-before-markers prompt) | ||
| 579 | (set-marker rcirc-prompt-start-marker start) | ||
| 580 | (when (not (zerop (- rcirc-prompt-end-marker | ||
| 581 | rcirc-prompt-start-marker))) | ||
| 582 | (add-text-properties rcirc-prompt-start-marker | ||
| 583 | rcirc-prompt-end-marker | ||
| 584 | (list 'face 'rcirc-prompt-face | ||
| 585 | 'read-only t 'field t | ||
| 586 | 'front-sticky t 'rear-nonsticky t))))))) | ||
| 587 | |||
| 588 | (defun rcirc-channel-p (target) | ||
| 589 | "Return t if TARGET is a channel name." | ||
| 590 | (and target | ||
| 591 | (not (zerop (length target))) | ||
| 592 | (or (eq (aref target 0) ?#) | ||
| 593 | (eq (aref target 0) ?&)))) | ||
| 594 | |||
| 595 | (defun rcirc-kill-buffer-hook () | ||
| 596 | "Part the channel when killing an rcirc buffer." | ||
| 597 | (when (eq major-mode 'rcirc-mode) | ||
| 598 | (rcirc-clear-activity (current-buffer)) | ||
| 599 | (when (and rcirc-process | ||
| 600 | (eq (process-status rcirc-process) 'open)) | ||
| 601 | (if (rcirc-channel-p rcirc-target) | ||
| 602 | (rcirc-cmd-part "" rcirc-process rcirc-target) | ||
| 603 | ;; remove target from privchat list | ||
| 604 | (when rcirc-target | ||
| 605 | (let ((target (downcase rcirc-target))) | ||
| 606 | (with-rcirc-process-buffer rcirc-process | ||
| 607 | (setq rcirc-private-chats | ||
| 608 | (delete target rcirc-private-chats))))))))) | ||
| 609 | (add-hook 'kill-buffer-hook 'rcirc-kill-buffer-hook) | ||
| 610 | |||
| 611 | (defun rcirc-get-buffer-name (process target) | ||
| 612 | "Return buffer name based on PROCESS and TARGET." | ||
| 613 | (concat (and target (downcase target)) "@" (process-name process))) | ||
| 614 | |||
| 615 | (defun rcirc-get-buffer (process target &optional error) | ||
| 616 | "Return the buffer associated with the PROCESS and TARGET. | ||
| 617 | If TARGET is nil and ERROR is nil, return the process buffer." | ||
| 618 | (let ((buffer (and target | ||
| 619 | (get-buffer (rcirc-get-buffer-name process target))))) | ||
| 620 | (if (and buffer (buffer-live-p buffer)) | ||
| 621 | buffer | ||
| 622 | (if error | ||
| 623 | (error "Buffer associated with %s does not exist" target) | ||
| 624 | (process-buffer process))))) | ||
| 625 | |||
| 626 | (defun rcirc-get-buffer-create (process target) | ||
| 627 | "Return the buffer named associated with the PROCESS and TARGET. | ||
| 628 | Create the buffer if it doesn't exist. If TARGET is nil, return | ||
| 629 | the process buffer." | ||
| 630 | (with-current-buffer (process-buffer process) | ||
| 631 | (if (not target) | ||
| 632 | (current-buffer) | ||
| 633 | (let ((target (downcase target))) | ||
| 634 | ;; add private chats to list. we dont add channels here, they | ||
| 635 | ;; are managed by the join/part/quit handlers | ||
| 636 | (when (and (not (rcirc-channel-p target)) | ||
| 637 | (not (member target rcirc-private-chats))) | ||
| 638 | (with-rcirc-process-buffer process | ||
| 639 | (setq rcirc-private-chats (cons target rcirc-private-chats)))) | ||
| 640 | ;; create and setup a buffer, or return the existing one | ||
| 641 | (let ((bufname (rcirc-get-buffer-name process target))) | ||
| 642 | (with-current-buffer (get-buffer-create bufname) | ||
| 643 | (if (or (not rcirc-process) | ||
| 644 | (not (equal (process-status rcirc-process) 'open))) | ||
| 645 | (rcirc-mode process target) | ||
| 646 | (setq rcirc-target target)) | ||
| 647 | (current-buffer))))))) | ||
| 648 | |||
| 649 | (defun rcirc-send-input () | ||
| 650 | "Send input to target associated with the current buffer." | ||
| 651 | (interactive) | ||
| 652 | (if (not (eq (process-status rcirc-process) 'open)) | ||
| 653 | (error "Network connection to %s is not open" | ||
| 654 | (process-name rcirc-process)) | ||
| 655 | ;; update last buffer | ||
| 656 | (rcirc-set-last-buffer rcirc-process (current-buffer)) | ||
| 657 | (if (< (point) rcirc-prompt-end-marker) | ||
| 658 | ;; copy the line down to the input area | ||
| 659 | (progn | ||
| 660 | (forward-line 0) | ||
| 661 | (let ((start (if (eq (point) (point-min)) | ||
| 662 | (point) | ||
| 663 | (if (get-text-property (1- (point)) 'hard) | ||
| 664 | (point) | ||
| 665 | (previous-single-property-change (point) 'hard)))) | ||
| 666 | (end (next-single-property-change (1+ (point)) 'hard))) | ||
| 667 | (goto-char (point-max)) | ||
| 668 | (insert (replace-regexp-in-string | ||
| 669 | "\n\\s-+" " " | ||
| 670 | (buffer-substring-no-properties start end))))) | ||
| 671 | ;; assume text has been read | ||
| 672 | (when (marker-position overlay-arrow-position) | ||
| 673 | (set-marker overlay-arrow-position nil)) | ||
| 674 | ;; process input | ||
| 675 | (goto-char (point-max)) | ||
| 676 | (let ((target (rcirc-buffer-target)) | ||
| 677 | (start rcirc-prompt-end-marker)) | ||
| 678 | (when (not (equal 0 (- (point) start))) | ||
| 679 | ;; delete a trailing newline | ||
| 680 | (when (eq (point) (point-at-bol)) | ||
| 681 | (delete-backward-char 1)) | ||
| 682 | (let ((input (buffer-substring-no-properties | ||
| 683 | rcirc-prompt-end-marker (point)))) | ||
| 684 | ;; process a /cmd | ||
| 685 | (if (string-match "^/\\([^ ]+\\) ?\\(.*\\)$" input) | ||
| 686 | (let* ((command (match-string 1 input)) | ||
| 687 | (fun (intern-soft (concat "rcirc-cmd-" command))) | ||
| 688 | (args (match-string 2 input))) | ||
| 689 | (newline) | ||
| 690 | (with-current-buffer (current-buffer) | ||
| 691 | (delete-region rcirc-prompt-end-marker (point)) | ||
| 692 | (if (string= command "me") | ||
| 693 | (rcirc-print rcirc-process (rcirc-nick rcirc-process) | ||
| 694 | "ACTION" target args) | ||
| 695 | (rcirc-print rcirc-process (rcirc-nick rcirc-process) | ||
| 696 | "COMMAND" target input)) | ||
| 697 | (set-marker rcirc-prompt-end-marker (point)) | ||
| 698 | (if (fboundp fun) | ||
| 699 | (funcall fun args rcirc-process target) | ||
| 700 | (rcirc-send-string rcirc-process | ||
| 701 | (concat command " " args))))) | ||
| 702 | ;; send message to server | ||
| 703 | (if (not rcirc-target) | ||
| 704 | (message "Not joined") | ||
| 705 | (delete-region rcirc-prompt-end-marker (point)) | ||
| 706 | (mapc (lambda (message) | ||
| 707 | (rcirc-send-message rcirc-process target message)) | ||
| 708 | (split-string input "\n")))) | ||
| 709 | ;; add to input-ring | ||
| 710 | (save-excursion | ||
| 711 | (ring-insert rcirc-input-ring input) | ||
| 712 | (setq rcirc-input-ring-index 0)))))))) | ||
| 713 | |||
| 714 | (defvar rcirc-parent-buffer nil) | ||
| 715 | (defvar rcirc-window-configuration nil) | ||
| 716 | (defun rcirc-edit-multiline () | ||
| 717 | "Move current edit to a dedicated buffer." | ||
| 718 | (interactive) | ||
| 719 | (let ((pos (1+ (- (point) rcirc-prompt-end-marker)))) | ||
| 720 | (goto-char (point-max)) | ||
| 721 | (let ((text (buffer-substring rcirc-prompt-end-marker (point))) | ||
| 722 | (parent (buffer-name)) | ||
| 723 | (process rcirc-process)) | ||
| 724 | (delete-region rcirc-prompt-end-marker (point)) | ||
| 725 | (setq rcirc-window-configuration (current-window-configuration)) | ||
| 726 | (pop-to-buffer (concat "*multiline " parent "*")) | ||
| 727 | (rcirc-multiline-edit-mode) | ||
| 728 | (setq rcirc-parent-buffer parent) | ||
| 729 | (setq rcirc-process process) | ||
| 730 | (insert text) | ||
| 731 | (and (> pos 0) (goto-char pos))))) | ||
| 732 | |||
| 733 | (define-derived-mode rcirc-multiline-edit-mode | ||
| 734 | text-mode "rcirc multi" | ||
| 735 | "Major mode for multiline edits | ||
| 736 | \\{rcirc-multiline-edit-mode-map}" | ||
| 737 | (make-local-variable 'rcirc-parent-buffer) | ||
| 738 | (make-local-variable 'rcirc-process)) | ||
| 739 | |||
| 740 | (define-key rcirc-multiline-edit-mode-map | ||
| 741 | (kbd "C-c C-c") 'rcirc-multiline-edit-submit) | ||
| 742 | (define-key rcirc-multiline-edit-mode-map | ||
| 743 | (kbd "C-x C-s") 'rcirc-multiline-edit-submit) | ||
| 744 | (define-key rcirc-multiline-edit-mode-map | ||
| 745 | (kbd "C-c C-k") 'rcirc-multiline-edit-cancel) | ||
| 746 | (define-key rcirc-multiline-edit-mode-map | ||
| 747 | (kbd "ESC ESC ESC") 'rcirc-multiline-edit-cancel) | ||
| 748 | |||
| 749 | (defun rcirc-multiline-edit-submit () | ||
| 750 | "Send the text in buffer back to parent buffer." | ||
| 751 | (interactive) | ||
| 752 | (assert (and (eq major-mode 'rcirc-multiline-edit-mode))) | ||
| 753 | (assert rcirc-parent-buffer) | ||
| 754 | (let ((text (buffer-substring (point-min) (point-max))) | ||
| 755 | (buffer (current-buffer)) | ||
| 756 | (pos (point))) | ||
| 757 | (set-buffer rcirc-parent-buffer) | ||
| 758 | (goto-char (point-max)) | ||
| 759 | (insert text) | ||
| 760 | (goto-char (+ rcirc-prompt-end-marker (1- pos))) | ||
| 761 | (kill-buffer buffer) | ||
| 762 | (set-window-configuration rcirc-window-configuration))) | ||
| 763 | |||
| 764 | (defun rcirc-multiline-edit-cancel () | ||
| 765 | "Cancel the multiline edit." | ||
| 766 | (interactive) | ||
| 767 | (assert (and (eq major-mode 'rcirc-multiline-edit-mode))) | ||
| 768 | (kill-buffer (current-buffer)) | ||
| 769 | (set-window-configuration rcirc-window-configuration)) | ||
| 770 | |||
| 771 | (defun rcirc-last-buffer (process) | ||
| 772 | "Return the last working buffer for PROCESS. | ||
| 773 | Used for displaying messages that don't have an explicit destination." | ||
| 774 | (with-current-buffer (process-buffer process) | ||
| 775 | (or (and rcirc-last-buffer | ||
| 776 | (buffer-live-p rcirc-last-buffer) | ||
| 777 | rcirc-last-buffer) | ||
| 778 | (current-buffer)))) | ||
| 779 | |||
| 780 | (defun rcirc-set-last-buffer (process buffer) | ||
| 781 | "Set the last working buffer for PROCESS to BUFFER." | ||
| 782 | (with-current-buffer (process-buffer process) | ||
| 783 | (setq rcirc-last-buffer buffer))) | ||
| 784 | |||
| 785 | (defun rcirc-format-response-string (process sender response target text) | ||
| 786 | (concat (when rcirc-time-format | ||
| 787 | (format-time-string rcirc-time-format (current-time))) | ||
| 788 | (cond ((or (string= response "PRIVMSG") | ||
| 789 | (string= response "NOTICE") | ||
| 790 | (string= response "ACTION")) | ||
| 791 | (let (first middle end) | ||
| 792 | (cond ((string= response "PRIVMSG") | ||
| 793 | (setq first "<" middle "> ")) | ||
| 794 | ((string= response "NOTICE") | ||
| 795 | (setq first "-" middle "- ")) | ||
| 796 | (t | ||
| 797 | (setq first "[" middle " " end "]"))) | ||
| 798 | (concat first | ||
| 799 | (rcirc-facify (rcirc-user-nick sender) | ||
| 800 | (if (string= sender | ||
| 801 | (rcirc-nick process)) | ||
| 802 | 'rcirc-my-nick-face | ||
| 803 | 'rcirc-other-nick-face)) | ||
| 804 | middle | ||
| 805 | (rcirc-mangle-text process text) | ||
| 806 | end))) | ||
| 807 | ((string= response "COMMAND") | ||
| 808 | text) | ||
| 809 | ((string= response "ERROR") | ||
| 810 | (propertize text 'face 'font-lock-warning-face)) | ||
| 811 | (t | ||
| 812 | (rcirc-mangle-text | ||
| 813 | process | ||
| 814 | (rcirc-facify | ||
| 815 | (concat "*** " | ||
| 816 | (when (not (string= sender (rcirc-server process))) | ||
| 817 | (concat (rcirc-user-nick sender) " ")) | ||
| 818 | (when (zerop (string-to-number response)) | ||
| 819 | (concat response " ")) | ||
| 820 | (when (and target (not (string= target rcirc-target))) | ||
| 821 | (concat target " ")) | ||
| 822 | text) | ||
| 823 | 'rcirc-server-face)))))) | ||
| 824 | |||
| 825 | (defvar rcirc-activity-type nil) | ||
| 826 | (make-variable-buffer-local 'rcirc-activity-type) | ||
| 827 | (defun rcirc-print (process sender response target text &optional activity) | ||
| 828 | "Print TEXT in the buffer associated with TARGET. | ||
| 829 | Format based on SENDER and RESPONSE. If ACTIVITY is non-nil, | ||
| 830 | record activity." | ||
| 831 | (let* ((buffer (cond ((bufferp target) | ||
| 832 | target) | ||
| 833 | ((not target) | ||
| 834 | (rcirc-last-buffer process)) | ||
| 835 | ((not (rcirc-channel-p target)) | ||
| 836 | (rcirc-get-buffer-create process target)) | ||
| 837 | ((rcirc-get-buffer process target)) | ||
| 838 | (t (process-buffer process)))) | ||
| 839 | (inhibit-read-only t)) | ||
| 840 | (with-current-buffer buffer | ||
| 841 | (let ((moving (= (point) rcirc-prompt-end-marker)) | ||
| 842 | (old-point (point-marker)) | ||
| 843 | (fill-start (marker-position rcirc-prompt-start-marker))) | ||
| 844 | |||
| 845 | (unless (string= sender (rcirc-nick process)) | ||
| 846 | ;; only decode text from other senders, not ours | ||
| 847 | (setq text (decode-coding-string text buffer-file-coding-system)) | ||
| 848 | ;; mark the line with overlay arrow | ||
| 849 | (unless (or (marker-position overlay-arrow-position) | ||
| 850 | (get-buffer-window (current-buffer))) | ||
| 851 | (set-marker overlay-arrow-position | ||
| 852 | (marker-position rcirc-prompt-start-marker)))) | ||
| 853 | |||
| 854 | ;; temporarily set the marker insertion-type because | ||
| 855 | ;; insert-before-markers results in hidden text in new buffers | ||
| 856 | (goto-char rcirc-prompt-start-marker) | ||
| 857 | (set-marker-insertion-type rcirc-prompt-start-marker t) | ||
| 858 | (set-marker-insertion-type rcirc-prompt-end-marker t) | ||
| 859 | (insert | ||
| 860 | (rcirc-format-response-string process sender response target text) | ||
| 861 | (propertize "\n" 'hard t)) | ||
| 862 | (set-marker-insertion-type rcirc-prompt-start-marker nil) | ||
| 863 | (set-marker-insertion-type rcirc-prompt-end-marker nil) | ||
| 864 | |||
| 865 | ;; fill the text we just inserted, maybe | ||
| 866 | (when (and rcirc-fill-flag | ||
| 867 | (not (string= response "372"))) ;/motd | ||
| 868 | (let ((fill-prefix | ||
| 869 | (or rcirc-fill-prefix | ||
| 870 | (make-string | ||
| 871 | (+ (if rcirc-time-format | ||
| 872 | (length (format-time-string | ||
| 873 | rcirc-time-format)) | ||
| 874 | 0) | ||
| 875 | (cond ((or (string= response "PRIVMSG") | ||
| 876 | (string= response "NOTICE")) | ||
| 877 | (+ (length (rcirc-user-nick sender)) | ||
| 878 | 2)) ; <> | ||
| 879 | ((string= response "ACTION") | ||
| 880 | (+ (length (rcirc-user-nick sender)) | ||
| 881 | 1)) ; [ | ||
| 882 | (t 3)) ; *** | ||
| 883 | 1) | ||
| 884 | ? ))) | ||
| 885 | (fill-column (or rcirc-fill-column fill-column))) | ||
| 886 | (fill-region fill-start rcirc-prompt-start-marker 'left t))) | ||
| 887 | |||
| 888 | ;; truncate buffer if it is very long | ||
| 889 | (save-excursion | ||
| 890 | (when (and rcirc-buffer-maximum-lines | ||
| 891 | (> rcirc-buffer-maximum-lines 0) | ||
| 892 | (= (forward-line (- rcirc-buffer-maximum-lines)) 0)) | ||
| 893 | (delete-region (point-min) (point)))) | ||
| 894 | |||
| 895 | ;; set inserted text to be read-only | ||
| 896 | (when rcirc-read-only-flag | ||
| 897 | (put-text-property rcirc-prompt-start-marker fill-start 'read-only t) | ||
| 898 | (let ((inhibit-read-only t)) | ||
| 899 | (put-text-property rcirc-prompt-start-marker fill-start | ||
| 900 | 'front-sticky t) | ||
| 901 | (put-text-property (1- (point)) (point) 'rear-nonsticky t))) | ||
| 902 | |||
| 903 | ;; set the window point for buffers show in windows | ||
| 904 | (walk-windows (lambda (w) | ||
| 905 | (unless (eq (selected-window) w) | ||
| 906 | (when (and (eq (current-buffer) | ||
| 907 | (window-buffer w)) | ||
| 908 | (>= (window-point w) | ||
| 909 | rcirc-prompt-end-marker)) | ||
| 910 | (set-window-point w (point-max))))) | ||
| 911 | nil t) | ||
| 912 | |||
| 913 | ;; restore the point | ||
| 914 | (goto-char (if moving rcirc-prompt-end-marker old-point)) | ||
| 915 | |||
| 916 | ;; flush undo (can we do something smarter here?) | ||
| 917 | (buffer-disable-undo) | ||
| 918 | (buffer-enable-undo)) | ||
| 919 | |||
| 920 | ;; record modeline activity | ||
| 921 | (when activity | ||
| 922 | (let ((nick-match | ||
| 923 | (string-match (concat "\\b" | ||
| 924 | (regexp-quote (rcirc-nick process)) | ||
| 925 | "\\b") | ||
| 926 | text))) | ||
| 927 | (when (or (not rcirc-ignore-channel-activity) | ||
| 928 | ;; always notice when our nick is mentioned, even | ||
| 929 | ;; if ignoring channel activity | ||
| 930 | nick-match) | ||
| 931 | (rcirc-record-activity | ||
| 932 | (current-buffer) | ||
| 933 | (when (or nick-match (not (rcirc-channel-p rcirc-target))) | ||
| 934 | 'nick))))) | ||
| 935 | |||
| 936 | (run-hook-with-args 'rcirc-print-hooks | ||
| 937 | process sender response target text)))) | ||
| 938 | |||
| 939 | (defun rcirc-startup-channels (server) | ||
| 940 | "Return the list of startup channels for server." | ||
| 941 | (let (channels) | ||
| 942 | (dolist (i rcirc-startup-channels-alist) | ||
| 943 | (if (string-match (car i) server) | ||
| 944 | (setq channels (append channels (cdr i))))) | ||
| 945 | channels)) | ||
| 946 | |||
| 947 | (defun rcirc-join-channels (process channels) | ||
| 948 | "Join CHANNELS." | ||
| 949 | (save-window-excursion | ||
| 950 | (mapc (lambda (channel) | ||
| 951 | (with-current-buffer (process-buffer process) | ||
| 952 | (let (rcirc-last-buffer) ; make sure /join text is | ||
| 953 | ; printed in server buffer | ||
| 954 | (rcirc-print process (rcirc-nick process) "COMMAND" | ||
| 955 | nil (concat "/join " channel))) | ||
| 956 | (rcirc-cmd-join channel process))) | ||
| 957 | channels))) | ||
| 958 | |||
| 959 | ;;; nick management | ||
| 960 | (defun rcirc-user-nick (user) | ||
| 961 | "Return the nick from USER. Remove any non-nick junk." | ||
| 962 | (if (string-match "^[@%+]?\\([^! ]+\\)!?" (or user "")) | ||
| 963 | (match-string 1 user) | ||
| 964 | user)) | ||
| 965 | |||
| 966 | (defun rcirc-user-non-nick (user) | ||
| 967 | "Return the non-nick portion of USER." | ||
| 968 | (if (string-match "^[@+]?[^! ]+!?\\(.*\\)" (or user "")) | ||
| 969 | (match-string 1 user) | ||
| 970 | user)) | ||
| 971 | |||
| 972 | (defun rcirc-nick-channels (process nick) | ||
| 973 | "Return list of channels for NICK." | ||
| 974 | (let ((nick (rcirc-user-nick nick))) | ||
| 975 | (with-current-buffer (process-buffer process) | ||
| 976 | (mapcar (lambda (x) (car x)) | ||
| 977 | (gethash nick rcirc-nick-table))))) | ||
| 978 | |||
| 979 | (defun rcirc-put-nick-channel (process nick channel) | ||
| 980 | "Add CHANNEL to list associated with NICK." | ||
| 981 | (with-current-buffer (process-buffer process) | ||
| 982 | (let* ((nick (rcirc-user-nick nick)) | ||
| 983 | (chans (gethash nick rcirc-nick-table)) | ||
| 984 | (record (assoc channel chans))) | ||
| 985 | (if record | ||
| 986 | (setcdr record (current-time)) | ||
| 987 | (puthash nick (cons (cons channel (current-time)) | ||
| 988 | chans) | ||
| 989 | rcirc-nick-table))))) | ||
| 990 | |||
| 991 | (defun rcirc-nick-remove (process nick) | ||
| 992 | "Remove NICK from table." | ||
| 993 | (with-current-buffer (process-buffer process) | ||
| 994 | (remhash nick rcirc-nick-table))) | ||
| 995 | |||
| 996 | (defun rcirc-remove-nick-channel (process nick channel) | ||
| 997 | "Remove the CHANNEL from list associated with NICK." | ||
| 998 | (with-current-buffer (process-buffer process) | ||
| 999 | (let* ((nick (rcirc-user-nick nick)) | ||
| 1000 | (chans (gethash nick rcirc-nick-table)) | ||
| 1001 | (newchans (assq-delete-all channel chans))) | ||
| 1002 | (if newchans | ||
| 1003 | (puthash nick newchans rcirc-nick-table) | ||
| 1004 | (remhash nick rcirc-nick-table))))) | ||
| 1005 | |||
| 1006 | (defun rcirc-channel-nicks (process channel) | ||
| 1007 | "Return the list of nicks in CHANNEL sorted by last activity." | ||
| 1008 | (with-current-buffer (process-buffer process) | ||
| 1009 | (let (nicks) | ||
| 1010 | (maphash | ||
| 1011 | (lambda (k v) | ||
| 1012 | (let ((record (assoc channel v))) | ||
| 1013 | (if record | ||
| 1014 | (setq nicks (cons (cons k (cdr record)) nicks))))) | ||
| 1015 | rcirc-nick-table) | ||
| 1016 | (mapcar (lambda (x) (car x)) | ||
| 1017 | (sort nicks (lambda (x y) (time-less-p (cdr y) (cdr x)))))))) | ||
| 1018 | |||
| 1019 | ;;; activity tracking | ||
| 1020 | (or (assq 'rcirc-ignore-channel-activity minor-mode-alist) | ||
| 1021 | (setq minor-mode-alist | ||
| 1022 | (cons '(rcirc-ignore-channel-activity " Ignore") minor-mode-alist))) | ||
| 1023 | |||
| 1024 | (defun rcirc-toggle-ignore-channel-activity (&optional all) | ||
| 1025 | "Toggle the value of `rcirc-ignore-channel-activity'. | ||
| 1026 | If ALL is non-nil, instead toggle the value of | ||
| 1027 | `rcirc-ignore-all-activity-flag'." | ||
| 1028 | (interactive "P") | ||
| 1029 | (if all | ||
| 1030 | (progn | ||
| 1031 | (setq rcirc-ignore-all-activity-flag | ||
| 1032 | (not rcirc-ignore-all-activity-flag)) | ||
| 1033 | (message (concat "Global activity " | ||
| 1034 | (if rcirc-ignore-all-activity-flag | ||
| 1035 | "hidden" | ||
| 1036 | "displayed"))) | ||
| 1037 | (rcirc-update-activity-string)) | ||
| 1038 | (setq rcirc-ignore-channel-activity | ||
| 1039 | (not rcirc-ignore-channel-activity))) | ||
| 1040 | (force-mode-line-update)) | ||
| 1041 | |||
| 1042 | (defvar rcirc-switch-to-buffer-function 'switch-to-buffer | ||
| 1043 | "Function to use when switching buffers. | ||
| 1044 | Possible values are `switch-to-buffer', `pop-to-buffer', and | ||
| 1045 | `display-buffer'.") | ||
| 1046 | |||
| 1047 | (defun rcirc-switch-to-server-buffer () | ||
| 1048 | "Switch to the server buffer associated with current channel buffer." | ||
| 1049 | (interactive) | ||
| 1050 | (funcall rcirc-switch-to-buffer-function (process-buffer rcirc-process))) | ||
| 1051 | |||
| 1052 | (defun rcirc-jump-to-first-unread-line () | ||
| 1053 | "Move the point to the first unread line in this buffer." | ||
| 1054 | (interactive) | ||
| 1055 | (when (marker-position overlay-arrow-position) | ||
| 1056 | (goto-char overlay-arrow-position))) | ||
| 1057 | |||
| 1058 | (defvar rcirc-last-non-irc-buffer nil | ||
| 1059 | "The buffer to switch to when there is no more activity.") | ||
| 1060 | |||
| 1061 | (defun rcirc-next-active-buffer (arg) | ||
| 1062 | "Go to the ARGth rcirc buffer with activity. | ||
| 1063 | The function given by `rcirc-switch-to-buffer-function' is used to | ||
| 1064 | show the buffer." | ||
| 1065 | (interactive "p") | ||
| 1066 | (if rcirc-activity | ||
| 1067 | (progn | ||
| 1068 | (unless (eq major-mode 'rcirc-mode) | ||
| 1069 | (setq rcirc-last-non-irc-buffer (current-buffer))) | ||
| 1070 | (if (and (> arg 0) | ||
| 1071 | (<= arg (length rcirc-activity))) | ||
| 1072 | (funcall rcirc-switch-to-buffer-function | ||
| 1073 | (nth (1- arg) rcirc-activity)) | ||
| 1074 | (message "Invalid arg: %d" arg))) | ||
| 1075 | (if (eq major-mode 'rcirc-mode) | ||
| 1076 | (if (not (and rcirc-last-non-irc-buffer | ||
| 1077 | (buffer-live-p rcirc-last-non-irc-buffer))) | ||
| 1078 | (message "No last buffer.") | ||
| 1079 | (funcall rcirc-switch-to-buffer-function rcirc-last-non-irc-buffer) | ||
| 1080 | (setq rcirc-last-non-irc-buffer nil)) | ||
| 1081 | (message "No channel activity. Go start something.")))) | ||
| 1082 | |||
| 1083 | (defvar rcirc-activity-hooks nil | ||
| 1084 | "Hook to be run when there is channel activity. | ||
| 1085 | |||
| 1086 | Functions are called with a single argument, the buffer with the | ||
| 1087 | activity. Only run if the buffer is not visible and | ||
| 1088 | `rcirc-ignore-channel-activity' is non-nil.") | ||
| 1089 | |||
| 1090 | (defun rcirc-record-activity (buffer type) | ||
| 1091 | "Record BUFFER activity with TYPE." | ||
| 1092 | (with-current-buffer buffer | ||
| 1093 | (when (not (get-buffer-window (current-buffer) t)) | ||
| 1094 | (add-to-list 'rcirc-activity (current-buffer) 'append) | ||
| 1095 | (if (not rcirc-activity-type) | ||
| 1096 | (setq rcirc-activity-type type)) | ||
| 1097 | (rcirc-update-activity-string))) | ||
| 1098 | (run-hook-with-args 'rcirc-activity-hooks buffer)) | ||
| 1099 | |||
| 1100 | (defun rcirc-clear-activity (buffer) | ||
| 1101 | "Clear the BUFFER activity." | ||
| 1102 | (setq rcirc-activity (delete buffer rcirc-activity)) | ||
| 1103 | (with-current-buffer buffer | ||
| 1104 | (setq rcirc-activity-type nil))) | ||
| 1105 | |||
| 1106 | (defun rcirc-update-activity-string () | ||
| 1107 | "Update mode-line string." | ||
| 1108 | (setq rcirc-activity-string | ||
| 1109 | (if (or rcirc-ignore-all-activity-flag | ||
| 1110 | (not rcirc-activity)) | ||
| 1111 | "" | ||
| 1112 | (concat " [" (mapconcat | ||
| 1113 | (lambda (b) | ||
| 1114 | (let ((s (rcirc-short-buffer-name b))) | ||
| 1115 | (with-current-buffer b | ||
| 1116 | (if (not (eq rcirc-activity-type 'nick)) | ||
| 1117 | s | ||
| 1118 | (rcirc-facify s | ||
| 1119 | 'rcirc-mode-line-nick-face))))) | ||
| 1120 | rcirc-activity ",") "]")))) | ||
| 1121 | |||
| 1122 | (defun rcirc-short-buffer-name (buffer) | ||
| 1123 | "Return a short name for BUFFER to use in the modeline indicator." | ||
| 1124 | (with-current-buffer buffer | ||
| 1125 | (or rcirc-target (process-name rcirc-process)))) | ||
| 1126 | |||
| 1127 | (defun rcirc-update-activity () | ||
| 1128 | "Go through visible windows and remove buffers from activity list." | ||
| 1129 | (walk-windows (lambda (w) (rcirc-clear-activity (window-buffer w)))) | ||
| 1130 | (rcirc-update-activity-string)) | ||
| 1131 | |||
| 1132 | |||
| 1133 | ;;; /commands these are called with 3 args: PROCESS, TARGET, which is | ||
| 1134 | ;; the current buffer/channel/user, and ARGS, which is a string | ||
| 1135 | ;; containing the text following the /cmd. | ||
| 1136 | |||
| 1137 | (defmacro defun-rcirc-command (command argument docstring interactive-form | ||
| 1138 | &rest body) | ||
| 1139 | "Define a command." | ||
| 1140 | `(defun ,(intern (concat "rcirc-cmd-" (symbol-name command))) | ||
| 1141 | (,@argument &optional process target) | ||
| 1142 | ,(concat docstring "\n\nNote: If PROCESS or TARGET are nil, the values of" | ||
| 1143 | "\nbuffer local variables `rcirc-process' and `rcirc-target'," | ||
| 1144 | "\nwill be used.") | ||
| 1145 | ,interactive-form | ||
| 1146 | (let ((process (or process rcirc-process)) | ||
| 1147 | (target (or target rcirc-target))) | ||
| 1148 | ,@body))) | ||
| 1149 | |||
| 1150 | (defun-rcirc-command msg (message) | ||
| 1151 | "Send private MESSAGE to TARGET." | ||
| 1152 | (interactive "i") | ||
| 1153 | (if (null message) | ||
| 1154 | (progn | ||
| 1155 | (setq target (completing-read "Message nick: " | ||
| 1156 | (with-current-buffer | ||
| 1157 | (process-buffer rcirc-process) | ||
| 1158 | rcirc-nick-table))) | ||
| 1159 | (when (> (length target) 0) | ||
| 1160 | (setq message (read-string (format "Message %s: " target))) | ||
| 1161 | (when (> (length message) 0) | ||
| 1162 | (rcirc-send-message process target message)))) | ||
| 1163 | (if (not (string-match "\\([^ ]+\\) \\(.+\\)" message)) | ||
| 1164 | (message "Not enough args, or something.") | ||
| 1165 | (setq target (match-string 1 message) | ||
| 1166 | message (match-string 2 message)) | ||
| 1167 | (rcirc-send-message process target message)))) | ||
| 1168 | |||
| 1169 | (defun-rcirc-command query (nick) | ||
| 1170 | "Open a private chat buffer to NICK." | ||
| 1171 | (interactive (list (completing-read "Query nick: " | ||
| 1172 | (with-current-buffer | ||
| 1173 | (process-buffer rcirc-process) | ||
| 1174 | rcirc-nick-table)))) | ||
| 1175 | (let ((new-buffer (eq (rcirc-get-buffer rcirc-process nick) | ||
| 1176 | (process-buffer rcirc-process)))) | ||
| 1177 | (switch-to-buffer (rcirc-get-buffer-create process nick)) | ||
| 1178 | (when new-buffer | ||
| 1179 | (rcirc-cmd-whois nick)))) | ||
| 1180 | |||
| 1181 | (defun-rcirc-command join (args) | ||
| 1182 | "Join CHANNEL." | ||
| 1183 | (interactive "sJoin channel: ") | ||
| 1184 | (let* ((channel (car (split-string args))) | ||
| 1185 | (buffer (rcirc-get-buffer-create process channel))) | ||
| 1186 | (when (not (eq (selected-window) (minibuffer-window))) | ||
| 1187 | (funcall rcirc-switch-to-buffer-function buffer)) | ||
| 1188 | (rcirc-send-string process (concat "JOIN " args)) | ||
| 1189 | (rcirc-set-last-buffer process buffer))) | ||
| 1190 | |||
| 1191 | (defun-rcirc-command part (channel) | ||
| 1192 | "Part CHANNEL." | ||
| 1193 | (interactive "sPart channel: ") | ||
| 1194 | (let ((channel (if (> (length channel) 0) channel target))) | ||
| 1195 | (rcirc-send-string process (concat "PART " channel " :" (rcirc-version))))) | ||
| 1196 | |||
| 1197 | (defun-rcirc-command quit (reason) | ||
| 1198 | "Send a quit message to server with REASON." | ||
| 1199 | (interactive "sQuit reason: ") | ||
| 1200 | (rcirc-send-string process (concat "QUIT :" reason))) | ||
| 1201 | |||
| 1202 | (defun-rcirc-command nick (nick) | ||
| 1203 | "Change nick to NICK." | ||
| 1204 | (interactive "i") | ||
| 1205 | (when (null nick) | ||
| 1206 | (setq nick (read-string "New nick: " (rcirc-nick process)))) | ||
| 1207 | (rcirc-send-string process (concat "NICK " nick))) | ||
| 1208 | |||
| 1209 | (defun-rcirc-command names (channel) | ||
| 1210 | "Display list of names in CHANNEL or in current channel if CHANNEL is nil. | ||
| 1211 | If called interactively, prompt for a channel when prefix arg is supplied." | ||
| 1212 | (interactive "P") | ||
| 1213 | (if (interactive-p) | ||
| 1214 | (if channel | ||
| 1215 | (setq channel (read-string "List names in channel: " target)))) | ||
| 1216 | (let ((channel (if (> (length channel) 0) | ||
| 1217 | channel | ||
| 1218 | target))) | ||
| 1219 | (rcirc-send-string process (concat "NAMES " channel)))) | ||
| 1220 | |||
| 1221 | (defun-rcirc-command topic (topic) | ||
| 1222 | "List TOPIC for the TARGET channel. | ||
| 1223 | With a prefix arg, prompt for new topic." | ||
| 1224 | (interactive "P") | ||
| 1225 | (if (and (interactive-p) topic) | ||
| 1226 | (setq topic (read-string "New Topic: " rcirc-topic))) | ||
| 1227 | (rcirc-send-string process (concat "TOPIC " target | ||
| 1228 | (when (> (length topic) 0) | ||
| 1229 | (concat " :" topic))))) | ||
| 1230 | |||
| 1231 | (defun-rcirc-command whois (nick) | ||
| 1232 | "Request information from server about NICK." | ||
| 1233 | (interactive (list | ||
| 1234 | (completing-read "Whois: " | ||
| 1235 | (with-current-buffer | ||
| 1236 | (process-buffer rcirc-process) | ||
| 1237 | rcirc-nick-table)))) | ||
| 1238 | (rcirc-set-last-buffer rcirc-process (current-buffer)) | ||
| 1239 | (rcirc-send-string process (concat "WHOIS " nick))) | ||
| 1240 | |||
| 1241 | (defun-rcirc-command mode (args) | ||
| 1242 | "Set mode with ARGS." | ||
| 1243 | (interactive (list (concat (read-string "Mode nick or channel: ") | ||
| 1244 | " " (read-string "Mode: ")))) | ||
| 1245 | (rcirc-send-string process (concat "MODE " args))) | ||
| 1246 | |||
| 1247 | (defun-rcirc-command list (channels) | ||
| 1248 | "Request information on CHANNELS from server." | ||
| 1249 | (interactive "sList Channels: ") | ||
| 1250 | (rcirc-send-string process (concat "LIST " channels))) | ||
| 1251 | |||
| 1252 | (defun-rcirc-command oper (args) | ||
| 1253 | "Send operator command to server." | ||
| 1254 | (interactive "sOper args: ") | ||
| 1255 | (rcirc-send-string process (concat "OPER " args))) | ||
| 1256 | |||
| 1257 | (defun-rcirc-command quote (message) | ||
| 1258 | "Send MESSAGE literally to server." | ||
| 1259 | (interactive "sServer message: ") | ||
| 1260 | (rcirc-send-string process message)) | ||
| 1261 | |||
| 1262 | (defun-rcirc-command kick (arg) | ||
| 1263 | "Kick NICK from current channel." | ||
| 1264 | (interactive (list | ||
| 1265 | (concat (completing-read "Kick nick: " | ||
| 1266 | (rcirc-channel-nicks rcirc-process | ||
| 1267 | rcirc-target)) | ||
| 1268 | (read-from-minibuffer "Kick reason: ")))) | ||
| 1269 | (let* ((arglist (split-string arg)) | ||
| 1270 | (argstring (concat (car arglist) " :" | ||
| 1271 | (mapconcat 'identity (cdr arglist) " ")))) | ||
| 1272 | (rcirc-send-string process (concat "KICK " target " " argstring)))) | ||
| 1273 | |||
| 1274 | (defun rcirc-cmd-ctcp (args &optional process target) | ||
| 1275 | (if (string-match "^\\([^ ]+\\)\\s-+\\(.+\\)$" args) | ||
| 1276 | (let ((target (match-string 1 args)) | ||
| 1277 | (request (match-string 2 args))) | ||
| 1278 | (rcirc-send-message process target | ||
| 1279 | (concat "\C-a" (upcase request) "\C-a"))) | ||
| 1280 | (rcirc-print process (rcirc-nick process) "ERROR" target | ||
| 1281 | "usage: /ctcp NICK REQUEST"))) | ||
| 1282 | |||
| 1283 | (defun rcirc-cmd-me (args &optional process target) | ||
| 1284 | (rcirc-send-string process (format "PRIVMSG %s :\C-aACTION %s\C-a" | ||
| 1285 | target args))) | ||
| 1286 | |||
| 1287 | (defun rcirc-message-leader (sender face) | ||
| 1288 | "Return a string with SENDER propertized with FACE." | ||
| 1289 | (rcirc-facify (concat "<" (rcirc-user-nick sender) "> ") face)) | ||
| 1290 | |||
| 1291 | (defun rcirc-facify (string face) | ||
| 1292 | "Return a copy of STRING with FACE property added." | ||
| 1293 | (propertize (or string "") 'face face 'rear-nonsticky t)) | ||
| 1294 | |||
| 1295 | ;; shy grouping must be used within this regexp | ||
| 1296 | (defvar rcirc-url-regexp | ||
| 1297 | "\\b\\(?:\\(?:www\\.\\|\\(?:s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\ | ||
| 1298 | \\|wais\\|mailto\\):\\)\\(?://[-a-zA-Z0-9_.]+:[0-9]*\\)?\\(?:[-a-zA-Z0-9_=!?#$\ | ||
| 1299 | @~`%&*+|\\/:;.,]\\|\\w\\)+\\(?:[-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)\\)" | ||
| 1300 | "Regexp matching URL's. Set to nil to disable URL features in rcirc.") | ||
| 1301 | |||
| 1302 | (defun rcirc-browse-url (&optional arg) | ||
| 1303 | "Prompt for url to browse based on urls in buffer." | ||
| 1304 | (interactive) | ||
| 1305 | (let ((completions (mapcar (lambda (x) (cons x nil)) rcirc-urls)) | ||
| 1306 | (initial-input (car rcirc-urls)) | ||
| 1307 | (history (cdr rcirc-urls))) | ||
| 1308 | (browse-url (completing-read "rcirc browse-url: " | ||
| 1309 | completions nil nil initial-input 'history) | ||
| 1310 | arg))) | ||
| 1311 | |||
| 1312 | (defun rcirc-map-regexp (function regexp string) | ||
| 1313 | "Return a copy of STRING after calling FUNCTION for each REGEXP match. | ||
| 1314 | FUNCTION takes 3 arguments, MATCH-START, MATCH-END, and STRING." | ||
| 1315 | (let ((start 0)) | ||
| 1316 | (while (string-match regexp string start) | ||
| 1317 | (setq start (match-end 0)) | ||
| 1318 | (funcall function (match-beginning 0) (match-end 0) string))) | ||
| 1319 | string) | ||
| 1320 | |||
| 1321 | (defvar rcirc-nick-syntax-table | ||
| 1322 | (let ((table (make-syntax-table text-mode-syntax-table))) | ||
| 1323 | (mapc (lambda (c) (modify-syntax-entry c "w" table)) | ||
| 1324 | "[]\\`_^{|}-") | ||
| 1325 | (modify-syntax-entry ?' "_" table) | ||
| 1326 | table) | ||
| 1327 | "Syntax table which includes all nick characters as word constituents.") | ||
| 1328 | |||
| 1329 | (defun rcirc-mangle-text (process text) | ||
| 1330 | "Return TEXT with properties added based on various patterns." | ||
| 1331 | ;; ^B | ||
| 1332 | (setq text | ||
| 1333 | (rcirc-map-regexp (lambda (start end string) | ||
| 1334 | (add-text-properties | ||
| 1335 | start end | ||
| 1336 | (list 'face 'bold 'rear-nonsticky t) | ||
| 1337 | string)) | ||
| 1338 | ".*?" | ||
| 1339 | text)) | ||
| 1340 | (while (string-match "\\(.*\\)[]\\(.*\\)" text) ; deal with | ||
| 1341 | (setq text (concat (match-string 1 text) | ||
| 1342 | (match-string 2 text)))) | ||
| 1343 | ;; my nick | ||
| 1344 | (setq text | ||
| 1345 | (with-syntax-table rcirc-nick-syntax-table | ||
| 1346 | (rcirc-map-regexp (lambda (start end string) | ||
| 1347 | (add-text-properties | ||
| 1348 | start end | ||
| 1349 | (list 'face 'rcirc-nick-in-message-face | ||
| 1350 | 'rear-nonsticky t) | ||
| 1351 | string)) | ||
| 1352 | (concat "\\b" | ||
| 1353 | (regexp-quote (rcirc-nick process)) | ||
| 1354 | "\\b") | ||
| 1355 | text))) | ||
| 1356 | ;; urls | ||
| 1357 | (setq text | ||
| 1358 | (rcirc-map-regexp | ||
| 1359 | (lambda (start end string) | ||
| 1360 | (let ((orig-face (get-text-property start 'face string))) | ||
| 1361 | (add-text-properties start end | ||
| 1362 | (list 'face (list orig-face 'bold) | ||
| 1363 | 'rear-nonsticky t) | ||
| 1364 | string)) | ||
| 1365 | (push (substring string start end) rcirc-urls)) | ||
| 1366 | rcirc-url-regexp | ||
| 1367 | text)) | ||
| 1368 | text) | ||
| 1369 | |||
| 1370 | |||
| 1371 | ;;; handlers | ||
| 1372 | ;; these are called with the server PROCESS, the SENDER, which is a | ||
| 1373 | ;; server or a user, depending on the command, the ARGS, which is a | ||
| 1374 | ;; list of strings, and the TEXT, which is the original server text, | ||
| 1375 | ;; verbatim | ||
| 1376 | (defun rcirc-handler-001 (process sender args text) | ||
| 1377 | (rcirc-handler-generic process "001" sender args text) | ||
| 1378 | ;; set the real server name | ||
| 1379 | (with-current-buffer (process-buffer process) | ||
| 1380 | (setq rcirc-server sender) | ||
| 1381 | (setq rcirc-nick (car args)) | ||
| 1382 | (rcirc-update-prompt) | ||
| 1383 | (when rcirc-auto-authenticate-flag (rcirc-authenticate)) | ||
| 1384 | (let (rcirc-last-buffer) | ||
| 1385 | (rcirc-join-channels process rcirc-startup-channels)))) | ||
| 1386 | |||
| 1387 | (defun rcirc-handler-PRIVMSG (process sender args text) | ||
| 1388 | (let ((target (if (rcirc-channel-p (car args)) | ||
| 1389 | (car args) | ||
| 1390 | (rcirc-user-nick sender))) | ||
| 1391 | (message (or (cadr args) ""))) | ||
| 1392 | (if (string-match "^\C-a\\(.*\\)\C-a$" message) | ||
| 1393 | (rcirc-handler-CTCP process target sender (match-string 1 message)) | ||
| 1394 | (rcirc-print process sender "PRIVMSG" target message t)) | ||
| 1395 | ;; update nick timestamp | ||
| 1396 | (if (member target (rcirc-nick-channels process sender)) | ||
| 1397 | (rcirc-put-nick-channel process sender target)))) | ||
| 1398 | |||
| 1399 | (defun rcirc-handler-NOTICE (process sender args text) | ||
| 1400 | (let ((target (car args)) | ||
| 1401 | (message (cadr args))) | ||
| 1402 | (rcirc-print process sender "NOTICE" | ||
| 1403 | (cond ((rcirc-channel-p target) | ||
| 1404 | target) | ||
| 1405 | ((string-match "^\\[\\(#[^ ]+\\)\\]" message) | ||
| 1406 | (match-string 1 message)) | ||
| 1407 | (sender | ||
| 1408 | (if (string= sender (rcirc-server process)) | ||
| 1409 | (process-buffer process) | ||
| 1410 | (rcirc-user-nick sender)))) | ||
| 1411 | message t) | ||
| 1412 | (and sender (rcirc-put-nick-channel process sender target)))) | ||
| 1413 | |||
| 1414 | (defun rcirc-handler-WALLOPS (process sender args text) | ||
| 1415 | (let ((target (rcirc-user-nick sender))) | ||
| 1416 | (rcirc-print process sender "WALLOPS" target (car args) t))) | ||
| 1417 | |||
| 1418 | (defun rcirc-handler-JOIN (process sender args text) | ||
| 1419 | (let ((channel (downcase (car args))) | ||
| 1420 | (nick (rcirc-user-nick sender))) | ||
| 1421 | (rcirc-get-buffer-create process channel) | ||
| 1422 | (rcirc-print process sender "JOIN" channel "") | ||
| 1423 | |||
| 1424 | ;; print in private chat buffer if it exists | ||
| 1425 | (if (not (eq (process-buffer rcirc-process) | ||
| 1426 | (rcirc-get-buffer rcirc-process nick))) | ||
| 1427 | (rcirc-print process sender "JOIN" nick channel)) | ||
| 1428 | |||
| 1429 | (rcirc-put-nick-channel process sender channel) | ||
| 1430 | (if (string= nick (rcirc-nick process)) | ||
| 1431 | (setq rcirc-channels (cons channel rcirc-channels))))) | ||
| 1432 | |||
| 1433 | ;; PART and KICK are handled the same way | ||
| 1434 | (defun rcirc-handler-PART-or-KICK (process response channel sender nick args) | ||
| 1435 | (rcirc-print process sender response channel (concat channel " " args)) | ||
| 1436 | |||
| 1437 | ;; print in private chat buffer if it exists | ||
| 1438 | (when (not (eq (process-buffer rcirc-process) | ||
| 1439 | (rcirc-get-buffer rcirc-process nick))) | ||
| 1440 | (rcirc-print process sender response nick (concat channel " " args))) | ||
| 1441 | |||
| 1442 | (if (not (string= nick (rcirc-nick process))) | ||
| 1443 | ;; this is someone else leaving | ||
| 1444 | (rcirc-remove-nick-channel process nick channel) | ||
| 1445 | ;; this is us leaving | ||
| 1446 | (mapc (lambda (n) | ||
| 1447 | (rcirc-remove-nick-channel process n channel)) | ||
| 1448 | (rcirc-channel-nicks process channel)) | ||
| 1449 | (setq rcirc-channels (delete channel rcirc-channels)) | ||
| 1450 | (with-current-buffer (rcirc-get-buffer process channel) | ||
| 1451 | (setq rcirc-target nil)))) | ||
| 1452 | |||
| 1453 | (defun rcirc-handler-PART (process sender args text) | ||
| 1454 | (rcirc-handler-PART-or-KICK process "PART" | ||
| 1455 | (car args) sender (rcirc-user-nick sender) | ||
| 1456 | (cadr args))) | ||
| 1457 | |||
| 1458 | (defun rcirc-handler-KICK (process sender args text) | ||
| 1459 | (rcirc-handler-PART-or-KICK process "KICK" (car args) sender (cadr args) | ||
| 1460 | (caddr args))) | ||
| 1461 | |||
| 1462 | (defun rcirc-handler-QUIT (process sender args text) | ||
| 1463 | (let ((nick (rcirc-user-nick sender))) | ||
| 1464 | (mapc (lambda (channel) | ||
| 1465 | (rcirc-print process sender "QUIT" channel (apply 'concat args))) | ||
| 1466 | (rcirc-nick-channels process nick)) | ||
| 1467 | |||
| 1468 | ;; print in private chat buffer if it exists | ||
| 1469 | (if (not (eq (process-buffer rcirc-process) | ||
| 1470 | (rcirc-get-buffer rcirc-process nick))) | ||
| 1471 | (rcirc-print process sender "QUIT" nick (apply 'concat args))) | ||
| 1472 | |||
| 1473 | (rcirc-nick-remove process nick))) | ||
| 1474 | |||
| 1475 | (defun rcirc-handler-NICK (process sender args text) | ||
| 1476 | (let* ((old-nick (rcirc-user-nick sender)) | ||
| 1477 | (new-nick (car args)) | ||
| 1478 | (channels (rcirc-nick-channels process old-nick))) | ||
| 1479 | ;; print message to nick's channels | ||
| 1480 | (dolist (target channels) | ||
| 1481 | (rcirc-print process sender "NICK" target new-nick)) | ||
| 1482 | ;; update private chat buffer, if it exists | ||
| 1483 | (with-current-buffer (rcirc-get-buffer process old-nick) | ||
| 1484 | (when (not (equal (process-buffer rcirc-process) | ||
| 1485 | (current-buffer))) | ||
| 1486 | (rcirc-print process sender "NICK" old-nick new-nick) | ||
| 1487 | (setq rcirc-target new-nick) | ||
| 1488 | (rename-buffer (rcirc-get-buffer-name process new-nick)))) | ||
| 1489 | ;; remove old nick and add new one | ||
| 1490 | (with-current-buffer (process-buffer process) | ||
| 1491 | (let ((v (gethash old-nick rcirc-nick-table))) | ||
| 1492 | (remhash old-nick rcirc-nick-table) | ||
| 1493 | (puthash new-nick v rcirc-nick-table)) | ||
| 1494 | ;; if this is our nick... | ||
| 1495 | (when (string= old-nick rcirc-nick) | ||
| 1496 | (setq rcirc-nick new-nick) | ||
| 1497 | ;; update prompts | ||
| 1498 | (mapc (lambda (target) | ||
| 1499 | (with-current-buffer (rcirc-get-buffer process target) | ||
| 1500 | (rcirc-update-prompt))) | ||
| 1501 | (append rcirc-channels rcirc-private-chats)) | ||
| 1502 | ;; reauthenticate | ||
| 1503 | (when rcirc-auto-authenticate-flag (rcirc-authenticate)))))) | ||
| 1504 | |||
| 1505 | (defun rcirc-handler-PING (process sender args text) | ||
| 1506 | (rcirc-send-string process (concat "PONG " (car args)))) | ||
| 1507 | |||
| 1508 | (defun rcirc-handler-PONG (process sender args text) | ||
| 1509 | ;; do nothing | ||
| 1510 | ) | ||
| 1511 | |||
| 1512 | (defun rcirc-handler-TOPIC (process sender args text) | ||
| 1513 | (let ((topic (cadr args))) | ||
| 1514 | (rcirc-print process sender "TOPIC" (car args) topic) | ||
| 1515 | (with-current-buffer (rcirc-get-buffer process (car args)) | ||
| 1516 | (setq rcirc-topic topic)))) | ||
| 1517 | |||
| 1518 | (defun rcirc-handler-332 (process sender args text) | ||
| 1519 | "RPL_TOPIC" | ||
| 1520 | (with-current-buffer (rcirc-get-buffer process (cadr args)) | ||
| 1521 | (setq rcirc-topic (caddr args)))) | ||
| 1522 | |||
| 1523 | (defun rcirc-handler-333 (process sender args text) | ||
| 1524 | "Not in rfc1459.txt" | ||
| 1525 | (with-current-buffer (rcirc-get-buffer process (cadr args)) | ||
| 1526 | (let ((setter (caddr args)) | ||
| 1527 | (time (current-time-string | ||
| 1528 | (seconds-to-time | ||
| 1529 | (string-to-number (cadddr args)))))) | ||
| 1530 | (rcirc-print process sender "TOPIC" (cadr args) | ||
| 1531 | (format "%s (%s on %s)" rcirc-topic setter time))))) | ||
| 1532 | |||
| 1533 | (defun rcirc-handler-477 (process sender args text) | ||
| 1534 | "ERR_NOCHANMODES" | ||
| 1535 | (rcirc-print process sender "477" (cadr args) (caddr args))) | ||
| 1536 | |||
| 1537 | (defun rcirc-handler-MODE (process sender args text) | ||
| 1538 | (let ((target (car args)) | ||
| 1539 | (msg (mapconcat 'identity (cdr args) " "))) | ||
| 1540 | (rcirc-print process sender "MODE" | ||
| 1541 | (if (string= target (rcirc-nick process)) | ||
| 1542 | nil | ||
| 1543 | target) | ||
| 1544 | msg) | ||
| 1545 | |||
| 1546 | ;; print in private chat buffers if they exist | ||
| 1547 | (mapc (lambda (nick) | ||
| 1548 | (when (not (eq (process-buffer rcirc-process) | ||
| 1549 | (rcirc-get-buffer rcirc-process nick))) | ||
| 1550 | (rcirc-print process sender "MODE" nick msg))) | ||
| 1551 | (cddr args)))) | ||
| 1552 | |||
| 1553 | (defun rcirc-get-temp-buffer-create (process channel) | ||
| 1554 | "Return a buffer based on PROCESS and CHANNEL." | ||
| 1555 | (let ((tmpnam (concat " " (downcase channel) "TMP" (process-name process)))) | ||
| 1556 | (get-buffer-create tmpnam))) | ||
| 1557 | |||
| 1558 | (defun rcirc-handler-353 (process sender args text) | ||
| 1559 | "RPL_NAMREPLY" | ||
| 1560 | (let ((channel (downcase (caddr args)))) | ||
| 1561 | (mapc (lambda (nick) | ||
| 1562 | (rcirc-put-nick-channel process nick channel)) | ||
| 1563 | (delete "" (split-string (cadddr args) " "))) | ||
| 1564 | (with-current-buffer (rcirc-get-temp-buffer-create process channel) | ||
| 1565 | (goto-char (point-max)) | ||
| 1566 | (insert (car (last args)) " ")))) | ||
| 1567 | |||
| 1568 | (defun rcirc-handler-366 (process sender args text) | ||
| 1569 | "RPL_ENDOFNAMES" | ||
| 1570 | (let* ((channel (cadr args)) | ||
| 1571 | (buffer (rcirc-get-temp-buffer-create process channel))) | ||
| 1572 | (with-current-buffer buffer | ||
| 1573 | (rcirc-print process sender "NAMES" channel | ||
| 1574 | (buffer-substring (point-min) (point-max)))) | ||
| 1575 | (kill-buffer buffer))) | ||
| 1576 | |||
| 1577 | (defun rcirc-handler-433 (process sender args text) | ||
| 1578 | "ERR_NICKNAMEINUSE" | ||
| 1579 | (rcirc-handler-generic process "433" sender args text) | ||
| 1580 | (let* ((new-nick (concat (cadr args) "`"))) | ||
| 1581 | (with-current-buffer (process-buffer process) | ||
| 1582 | (rcirc-cmd-nick new-nick nil process)))) | ||
| 1583 | |||
| 1584 | (defun rcirc-authenticate () | ||
| 1585 | "Send authentication to process associated with current buffer. | ||
| 1586 | Passwords are read from `rcirc-authinfo-file-name' (which see)." | ||
| 1587 | (interactive) | ||
| 1588 | (let ((password-alist | ||
| 1589 | (with-temp-buffer | ||
| 1590 | (insert-file-contents-literally rcirc-authinfo-file-name) | ||
| 1591 | (goto-char (point-min)) | ||
| 1592 | (read (current-buffer))))) | ||
| 1593 | (with-current-buffer (process-buffer rcirc-process) | ||
| 1594 | (dolist (i password-alist) | ||
| 1595 | (let ((server (car i)) | ||
| 1596 | (nick (cadr i)) | ||
| 1597 | (method (caddr i)) | ||
| 1598 | (args (cdddr i))) | ||
| 1599 | (when (and (string-match server rcirc-server) | ||
| 1600 | (string-match nick rcirc-nick)) | ||
| 1601 | (cond ((equal method 'nickserv) | ||
| 1602 | (rcirc-send-string | ||
| 1603 | rcirc-process | ||
| 1604 | (concat | ||
| 1605 | "PRIVMSG nickserv :identify " | ||
| 1606 | (car args)))) | ||
| 1607 | ((equal method 'chanserv) | ||
| 1608 | (rcirc-send-string | ||
| 1609 | rcirc-process | ||
| 1610 | (concat | ||
| 1611 | "PRIVMSG chanserv :identify " | ||
| 1612 | (car args) " " (cadr args)))) | ||
| 1613 | ((equal method 'bitlbee) | ||
| 1614 | (rcirc-send-string | ||
| 1615 | rcirc-process | ||
| 1616 | (concat "PRIVMSG #bitlbee :identify " (car args)))) | ||
| 1617 | (t | ||
| 1618 | (message "No %S authentication method defined" | ||
| 1619 | method))))))))) | ||
| 1620 | |||
| 1621 | (defun rcirc-handler-INVITE (process sender args text) | ||
| 1622 | (rcirc-print process sender "INVITE" nil (mapconcat 'identity args " ") t)) | ||
| 1623 | |||
| 1624 | (defun rcirc-handler-ERROR (process sender args text) | ||
| 1625 | (rcirc-print process sender "ERROR" nil (mapconcat 'identity args " "))) | ||
| 1626 | |||
| 1627 | (defun rcirc-handler-CTCP (process target sender text) | ||
| 1628 | (if (string-match "^\\([^ ]+\\) *\\(.*\\)$" text) | ||
| 1629 | (let* ((request (upcase (match-string 1 text))) | ||
| 1630 | (args (match-string 2 text)) | ||
| 1631 | (nick (rcirc-user-nick sender)) | ||
| 1632 | (handler (intern-soft (concat "rcirc-handler-ctcp-" request)))) | ||
| 1633 | (if (not (fboundp handler)) | ||
| 1634 | (rcirc-print process sender "ERROR" target | ||
| 1635 | (format "unhandled ctcp: %s" text)) | ||
| 1636 | (funcall handler process target sender args) | ||
| 1637 | (if (not (string= request "ACTION")) | ||
| 1638 | (rcirc-print process sender "CTCP" target | ||
| 1639 | (format "%s" text))))))) | ||
| 1640 | |||
| 1641 | (defun rcirc-handler-ctcp-VERSION (process target sender args) | ||
| 1642 | (rcirc-send-string process | ||
| 1643 | (concat "NOTICE " (rcirc-user-nick sender) | ||
| 1644 | " :\C-aVERSION " (rcirc-version) | ||
| 1645 | " - http://www.nongnu.org/rcirc" | ||
| 1646 | "\C-a"))) | ||
| 1647 | |||
| 1648 | (defun rcirc-handler-ctcp-ACTION (process target sender args) | ||
| 1649 | (rcirc-print process sender "ACTION" target args t)) | ||
| 1650 | |||
| 1651 | (defun rcirc-handler-ctcp-TIME (process target sender args) | ||
| 1652 | (rcirc-send-string process | ||
| 1653 | (concat "NOTICE " (rcirc-user-nick sender) | ||
| 1654 | " :\C-aTIME " (current-time-string) "\C-a"))) | ||
| 1655 | |||
| 1656 | (defface rcirc-my-nick-face | ||
| 1657 | '((((type tty) (class color)) (:foreground "blue" :weight bold)) | ||
| 1658 | (((class color) (background light)) (:foreground "Blue")) | ||
| 1659 | (((class color) (background dark)) (:foreground "LightSkyBlue")) | ||
| 1660 | (t (:inverse-video t :bold t))) | ||
| 1661 | "The rcirc face used to highlight my messages." | ||
| 1662 | :group 'rcirc) | ||
| 1663 | |||
| 1664 | (defface rcirc-other-nick-face | ||
| 1665 | '((((type tty) (class color)) (:foreground "yellow" :weight light)) | ||
| 1666 | (((class grayscale) (background light)) | ||
| 1667 | (:foreground "Gray90" :bold t :italic t)) | ||
| 1668 | (((class grayscale) (background dark)) | ||
| 1669 | (:foreground "DimGray" :bold t :italic t)) | ||
| 1670 | (((class color) (background light)) (:foreground "DarkGoldenrod")) | ||
| 1671 | (((class color) (background dark)) (:foreground "LightGoldenrod")) | ||
| 1672 | (t (:bold t :italic t))) | ||
| 1673 | "The rcirc face used to highlight other messages." | ||
| 1674 | :group 'rcirc) | ||
| 1675 | |||
| 1676 | (defface rcirc-server-face | ||
| 1677 | '((((type tty pc) (class color) (background light)) (:foreground "red")) | ||
| 1678 | (((type tty pc) (class color) (background dark)) (:foreground "red1")) | ||
| 1679 | (((class grayscale) (background light)) | ||
| 1680 | (:foreground "DimGray" :bold t :italic t)) | ||
| 1681 | (((class grayscale) (background dark)) | ||
| 1682 | (:foreground "LightGray" :bold t :italic t)) | ||
| 1683 | (((class color) (background light)) (:foreground "gray40")) | ||
| 1684 | (((class color) (background dark)) (:foreground "chocolate1")) | ||
| 1685 | (t (:bold t :italic t))) | ||
| 1686 | "The rcirc face used to highlight server messages." | ||
| 1687 | :group 'rcirc) | ||
| 1688 | |||
| 1689 | (defface rcirc-nick-in-message-face | ||
| 1690 | '((((type tty) (class color)) (:foreground "cyan" :weight bold)) | ||
| 1691 | (((class grayscale) (background light)) (:foreground "LightGray" :bold t)) | ||
| 1692 | (((class grayscale) (background dark)) (:foreground "DimGray" :bold t)) | ||
| 1693 | (((class color) (background light)) (:foreground "Purple")) | ||
| 1694 | (((class color) (background dark)) (:foreground "Cyan")) | ||
| 1695 | (t (:bold t))) | ||
| 1696 | "The rcirc face used to highlight instances of nick within messages." | ||
| 1697 | :group 'rcirc) | ||
| 1698 | |||
| 1699 | (defface rcirc-prompt-face | ||
| 1700 | '((((background dark)) (:foreground "cyan")) | ||
| 1701 | (t (:foreground "dark blue"))) | ||
| 1702 | "The rcirc face to use to highlight prompts." | ||
| 1703 | :group 'rcirc) | ||
| 1704 | |||
| 1705 | (defface rcirc-mode-line-nick-face | ||
| 1706 | '((t (:bold t))) | ||
| 1707 | "The rcirc face used indicate activity directed at you." | ||
| 1708 | :group 'rcirc) | ||
| 1709 | |||
| 1710 | ;; When using M-x flyspell-mode, only check words past the input marker | ||
| 1711 | (put 'rcirc-mode 'flyspell-mode-predicate 'rcirc-looking-at-input) | ||
| 1712 | (defun rcirc-looking-at-input () | ||
| 1713 | "Returns true if point is past the input marker." | ||
| 1714 | (>= (point) rcirc-prompt-end-marker)) | ||
| 1715 | |||
| 1716 | |||
| 1717 | (provide 'rcirc) | ||
| 1718 | |||
| 1719 | ;; arch-tag: b471b7e8-6b5a-4399-b2c6-a3c78dfc8ffb | ||
| 1720 | ;;; rcirc.el ends here | ||
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index ac2cc23048a..d9f4698ecf7 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el | |||
| @@ -274,6 +274,14 @@ One argument, the tag info returned by `snarf-tag-function'.") | |||
| 274 | (run-hook-with-args-until-success 'tags-table-format-functions)) | 274 | (run-hook-with-args-until-success 'tags-table-format-functions)) |
| 275 | 275 | ||
| 276 | ;;;###autoload | 276 | ;;;###autoload |
| 277 | (defun tags-table-mode () | ||
| 278 | "Major mode for tags table file buffers." | ||
| 279 | (interactive) | ||
| 280 | (setq major-mode 'tags-table-mode) | ||
| 281 | (setq mode-name "Tags Table") | ||
| 282 | (initialize-new-tags-table)) | ||
| 283 | |||
| 284 | ;;;###autoload | ||
| 277 | (defun visit-tags-table (file &optional local) | 285 | (defun visit-tags-table (file &optional local) |
| 278 | "Tell tags commands to use tags table file FILE. | 286 | "Tell tags commands to use tags table file FILE. |
| 279 | FILE should be the name of a file created with the `etags' program. | 287 | FILE should be the name of a file created with the `etags' program. |
| @@ -415,7 +423,7 @@ Returns non-nil iff it is a valid table." | |||
| 415 | ;; having changed since we last used it. | 423 | ;; having changed since we last used it. |
| 416 | (let (win) | 424 | (let (win) |
| 417 | (set-buffer (get-file-buffer file)) | 425 | (set-buffer (get-file-buffer file)) |
| 418 | (setq win (or verify-tags-table-function (initialize-new-tags-table))) | 426 | (setq win (or verify-tags-table-function (tags-table-mode))) |
| 419 | (if (or (verify-visited-file-modtime (current-buffer)) | 427 | (if (or (verify-visited-file-modtime (current-buffer)) |
| 420 | ;; Decide whether to revert the file. | 428 | ;; Decide whether to revert the file. |
| 421 | ;; revert-without-query can say to revert | 429 | ;; revert-without-query can say to revert |
| @@ -434,7 +442,7 @@ Returns non-nil iff it is a valid table." | |||
| 434 | (and verify-tags-table-function | 442 | (and verify-tags-table-function |
| 435 | (funcall verify-tags-table-function)) | 443 | (funcall verify-tags-table-function)) |
| 436 | (revert-buffer t t) | 444 | (revert-buffer t t) |
| 437 | (initialize-new-tags-table))) | 445 | (tags-table-mode))) |
| 438 | (and (file-exists-p file) | 446 | (and (file-exists-p file) |
| 439 | (progn | 447 | (progn |
| 440 | (set-buffer (find-file-noselect file)) | 448 | (set-buffer (find-file-noselect file)) |
| @@ -446,7 +454,7 @@ Returns non-nil iff it is a valid table." | |||
| 446 | (setcar tail buffer-file-name)) | 454 | (setcar tail buffer-file-name)) |
| 447 | (if (eq file tags-file-name) | 455 | (if (eq file tags-file-name) |
| 448 | (setq tags-file-name buffer-file-name)))) | 456 | (setq tags-file-name buffer-file-name)))) |
| 449 | (initialize-new-tags-table))))) | 457 | (tags-table-mode))))) |
| 450 | 458 | ||
| 451 | ;; Subroutine of visit-tags-table-buffer. Search the current tags tables | 459 | ;; Subroutine of visit-tags-table-buffer. Search the current tags tables |
| 452 | ;; for one that has tags for THIS-FILE (or that includes a table that | 460 | ;; for one that has tags for THIS-FILE (or that includes a table that |
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index b8c425428b5..2c4543a72fc 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el | |||
| @@ -869,7 +869,15 @@ See `sh-feature'.") | |||
| 869 | (defconst sh-st-symbol (string-to-syntax "_")) | 869 | (defconst sh-st-symbol (string-to-syntax "_")) |
| 870 | (defconst sh-here-doc-syntax (string-to-syntax "|")) ;; generic string | 870 | (defconst sh-here-doc-syntax (string-to-syntax "|")) ;; generic string |
| 871 | 871 | ||
| 872 | (defconst sh-here-doc-open-re "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\)+\\).*\\(\n\\)") | 872 | (defconst sh-escaped-line-re |
| 873 | ;; Should match until the real end-of-continued line, but if that is not | ||
| 874 | ;; possible (because we bump into EOB or the search bound), then we should | ||
| 875 | ;; match until the search bound. | ||
| 876 | "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*") | ||
| 877 | |||
| 878 | (defconst sh-here-doc-open-re | ||
| 879 | (concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\)+\\)" | ||
| 880 | sh-escaped-line-re "\\(\n\\)")) | ||
| 873 | 881 | ||
| 874 | (defvar sh-here-doc-markers nil) | 882 | (defvar sh-here-doc-markers nil) |
| 875 | (make-variable-buffer-local 'sh-here-doc-markers) | 883 | (make-variable-buffer-local 'sh-here-doc-markers) |
| @@ -883,7 +891,9 @@ If non-nil INDENTED indicates that the EOF was indented." | |||
| 883 | ;; A rough regexp that should find the opening <<EOF back. | 891 | ;; A rough regexp that should find the opening <<EOF back. |
| 884 | (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" | 892 | (sre (concat "<<\\(-?\\)\\s-*['\"\\]?" |
| 885 | ;; Use \s| to cheaply check it's an open-heredoc. | 893 | ;; Use \s| to cheaply check it's an open-heredoc. |
| 886 | eof-re "['\"]?\\([ \t|;&)<>].*\\)?\\s|")) | 894 | eof-re "['\"]?\\([ \t|;&)<>]" |
| 895 | sh-escaped-line-re | ||
| 896 | "\\)?\\s|")) | ||
| 887 | ;; A regexp that will find other EOFs. | 897 | ;; A regexp that will find other EOFs. |
| 888 | (ere (concat "^" (if indented "[ \t]*") eof-re "\n")) | 898 | (ere (concat "^" (if indented "[ \t]*") eof-re "\n")) |
| 889 | (start (save-excursion | 899 | (start (save-excursion |
| @@ -922,7 +932,8 @@ If non-nil INDENTED indicates that the EOF was indented." | |||
| 922 | START is the position of <<. | 932 | START is the position of <<. |
| 923 | STRING is the actual word used as delimiter (f.ex. \"EOF\"). | 933 | STRING is the actual word used as delimiter (f.ex. \"EOF\"). |
| 924 | INDENTED is non-nil if the here document's content (and the EOF mark) can | 934 | INDENTED is non-nil if the here document's content (and the EOF mark) can |
| 925 | be indented (i.e. a <<- was used rather than just <<)." | 935 | be indented (i.e. a <<- was used rather than just <<). |
| 936 | Point is at the beginning of the next line." | ||
| 926 | (unless (or (memq (char-before start) '(?< ?>)) | 937 | (unless (or (memq (char-before start) '(?< ?>)) |
| 927 | (sh-in-comment-or-string start)) | 938 | (sh-in-comment-or-string start)) |
| 928 | ;; We're looking at <<STRING, so we add "^STRING$" to the syntactic | 939 | ;; We're looking at <<STRING, so we add "^STRING$" to the syntactic |
| @@ -933,6 +944,20 @@ be indented (i.e. a <<- was used rather than just <<)." | |||
| 933 | (setq sh-here-doc-re | 944 | (setq sh-here-doc-re |
| 934 | (concat sh-here-doc-open-re "\\|^\\([ \t]*\\)" | 945 | (concat sh-here-doc-open-re "\\|^\\([ \t]*\\)" |
| 935 | (regexp-opt sh-here-doc-markers t) "\\(\n\\)")))) | 946 | (regexp-opt sh-here-doc-markers t) "\\(\n\\)")))) |
| 947 | (let ((ppss (save-excursion (syntax-ppss (1- (point)))))) | ||
| 948 | (if (nth 4 ppss) | ||
| 949 | ;; The \n not only starts the heredoc but also closes a comment. | ||
| 950 | ;; Let's close the comment just before the \n. | ||
| 951 | (put-text-property (1- (point)) (point) 'syntax-table '(12))) ;">" | ||
| 952 | (if (or (nth 5 ppss) (> (count-lines start (point)) 1)) | ||
| 953 | ;; If the sh-escaped-line-re part of sh-here-doc-re has matched | ||
| 954 | ;; several lines, make sure we refontify them together. | ||
| 955 | ;; Furthermore, if (nth 5 ppss) is non-nil (i.e. the \n is | ||
| 956 | ;; escaped), it means the right \n is actually further down. | ||
| 957 | ;; Don't bother fixing it now, but place a multiline property so | ||
| 958 | ;; that when jit-lock-context-* refontifies the rest of the | ||
| 959 | ;; buffer, it also refontifies the current line with it. | ||
| 960 | (put-text-property start (point) 'font-lock-multiline t))) | ||
| 936 | sh-here-doc-syntax)) | 961 | sh-here-doc-syntax)) |
| 937 | 962 | ||
| 938 | (defun sh-font-lock-here-doc (limit) | 963 | (defun sh-font-lock-here-doc (limit) |
| @@ -972,6 +997,8 @@ be indented (i.e. a <<- was used rather than just <<)." | |||
| 972 | ;; The list of special chars is taken from the single-unix spec | 997 | ;; The list of special chars is taken from the single-unix spec |
| 973 | ;; of the shell command language (under `quoting') but with `$' removed. | 998 | ;; of the shell command language (under `quoting') but with `$' removed. |
| 974 | `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) | 999 | `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) |
| 1000 | ;; Make sure $@ and @? are correctly recognized as sexps. | ||
| 1001 | ("\\$\\([?@]\\)" 1 ,sh-st-symbol) | ||
| 975 | ;; Find HEREDOC starters and add a corresponding rule for the ender. | 1002 | ;; Find HEREDOC starters and add a corresponding rule for the ender. |
| 976 | (sh-font-lock-here-doc | 1003 | (sh-font-lock-here-doc |
| 977 | (2 (sh-font-lock-open-heredoc | 1004 | (2 (sh-font-lock-open-heredoc |
diff --git a/lisp/replace.el b/lisp/replace.el index e2562ed3469..2d79754b4f0 100644 --- a/lisp/replace.el +++ b/lisp/replace.el | |||
| @@ -1157,7 +1157,8 @@ See also `multi-occur'." | |||
| 1157 | (insert "-------\n")) | 1157 | (insert "-------\n")) |
| 1158 | (add-text-properties | 1158 | (add-text-properties |
| 1159 | beg end | 1159 | beg end |
| 1160 | `(occur-target ,marker help-echo "mouse-2: go to this occurrence"))))) | 1160 | `(occur-target ,marker follow-link t |
| 1161 | help-echo "mouse-2: go to this occurrence"))))) | ||
| 1161 | (goto-char endpt)) | 1162 | (goto-char endpt)) |
| 1162 | (if endpt | 1163 | (if endpt |
| 1163 | (progn | 1164 | (progn |
diff --git a/lisp/savehist.el b/lisp/savehist.el index de0f1504ff8..efbc1e934a6 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el | |||
| @@ -138,7 +138,12 @@ the user's privacy." | |||
| 138 | :type 'integer | 138 | :type 'integer |
| 139 | :group 'savehist) | 139 | :group 'savehist) |
| 140 | 140 | ||
| 141 | (defvar savehist-coding-system (if (coding-system-p 'utf-8) 'utf-8 'iso-2022-8) | 141 | (defvar savehist-coding-system |
| 142 | ;; UTF-8 is usually preferable to ISO-2022-8 when available, but under | ||
| 143 | ;; XEmacs, UTF-8 is provided by external packages, and may not always be | ||
| 144 | ;; available, so even if it currently is available, we prefer not to | ||
| 145 | ;; use is. | ||
| 146 | (if (featurep 'xemacs) 'iso-2022-8 'utf-8) | ||
| 142 | "The coding system savehist uses for saving the minibuffer history. | 147 | "The coding system savehist uses for saving the minibuffer history. |
| 143 | Changing this value while Emacs is running is supported, but considered | 148 | Changing this value while Emacs is running is supported, but considered |
| 144 | unwise, unless you know what you are doing.") | 149 | unwise, unless you know what you are doing.") |
diff --git a/lisp/simple.el b/lisp/simple.el index be5844fa794..16b6ee28953 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -4576,10 +4576,10 @@ in the definition is used to check that VALUE is valid. | |||
| 4576 | With a prefix argument, set VARIABLE to VALUE buffer-locally." | 4576 | With a prefix argument, set VARIABLE to VALUE buffer-locally." |
| 4577 | (interactive | 4577 | (interactive |
| 4578 | (let* ((default-var (variable-at-point)) | 4578 | (let* ((default-var (variable-at-point)) |
| 4579 | (var (if (symbolp default-var) | 4579 | (var (if (user-variable-p default-var) |
| 4580 | (read-variable (format "Set variable (default %s): " default-var) | 4580 | (read-variable (format "Set variable (default %s): " default-var) |
| 4581 | default-var) | 4581 | default-var) |
| 4582 | (read-variable "Set variable: "))) | 4582 | (read-variable "Set variable: "))) |
| 4583 | (minibuffer-help-form '(describe-variable var)) | 4583 | (minibuffer-help-form '(describe-variable var)) |
| 4584 | (prop (get var 'variable-interactive)) | 4584 | (prop (get var 'variable-interactive)) |
| 4585 | (obsolete (car (get var 'byte-obsolete-variable))) | 4585 | (obsolete (car (get var 'byte-obsolete-variable))) |
| @@ -4604,7 +4604,8 @@ With a prefix argument, set VARIABLE to VALUE buffer-locally." | |||
| 4604 | arg)) | 4604 | arg)) |
| 4605 | (read | 4605 | (read |
| 4606 | (read-string prompt nil | 4606 | (read-string prompt nil |
| 4607 | 'set-variable-value-history)))))) | 4607 | 'set-variable-value-history |
| 4608 | (format "%S" (symbol-value var)))))))) | ||
| 4608 | (list var val current-prefix-arg))) | 4609 | (list var val current-prefix-arg))) |
| 4609 | 4610 | ||
| 4610 | (and (custom-variable-p variable) | 4611 | (and (custom-variable-p variable) |
diff --git a/lisp/startup.el b/lisp/startup.el index c7bd6b323e9..f474c692240 100644 --- a/lisp/startup.el +++ b/lisp/startup.el | |||
| @@ -647,6 +647,17 @@ opening the first frame (e.g. open a connection to an X server).") | |||
| 647 | 647 | ||
| 648 | (set-locale-environment nil) | 648 | (set-locale-environment nil) |
| 649 | 649 | ||
| 650 | ;; Convert preloaded file names to absolute. | ||
| 651 | (setq load-history | ||
| 652 | (mapcar (lambda (elt) | ||
| 653 | (if (and (stringp (car elt)) | ||
| 654 | (not (file-name-absolute-p (car elt)))) | ||
| 655 | (cons (locate-file (car elt) load-path | ||
| 656 | load-suffixes) | ||
| 657 | (cdr elt)) | ||
| 658 | elt)) | ||
| 659 | load-history)) | ||
| 660 | |||
| 650 | ;; Convert the arguments to Emacs internal representation. | 661 | ;; Convert the arguments to Emacs internal representation. |
| 651 | (let ((args (cdr command-line-args))) | 662 | (let ((args (cdr command-line-args))) |
| 652 | (while args | 663 | (while args |
diff --git a/lisp/subr.el b/lisp/subr.el index 87d58799dc7..48ac3c7e672 100644 --- a/lisp/subr.el +++ b/lisp/subr.el | |||
| @@ -1017,9 +1017,7 @@ The return value is the new value of LIST-VAR." | |||
| 1017 | 1017 | ||
| 1018 | (defun symbol-file (symbol &optional type) | 1018 | (defun symbol-file (symbol &optional type) |
| 1019 | "Return the input source in which SYMBOL was defined. | 1019 | "Return the input source in which SYMBOL was defined. |
| 1020 | The value is normally a string that was passed to `load': | 1020 | The value is an absolute file name. |
| 1021 | either an absolute file name, or a library name | ||
| 1022 | \(with no directory name and no `.el' or `.elc' at the end). | ||
| 1023 | It can also be nil, if the definition is not associated with any file. | 1021 | It can also be nil, if the definition is not associated with any file. |
| 1024 | 1022 | ||
| 1025 | If TYPE is nil, then any kind of definition is acceptable. | 1023 | If TYPE is nil, then any kind of definition is acceptable. |
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 4362e97af0b..0e57d541dfe 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el | |||
| @@ -735,7 +735,9 @@ appear on disk when you save the tar-file's buffer." | |||
| 735 | (and set-auto-coding-function | 735 | (and set-auto-coding-function |
| 736 | (save-excursion | 736 | (save-excursion |
| 737 | (funcall set-auto-coding-function | 737 | (funcall set-auto-coding-function |
| 738 | name (- (point-max) (point))))))) | 738 | name (- (point-max) (point))))) |
| 739 | (car (find-operation-coding-system | ||
| 740 | 'insert-file-contents name t)))) | ||
| 739 | (multibyte enable-multibyte-characters) | 741 | (multibyte enable-multibyte-characters) |
| 740 | (detected (detect-coding-region | 742 | (detected (detect-coding-region |
| 741 | (point-min) | 743 | (point-min) |
| @@ -747,13 +749,7 @@ appear on disk when you save the tar-file's buffer." | |||
| 747 | coding | 749 | coding |
| 748 | (coding-system-eol-type detected)))) | 750 | (coding-system-eol-type detected)))) |
| 749 | (setq coding | 751 | (setq coding |
| 750 | (or (find-new-buffer-file-coding-system detected) | 752 | (find-new-buffer-file-coding-system detected))) |
| 751 | (let ((file-coding | ||
| 752 | (find-operation-coding-system | ||
| 753 | 'insert-file-contents buffer-file-name))) | ||
| 754 | (if (consp file-coding) | ||
| 755 | (setq file-coding (car file-coding)) | ||
| 756 | file-coding))))) | ||
| 757 | (if (or (eq coding 'no-conversion) | 753 | (if (or (eq coding 'no-conversion) |
| 758 | (eq (coding-system-type coding) 5)) | 754 | (eq (coding-system-type coding) 5)) |
| 759 | (setq multibyte (set-buffer-multibyte nil))) | 755 | (setq multibyte (set-buffer-multibyte nil))) |
diff --git a/lisp/term.el b/lisp/term.el index 9d6ee5a4e93..471d7830de0 100644 --- a/lisp/term.el +++ b/lisp/term.el | |||
| @@ -1393,7 +1393,7 @@ The main purpose is to get rid of the local keymap." | |||
| 1393 | 1393 | ||
| 1394 | ;;; Name to use for TERM. | 1394 | ;;; Name to use for TERM. |
| 1395 | ;;; Using "emacs" loses, because bash disables editing if TERM == emacs. | 1395 | ;;; Using "emacs" loses, because bash disables editing if TERM == emacs. |
| 1396 | (defvar term-term-name "eterm") | 1396 | (defvar term-term-name "eterm-color") |
| 1397 | ; Format string, usage: | 1397 | ; Format string, usage: |
| 1398 | ; (format term-termcap-string emacs-term-name "TERMCAP=" 24 80) | 1398 | ; (format term-termcap-string emacs-term-name "TERMCAP=" 24 80) |
| 1399 | (defvar term-termcap-format | 1399 | (defvar term-termcap-format |
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index 11ddfc0e967..ce95c6f026f 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el | |||
| @@ -344,13 +344,14 @@ and `fill-nobreak-invisible'." | |||
| 344 | ;; it at the end of the line. | 344 | ;; it at the end of the line. |
| 345 | (and sentence-end-double-space | 345 | (and sentence-end-double-space |
| 346 | (save-excursion | 346 | (save-excursion |
| 347 | (skip-chars-backward ". ") | 347 | (skip-chars-backward " ") |
| 348 | (looking-at "\\. \\([^ ]\\|$\\)"))) | 348 | (and (eq (preceding-char) ?.) |
| 349 | (looking-at " \\([^ ]\\|$\\)")))) | ||
| 349 | ;; Another approach to the same problem. | 350 | ;; Another approach to the same problem. |
| 350 | (save-excursion | 351 | (save-excursion |
| 351 | (skip-chars-backward ". ") | 352 | (skip-chars-backward " ") |
| 352 | (and (looking-at "\\.") | 353 | (and (eq (preceding-char) ?.) |
| 353 | (not (looking-at (sentence-end))))) | 354 | (not (progn (forward-char -1) (looking-at (sentence-end)))))) |
| 354 | ;; Don't split a line if the rest would look like a new paragraph. | 355 | ;; Don't split a line if the rest would look like a new paragraph. |
| 355 | (unless use-hard-newlines | 356 | (unless use-hard-newlines |
| 356 | (save-excursion | 357 | (save-excursion |
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el index 7f0d257e5f6..a84f2be28ae 100644 --- a/lisp/textmodes/org.el +++ b/lisp/textmodes/org.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Carsten Dominik <dominik at science dot uva dot nl> | 5 | ;; Author: Carsten Dominik <dominik at science dot uva dot nl> |
| 6 | ;; Keywords: outlines, hypermedia, calendar | 6 | ;; Keywords: outlines, hypermedia, calendar |
| 7 | ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ | 7 | ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ |
| 8 | ;; Version: 3.17 | 8 | ;; Version: 3.18 |
| 9 | ;; | 9 | ;; |
| 10 | ;; This file is part of GNU Emacs. | 10 | ;; This file is part of GNU Emacs. |
| 11 | ;; | 11 | ;; |
| @@ -80,6 +80,10 @@ | |||
| 80 | ;; | 80 | ;; |
| 81 | ;; Changes: | 81 | ;; Changes: |
| 82 | ;; ------- | 82 | ;; ------- |
| 83 | ;; Version 3.18 | ||
| 84 | ;; - Export of calendar information in the standard iCalendar format. | ||
| 85 | ;; - Some bug fixes. | ||
| 86 | ;; | ||
| 83 | ;; Version 3.17 | 87 | ;; Version 3.17 |
| 84 | ;; - HTML export specifies character set depending on coding-system. | 88 | ;; - HTML export specifies character set depending on coding-system. |
| 85 | ;; | 89 | ;; |
| @@ -213,7 +217,7 @@ | |||
| 213 | 217 | ||
| 214 | ;;; Customization variables | 218 | ;;; Customization variables |
| 215 | 219 | ||
| 216 | (defvar org-version "3.17" | 220 | (defvar org-version "3.18" |
| 217 | "The version number of the file org.el.") | 221 | "The version number of the file org.el.") |
| 218 | (defun org-version () | 222 | (defun org-version () |
| 219 | (interactive) | 223 | (interactive) |
| @@ -777,7 +781,7 @@ as possible." | |||
| 777 | (defcustom org-level-color-stars-only nil | 781 | (defcustom org-level-color-stars-only nil |
| 778 | "Non-nil means fontify only the stars in each headline. | 782 | "Non-nil means fontify only the stars in each headline. |
| 779 | When nil, the entire headline is fontified. | 783 | When nil, the entire headline is fontified. |
| 780 | After changin this, requires restart of Emacs to become effective." | 784 | After changing this, requires restart of Emacs to become effective." |
| 781 | :group 'org-structure | 785 | :group 'org-structure |
| 782 | :type 'boolean) | 786 | :type 'boolean) |
| 783 | 787 | ||
| @@ -1490,6 +1494,23 @@ Otherwise, the buffer will just be saved to a file and stay hidden." | |||
| 1490 | :group 'org-export | 1494 | :group 'org-export |
| 1491 | :type 'boolean) | 1495 | :type 'boolean) |
| 1492 | 1496 | ||
| 1497 | (defcustom org-combined-agenda-icalendar-file "~/org.ics" | ||
| 1498 | "The file name for the iCalendar file covering all agenda files. | ||
| 1499 | This file is created with the command \\[org-export-icalendar-all-agenda-files]." | ||
| 1500 | :group 'org-export | ||
| 1501 | :type 'file) | ||
| 1502 | |||
| 1503 | (defcustom org-icalendar-include-todo nil | ||
| 1504 | "Non-nil means, export to iCalendar files should also cover TODO items." | ||
| 1505 | :group 'org-export | ||
| 1506 | :type 'boolean) | ||
| 1507 | |||
| 1508 | ;; FIXME: not yet used. | ||
| 1509 | (defcustom org-icalendar-combined-name "OrgMode" | ||
| 1510 | "Calendar name for the combined iCalendar representing all agenda files." | ||
| 1511 | :group 'org-export | ||
| 1512 | :type 'string) | ||
| 1513 | |||
| 1493 | (defgroup org-faces nil | 1514 | (defgroup org-faces nil |
| 1494 | "Faces for highlighting in Org-mode." | 1515 | "Faces for highlighting in Org-mode." |
| 1495 | :tag "Org Faces" | 1516 | :tag "Org Faces" |
| @@ -3179,7 +3200,8 @@ used to insert the time stamp into the buffer to include the time." | |||
| 3179 | ;; Copied (with modifications) from planner.el by John Wiegley | 3200 | ;; Copied (with modifications) from planner.el by John Wiegley |
| 3180 | (save-excursion | 3201 | (save-excursion |
| 3181 | (save-window-excursion | 3202 | (save-window-excursion |
| 3182 | (calendar) | 3203 | (let ((view-diary-entries-initially nil)) |
| 3204 | (calendar)) | ||
| 3183 | (calendar-forward-day (- (time-to-days default-time) | 3205 | (calendar-forward-day (- (time-to-days default-time) |
| 3184 | (calendar-absolute-from-gregorian | 3206 | (calendar-absolute-from-gregorian |
| 3185 | (calendar-current-date)))) | 3207 | (calendar-current-date)))) |
| @@ -3523,7 +3545,8 @@ A prefix ARG can be used force the current date." | |||
| 3523 | (d2 (time-to-days | 3545 | (d2 (time-to-days |
| 3524 | (org-time-string-to-time (match-string 1))))) | 3546 | (org-time-string-to-time (match-string 1))))) |
| 3525 | (setq diff (- d2 d1)))) | 3547 | (setq diff (- d2 d1)))) |
| 3526 | (calendar) | 3548 | (let ((view-diary-entries-initially nil)) |
| 3549 | (calendar)) | ||
| 3527 | (calendar-goto-today) | 3550 | (calendar-goto-today) |
| 3528 | (if (and diff (not arg)) (calendar-forward-day diff)))) | 3551 | (if (and diff (not arg)) (calendar-forward-day diff)))) |
| 3529 | 3552 | ||
| @@ -3628,7 +3651,7 @@ The following commands are available: | |||
| 3628 | (define-key org-agenda-mode-map [?\C-c ?\C-x (down)] 'org-agenda-priority-down) | 3651 | (define-key org-agenda-mode-map [?\C-c ?\C-x (down)] 'org-agenda-priority-down) |
| 3629 | (define-key org-agenda-mode-map [(right)] 'org-agenda-later) | 3652 | (define-key org-agenda-mode-map [(right)] 'org-agenda-later) |
| 3630 | (define-key org-agenda-mode-map [(left)] 'org-agenda-earlier) | 3653 | (define-key org-agenda-mode-map [(left)] 'org-agenda-earlier) |
| 3631 | 3654 | (define-key org-agenda-mode-map "\C-c\C-x\C-c" 'org-export-icalendar-combine-agenda-files) | |
| 3632 | (defvar org-agenda-keymap (copy-keymap org-agenda-mode-map) | 3655 | (defvar org-agenda-keymap (copy-keymap org-agenda-mode-map) |
| 3633 | "Local keymap for agenda entries from Org-mode.") | 3656 | "Local keymap for agenda entries from Org-mode.") |
| 3634 | 3657 | ||
| @@ -3681,6 +3704,7 @@ The following commands are available: | |||
| 3681 | ["Sunrise/Sunset" org-agenda-sunrise-sunset t] | 3704 | ["Sunrise/Sunset" org-agenda-sunrise-sunset t] |
| 3682 | ["Holidays" org-agenda-holidays t] | 3705 | ["Holidays" org-agenda-holidays t] |
| 3683 | ["Convert" org-agenda-convert-date t]) | 3706 | ["Convert" org-agenda-convert-date t]) |
| 3707 | ["Create iCalendar file" org-export-icalendar-combine-agenda-files t] | ||
| 3684 | "--" | 3708 | "--" |
| 3685 | ["Quit" org-agenda-quit t] | 3709 | ["Quit" org-agenda-quit t] |
| 3686 | ["Exit and Release Buffers" org-agenda-exit t] | 3710 | ["Exit and Release Buffers" org-agenda-exit t] |
| @@ -4253,6 +4277,9 @@ Optional argument FILE means, use this file instead of the current." | |||
| 4253 | 4277 | ||
| 4254 | (defun org-file-menu-entry (file) | 4278 | (defun org-file-menu-entry (file) |
| 4255 | (vector file (list 'find-file file) t)) | 4279 | (vector file (list 'find-file file) t)) |
| 4280 | ;; FIXME: Maybe removed a buffer visited through the menu from | ||
| 4281 | ;; org-agenda-new-buffers, so that the buffer will not be removed | ||
| 4282 | ;; when exiting the agenda???? | ||
| 4256 | 4283 | ||
| 4257 | (defun org-get-all-dates (beg end &optional no-ranges force-today) | 4284 | (defun org-get-all-dates (beg end &optional no-ranges force-today) |
| 4258 | "Return a list of all relevant day numbers from BEG to END buffer positions. | 4285 | "Return a list of all relevant day numbers from BEG to END buffer positions. |
| @@ -5222,7 +5249,8 @@ argument, latitude and longitude will be prompted for." | |||
| 5222 | (let* ((day (or (get-text-property (point) 'day) | 5249 | (let* ((day (or (get-text-property (point) 'day) |
| 5223 | (error "Don't know which date to open in calendar"))) | 5250 | (error "Don't know which date to open in calendar"))) |
| 5224 | (date (calendar-gregorian-from-absolute day))) | 5251 | (date (calendar-gregorian-from-absolute day))) |
| 5225 | (calendar) | 5252 | (let ((view-diary-entries-initially nil)) |
| 5253 | (calendar)) | ||
| 5226 | (calendar-goto-date date))) | 5254 | (calendar-goto-date date))) |
| 5227 | 5255 | ||
| 5228 | (defun org-calendar-goto-agenda () | 5256 | (defun org-calendar-goto-agenda () |
| @@ -8031,10 +8059,10 @@ to execute outside of tables." | |||
| 8031 | "--" | 8059 | "--" |
| 8032 | ["Insert Hline" org-table-insert-hline :active (org-at-table-p) :keys "C-c -"]) | 8060 | ["Insert Hline" org-table-insert-hline :active (org-at-table-p) :keys "C-c -"]) |
| 8033 | ("Rectangle" | 8061 | ("Rectangle" |
| 8034 | ["Copy Rectangle" org-copy-special :active (org-at-table-p) :keys "C-c C-x M-w"] | 8062 | ["Copy Rectangle" org-copy-special :active (org-at-table-p)] |
| 8035 | ["Cut Rectangle" org-cut-special :active (org-at-table-p) :keys "C-c C-x C-w"] | 8063 | ["Cut Rectangle" org-cut-special :active (org-at-table-p)] |
| 8036 | ["Paste Rectangle" org-paste-special :active (org-at-table-p) :keys "C-c C-x C-y"] | 8064 | ["Paste Rectangle" org-paste-special :active (org-at-table-p)] |
| 8037 | ["Fill Rectangle" org-table-wrap-region :active (org-at-table-p) :keys "C-c C-q"]) | 8065 | ["Fill Rectangle" org-table-wrap-region :active (org-at-table-p)]) |
| 8038 | "--" | 8066 | "--" |
| 8039 | ["Set Column Formula" org-table-eval-formula :active (org-at-table-p) :keys "C-c ="] | 8067 | ["Set Column Formula" org-table-eval-formula :active (org-at-table-p) :keys "C-c ="] |
| 8040 | ["Set Named Field Formula" (org-table-eval-formula '(4)) :active (org-at-table-p) :keys "C-u C-c ="] | 8068 | ["Set Named Field Formula" (org-table-eval-formula '(4)) :active (org-at-table-p) :keys "C-u C-c ="] |
| @@ -8834,6 +8862,8 @@ headlines. The default is 3. Lower levels will become bulleted lists." | |||
| 8834 | (coding-system (and (fboundp 'coding-system-get) | 8862 | (coding-system (and (fboundp 'coding-system-get) |
| 8835 | (boundp 'buffer-file-coding-system) | 8863 | (boundp 'buffer-file-coding-system) |
| 8836 | buffer-file-coding-system)) | 8864 | buffer-file-coding-system)) |
| 8865 | (coding-system-for-write (or coding-system coding-system-for-write)) | ||
| 8866 | (save-buffer-coding-system (or coding-system save-buffer-coding-system)) | ||
| 8837 | (charset (and coding-system | 8867 | (charset (and coding-system |
| 8838 | (coding-system-get coding-system 'mime-charset))) | 8868 | (coding-system-get coding-system 'mime-charset))) |
| 8839 | table-open type | 8869 | table-open type |
| @@ -9066,6 +9096,7 @@ headlines. The default is 3. Lower levels will become bulleted lists." | |||
| 9066 | (if org-export-html-with-timestamp | 9096 | (if org-export-html-with-timestamp |
| 9067 | (insert org-export-html-html-helper-timestamp)) | 9097 | (insert org-export-html-html-helper-timestamp)) |
| 9068 | (insert "</body>\n</html>\n") | 9098 | (insert "</body>\n</html>\n") |
| 9099 | (debug) | ||
| 9069 | (normal-mode) | 9100 | (normal-mode) |
| 9070 | (save-buffer) | 9101 | (save-buffer) |
| 9071 | (goto-char (point-min))))) | 9102 | (goto-char (point-min))))) |
| @@ -9409,6 +9440,172 @@ When LEVEL is non-nil, increase section numbers on that level." | |||
| 9409 | string)) | 9440 | string)) |
| 9410 | 9441 | ||
| 9411 | 9442 | ||
| 9443 | |||
| 9444 | |||
| 9445 | |||
| 9446 | (defun org-export-icalendar-this-file () | ||
| 9447 | "Export current file as an iCalendar file. | ||
| 9448 | The iCalendar file will be located in the same directory as the Org-mode | ||
| 9449 | file, but with extension `.ics'." | ||
| 9450 | (interactive) | ||
| 9451 | (org-export-icalendar nil (buffer-file-name))) | ||
| 9452 | |||
| 9453 | ;;;###autoload | ||
| 9454 | (defun org-export-icalendar-all-agenda-files () | ||
| 9455 | "Export all files in `org-agenda-files' to iCalendar .ics files. | ||
| 9456 | Each iCalendar file will be located in the same directory as the Org-mode | ||
| 9457 | file, but with extension `.ics'." | ||
| 9458 | (interactive) | ||
| 9459 | (apply 'org-export-icalendar nil org-agenda-files)) | ||
| 9460 | |||
| 9461 | ;;;###autoload | ||
| 9462 | (defun org-export-icalendar-combine-agenda-files () | ||
| 9463 | "Export all files in `org-agenda-files' to a single combined iCalendar file. | ||
| 9464 | The file is stored under the name `org-combined-agenda-icalendar-file'." | ||
| 9465 | (interactive) | ||
| 9466 | (apply 'org-export-icalendar t org-agenda-files)) | ||
| 9467 | |||
| 9468 | (defun org-export-icalendar (combine &rest files) | ||
| 9469 | "Create iCalendar files for all elements of FILES. | ||
| 9470 | If COMBINE is non-nil, combine all calendar entries into a single large | ||
| 9471 | file and store it under the name `org-combined-agenda-icalendar-file'." | ||
| 9472 | (save-excursion | ||
| 9473 | (let* (file ical-file ical-buffer category started org-agenda-new-buffers) | ||
| 9474 | (when combine | ||
| 9475 | (setq ical-file org-combined-agenda-icalendar-file | ||
| 9476 | ical-buffer (org-get-agenda-file-buffer ical-file)) | ||
| 9477 | (set-buffer ical-buffer) (erase-buffer)) | ||
| 9478 | (while (setq file (pop files)) | ||
| 9479 | (catch 'nextfile | ||
| 9480 | (org-check-agenda-file file) | ||
| 9481 | (unless combine | ||
| 9482 | (setq ical-file (concat (file-name-sans-extension file) ".ics")) | ||
| 9483 | (setq ical-buffer (org-get-agenda-file-buffer ical-file)) | ||
| 9484 | (set-buffer ical-buffer) (erase-buffer)) | ||
| 9485 | (set-buffer (org-get-agenda-file-buffer file)) | ||
| 9486 | (setq category (or org-category | ||
| 9487 | (file-name-sans-extension | ||
| 9488 | (file-name-nondirectory (buffer-file-name))))) | ||
| 9489 | (if (symbolp category) (setq category (symbol-name category))) | ||
| 9490 | (let ((standard-output ical-buffer)) | ||
| 9491 | (if combine | ||
| 9492 | (and (not started) (setq started t) | ||
| 9493 | (org-start-icalendar-file "OrgMode")) | ||
| 9494 | (org-start-icalendar-file category)) | ||
| 9495 | (org-print-icalendar-entries combine category) | ||
| 9496 | (when (or (and combine (not files)) (not combine)) | ||
| 9497 | (org-finish-icalendar-file) | ||
| 9498 | (set-buffer ical-buffer) | ||
| 9499 | (save-buffer) | ||
| 9500 | (run-hooks 'org-after-save-iCalendar-file-hook))))) | ||
| 9501 | (org-release-buffers org-agenda-new-buffers)))) | ||
| 9502 | |||
| 9503 | (defvar org-after-save-iCalendar-file-hook nil | ||
| 9504 | "Hook run after an iCalendar file has been saved. | ||
| 9505 | The iCalendar buffer is still current when this hook is run. | ||
| 9506 | A good way to use this is to tell a desktop calenndar application to re-read | ||
| 9507 | the iCalendar file.") | ||
| 9508 | |||
| 9509 | (defun org-print-icalendar-entries (&optional combine category) | ||
| 9510 | "Print iCalendar entries for the current Org-mode file to `standard-output'. | ||
| 9511 | When COMBINE is non nil, add the category to each line." | ||
| 9512 | (let ((re2 (concat "--?-?\\(" org-ts-regexp "\\)")) | ||
| 9513 | (dts (org-ical-ts-to-string | ||
| 9514 | (format-time-string (cdr org-time-stamp-formats) (current-time)) | ||
| 9515 | "DTSTART")) | ||
| 9516 | hd ts ts2 state (inc t) pos scheduledp deadlinep donep tmp pri) | ||
| 9517 | (save-excursion | ||
| 9518 | (goto-char (point-min)) | ||
| 9519 | (while (re-search-forward org-ts-regexp nil t) | ||
| 9520 | (setq pos (match-beginning 0) | ||
| 9521 | ts (match-string 0) | ||
| 9522 | inc t | ||
| 9523 | hd (org-get-heading)) | ||
| 9524 | (if (looking-at re2) | ||
| 9525 | (progn | ||
| 9526 | (goto-char (match-end 0)) | ||
| 9527 | (setq ts2 (match-string 1) inc nil)) | ||
| 9528 | (setq ts2 ts | ||
| 9529 | tmp (buffer-substring (max (point-min) | ||
| 9530 | (- pos org-ds-keyword-length)) | ||
| 9531 | pos) | ||
| 9532 | deadlinep (string-match org-deadline-regexp tmp) | ||
| 9533 | scheduledp (string-match org-scheduled-regexp tmp) | ||
| 9534 | donep (org-entry-is-done-p))) | ||
| 9535 | (if (or (string-match org-tr-regexp hd) | ||
| 9536 | (string-match org-ts-regexp hd)) | ||
| 9537 | (setq hd (replace-match "" t t hd))) | ||
| 9538 | (if combine | ||
| 9539 | (setq hd (concat hd " (category " category ")"))) | ||
| 9540 | (if deadlinep (setq hd (concat "DL: " hd " This is a deadline"))) | ||
| 9541 | (if scheduledp (setq hd (concat "S: " hd " Scheduled for this date"))) | ||
| 9542 | (princ (format "BEGIN:VEVENT | ||
| 9543 | %s | ||
| 9544 | %s | ||
| 9545 | SUMMARY:%s | ||
| 9546 | END:VEVENT\n" | ||
| 9547 | (org-ical-ts-to-string ts "DTSTART") | ||
| 9548 | (org-ical-ts-to-string ts2 "DTEND" inc) | ||
| 9549 | hd))) | ||
| 9550 | (when org-icalendar-include-todo | ||
| 9551 | (goto-char (point-min)) | ||
| 9552 | (while (re-search-forward org-todo-line-regexp nil t) | ||
| 9553 | (setq state (match-string 1)) | ||
| 9554 | (unless (equal state org-done-string) | ||
| 9555 | (setq hd (match-string 3)) | ||
| 9556 | (if (string-match org-priority-regexp hd) | ||
| 9557 | (setq pri (string-to-char (match-string 2 hd)) | ||
| 9558 | hd (concat (substring hd 0 (match-beginning 1)) | ||
| 9559 | (substring hd (- (match-end 1))))) | ||
| 9560 | (setq pri org-default-priority)) | ||
| 9561 | (setq pri (floor (1+ (* 8. (/ (float (- org-lowest-priority pri)) | ||
| 9562 | (- org-lowest-priority ?A)))))) | ||
| 9563 | |||
| 9564 | (princ (format "BEGIN:VTODO | ||
| 9565 | %s | ||
| 9566 | SUMMARY:%s | ||
| 9567 | SEQUENCE:1 | ||
| 9568 | PRIORITY:%d | ||
| 9569 | END:VTODO\n" | ||
| 9570 | dts hd pri)))))))) | ||
| 9571 | |||
| 9572 | (defun org-start-icalendar-file (name) | ||
| 9573 | "Start an iCalendar file by inserting the header." | ||
| 9574 | (let ((user user-full-name) | ||
| 9575 | (calname "something") | ||
| 9576 | (name (or name "unknown")) | ||
| 9577 | (timezone "FIXME")) | ||
| 9578 | (princ | ||
| 9579 | (format "BEGIN:VCALENDAR | ||
| 9580 | VERSION:2.0 | ||
| 9581 | X-WR-CALNAME:%s | ||
| 9582 | PRODID:-//%s//Emacs with Org-mode//EN | ||
| 9583 | X-WR-TIMEZONE:Europe/Amsterdam | ||
| 9584 | CALSCALE:GREGORIAN\n" name user timezone)))) | ||
| 9585 | |||
| 9586 | (defun org-finish-icalendar-file () | ||
| 9587 | "Finish an iCalendar file by inserting the END statement." | ||
| 9588 | (princ "END:VCALENDAR\n")) | ||
| 9589 | |||
| 9590 | (defun org-ical-ts-to-string (s keyword &optional inc) | ||
| 9591 | "Take a time string S and convert it to iCalendar format. | ||
| 9592 | KEYWORD is added in front, to make a complete line like DTSTART.... | ||
| 9593 | When INC is non-nil, increase the hour by two (if time string contains | ||
| 9594 | a time), or the day by one (if it does not contain a time)." | ||
| 9595 | (let ((t1 (org-parse-time-string s 'nodefault)) | ||
| 9596 | t2 fmt have-time time) | ||
| 9597 | (if (and (car t1) (nth 1 t1) (nth 2 t1)) | ||
| 9598 | (setq t2 t1 have-time t) | ||
| 9599 | (setq t2 (org-parse-time-string s))) | ||
| 9600 | (let ((s (car t2)) (mi (nth 1 t2)) (h (nth 2 t2)) | ||
| 9601 | (d (nth 3 t2)) (m (nth 4 t2)) (y (nth 5 t2))) | ||
| 9602 | (when inc | ||
| 9603 | (if have-time (setq h (+ 2 h)) (setq d (1+ d)))) | ||
| 9604 | (setq time (encode-time s mi h d m y))) | ||
| 9605 | (setq fmt (if have-time ":%Y%m%dT%H%M%S" ";VALUE=DATE:%Y%m%d")) | ||
| 9606 | (concat keyword (format-time-string fmt time)))) | ||
| 9607 | |||
| 9608 | |||
| 9412 | ;;; Key bindings | 9609 | ;;; Key bindings |
| 9413 | 9610 | ||
| 9414 | ;; - Bindings in Org-mode map are currently | 9611 | ;; - Bindings in Org-mode map are currently |
| @@ -9510,9 +9707,13 @@ When LEVEL is non-nil, increase section numbers on that level." | |||
| 9510 | (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) | 9707 | (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) |
| 9511 | (define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) | 9708 | (define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) |
| 9512 | (define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) | 9709 | (define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) |
| 9513 | ;; OPML support is only planned | 9710 | ;; OPML support is only an option for the future |
| 9514 | ;(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) | 9711 | ;(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) |
| 9515 | ;(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) | 9712 | ;(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) |
| 9713 | (define-key org-mode-map "\C-c\C-xi" 'org-export-icalendar-this-file) | ||
| 9714 | (define-key org-mode-map "\C-c\C-x\C-i" 'org-export-icalendar-all-agenda-files) | ||
| 9715 | (define-key org-mode-map "\C-c\C-xc" 'org-export-icalendar-combine-agenda-files) | ||
| 9716 | (define-key org-mode-map "\C-c\C-x\C-c" 'org-export-icalendar-combine-agenda-files) | ||
| 9516 | (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) | 9717 | (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) |
| 9517 | (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) | 9718 | (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) |
| 9518 | (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) | 9719 | (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) |
| @@ -9945,6 +10146,11 @@ See the individual commands for more information." | |||
| 9945 | ["HTML and Open" org-export-as-html-and-open t] | 10146 | ["HTML and Open" org-export-as-html-and-open t] |
| 9946 | ; ["OPML" org-export-as-opml nil] | 10147 | ; ["OPML" org-export-as-opml nil] |
| 9947 | "--" | 10148 | "--" |
| 10149 | ["iCalendar this file" org-export-icalendar-this-file t] | ||
| 10150 | ["iCalendar all agenda files" org-export-icalendar-all-agenda-files | ||
| 10151 | :active t :keys "C-c C-x C-i"] | ||
| 10152 | ["iCalendar combined" org-export-icalendar-combine-agenda-files t] | ||
| 10153 | "--" | ||
| 9948 | ["Option Template" org-insert-export-options-template t] | 10154 | ["Option Template" org-insert-export-options-template t] |
| 9949 | ["Toggle Fixed Width" org-toggle-fixed-width-section t]) | 10155 | ["Toggle Fixed Width" org-toggle-fixed-width-section t]) |
| 9950 | "--" | 10156 | "--" |
diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index f4af34fdabf..1ed43279c3d 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el | |||
| @@ -159,23 +159,32 @@ to obtain the value of this variable." | |||
| 159 | :group 'paragraphs | 159 | :group 'paragraphs |
| 160 | :type '(choice regexp (const :tag "Use default value" nil))) | 160 | :type '(choice regexp (const :tag "Use default value" nil))) |
| 161 | 161 | ||
| 162 | (defcustom sentence-end-base "[.?!][]\"'\xd0c9\x5397d)}]*" | ||
| 163 | "*Regexp matching the basic end of a sentence, not including following space." | ||
| 164 | :group 'paragraphs | ||
| 165 | :type 'string | ||
| 166 | :version "22.1") | ||
| 167 | |||
| 162 | (defun sentence-end () | 168 | (defun sentence-end () |
| 163 | "Return the regexp describing the end of a sentence. | 169 | "Return the regexp describing the end of a sentence. |
| 164 | 170 | ||
| 165 | This function returns either the value of the variable `sentence-end' | 171 | This function returns either the value of the variable `sentence-end' |
| 166 | if it is non-nil, or the default value constructed from the | 172 | if it is non-nil, or the default value constructed from the |
| 167 | variables `sentence-end-double-space', `sentence-end-without-period' | 173 | variables `sentence-end-base', `sentence-end-double-space', |
| 168 | and `sentence-end-without-space'. The default value specifies | 174 | `sentence-end-without-period' and `sentence-end-without-space'. |
| 169 | that in order to be recognized as the end of a sentence, the | 175 | |
| 170 | ending period, question mark, or exclamation point must be | 176 | The default value specifies that in order to be recognized as the |
| 171 | followed by two spaces, unless it's inside some sort of quotes or | 177 | end of a sentence, the ending period, question mark, or exclamation point |
| 172 | parenthesis. See Info node `(elisp)Standard Regexps'." | 178 | must be followed by two spaces, with perhaps some closing delimiters |
| 179 | in between. See Info node `(elisp)Standard Regexps'." | ||
| 173 | (or sentence-end | 180 | (or sentence-end |
| 174 | (concat (if sentence-end-without-period "\\w \\|") | 181 | (concat (if sentence-end-without-period "\\w \\|") |
| 175 | "\\([.?!][]\"'\xd0c9\x5397d)}]*" | 182 | "\\(" |
| 183 | sentence-end-base | ||
| 176 | (if sentence-end-double-space | 184 | (if sentence-end-double-space |
| 177 | "\\($\\| $\\|\t\\| \\)" "\\($\\|[\t ]\\)") | 185 | "\\($\\| $\\|\t\\| \\)" "\\($\\|[\t ]\\)") |
| 178 | "\\|[" sentence-end-without-space "]+\\)" | 186 | "\\|[" sentence-end-without-space "]+" |
| 187 | "\\)" | ||
| 179 | "[ \t\n]*"))) | 188 | "[ \t\n]*"))) |
| 180 | 189 | ||
| 181 | (defcustom page-delimiter "^\014" | 190 | (defcustom page-delimiter "^\014" |
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index a0dec653165..3507f6e57cf 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el | |||
| @@ -593,6 +593,9 @@ value of `texinfo-mode-hook'." | |||
| 593 | (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-separate)) | 593 | (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-separate)) |
| 594 | (make-local-variable 'paragraph-start) | 594 | (make-local-variable 'paragraph-start) |
| 595 | (setq paragraph-start (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-start)) | 595 | (setq paragraph-start (concat "\b\\|@[a-zA-Z]*[ \n]\\|" paragraph-start)) |
| 596 | (make-local-variable 'sentence-end-base) | ||
| 597 | (setq sentence-end-base | ||
| 598 | "\\(@\\(end\\)?dots{}\\|[.?!]\\)[]\"'\xd0c9\x5397d)}]*") | ||
| 596 | (make-local-variable 'adaptive-fill-mode) | 599 | (make-local-variable 'adaptive-fill-mode) |
| 597 | (setq adaptive-fill-mode nil) | 600 | (setq adaptive-fill-mode nil) |
| 598 | (make-local-variable 'fill-column) | 601 | (make-local-variable 'fill-column) |
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index d7a822e105a..f45c73216f7 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2005-10-20 CHENG Gao <chenggao@gmail.com> (tiny change) | ||
| 2 | |||
| 3 | * url-nfs.el (top level): | ||
| 4 | * url-handlers.el (directory-files): | ||
| 5 | * url-file.el (top level): | ||
| 6 | * url-dired.el (url-dired-minor-mode-map): | ||
| 7 | * url-http.el (url-http-chunked-encoding-after-change-function): | ||
| 8 | Remove XEmacs support. | ||
| 9 | |||
| 1 | 2005-10-15 Richard M. Stallman <rms@gnu.org> | 10 | 2005-10-15 Richard M. Stallman <rms@gnu.org> |
| 2 | 11 | ||
| 3 | * url.el: Don't try to autoload hash table functions. | 12 | * url.el: Don't try to autoload hash table functions. |
diff --git a/lisp/url/url-dired.el b/lisp/url/url-dired.el index 7c635d13e3b..b5ff892721e 100644 --- a/lisp/url/url-dired.el +++ b/lisp/url/url-dired.el | |||
| @@ -31,9 +31,7 @@ | |||
| 31 | (defvar url-dired-minor-mode-map | 31 | (defvar url-dired-minor-mode-map |
| 32 | (let ((map (make-sparse-keymap))) | 32 | (let ((map (make-sparse-keymap))) |
| 33 | (define-key map "\C-m" 'url-dired-find-file) | 33 | (define-key map "\C-m" 'url-dired-find-file) |
| 34 | (if (featurep 'xemacs) | 34 | (define-key map [mouse-2] 'url-dired-find-file-mouse) |
| 35 | (define-key map [button2] 'url-dired-find-file-mouse) | ||
| 36 | (define-key map [mouse-2] 'url-dired-find-file-mouse)) | ||
| 37 | map) | 35 | map) |
| 38 | "Keymap used when browsing directories.") | 36 | "Keymap used when browsing directories.") |
| 39 | 37 | ||
diff --git a/lisp/url/url-file.el b/lisp/url/url-file.el index 44a4f8bd9f4..64766930c43 100644 --- a/lisp/url/url-file.el +++ b/lisp/url/url-file.el | |||
| @@ -230,12 +230,8 @@ to them." | |||
| 230 | (url-file-create-wrapper file-readable-p (url)) | 230 | (url-file-create-wrapper file-readable-p (url)) |
| 231 | (url-file-create-wrapper file-writable-p (url)) | 231 | (url-file-create-wrapper file-writable-p (url)) |
| 232 | (url-file-create-wrapper file-executable-p (url)) | 232 | (url-file-create-wrapper file-executable-p (url)) |
| 233 | (if (featurep 'xemacs) | 233 | (url-file-create-wrapper directory-files (url &optional full match nosort)) |
| 234 | (progn | 234 | (url-file-create-wrapper file-truename (url &optional counter prev-dirs)) |
| 235 | (url-file-create-wrapper directory-files (url &optional full match nosort files-only)) | ||
| 236 | (url-file-create-wrapper file-truename (url &optional default))) | ||
| 237 | (url-file-create-wrapper directory-files (url &optional full match nosort)) | ||
| 238 | (url-file-create-wrapper file-truename (url &optional counter prev-dirs))) | ||
| 239 | 235 | ||
| 240 | (provide 'url-file) | 236 | (provide 'url-file) |
| 241 | 237 | ||
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el index bbbf19f53fc..4fa52572a94 100644 --- a/lisp/url/url-handlers.el +++ b/lisp/url/url-handlers.el | |||
| @@ -246,19 +246,8 @@ accessible." | |||
| 246 | (url-handlers-create-wrapper file-writable-p (url)) | 246 | (url-handlers-create-wrapper file-writable-p (url)) |
| 247 | (url-handlers-create-wrapper file-directory-p (url)) | 247 | (url-handlers-create-wrapper file-directory-p (url)) |
| 248 | (url-handlers-create-wrapper file-executable-p (url)) | 248 | (url-handlers-create-wrapper file-executable-p (url)) |
| 249 | 249 | (url-handlers-create-wrapper directory-files (url &optional full match nosort)) | |
| 250 | (if (featurep 'xemacs) | 250 | (url-handlers-create-wrapper file-truename (url &optional counter prev-dirs)) |
| 251 | (progn | ||
| 252 | ;; XEmacs specific prototypes | ||
| 253 | (url-handlers-create-wrapper | ||
| 254 | directory-files (url &optional full match nosort files-only)) | ||
| 255 | (url-handlers-create-wrapper | ||
| 256 | file-truename (url &optional default))) | ||
| 257 | ;; Emacs specific prototypes | ||
| 258 | (url-handlers-create-wrapper | ||
| 259 | directory-files (url &optional full match nosort)) | ||
| 260 | (url-handlers-create-wrapper | ||
| 261 | file-truename (url &optional counter prev-dirs))) | ||
| 262 | 251 | ||
| 263 | (add-hook 'find-file-hook 'url-handlers-set-buffer-mode) | 252 | (add-hook 'find-file-hook 'url-handlers-set-buffer-mode) |
| 264 | 253 | ||
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 89b7be42c47..39db321c080 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el | |||
| @@ -840,9 +840,7 @@ the end of the document." | |||
| 840 | (list 'start-open t | 840 | (list 'start-open t |
| 841 | 'end-open t | 841 | 'end-open t |
| 842 | 'chunked-encoding t | 842 | 'chunked-encoding t |
| 843 | 'face (if (featurep 'xemacs) | 843 | 'face 'cursor |
| 844 | 'text-cursor | ||
| 845 | 'cursor) | ||
| 846 | 'invisible t)) | 844 | 'invisible t)) |
| 847 | (setq url-http-chunked-length (string-to-number (buffer-substring | 845 | (setq url-http-chunked-length (string-to-number (buffer-substring |
| 848 | (match-beginning 1) | 846 | (match-beginning 1) |
diff --git a/lisp/url/url-nfs.el b/lisp/url/url-nfs.el index 858cd029a85..e6822efc242 100644 --- a/lisp/url/url-nfs.el +++ b/lisp/url/url-nfs.el | |||
| @@ -87,12 +87,8 @@ Each can be used any number of times.") | |||
| 87 | (url-nfs-create-wrapper file-readable-p (url)) | 87 | (url-nfs-create-wrapper file-readable-p (url)) |
| 88 | (url-nfs-create-wrapper file-writable-p (url)) | 88 | (url-nfs-create-wrapper file-writable-p (url)) |
| 89 | (url-nfs-create-wrapper file-executable-p (url)) | 89 | (url-nfs-create-wrapper file-executable-p (url)) |
| 90 | (if (featurep 'xemacs) | 90 | (url-nfs-create-wrapper directory-files (url &optional full match nosort)) |
| 91 | (progn | 91 | (url-nfs-create-wrapper file-truename (url &optional counter prev-dirs)) |
| 92 | (url-nfs-create-wrapper directory-files (url &optional full match nosort files-only)) | ||
| 93 | (url-nfs-create-wrapper file-truename (url &optional default))) | ||
| 94 | (url-nfs-create-wrapper directory-files (url &optional full match nosort)) | ||
| 95 | (url-nfs-create-wrapper file-truename (url &optional counter prev-dirs))) | ||
| 96 | 92 | ||
| 97 | (provide 'url-nfs) | 93 | (provide 'url-nfs) |
| 98 | 94 | ||
diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 36c3fd342de..c19b0e1521b 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog | |||
| @@ -1,3 +1,16 @@ | |||
| 1 | 2005-10-21 Richard M. Stallman <rms@gnu.org> | ||
| 2 | |||
| 3 | * loading.texi (Where Defined): load-history contains abs file names. | ||
| 4 | symbol-file returns abs file names. | ||
| 5 | |||
| 6 | 2005-10-19 Kim F. Storm <storm@cua.dk> | ||
| 7 | |||
| 8 | * display.texi (Showing Images): Add max-image-size integer value. | ||
| 9 | |||
| 10 | 2005-10-18 Chong Yidong <cyd@stupidchicken.com> | ||
| 11 | |||
| 12 | * display.texi (Showing Images): Document max-image-size. | ||
| 13 | |||
| 1 | 2005-10-17 Richard M. Stallman <rms@gnu.org> | 14 | 2005-10-17 Richard M. Stallman <rms@gnu.org> |
| 2 | 15 | ||
| 3 | * commands.texi (Quitting): Minor clarification. | 16 | * commands.texi (Quitting): Minor clarification. |
diff --git a/lispref/display.texi b/lispref/display.texi index 4c534282011..ba27b900cdb 100644 --- a/lispref/display.texi +++ b/lispref/display.texi | |||
| @@ -4058,6 +4058,25 @@ font). @var{frame} is the frame on which the image will be displayed. | |||
| 4058 | Focus}). | 4058 | Focus}). |
| 4059 | @end defun | 4059 | @end defun |
| 4060 | 4060 | ||
| 4061 | @defvar max-image-size | ||
| 4062 | @tindex max-image-size | ||
| 4063 | This variable is used to define the maximum size of image that Emacs | ||
| 4064 | will load. Emacs will refuse to load (and display) any image that is | ||
| 4065 | larger than this limit. | ||
| 4066 | |||
| 4067 | If the value is an integer, it directly specifies the maximum | ||
| 4068 | image height and width, measured in pixels. If it is a floating | ||
| 4069 | point number, it specifies the maximum image height and width | ||
| 4070 | as a ratio to the frame height and width. If the value is | ||
| 4071 | non-numeric, there is no explicit limit on the size of images. | ||
| 4072 | |||
| 4073 | The purpose of this variable is to prevent unreasonably large images | ||
| 4074 | from accidentally being loaded into Emacs. It only takes effect the | ||
| 4075 | first time an image is loaded. Once an image is placed in the image | ||
| 4076 | cache, it can always be displayed, even if the value of | ||
| 4077 | @var{max-image-size} is subsequently changed (@pxref{Image Cache}). | ||
| 4078 | @end defvar | ||
| 4079 | |||
| 4061 | @node Image Cache | 4080 | @node Image Cache |
| 4062 | @subsection Image Cache | 4081 | @subsection Image Cache |
| 4063 | 4082 | ||
diff --git a/lispref/loading.texi b/lispref/loading.texi index afef0e787a5..a9f3913bb84 100644 --- a/lispref/loading.texi +++ b/lispref/loading.texi | |||
| @@ -736,23 +736,21 @@ If @var{type} is @code{nil}, then any kind of definition is | |||
| 736 | acceptable. If @var{type} is @code{defun} or @code{defvar}, that | 736 | acceptable. If @var{type} is @code{defun} or @code{defvar}, that |
| 737 | specifies function definition only or variable definition only. | 737 | specifies function definition only or variable definition only. |
| 738 | 738 | ||
| 739 | The value is the file name as it was specified to @code{load}: | 739 | The value is normally an absolute file name. It can also be |
| 740 | either an absolute file name, or a library name | 740 | @code{nil}, if the definition is not associated with any file. |
| 741 | (with no directory name and no @samp{.el} or @samp{.elc} at the end). | ||
| 742 | It can also be @code{nil}, if the definition is not associated with any file. | ||
| 743 | @end defun | 741 | @end defun |
| 744 | 742 | ||
| 745 | The basis for @code{symbol-file} is the data in the variable | 743 | The basis for @code{symbol-file} is the data in the variable |
| 746 | @code{load-history}. | 744 | @code{load-history}. |
| 747 | 745 | ||
| 748 | @defvar load-history | 746 | @defvar load-history |
| 749 | This variable's value is an alist connecting library names with the | 747 | This variable's value is an alist connecting library file names with the |
| 750 | names of functions and variables they define, the features they provide, | 748 | names of functions and variables they define, the features they provide, |
| 751 | and the features they require. | 749 | and the features they require. |
| 752 | 750 | ||
| 753 | Each element is a list and describes one library. The @sc{car} of the | 751 | Each element is a list and describes one library. The @sc{car} of the |
| 754 | list is the name of the library, as a string. The rest of the list | 752 | list is the absolute file name of the library, as a string. The rest |
| 755 | elements have these forms: | 753 | of the list elements have these forms: |
| 756 | 754 | ||
| 757 | @table @code | 755 | @table @code |
| 758 | @item @var{var} | 756 | @item @var{var} |
diff --git a/mac/ChangeLog b/mac/ChangeLog index 6ce6f98bc84..f4a955a7c0f 100644 --- a/mac/ChangeLog +++ b/mac/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2005-10-20 Bryan D. O'Connor <bryan@lunch.org> (tiny change) | ||
| 2 | |||
| 3 | * make-package: Add a --compressed-dist option to compress info | ||
| 4 | files and .el files that have been byte-compiled. It defaults to "no". | ||
| 5 | |||
| 1 | 2005-09-24 Eli Zaretskii <eliz@gnu.org> | 6 | 2005-09-24 Eli Zaretskii <eliz@gnu.org> |
| 2 | 7 | ||
| 3 | * INSTALL (NOTES): Update the list of versions of MacOS on which | 8 | * INSTALL (NOTES): Update the list of versions of MacOS on which |
diff --git a/mac/make-package b/mac/make-package index bef6aa9b2de..85c6646c5da 100755 --- a/mac/make-package +++ b/mac/make-package | |||
| @@ -55,6 +55,7 @@ comp_diskimage=no | |||
| 55 | self_contained=no | 55 | self_contained=no |
| 56 | app_symlink=no | 56 | app_symlink=no |
| 57 | full_dist=yes | 57 | full_dist=yes |
| 58 | compressed_dist=no | ||
| 58 | build_in_place=no | 59 | build_in_place=no |
| 59 | keep_directory=no | 60 | keep_directory=no |
| 60 | 61 | ||
| @@ -94,6 +95,8 @@ do | |||
| 94 | with_app=no ;; | 95 | with_app=no ;; |
| 95 | --without-full-dist | -without-full-dist | -no-full-dist | -no-full) | 96 | --without-full-dist | -without-full-dist | -no-full-dist | -no-full) |
| 96 | full_dist=no ;; | 97 | full_dist=no ;; |
| 98 | --compressed-dist) | ||
| 99 | compressed_dist=yes ;; | ||
| 97 | --self-contained | -self-contained | --with-self-contained-app | -sc) | 100 | --self-contained | -self-contained | --with-self-contained-app | -sc) |
| 98 | self_contained=yes ;; | 101 | self_contained=yes ;; |
| 99 | -app-symlink | --app-symlink | -symlink | --symlink | --asl) | 102 | -app-symlink | --app-symlink | -symlink | --symlink | --asl) |
| @@ -138,6 +141,7 @@ Options: | |||
| 138 | --without-app. | 141 | --without-app. |
| 139 | --without-full-dist Do not include all the .el files in the distribution. | 142 | --without-full-dist Do not include all the .el files in the distribution. |
| 140 | This is discouraged except if disk space is critical. | 143 | This is discouraged except if disk space is critical. |
| 144 | --compressed-dist Compress .el and info files in the distribution. | ||
| 141 | --app-symlink Have the Emacs.app executable be a symlink | 145 | --app-symlink Have the Emacs.app executable be a symlink |
| 142 | to the install in [prefix]/bin/emacs and have | 146 | to the install in [prefix]/bin/emacs and have |
| 143 | the emacs executable link to emacs-${version} | 147 | the emacs executable link to emacs-${version} |
| @@ -298,6 +302,14 @@ if test "$full_dist" == "no"; then | |||
| 298 | find $sharedir/lisp $sharedir/leim -name "*.elc" -print | sed 's|\(.*\)\.elc$|/bin/rm -f \1.el|' | /bin/sh -s | 302 | find $sharedir/lisp $sharedir/leim -name "*.elc" -print | sed 's|\(.*\)\.elc$|/bin/rm -f \1.el|' | /bin/sh -s |
| 299 | fi | 303 | fi |
| 300 | 304 | ||
| 305 | if test "$compressed_dist" == "yes" -a "$full_dist" == "yes"; then | ||
| 306 | echo "Compressing .el files" | ||
| 307 | sharedir=$installprefix/share/emacs/$version | ||
| 308 | find $sharedir/lisp $sharedir/leim -name "*.elc" -print | sed 's|\(.*\)\.elc$|/usr/bin/gzip -9 \1.el|' | /bin/sh -s | ||
| 309 | echo "Compressing info files" | ||
| 310 | find $installprefix/info -type f ! -name dir -print | sed 's|\(.*\)$|/usr/bin/gzip -9 \1|' | /bin/sh -s | ||
| 311 | fi | ||
| 312 | |||
| 301 | if test "$with_app" == "yes"; then | 313 | if test "$with_app" == "yes"; then |
| 302 | echo "Creating Emacs.app application" | 314 | echo "Creating Emacs.app application" |
| 303 | tempappdir=${tempparentfull}${appsdir} | 315 | tempappdir=${tempparentfull}${appsdir} |
diff --git a/man/ChangeLog b/man/ChangeLog index 5d009b3340d..c8c90922565 100644 --- a/man/ChangeLog +++ b/man/ChangeLog | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | 2005-10-21 Juri Linkov <juri@jurta.org> | ||
| 2 | |||
| 3 | * custom.texi (Examining): Mention accessing the old variable | ||
| 4 | value via M-n in set-variable. | ||
| 5 | |||
| 6 | 2005-10-21 Carsten Dominik <dominik@science.uva.nl> | ||
| 7 | |||
| 8 | * org.texi (Summary): Mention iCalendar support. | ||
| 9 | (Exporting): Document iCalendar support. | ||
| 10 | |||
| 1 | 2005-10-18 Romain Francoise <romain@orebokech.com> | 11 | 2005-10-18 Romain Francoise <romain@orebokech.com> |
| 2 | 12 | ||
| 3 | * files.texi (Version Systems): Capitalize GNU. | 13 | * files.texi (Version Systems): Capitalize GNU. |
diff --git a/man/custom.texi b/man/custom.texi index 87722f63b69..0f842145639 100644 --- a/man/custom.texi +++ b/man/custom.texi | |||
| @@ -790,7 +790,8 @@ options; it allows any variable name. | |||
| 790 | The most convenient way to set a specific user option variable is | 790 | The most convenient way to set a specific user option variable is |
| 791 | with @kbd{M-x set-variable}. This reads the variable name with the | 791 | with @kbd{M-x set-variable}. This reads the variable name with the |
| 792 | minibuffer (with completion), and then reads a Lisp expression for the | 792 | minibuffer (with completion), and then reads a Lisp expression for the |
| 793 | new value using the minibuffer a second time. For example, | 793 | new value using the minibuffer a second time (you can insert the old |
| 794 | value into the minibuffer for editing via @kbd{M-n}). For example, | ||
| 794 | 795 | ||
| 795 | @example | 796 | @example |
| 796 | M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET} | 797 | M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET} |
diff --git a/man/org.texi b/man/org.texi index b38181c0c22..4f01ac27e76 100644 --- a/man/org.texi +++ b/man/org.texi | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | @setfilename ../info/org | 4 | @setfilename ../info/org |
| 5 | @settitle Org Mode Manual | 5 | @settitle Org Mode Manual |
| 6 | 6 | ||
| 7 | @set VERSION 3.17 | 7 | @set VERSION 3.18 |
| 8 | @set DATE October 2005 | 8 | @set DATE October 2005 |
| 9 | 9 | ||
| 10 | @dircategory Emacs | 10 | @dircategory Emacs |
| @@ -158,7 +158,12 @@ Calendar/Diary integration | |||
| 158 | 158 | ||
| 159 | Exporting | 159 | Exporting |
| 160 | 160 | ||
| 161 | * Export commands:: Commands which export and display | 161 | * ASCII export:: Export as a structured ASCII file |
| 162 | * HTML export:: Export as an HTML file | ||
| 163 | * iCalendar export:: Create calendar entries. | ||
| 164 | |||
| 165 | HTML export | ||
| 166 | |||
| 162 | * HTML formatting:: Interpretation of the buffer content | 167 | * HTML formatting:: Interpretation of the buffer content |
| 163 | * Export options:: How to influence exports | 168 | * Export options:: How to influence exports |
| 164 | * Comment lines:: Lines which will not be exported | 169 | * Comment lines:: Lines which will not be exported |
| @@ -204,7 +209,8 @@ utilizes and smoothly integrates much of the Emacs calendar and diary. | |||
| 204 | Plain text URL-like links connect to websites, emails, Usenet | 209 | Plain text URL-like links connect to websites, emails, Usenet |
| 205 | messages, BBDB entries, and any files related to the projects. For | 210 | messages, BBDB entries, and any files related to the projects. For |
| 206 | printing and sharing of notes, an Org-mode file can be exported as a | 211 | printing and sharing of notes, an Org-mode file can be exported as a |
| 207 | structured ASCII file, or as HTML. | 212 | structured ASCII file, as HTML, or (todo and agenda items only) as an |
| 213 | iCalendar file. | ||
| 208 | 214 | ||
| 209 | Org-mode keeps simple things simple. Not every outline branch needs | 215 | Org-mode keeps simple things simple. Not every outline branch needs |
| 210 | to be an action item, not every action item needs to have priority or | 216 | to be an action item, not every action item needs to have priority or |
| @@ -2048,6 +2054,11 @@ calendars. | |||
| 2048 | @item H | 2054 | @item H |
| 2049 | Show holidays for three month around the cursor date. | 2055 | Show holidays for three month around the cursor date. |
| 2050 | 2056 | ||
| 2057 | @kindex C-c C-x C-c | ||
| 2058 | @item C-c C-x C-c | ||
| 2059 | Export a single iCalendar file containing entries from all agenda files. | ||
| 2060 | Not available in timelines. | ||
| 2061 | |||
| 2051 | @tsubheading{Quit and Exit} | 2062 | @tsubheading{Quit and Exit} |
| 2052 | @kindex q | 2063 | @kindex q |
| 2053 | @item q | 2064 | @item q |
| @@ -2146,32 +2157,21 @@ also the documentation of the @command{org-diary} function. | |||
| 2146 | @node Exporting, Miscellaneous, Timeline and Agenda, Top | 2157 | @node Exporting, Miscellaneous, Timeline and Agenda, Top |
| 2147 | @chapter Exporting | 2158 | @chapter Exporting |
| 2148 | @cindex exporting | 2159 | @cindex exporting |
| 2149 | @cindex ASCII export | ||
| 2150 | @cindex HTML export | ||
| 2151 | |||
| 2152 | @cindex headline levels, for exporting | ||
| 2153 | For printing and sharing of notes, an Org-mode document can be | ||
| 2154 | exported as an ASCII file, or as HTML. In the exported version, the | ||
| 2155 | first 3 outline levels will become headlines, defining a general | ||
| 2156 | document structure. Additional levels will be exported as itemize | ||
| 2157 | lists. If you want that transition to occur at a different level, | ||
| 2158 | specify it with a prefix argument. For example, | ||
| 2159 | 2160 | ||
| 2160 | @example | 2161 | For printing and sharing of notes, Org-mode documents can be exported |
| 2161 | @kbd{M-1 M-x org-export-as-html} | 2162 | as ASCII or HTML files. To incorporate entries with associated times |
| 2162 | @end example | 2163 | like deadlines or appointments into a desktop calendar program like |
| 2163 | @noindent | 2164 | iCal, Org-mode can also produce extracts in the iCalendar format. |
| 2164 | creates only top level headlines and does the rest as items. | ||
| 2165 | 2165 | ||
| 2166 | @menu | 2166 | @menu |
| 2167 | * Export commands:: Commands which export and display | 2167 | * ASCII export:: Export as a structured ASCII file |
| 2168 | * HTML formatting:: Interpretation of the buffer content | 2168 | * HTML export:: Export as an HTML file |
| 2169 | * Export options:: How to influence exports | 2169 | * iCalendar export:: Create calendar entries. |
| 2170 | * Comment lines:: Lines which will not be exported | ||
| 2171 | @end menu | 2170 | @end menu |
| 2172 | 2171 | ||
| 2173 | @node Export commands, HTML formatting, Exporting, Exporting | 2172 | @node ASCII export, HTML export, Exporting, Exporting |
| 2174 | @section Export commands | 2173 | @section ASCII export |
| 2174 | @cindex ASCII export | ||
| 2175 | 2175 | ||
| 2176 | @cindex region, active | 2176 | @cindex region, active |
| 2177 | @cindex active region | 2177 | @cindex active region |
| @@ -2183,6 +2183,31 @@ Export as ASCII file. If there is an active region, only the region | |||
| 2183 | will be exported. For an org file @file{myfile.org}, the ASCII file | 2183 | will be exported. For an org file @file{myfile.org}, the ASCII file |
| 2184 | will be @file{myfile.txt}. The file will be overwritten without | 2184 | will be @file{myfile.txt}. The file will be overwritten without |
| 2185 | warning. | 2185 | warning. |
| 2186 | @end table | ||
| 2187 | |||
| 2188 | @cindex headline levels, for exporting | ||
| 2189 | In the exported version, the first 3 outline levels will become | ||
| 2190 | headlines, defining a general document structure. Additional levels | ||
| 2191 | will be exported as itemize lists. If you want that transition to occur | ||
| 2192 | at a different level, specify it with a prefix argument. For example, | ||
| 2193 | @example | ||
| 2194 | @kbd{C-1 C-c C-x a org-export-as-ascii} | ||
| 2195 | @end example | ||
| 2196 | @noindent | ||
| 2197 | creates only top level headlines and does the rest as items. Lines | ||
| 2198 | starting with @samp{#} and subtree starting with the word @samp{COMMENT} | ||
| 2199 | will not be exported. | ||
| 2200 | |||
| 2201 | @node HTML export, iCalendar export, ASCII export, Exporting | ||
| 2202 | @section HTML export | ||
| 2203 | @cindex HTML export | ||
| 2204 | |||
| 2205 | Org-mode contains an HTML exporter with extensive HTML formatting. | ||
| 2206 | |||
| 2207 | @cindex region, active | ||
| 2208 | @cindex active region | ||
| 2209 | @cindex transient-mark-mode | ||
| 2210 | @table @kbd | ||
| 2186 | @kindex C-c C-x h | 2211 | @kindex C-c C-x h |
| 2187 | @item C-c C-x h | 2212 | @item C-c C-x h |
| 2188 | Export as HTML file @file{myfile.html}. | 2213 | Export as HTML file @file{myfile.html}. |
| @@ -2197,8 +2222,25 @@ Insert template with export options, see below. | |||
| 2197 | Toggle fixed-width for entry (QUOTE) or region, see below. | 2222 | Toggle fixed-width for entry (QUOTE) or region, see below. |
| 2198 | @end table | 2223 | @end table |
| 2199 | 2224 | ||
| 2200 | @node HTML formatting, Export options, Export commands, Exporting | 2225 | @cindex headline levels, for exporting |
| 2201 | @section HTML formatting | 2226 | In the exported version, the first 3 outline levels will become |
| 2227 | headlines, defining a general document structure. Additional levels | ||
| 2228 | will be exported as itemize lists. If you want that transition to occur | ||
| 2229 | at a different level, specify it with a prefix argument. For example, | ||
| 2230 | @example | ||
| 2231 | @kbd{C-2 C-c C-x b} | ||
| 2232 | @end example | ||
| 2233 | @noindent | ||
| 2234 | creates two levels of headings and does the rest as items. | ||
| 2235 | |||
| 2236 | @menu | ||
| 2237 | * HTML formatting:: Interpretation of the buffer content | ||
| 2238 | * Export options:: How to influence exports | ||
| 2239 | * Comment lines:: Lines which will not be exported | ||
| 2240 | @end menu | ||
| 2241 | |||
| 2242 | @node HTML formatting, Export options, HTML export, HTML export | ||
| 2243 | @subsection HTML formatting | ||
| 2202 | 2244 | ||
| 2203 | Not all text is transferred literally to the exported HTML file. The | 2245 | Not all text is transferred literally to the exported HTML file. The |
| 2204 | exporter implements the following interpretation: | 2246 | exporter implements the following interpretation: |
| @@ -2248,8 +2290,8 @@ Plain @samp{<} and @samp{>} are always transformed to @samp{<} and | |||
| 2248 | If these conversions conflict with your habits of typing ASCII text, | 2290 | If these conversions conflict with your habits of typing ASCII text, |
| 2249 | they can all be turned off with corresponding variables. | 2291 | they can all be turned off with corresponding variables. |
| 2250 | 2292 | ||
| 2251 | @node Export options, Comment lines, HTML formatting, Exporting | 2293 | @node Export options, Comment lines, HTML formatting, HTML export |
| 2252 | @section Export options | 2294 | @subsection Export options |
| 2253 | @cindex options, for export | 2295 | @cindex options, for export |
| 2254 | 2296 | ||
| 2255 | @cindex completion, of option keywords | 2297 | @cindex completion, of option keywords |
| @@ -2295,15 +2337,16 @@ toc: @r{turn on/off table of contents} | |||
| 2295 | TeX: @r{turn on/off @TeX{} macros} | 2337 | TeX: @r{turn on/off @TeX{} macros} |
| 2296 | @end example | 2338 | @end example |
| 2297 | 2339 | ||
| 2298 | @node Comment lines, , Export options, Exporting | 2340 | @node Comment lines, , Export options, HTML export |
| 2299 | @section Comment lines | 2341 | @subsection Comment lines |
| 2300 | @cindex comment lines | 2342 | @cindex comment lines |
| 2301 | @cindex exporting, not | 2343 | @cindex exporting, not |
| 2302 | 2344 | ||
| 2303 | Lines starting with @samp{#} in column zero are treated as comments | 2345 | Lines starting with @samp{#} in column zero are treated as comments |
| 2304 | and will never be exported. Also entire subtrees starting with the | 2346 | and will never be exported. Also entire subtrees starting with the |
| 2305 | word @samp{COMMENT} will never be exported. Finally, any text before | 2347 | word @samp{COMMENT} will never be exported. Finally, any text before |
| 2306 | the first headline will not be exported either. | 2348 | the first headline will not be exported either. This applies also for |
| 2349 | ASCII export. | ||
| 2307 | 2350 | ||
| 2308 | @table @kbd | 2351 | @table @kbd |
| 2309 | @kindex C-c ; | 2352 | @kindex C-c ; |
| @@ -2311,6 +2354,53 @@ the first headline will not be exported either. | |||
| 2311 | Toggle the COMMENT keyword at the beginning of an entry. | 2354 | Toggle the COMMENT keyword at the beginning of an entry. |
| 2312 | @end table | 2355 | @end table |
| 2313 | 2356 | ||
| 2357 | @node iCalendar export, , HTML export, Exporting | ||
| 2358 | @section iCalendar export | ||
| 2359 | |||
| 2360 | Some people like to use Org-mode for keeping track of projects, but | ||
| 2361 | still prefer a standard calendar application for anniversaries and | ||
| 2362 | appointments. In this case it can be useful to have deadlines and | ||
| 2363 | other time-stamped items in Org-mode files show up in the calendar | ||
| 2364 | application. Org-mode can export calendar information in the standard | ||
| 2365 | iCalendar format. | ||
| 2366 | |||
| 2367 | @table @kbd | ||
| 2368 | @kindex C-c C-x i | ||
| 2369 | @item C-c C-x i | ||
| 2370 | Create iCalendar entries for the current file and store them in the same | ||
| 2371 | directory, using a file extension @file{.ics}. | ||
| 2372 | @kindex C-c C-x C-i | ||
| 2373 | @item C-c C-x C-i | ||
| 2374 | Like @kbd{C-c C-x i}, but do this for all files in | ||
| 2375 | @code{org-agenda-files}. For each of these files, a separate iCalendar | ||
| 2376 | file will be written. | ||
| 2377 | @kindex C-c C-x c | ||
| 2378 | @item C-c C-x c | ||
| 2379 | Create a single large iCalendar file from all files in | ||
| 2380 | @code{org-agenda-files} and write it to the file given by | ||
| 2381 | @code{org-combined-agenda-icalendar-file}. | ||
| 2382 | @end table | ||
| 2383 | |||
| 2384 | How this calendar is best read and updated, depends on the on the | ||
| 2385 | application you are using. For example, when using iCal under Apple | ||
| 2386 | MacOS X, you could create a new calendar @samp{OrgMode} (the default | ||
| 2387 | name for the calendar created by @kbd{C-c C-x c}, see the variables | ||
| 2388 | @code{org-icalendar-combined-name} and | ||
| 2389 | @code{org-combined-agenda-icalendar-file}). Then set Org-mode to | ||
| 2390 | overwrite the corresponding file | ||
| 2391 | @file{~/Library/Calendars/OrgMode.ics}. You may even use AppleScript | ||
| 2392 | to make iCal re-read the calendar files each time a new version of | ||
| 2393 | @file{OrgMode.ics} is produced. Here is the setup needed for this: | ||
| 2394 | |||
| 2395 | @lisp | ||
| 2396 | (setq org-combined-agenda-icalendar-file | ||
| 2397 | "~/Library/Calendars/OrgMode.ics") | ||
| 2398 | (add-hook 'org-after-save-iCalendar-file-hook | ||
| 2399 | (lambda () | ||
| 2400 | (shell-command | ||
| 2401 | "osascript -e 'tell application \"iCal\" to reload calendars'"))) | ||
| 2402 | @end lisp | ||
| 2403 | |||
| 2314 | @node Miscellaneous, Index, Exporting, Top | 2404 | @node Miscellaneous, Index, Exporting, Top |
| 2315 | @chapter Miscellaneous | 2405 | @chapter Miscellaneous |
| 2316 | 2406 | ||
diff --git a/src/ChangeLog b/src/ChangeLog index 61b658b6b88..213e7762485 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,76 @@ | |||
| 1 | 2005-10-21 Richard M. Stallman <rms@gnu.org> | ||
| 2 | |||
| 3 | * lread.c (Fload): Simplify gcpro structure. | ||
| 4 | Gcpro FOUND as well as FILE, but not EFOUND. | ||
| 5 | Unless preloading, record FOUND instead of FILE in Vload_history. | ||
| 6 | Rename repeat local FILE to MSG_FILE. | ||
| 7 | (syms_of_lread) <load-history>: Doc fix. | ||
| 8 | |||
| 9 | 2005-10-21 Kenichi Handa <handa@m17n.org> | ||
| 10 | |||
| 11 | * search.c (boyer_moore): Surround the '||' part of expression in | ||
| 12 | `if' condition by parentheses explicitly. | ||
| 13 | |||
| 14 | 2005-10-20 Kim F. Storm <storm@cua.dk> | ||
| 15 | |||
| 16 | * buffer.c (clone_per_buffer_values): Remove unused var tem. | ||
| 17 | (init_buffer): Remove unused vars dotstat, pwdstat. | ||
| 18 | |||
| 19 | * ccl.c (check_ccl_update): Remove unused var vp. | ||
| 20 | |||
| 21 | * fileio.c (auto_save_error): Call SAFE_FREE. | ||
| 22 | |||
| 23 | * fns.c (Fchar_table_range): Remove unused var i. | ||
| 24 | |||
| 25 | * minibuf.c (display_completion_list_1): New wrapper function | ||
| 26 | for Fdisplay_completion_list. | ||
| 27 | (Fminibuffer_completion_help): Use it. | ||
| 28 | |||
| 29 | * term.c (encode_terminal_code): Remove unused var src_start. | ||
| 30 | |||
| 31 | * window.c (Fwindow_tree): Remove unused var alist. | ||
| 32 | |||
| 33 | * xterm.c (x_calc_absolute_position): Remove unused vars win_x, win_y. | ||
| 34 | |||
| 35 | 2005-10-20 Aubrey Jaffer <agj@alum.mit.edu> (tiny change) | ||
| 36 | |||
| 37 | * unexelf.c (unexec): Fix calls to `fatal' with less than 3 | ||
| 38 | arguments. | ||
| 39 | |||
| 40 | 2005-10-20 Olli Savia <ops@iki.fi> (tiny change) | ||
| 41 | |||
| 42 | * syssignal.h [__Lynx__]: Undef SIGPOLL along with SIGIO. | ||
| 43 | |||
| 44 | 2005-10-20 Andreas Schwab <schwab@suse.de> | ||
| 45 | |||
| 46 | * minibuf.c (Fdisplay_completion_list): Doc fix. | ||
| 47 | |||
| 48 | 2005-10-19 Kim F. Storm <storm@cua.dk> | ||
| 49 | |||
| 50 | * image.c (check_image_size): Handle integer Vmax_image_size value | ||
| 51 | directly as max pixel value. Use default frame size for null frame. | ||
| 52 | (syms_of_image) <max-image-size>: Describe integer value. | ||
| 53 | |||
| 54 | 2005-10-19 Romain Francoise <romain@orebokech.com> | ||
| 55 | |||
| 56 | * emacs.c (main): Update copyright year. | ||
| 57 | |||
| 58 | 2005-10-18 Chong Yidong <cyd@stupidchicken.com> | ||
| 59 | |||
| 60 | * image.c (Vmax_image_size): New variable. | ||
| 61 | (check_image_size): New function. | ||
| 62 | (xbm_read_bitmap_data, pbm_load, png_load, jpeg_load, tiff_load) | ||
| 63 | (gif_load, gs_load): Use it. | ||
| 64 | (lookup_image): Try loading again if previous load failed. | ||
| 65 | (xbm_read_bitmap_data): Add a new argument, a pointer to the frame | ||
| 66 | to display in, NULL if none. | ||
| 67 | (xbm_load_image, xbm_file_p): Pass xbm_read_bitmap_data the new | ||
| 68 | argument. | ||
| 69 | |||
| 70 | 2005-10-18 Richard M. Stallman <rms@gnu.org> | ||
| 71 | |||
| 72 | * search.c (Fstring_match): Doc fix. | ||
| 73 | |||
| 1 | 2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | 74 | 2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
| 2 | 75 | ||
| 3 | * macterm.c (note_mouse_movement): Use PtInRect. | 76 | * macterm.c (note_mouse_movement): Use PtInRect. |
| @@ -8,7 +81,7 @@ | |||
| 8 | 2005-10-16 Masatake YAMATO <jet@gyve.org> | 81 | 2005-10-16 Masatake YAMATO <jet@gyve.org> |
| 9 | 82 | ||
| 10 | * minibuf.c (Fdisplay_completion_list): Add new optional | 83 | * minibuf.c (Fdisplay_completion_list): Add new optional |
| 11 | argument COMMON_SUBSTRING. Bind `completion-common-substring' | 84 | argument COMMON_SUBSTRING. Bind `completion-common-substring' |
| 12 | to the optional argument during running `completion-setup-hook'. | 85 | to the optional argument during running `completion-setup-hook'. |
| 13 | 86 | ||
| 14 | 2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | 87 | 2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
diff --git a/src/buffer.c b/src/buffer.c index c173136961e..5e304d5a1bb 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -485,7 +485,7 @@ static void | |||
| 485 | clone_per_buffer_values (from, to) | 485 | clone_per_buffer_values (from, to) |
| 486 | struct buffer *from, *to; | 486 | struct buffer *from, *to; |
| 487 | { | 487 | { |
| 488 | Lisp_Object to_buffer, tem; | 488 | Lisp_Object to_buffer; |
| 489 | int offset; | 489 | int offset; |
| 490 | 490 | ||
| 491 | XSETBUFFER (to_buffer, to); | 491 | XSETBUFFER (to_buffer, to); |
| @@ -5112,7 +5112,6 @@ void | |||
| 5112 | init_buffer () | 5112 | init_buffer () |
| 5113 | { | 5113 | { |
| 5114 | char *pwd; | 5114 | char *pwd; |
| 5115 | struct stat dotstat, pwdstat; | ||
| 5116 | Lisp_Object temp; | 5115 | Lisp_Object temp; |
| 5117 | int len; | 5116 | int len; |
| 5118 | 5117 | ||
| @@ -2119,7 +2119,6 @@ int | |||
| 2119 | check_ccl_update (ccl) | 2119 | check_ccl_update (ccl) |
| 2120 | struct ccl_program *ccl; | 2120 | struct ccl_program *ccl; |
| 2121 | { | 2121 | { |
| 2122 | struct Lisp_Vector *vp; | ||
| 2123 | Lisp_Object slot, ccl_prog; | 2122 | Lisp_Object slot, ccl_prog; |
| 2124 | 2123 | ||
| 2125 | if (ccl->idx < 0) | 2124 | if (ccl->idx < 0) |
diff --git a/src/emacs.c b/src/emacs.c index 9ada521f1e3..33941ae9227 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -897,7 +897,7 @@ main (argc, argv | |||
| 897 | else | 897 | else |
| 898 | { | 898 | { |
| 899 | printf ("GNU Emacs %s\n", SDATA (tem)); | 899 | printf ("GNU Emacs %s\n", SDATA (tem)); |
| 900 | printf ("Copyright (C) 2004 Free Software Foundation, Inc.\n"); | 900 | printf ("Copyright (C) 2005 Free Software Foundation, Inc.\n"); |
| 901 | printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n"); | 901 | printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n"); |
| 902 | printf ("You may redistribute copies of Emacs\n"); | 902 | printf ("You may redistribute copies of Emacs\n"); |
| 903 | printf ("under the terms of the GNU General Public License.\n"); | 903 | printf ("under the terms of the GNU General Public License.\n"); |
diff --git a/src/fileio.c b/src/fileio.c index 1cd996d2a4f..6806c7d025a 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -5797,6 +5797,7 @@ auto_save_error (error) | |||
| 5797 | Fsleep_for (make_number (1), Qnil); | 5797 | Fsleep_for (make_number (1), Qnil); |
| 5798 | } | 5798 | } |
| 5799 | 5799 | ||
| 5800 | SAFE_FREE (); | ||
| 5800 | UNGCPRO; | 5801 | UNGCPRO; |
| 5801 | return Qnil; | 5802 | return Qnil; |
| 5802 | } | 5803 | } |
| @@ -2555,7 +2555,7 @@ Note that this function doesn't check the parent of CHAR-TABLE. */) | |||
| 2555 | Lisp_Object char_table, range; | 2555 | Lisp_Object char_table, range; |
| 2556 | { | 2556 | { |
| 2557 | int charset_id, c1 = 0, c2 = 0; | 2557 | int charset_id, c1 = 0, c2 = 0; |
| 2558 | int size, i; | 2558 | int size; |
| 2559 | Lisp_Object ch, val, current_default; | 2559 | Lisp_Object ch, val, current_default; |
| 2560 | 2560 | ||
| 2561 | CHECK_CHAR_TABLE (char_table); | 2561 | CHECK_CHAR_TABLE (char_table); |
diff --git a/src/image.c b/src/image.c index 2463c24a33a..1996d8477e9 100644 --- a/src/image.c +++ b/src/image.c | |||
| @@ -1099,7 +1099,10 @@ or omitted means use the selected frame. */) | |||
| 1099 | 1099 | ||
| 1100 | static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); | 1100 | static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); |
| 1101 | static void free_image P_ ((struct frame *f, struct image *img)); | 1101 | static void free_image P_ ((struct frame *f, struct image *img)); |
| 1102 | static int check_image_size P_ ((struct frame *f, int width, int height)); | ||
| 1102 | 1103 | ||
| 1104 | #define MAX_IMAGE_SIZE 6.0 | ||
| 1105 | Lisp_Object Vmax_image_size; | ||
| 1103 | 1106 | ||
| 1104 | /* Allocate and return a new image structure for image specification | 1107 | /* Allocate and return a new image structure for image specification |
| 1105 | SPEC. SPEC has a hash value of HASH. */ | 1108 | SPEC. SPEC has a hash value of HASH. */ |
| @@ -1151,6 +1154,39 @@ free_image (f, img) | |||
| 1151 | } | 1154 | } |
| 1152 | } | 1155 | } |
| 1153 | 1156 | ||
| 1157 | /* Return 1 if the given widths and heights are valid for display; | ||
| 1158 | otherwise, return 0. */ | ||
| 1159 | |||
| 1160 | int | ||
| 1161 | check_image_size (f, width, height) | ||
| 1162 | struct frame *f; | ||
| 1163 | int width; | ||
| 1164 | int height; | ||
| 1165 | { | ||
| 1166 | int w, h; | ||
| 1167 | |||
| 1168 | if (width <= 0 || height <= 0) | ||
| 1169 | return 0; | ||
| 1170 | |||
| 1171 | if (INTEGERP (Vmax_image_size)) | ||
| 1172 | w = h = XINT (Vmax_image_size); | ||
| 1173 | else if (FLOATP (Vmax_image_size)) | ||
| 1174 | { | ||
| 1175 | if (f != NULL) | ||
| 1176 | { | ||
| 1177 | w = FRAME_PIXEL_WIDTH (f); | ||
| 1178 | h = FRAME_PIXEL_HEIGHT (f); | ||
| 1179 | } | ||
| 1180 | else | ||
| 1181 | w = h = 1024; /* Arbitrary size for unknown frame. */ | ||
| 1182 | w = (int) (XFLOAT_DATA (Vmax_image_size) * w); | ||
| 1183 | h = (int) (XFLOAT_DATA (Vmax_image_size) * h); | ||
| 1184 | } | ||
| 1185 | else | ||
| 1186 | return 1; | ||
| 1187 | |||
| 1188 | return (width <= w && height <= h); | ||
| 1189 | } | ||
| 1154 | 1190 | ||
| 1155 | /* Prepare image IMG for display on frame F. Must be called before | 1191 | /* Prepare image IMG for display on frame F. Must be called before |
| 1156 | drawing an image. */ | 1192 | drawing an image. */ |
| @@ -1708,6 +1744,12 @@ lookup_image (f, spec) | |||
| 1708 | if (img->hash == hash && !NILP (Fequal (img->spec, spec))) | 1744 | if (img->hash == hash && !NILP (Fequal (img->spec, spec))) |
| 1709 | break; | 1745 | break; |
| 1710 | 1746 | ||
| 1747 | if (img && img->load_failed_p) | ||
| 1748 | { | ||
| 1749 | free_image (f, img); | ||
| 1750 | img = NULL; | ||
| 1751 | } | ||
| 1752 | |||
| 1711 | /* If not found, create a new image and cache it. */ | 1753 | /* If not found, create a new image and cache it. */ |
| 1712 | if (img == NULL) | 1754 | if (img == NULL) |
| 1713 | { | 1755 | { |
| @@ -2551,7 +2593,8 @@ static int xbm_load P_ ((struct frame *f, struct image *img)); | |||
| 2551 | static int xbm_load_image P_ ((struct frame *f, struct image *img, | 2593 | static int xbm_load_image P_ ((struct frame *f, struct image *img, |
| 2552 | unsigned char *, unsigned char *)); | 2594 | unsigned char *, unsigned char *)); |
| 2553 | static int xbm_image_p P_ ((Lisp_Object object)); | 2595 | static int xbm_image_p P_ ((Lisp_Object object)); |
| 2554 | static int xbm_read_bitmap_data P_ ((unsigned char *, unsigned char *, | 2596 | static int xbm_read_bitmap_data P_ ((struct frame *f, |
| 2597 | unsigned char *, unsigned char *, | ||
| 2555 | int *, int *, unsigned char **)); | 2598 | int *, int *, unsigned char **)); |
| 2556 | static int xbm_file_p P_ ((Lisp_Object)); | 2599 | static int xbm_file_p P_ ((Lisp_Object)); |
| 2557 | 2600 | ||
| @@ -2939,7 +2982,8 @@ Create_Pixmap_From_Bitmap_Data(f, img, data, fg, bg, non_default_colors) | |||
| 2939 | CONTENTS looks like an in-memory XBM file. */ | 2982 | CONTENTS looks like an in-memory XBM file. */ |
| 2940 | 2983 | ||
| 2941 | static int | 2984 | static int |
| 2942 | xbm_read_bitmap_data (contents, end, width, height, data) | 2985 | xbm_read_bitmap_data (f, contents, end, width, height, data) |
| 2986 | struct frame *f; | ||
| 2943 | unsigned char *contents, *end; | 2987 | unsigned char *contents, *end; |
| 2944 | int *width, *height; | 2988 | int *width, *height; |
| 2945 | unsigned char **data; | 2989 | unsigned char **data; |
| @@ -2992,7 +3036,7 @@ xbm_read_bitmap_data (contents, end, width, height, data) | |||
| 2992 | expect (XBM_TK_NUMBER); | 3036 | expect (XBM_TK_NUMBER); |
| 2993 | } | 3037 | } |
| 2994 | 3038 | ||
| 2995 | if (*width < 0 || *height < 0) | 3039 | if (!check_image_size (f, *width, *height)) |
| 2996 | goto failure; | 3040 | goto failure; |
| 2997 | else if (data == NULL) | 3041 | else if (data == NULL) |
| 2998 | goto success; | 3042 | goto success; |
| @@ -3096,7 +3140,7 @@ xbm_load_image (f, img, contents, end) | |||
| 3096 | unsigned char *data; | 3140 | unsigned char *data; |
| 3097 | int success_p = 0; | 3141 | int success_p = 0; |
| 3098 | 3142 | ||
| 3099 | rc = xbm_read_bitmap_data (contents, end, &img->width, &img->height, &data); | 3143 | rc = xbm_read_bitmap_data (f, contents, end, &img->width, &img->height, &data); |
| 3100 | if (rc) | 3144 | if (rc) |
| 3101 | { | 3145 | { |
| 3102 | unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); | 3146 | unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
| @@ -3150,7 +3194,7 @@ xbm_file_p (data) | |||
| 3150 | { | 3194 | { |
| 3151 | int w, h; | 3195 | int w, h; |
| 3152 | return (STRINGP (data) | 3196 | return (STRINGP (data) |
| 3153 | && xbm_read_bitmap_data (SDATA (data), | 3197 | && xbm_read_bitmap_data (NULL, SDATA (data), |
| 3154 | (SDATA (data) | 3198 | (SDATA (data) |
| 3155 | + SBYTES (data)), | 3199 | + SBYTES (data)), |
| 3156 | &w, &h, NULL)); | 3200 | &w, &h, NULL)); |
| @@ -5465,8 +5509,7 @@ pbm_load (f, img) | |||
| 5465 | max_color_idx = 255; | 5509 | max_color_idx = 255; |
| 5466 | } | 5510 | } |
| 5467 | 5511 | ||
| 5468 | if (width < 0 | 5512 | if (!check_image_size (f, width, height) |
| 5469 | || height < 0 | ||
| 5470 | || (type != PBM_MONO && max_color_idx < 0)) | 5513 | || (type != PBM_MONO && max_color_idx < 0)) |
| 5471 | goto error; | 5514 | goto error; |
| 5472 | 5515 | ||
| @@ -5966,6 +6009,9 @@ png_load (f, img) | |||
| 5966 | fn_png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, | 6009 | fn_png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, |
| 5967 | &interlace_type, NULL, NULL); | 6010 | &interlace_type, NULL, NULL); |
| 5968 | 6011 | ||
| 6012 | if (!check_image_size (f, width, height)) | ||
| 6013 | goto error; | ||
| 6014 | |||
| 5969 | /* If image contains simply transparency data, we prefer to | 6015 | /* If image contains simply transparency data, we prefer to |
| 5970 | construct a clipping mask. */ | 6016 | construct a clipping mask. */ |
| 5971 | if (fn_png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) | 6017 | if (fn_png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) |
| @@ -6726,6 +6772,12 @@ jpeg_load (f, img) | |||
| 6726 | width = img->width = cinfo.output_width; | 6772 | width = img->width = cinfo.output_width; |
| 6727 | height = img->height = cinfo.output_height; | 6773 | height = img->height = cinfo.output_height; |
| 6728 | 6774 | ||
| 6775 | if (!check_image_size (f, width, height)) | ||
| 6776 | { | ||
| 6777 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 6778 | longjmp (mgr.setjmp_buffer, 2); | ||
| 6779 | } | ||
| 6780 | |||
| 6729 | /* Create X image and pixmap. */ | 6781 | /* Create X image and pixmap. */ |
| 6730 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) | 6782 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
| 6731 | longjmp (mgr.setjmp_buffer, 2); | 6783 | longjmp (mgr.setjmp_buffer, 2); |
| @@ -7155,6 +7207,14 @@ tiff_load (f, img) | |||
| 7155 | of width x height 32-bit values. */ | 7207 | of width x height 32-bit values. */ |
| 7156 | fn_TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); | 7208 | fn_TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); |
| 7157 | fn_TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); | 7209 | fn_TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); |
| 7210 | |||
| 7211 | if (!check_image_size (f, width, height)) | ||
| 7212 | { | ||
| 7213 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 7214 | UNGCPRO; | ||
| 7215 | return 0; | ||
| 7216 | } | ||
| 7217 | |||
| 7158 | buf = (uint32 *) xmalloc (width * height * sizeof *buf); | 7218 | buf = (uint32 *) xmalloc (width * height * sizeof *buf); |
| 7159 | 7219 | ||
| 7160 | rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0); | 7220 | rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0); |
| @@ -7459,6 +7519,15 @@ gif_load (f, img) | |||
| 7459 | } | 7519 | } |
| 7460 | } | 7520 | } |
| 7461 | 7521 | ||
| 7522 | /* Before reading entire contents, check the declared image size. */ | ||
| 7523 | if (!check_image_size (f, gif->SWidth, gif->SHeight)) | ||
| 7524 | { | ||
| 7525 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 7526 | fn_DGifCloseFile (gif); | ||
| 7527 | UNGCPRO; | ||
| 7528 | return 0; | ||
| 7529 | } | ||
| 7530 | |||
| 7462 | /* Read entire contents. */ | 7531 | /* Read entire contents. */ |
| 7463 | rc = fn_DGifSlurp (gif); | 7532 | rc = fn_DGifSlurp (gif); |
| 7464 | if (rc == GIF_ERROR) | 7533 | if (rc == GIF_ERROR) |
| @@ -7492,6 +7561,14 @@ gif_load (f, img) | |||
| 7492 | max (gif->Image.Top + gif->Image.Height, | 7561 | max (gif->Image.Top + gif->Image.Height, |
| 7493 | image_top + image_height)); | 7562 | image_top + image_height)); |
| 7494 | 7563 | ||
| 7564 | if (!check_image_size (f, width, height)) | ||
| 7565 | { | ||
| 7566 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 7567 | fn_DGifCloseFile (gif); | ||
| 7568 | UNGCPRO; | ||
| 7569 | return 0; | ||
| 7570 | } | ||
| 7571 | |||
| 7495 | /* Create the X image and pixmap. */ | 7572 | /* Create the X image and pixmap. */ |
| 7496 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) | 7573 | if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
| 7497 | { | 7574 | { |
| @@ -7944,6 +8021,12 @@ gs_load (f, img) | |||
| 7944 | in_height = XFASTINT (pt_height) / 72.0; | 8021 | in_height = XFASTINT (pt_height) / 72.0; |
| 7945 | img->height = in_height * FRAME_X_DISPLAY_INFO (f)->resy; | 8022 | img->height = in_height * FRAME_X_DISPLAY_INFO (f)->resy; |
| 7946 | 8023 | ||
| 8024 | if (!check_image_size (f, img->width, img->height)) | ||
| 8025 | { | ||
| 8026 | image_error ("Invalid image size", Qnil, Qnil); | ||
| 8027 | return 0; | ||
| 8028 | } | ||
| 8029 | |||
| 7947 | /* Create the pixmap. */ | 8030 | /* Create the pixmap. */ |
| 7948 | xassert (img->pixmap == NO_PIXMAP); | 8031 | xassert (img->pixmap == NO_PIXMAP); |
| 7949 | 8032 | ||
| @@ -8217,6 +8300,18 @@ listed; they're always supported. */); | |||
| 8217 | Vimage_library_alist = Qnil; | 8300 | Vimage_library_alist = Qnil; |
| 8218 | Fput (intern ("image-library-alist"), Qrisky_local_variable, Qt); | 8301 | Fput (intern ("image-library-alist"), Qrisky_local_variable, Qt); |
| 8219 | 8302 | ||
| 8303 | DEFVAR_LISP ("max-image-size", &Vmax_image_size, | ||
| 8304 | doc: /* Maximum size of images. | ||
| 8305 | Emacs will not load an image into memory if its pixel width or | ||
| 8306 | pixel height exceeds this limit. | ||
| 8307 | |||
| 8308 | If the value is an integer, it directly specifies the maximum | ||
| 8309 | image height and width, measured in pixels. If it is a floating | ||
| 8310 | point number, it specifies the maximum image height and width | ||
| 8311 | as a ratio to the frame height and width. If the value is | ||
| 8312 | non-numeric, there is no explicit limit on the size of images. */); | ||
| 8313 | Vmax_image_size = make_float (MAX_IMAGE_SIZE); | ||
| 8314 | |||
| 8220 | Vimage_type_cache = Qnil; | 8315 | Vimage_type_cache = Qnil; |
| 8221 | staticpro (&Vimage_type_cache); | 8316 | staticpro (&Vimage_type_cache); |
| 8222 | 8317 | ||
diff --git a/src/lread.c b/src/lread.c index 94fb5ddb155..43c7bf6cfc2 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -670,6 +670,11 @@ If optional fourth arg NOSUFFIX is non-nil, don't try adding | |||
| 670 | If optional fifth arg MUST-SUFFIX is non-nil, insist on | 670 | If optional fifth arg MUST-SUFFIX is non-nil, insist on |
| 671 | the suffix `.elc' or `.el'; don't accept just FILE unless | 671 | the suffix `.elc' or `.el'; don't accept just FILE unless |
| 672 | it ends in one of those suffixes or includes a directory name. | 672 | it ends in one of those suffixes or includes a directory name. |
| 673 | |||
| 674 | Loading a file records its definitions, and its `provide' and | ||
| 675 | `require' calls, in an element of `load-history' whose | ||
| 676 | car is the file name loaded. See `load-history'. | ||
| 677 | |||
| 673 | Return t if file exists. */) | 678 | Return t if file exists. */) |
| 674 | (file, noerror, nomessage, nosuffix, must_suffix) | 679 | (file, noerror, nomessage, nosuffix, must_suffix) |
| 675 | Lisp_Object file, noerror, nomessage, nosuffix, must_suffix; | 680 | Lisp_Object file, noerror, nomessage, nosuffix, must_suffix; |
| @@ -678,7 +683,7 @@ Return t if file exists. */) | |||
| 678 | register int fd = -1; | 683 | register int fd = -1; |
| 679 | int count = SPECPDL_INDEX (); | 684 | int count = SPECPDL_INDEX (); |
| 680 | Lisp_Object temp; | 685 | Lisp_Object temp; |
| 681 | struct gcpro gcpro1; | 686 | struct gcpro gcpro1, gcpro2; |
| 682 | Lisp_Object found, efound; | 687 | Lisp_Object found, efound; |
| 683 | /* 1 means we printed the ".el is newer" message. */ | 688 | /* 1 means we printed the ".el is newer" message. */ |
| 684 | int newer = 0; | 689 | int newer = 0; |
| @@ -725,7 +730,8 @@ Return t if file exists. */) | |||
| 725 | int size = SBYTES (file); | 730 | int size = SBYTES (file); |
| 726 | Lisp_Object tmp[2]; | 731 | Lisp_Object tmp[2]; |
| 727 | 732 | ||
| 728 | GCPRO1 (file); | 733 | found = Qnil; |
| 734 | GCPRO2 (file, found); | ||
| 729 | 735 | ||
| 730 | if (! NILP (must_suffix)) | 736 | if (! NILP (must_suffix)) |
| 731 | { | 737 | { |
| @@ -812,6 +818,8 @@ Return t if file exists. */) | |||
| 812 | struct stat s1, s2; | 818 | struct stat s1, s2; |
| 813 | int result; | 819 | int result; |
| 814 | 820 | ||
| 821 | GCPRO2 (file, found); | ||
| 822 | |||
| 815 | if (!safe_to_load_p (fd)) | 823 | if (!safe_to_load_p (fd)) |
| 816 | { | 824 | { |
| 817 | safe_p = 0; | 825 | safe_p = 0; |
| @@ -828,7 +836,6 @@ Return t if file exists. */) | |||
| 828 | 836 | ||
| 829 | compiled = 1; | 837 | compiled = 1; |
| 830 | 838 | ||
| 831 | GCPRO1 (efound); | ||
| 832 | efound = ENCODE_FILE (found); | 839 | efound = ENCODE_FILE (found); |
| 833 | 840 | ||
| 834 | #ifdef DOS_NT | 841 | #ifdef DOS_NT |
| @@ -838,7 +845,6 @@ Return t if file exists. */) | |||
| 838 | SSET (efound, SBYTES (efound) - 1, 0); | 845 | SSET (efound, SBYTES (efound) - 1, 0); |
| 839 | result = stat ((char *)SDATA (efound), &s2); | 846 | result = stat ((char *)SDATA (efound), &s2); |
| 840 | SSET (efound, SBYTES (efound) - 1, 'c'); | 847 | SSET (efound, SBYTES (efound) - 1, 'c'); |
| 841 | UNGCPRO; | ||
| 842 | 848 | ||
| 843 | if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime) | 849 | if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime) |
| 844 | { | 850 | { |
| @@ -848,12 +854,13 @@ Return t if file exists. */) | |||
| 848 | /* If we won't print another message, mention this anyway. */ | 854 | /* If we won't print another message, mention this anyway. */ |
| 849 | if (!NILP (nomessage)) | 855 | if (!NILP (nomessage)) |
| 850 | { | 856 | { |
| 851 | Lisp_Object file; | 857 | Lisp_Object msg_file; |
| 852 | file = Fsubstring (found, make_number (0), make_number (-1)); | 858 | msg_file = Fsubstring (found, make_number (0), make_number (-1)); |
| 853 | message_with_string ("Source file `%s' newer than byte-compiled file", | 859 | message_with_string ("Source file `%s' newer than byte-compiled file", |
| 854 | file, 1); | 860 | msg_file, 1); |
| 855 | } | 861 | } |
| 856 | } | 862 | } |
| 863 | UNGCPRO; | ||
| 857 | } | 864 | } |
| 858 | } | 865 | } |
| 859 | else | 866 | else |
| @@ -872,12 +879,12 @@ Return t if file exists. */) | |||
| 872 | } | 879 | } |
| 873 | } | 880 | } |
| 874 | 881 | ||
| 882 | GCPRO2 (file, found); | ||
| 883 | |||
| 875 | #ifdef WINDOWSNT | 884 | #ifdef WINDOWSNT |
| 876 | emacs_close (fd); | 885 | emacs_close (fd); |
| 877 | GCPRO1 (efound); | ||
| 878 | efound = ENCODE_FILE (found); | 886 | efound = ENCODE_FILE (found); |
| 879 | stream = fopen ((char *) SDATA (efound), fmode); | 887 | stream = fopen ((char *) SDATA (efound), fmode); |
| 880 | UNGCPRO; | ||
| 881 | #else /* not WINDOWSNT */ | 888 | #else /* not WINDOWSNT */ |
| 882 | stream = fdopen (fd, fmode); | 889 | stream = fdopen (fd, fmode); |
| 883 | #endif /* not WINDOWSNT */ | 890 | #endif /* not WINDOWSNT */ |
| @@ -904,7 +911,6 @@ Return t if file exists. */) | |||
| 904 | message_with_string ("Loading %s...", file, 1); | 911 | message_with_string ("Loading %s...", file, 1); |
| 905 | } | 912 | } |
| 906 | 913 | ||
| 907 | GCPRO1 (file); | ||
| 908 | record_unwind_protect (load_unwind, make_save_value (stream, 0)); | 914 | record_unwind_protect (load_unwind, make_save_value (stream, 0)); |
| 909 | record_unwind_protect (load_descriptor_unwind, load_descriptor_list); | 915 | record_unwind_protect (load_descriptor_unwind, load_descriptor_list); |
| 910 | specbind (Qload_file_name, found); | 916 | specbind (Qload_file_name, found); |
| @@ -912,8 +918,8 @@ Return t if file exists. */) | |||
| 912 | load_descriptor_list | 918 | load_descriptor_list |
| 913 | = Fcons (make_number (fileno (stream)), load_descriptor_list); | 919 | = Fcons (make_number (fileno (stream)), load_descriptor_list); |
| 914 | load_in_progress++; | 920 | load_in_progress++; |
| 915 | readevalloop (Qget_file_char, stream, file, Feval, | 921 | readevalloop (Qget_file_char, stream, (! NILP (Vpurify_flag) ? file : found), |
| 916 | 0, Qnil, Qnil, Qnil, Qnil); | 922 | Feval, 0, Qnil, Qnil, Qnil, Qnil); |
| 917 | unbind_to (count, Qnil); | 923 | unbind_to (count, Qnil); |
| 918 | 924 | ||
| 919 | /* Run any load-hooks for this file. */ | 925 | /* Run any load-hooks for this file. */ |
| @@ -3880,7 +3886,7 @@ when the corresponding call to `provide' is made. */); | |||
| 3880 | Vafter_load_alist = Qnil; | 3886 | Vafter_load_alist = Qnil; |
| 3881 | 3887 | ||
| 3882 | DEFVAR_LISP ("load-history", &Vload_history, | 3888 | DEFVAR_LISP ("load-history", &Vload_history, |
| 3883 | doc: /* Alist mapping source file names to symbols and features. | 3889 | doc: /* Alist mapping file names to symbols and features. |
| 3884 | Each alist element is a list that starts with a file name, | 3890 | Each alist element is a list that starts with a file name, |
| 3885 | except for one element (optional) that starts with nil and describes | 3891 | except for one element (optional) that starts with nil and describes |
| 3886 | definitions evaluated from buffers not visiting files. | 3892 | definitions evaluated from buffers not visiting files. |
| @@ -3889,7 +3895,10 @@ and cons cells of the form `(provide . FEATURE)', `(require . FEATURE)', | |||
| 3889 | `(defun . FUNCTION)', `(autoload . SYMBOL)', and `(t . SYMBOL)'. | 3895 | `(defun . FUNCTION)', `(autoload . SYMBOL)', and `(t . SYMBOL)'. |
| 3890 | An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)', | 3896 | An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)', |
| 3891 | and means that SYMBOL was an autoload before this file redefined it | 3897 | and means that SYMBOL was an autoload before this file redefined it |
| 3892 | as a function. */); | 3898 | as a function. |
| 3899 | |||
| 3900 | For a preloaded file, the file name recorded is relative to the main Lisp | ||
| 3901 | directory. These names are converted to absolute by `file-loadhist-lookup'. */); | ||
| 3893 | Vload_history = Qnil; | 3902 | Vload_history = Qnil; |
| 3894 | 3903 | ||
| 3895 | DEFVAR_LISP ("load-file-name", &Vload_file_name, | 3904 | DEFVAR_LISP ("load-file-name", &Vload_file_name, |
diff --git a/src/minibuf.c b/src/minibuf.c index 9c0f4a09284..cdee2ad8300 100644 --- a/src/minibuf.c +++ b/src/minibuf.c | |||
| @@ -2367,14 +2367,14 @@ alternative, the second serves as annotation. | |||
| 2367 | The actual completion alternatives, as inserted, are given `mouse-face' | 2367 | The actual completion alternatives, as inserted, are given `mouse-face' |
| 2368 | properties of `highlight'. | 2368 | properties of `highlight'. |
| 2369 | At the end, this runs the normal hook `completion-setup-hook'. | 2369 | At the end, this runs the normal hook `completion-setup-hook'. |
| 2370 | It can find the completion buffer in `standard-output'. | 2370 | It can find the completion buffer in `standard-output'. |
| 2371 | The optional second arg COMMON-SUBSTRING is a string. | 2371 | The optional second arg COMMON-SUBSTRING is a string. |
| 2372 | It is used to put faces, `completions-first-difference` and | 2372 | It is used to put faces, `completions-first-difference` and |
| 2373 | `completions-common-part' on the completion bufffer. The | 2373 | `completions-common-part' on the completion buffer. The |
| 2374 | `completions-common-part' face is put on the common substring | 2374 | `completions-common-part' face is put on the common substring |
| 2375 | specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil, | 2375 | specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil, |
| 2376 | the faces are not put. | 2376 | the faces are not put. |
| 2377 | Internally, COMMON-SUBSTRING is bound to `completion-common-substring' | 2377 | Internally, COMMON-SUBSTRING is bound to `completion-common-substring' |
| 2378 | during running `completion-setup-hook'. */) | 2378 | during running `completion-setup-hook'. */) |
| 2379 | (completions, common_substring) | 2379 | (completions, common_substring) |
| 2380 | Lisp_Object completions; | 2380 | Lisp_Object completions; |
| @@ -2550,7 +2550,7 @@ during running `completion-setup-hook'. */) | |||
| 2550 | 2550 | ||
| 2551 | specbind (intern ("completion-common-substring"), common_substring); | 2551 | specbind (intern ("completion-common-substring"), common_substring); |
| 2552 | call1 (Vrun_hooks, intern ("completion-setup-hook")); | 2552 | call1 (Vrun_hooks, intern ("completion-setup-hook")); |
| 2553 | 2553 | ||
| 2554 | unbind_to (count1, Qnil); | 2554 | unbind_to (count1, Qnil); |
| 2555 | } | 2555 | } |
| 2556 | 2556 | ||
| @@ -2559,6 +2559,14 @@ during running `completion-setup-hook'. */) | |||
| 2559 | return Qnil; | 2559 | return Qnil; |
| 2560 | } | 2560 | } |
| 2561 | 2561 | ||
| 2562 | |||
| 2563 | static Lisp_Object | ||
| 2564 | display_completion_list_1 (list) | ||
| 2565 | Lisp_Object list; | ||
| 2566 | { | ||
| 2567 | return Fdisplay_completion_list (list, Qnil); | ||
| 2568 | } | ||
| 2569 | |||
| 2562 | DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help, | 2570 | DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help, |
| 2563 | 0, 0, "", | 2571 | 0, 0, "", |
| 2564 | doc: /* Display a list of possible completions of the current minibuffer contents. */) | 2572 | doc: /* Display a list of possible completions of the current minibuffer contents. */) |
| @@ -2580,7 +2588,7 @@ DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_co | |||
| 2580 | } | 2588 | } |
| 2581 | else | 2589 | else |
| 2582 | internal_with_output_to_temp_buffer ("*Completions*", | 2590 | internal_with_output_to_temp_buffer ("*Completions*", |
| 2583 | Fdisplay_completion_list, | 2591 | display_completion_list_1, |
| 2584 | Fsort (completions, Qstring_lessp)); | 2592 | Fsort (completions, Qstring_lessp)); |
| 2585 | return Qnil; | 2593 | return Qnil; |
| 2586 | } | 2594 | } |
diff --git a/src/search.c b/src/search.c index f60e6d0cfe2..d3a5bd838a9 100644 --- a/src/search.c +++ b/src/search.c | |||
| @@ -429,7 +429,7 @@ string_match_1 (regexp, string, start, posix) | |||
| 429 | 429 | ||
| 430 | DEFUN ("string-match", Fstring_match, Sstring_match, 2, 3, 0, | 430 | DEFUN ("string-match", Fstring_match, Sstring_match, 2, 3, 0, |
| 431 | doc: /* Return index of start of first match for REGEXP in STRING, or nil. | 431 | doc: /* Return index of start of first match for REGEXP in STRING, or nil. |
| 432 | Case is ignored if `case-fold-search' is non-nil in the current buffer. | 432 | Matching ignores case if `case-fold-search' is non-nil. |
| 433 | If third arg START is non-nil, start search at that index in STRING. | 433 | If third arg START is non-nil, start search at that index in STRING. |
| 434 | For index of first char beyond the match, do (match-end 0). | 434 | For index of first char beyond the match, do (match-end 0). |
| 435 | `match-end' and `match-beginning' also give indices of substrings | 435 | `match-end' and `match-beginning' also give indices of substrings |
| @@ -1709,7 +1709,7 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt, | |||
| 1709 | if (ASCII_BYTE_P (*ptr) || ! multibyte) | 1709 | if (ASCII_BYTE_P (*ptr) || ! multibyte) |
| 1710 | ch = *ptr; | 1710 | ch = *ptr; |
| 1711 | else if (charset_base | 1711 | else if (charset_base |
| 1712 | && (pat_end - ptr) == 1 || CHAR_HEAD_P (ptr[1])) | 1712 | && ((pat_end - ptr) == 1 || CHAR_HEAD_P (ptr[1]))) |
| 1713 | { | 1713 | { |
| 1714 | unsigned char *charstart = ptr - 1; | 1714 | unsigned char *charstart = ptr - 1; |
| 1715 | 1715 | ||
diff --git a/src/syssignal.h b/src/syssignal.h index 1e9c0dbb38a..3cb28220962 100644 --- a/src/syssignal.h +++ b/src/syssignal.h | |||
| @@ -147,7 +147,10 @@ extern SIGMASKTYPE sigprocmask_set; | |||
| 147 | #undef SIGINFO | 147 | #undef SIGINFO |
| 148 | #endif | 148 | #endif |
| 149 | #if defined (SIGIO) && defined (BROKEN_SIGIO) | 149 | #if defined (SIGIO) && defined (BROKEN_SIGIO) |
| 150 | #undef SIGIO | 150 | # undef SIGIO |
| 151 | # if defined (__Lynx__) | ||
| 152 | # undef SIGPOLL /* Defined as SIGIO on LynxOS */ | ||
| 153 | # endif | ||
| 151 | #endif | 154 | #endif |
| 152 | #if defined (SIGPOLL) && defined (BROKEN_SIGPOLL) | 155 | #if defined (SIGPOLL) && defined (BROKEN_SIGPOLL) |
| 153 | #undef SIGPOLL | 156 | #undef SIGPOLL |
diff --git a/src/term.c b/src/term.c index bb7f7354890..234be4a9271 100644 --- a/src/term.c +++ b/src/term.c | |||
| @@ -639,7 +639,7 @@ encode_terminal_code (src, src_len, coding) | |||
| 639 | int src_len; | 639 | int src_len; |
| 640 | struct coding_system *coding; | 640 | struct coding_system *coding; |
| 641 | { | 641 | { |
| 642 | struct glyph *src_start = src, *src_end = src + src_len; | 642 | struct glyph *src_end = src + src_len; |
| 643 | register GLYPH g; | 643 | register GLYPH g; |
| 644 | unsigned char *buf; | 644 | unsigned char *buf; |
| 645 | int nchars, nbytes, required; | 645 | int nchars, nbytes, required; |
| @@ -724,7 +724,7 @@ encode_terminal_code (src, src_len, coding) | |||
| 724 | if (SYMBOLP (coding->pre_write_conversion) | 724 | if (SYMBOLP (coding->pre_write_conversion) |
| 725 | && ! NILP (Ffboundp (coding->pre_write_conversion))) | 725 | && ! NILP (Ffboundp (coding->pre_write_conversion))) |
| 726 | { | 726 | { |
| 727 | run_pre_write_conversin_on_c_str (&encode_terminal_buf, | 727 | run_pre_write_conversin_on_c_str (&encode_terminal_buf, |
| 728 | &encode_terminal_bufsize, | 728 | &encode_terminal_bufsize, |
| 729 | nchars, nbytes, coding); | 729 | nchars, nbytes, coding); |
| 730 | nchars = coding->produced_char; | 730 | nchars = coding->produced_char; |
| @@ -1662,7 +1662,7 @@ produce_stretch_glyph (it) | |||
| 1662 | && calc_pixel_width_or_height (&tem, it, prop, 0, 1, &align_to)) | 1662 | && calc_pixel_width_or_height (&tem, it, prop, 0, 1, &align_to)) |
| 1663 | { | 1663 | { |
| 1664 | if (it->glyph_row == NULL || !it->glyph_row->mode_line_p) | 1664 | if (it->glyph_row == NULL || !it->glyph_row->mode_line_p) |
| 1665 | align_to = (align_to < 0 | 1665 | align_to = (align_to < 0 |
| 1666 | ? 0 | 1666 | ? 0 |
| 1667 | : align_to - window_box_left_offset (it->w, TEXT_AREA)); | 1667 | : align_to - window_box_left_offset (it->w, TEXT_AREA)); |
| 1668 | else if (align_to < 0) | 1668 | else if (align_to < 0) |
diff --git a/src/unexelf.c b/src/unexelf.c index e33a9a1aeb3..f50e849fdcf 100644 --- a/src/unexelf.c +++ b/src/unexelf.c | |||
| @@ -702,7 +702,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 702 | #if MAP_ANON == 0 | 702 | #if MAP_ANON == 0 |
| 703 | mmap_fd = open ("/dev/zero", O_RDONLY); | 703 | mmap_fd = open ("/dev/zero", O_RDONLY); |
| 704 | if (mmap_fd < 0) | 704 | if (mmap_fd < 0) |
| 705 | fatal ("Can't open /dev/zero for reading: errno %d\n", errno); | 705 | fatal ("Can't open /dev/zero for reading: errno %d\n", errno, 0); |
| 706 | #endif | 706 | #endif |
| 707 | 707 | ||
| 708 | /* We cannot use malloc here because that may use sbrk. If it does, | 708 | /* We cannot use malloc here because that may use sbrk. If it does, |
| @@ -713,7 +713,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 713 | old_base = mmap (NULL, old_file_size, PROT_READ | PROT_WRITE, | 713 | old_base = mmap (NULL, old_file_size, PROT_READ | PROT_WRITE, |
| 714 | MAP_ANON | MAP_PRIVATE, mmap_fd, 0); | 714 | MAP_ANON | MAP_PRIVATE, mmap_fd, 0); |
| 715 | if (old_base == MAP_FAILED) | 715 | if (old_base == MAP_FAILED) |
| 716 | fatal ("Can't allocate buffer for %s\n", old_name); | 716 | fatal ("Can't allocate buffer for %s\n", old_name, 0); |
| 717 | 717 | ||
| 718 | if (read (old_file, old_base, stat_buf.st_size) != stat_buf.st_size) | 718 | if (read (old_file, old_base, stat_buf.st_size) != stat_buf.st_size) |
| 719 | fatal ("Didn't read all of %s: errno %d\n", old_name, errno); | 719 | fatal ("Didn't read all of %s: errno %d\n", old_name, errno); |
| @@ -802,7 +802,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 802 | new_base = mmap (NULL, new_file_size, PROT_READ | PROT_WRITE, | 802 | new_base = mmap (NULL, new_file_size, PROT_READ | PROT_WRITE, |
| 803 | MAP_ANON | MAP_PRIVATE, mmap_fd, 0); | 803 | MAP_ANON | MAP_PRIVATE, mmap_fd, 0); |
| 804 | if (new_base == MAP_FAILED) | 804 | if (new_base == MAP_FAILED) |
| 805 | fatal ("Can't allocate buffer for %s\n", old_name); | 805 | fatal ("Can't allocate buffer for %s\n", old_name, 0); |
| 806 | 806 | ||
| 807 | new_file_h = (ElfW(Ehdr) *) new_base; | 807 | new_file_h = (ElfW(Ehdr) *) new_base; |
| 808 | new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff); | 808 | new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff); |
| @@ -1079,7 +1079,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 1079 | && old_mdebug_index != -1) | 1079 | && old_mdebug_index != -1) |
| 1080 | { | 1080 | { |
| 1081 | int diff = NEW_SECTION_H(nn).sh_offset | 1081 | int diff = NEW_SECTION_H(nn).sh_offset |
| 1082 | - OLD_SECTION_H(old_mdebug_index).sh_offset; | 1082 | - OLD_SECTION_H(old_mdebug_index).sh_offset; |
| 1083 | HDRR *phdr = (HDRR *)(NEW_SECTION_H (nn).sh_offset + new_base); | 1083 | HDRR *phdr = (HDRR *)(NEW_SECTION_H (nn).sh_offset + new_base); |
| 1084 | 1084 | ||
| 1085 | if (diff) | 1085 | if (diff) |
| @@ -1257,9 +1257,13 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 1257 | /* Write out new_file, and free the buffers. */ | 1257 | /* Write out new_file, and free the buffers. */ |
| 1258 | 1258 | ||
| 1259 | if (write (new_file, new_base, new_file_size) != new_file_size) | 1259 | if (write (new_file, new_base, new_file_size) != new_file_size) |
| 1260 | #ifndef emacs | ||
| 1261 | fatal ("Didn't write %d bytes: errno %d\n", | ||
| 1262 | new_file_size, errno); | ||
| 1263 | #else | ||
| 1260 | fatal ("Didn't write %d bytes to %s: errno %d\n", | 1264 | fatal ("Didn't write %d bytes to %s: errno %d\n", |
| 1261 | new_file_size, new_base, errno); | 1265 | new_file_size, new_base, errno); |
| 1262 | 1266 | #endif | |
| 1263 | munmap (old_base, old_file_size); | 1267 | munmap (old_base, old_file_size); |
| 1264 | munmap (new_base, new_file_size); | 1268 | munmap (new_base, new_file_size); |
| 1265 | 1269 | ||
diff --git a/src/window.c b/src/window.c index 7b3f28ac799..520d5ae8eaa 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -6295,7 +6295,6 @@ selected frame. */) | |||
| 6295 | (frame) | 6295 | (frame) |
| 6296 | Lisp_Object frame; | 6296 | Lisp_Object frame; |
| 6297 | { | 6297 | { |
| 6298 | Lisp_Object alist; | ||
| 6299 | FRAME_PTR f; | 6298 | FRAME_PTR f; |
| 6300 | 6299 | ||
| 6301 | if (NILP (frame)) | 6300 | if (NILP (frame)) |
diff --git a/src/xterm.c b/src/xterm.c index ef40c8b790d..2aa1095f27c 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -8103,7 +8103,6 @@ void | |||
| 8103 | x_calc_absolute_position (f) | 8103 | x_calc_absolute_position (f) |
| 8104 | struct frame *f; | 8104 | struct frame *f; |
| 8105 | { | 8105 | { |
| 8106 | int win_x = 0, win_y = 0; | ||
| 8107 | int flags = f->size_hint_flags; | 8106 | int flags = f->size_hint_flags; |
| 8108 | 8107 | ||
| 8109 | /* We have nothing to do if the current position | 8108 | /* We have nothing to do if the current position |