aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2005-10-23 22:47:29 +0000
committerKaroly Lorentey2005-10-23 22:47:29 +0000
commit6dc59f76f49a35140b3bbdeb9c495609f8e55f3a (patch)
tree3694df29f4ce4ab94220bd377cd0d32b64f98b0a
parenta095475c5f316eed7b27f6e0e6df52dae53dc2a5 (diff)
parentc286104c51b4510ead8e92d265a84aa661ddbf97 (diff)
downloademacs-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
-rw-r--r--ChangeLog2
-rw-r--r--admin/ChangeLog5
-rw-r--r--admin/FOR-RELEASE10
-rw-r--r--etc/ChangeLog13
-rw-r--r--etc/Makefile6
-rw-r--r--etc/NEWS43
-rw-r--r--etc/e/etermbin1149 -> 0 bytes
-rw-r--r--etc/e/eterm-colorbin0 -> 1155 bytes
-rw-r--r--etc/e/eterm-color.ti (renamed from etc/e/eterm.ti)2
-rw-r--r--etc/orgcard.ps1007
-rw-r--r--etc/orgcard.tex12
-rw-r--r--lib-src/ChangeLog5
-rw-r--r--lib-src/etags.c5
-rw-r--r--lisp/ChangeLog286
-rw-r--r--lisp/ChangeLog.102
-rw-r--r--lisp/allout.el1890
-rw-r--r--lisp/bookmark.el15
-rw-r--r--lisp/calc/calc-units.el314
-rw-r--r--lisp/cus-face.el2
-rw-r--r--lisp/desktop.el7
-rw-r--r--lisp/disp-table.el6
-rw-r--r--lisp/emacs-lisp/find-func.el2
-rw-r--r--lisp/emacs-lisp/syntax.el14
-rw-r--r--lisp/font-core.el15
-rw-r--r--lisp/font-lock.el237
-rw-r--r--lisp/frame.el6
-rw-r--r--lisp/ido.el72
-rw-r--r--lisp/image.el125
-rw-r--r--lisp/info.el3
-rw-r--r--lisp/language/vietnamese.el1
-rw-r--r--lisp/loadhist.el29
-rw-r--r--lisp/mail/sendmail.el10
-rw-r--r--lisp/makefile.w32-in1
-rw-r--r--lisp/net/ange-ftp.el7
-rw-r--r--lisp/net/rcirc.el1720
-rw-r--r--lisp/progmodes/etags.el14
-rw-r--r--lisp/progmodes/sh-script.el33
-rw-r--r--lisp/replace.el3
-rw-r--r--lisp/savehist.el7
-rw-r--r--lisp/simple.el11
-rw-r--r--lisp/startup.el11
-rw-r--r--lisp/subr.el4
-rw-r--r--lisp/tar-mode.el12
-rw-r--r--lisp/term.el2
-rw-r--r--lisp/textmodes/fill.el11
-rw-r--r--lisp/textmodes/org.el230
-rw-r--r--lisp/textmodes/paragraphs.el25
-rw-r--r--lisp/textmodes/texinfo.el3
-rw-r--r--lisp/url/ChangeLog9
-rw-r--r--lisp/url/url-dired.el4
-rw-r--r--lisp/url/url-file.el8
-rw-r--r--lisp/url/url-handlers.el15
-rw-r--r--lisp/url/url-http.el4
-rw-r--r--lisp/url/url-nfs.el8
-rw-r--r--lispref/ChangeLog13
-rw-r--r--lispref/display.texi19
-rw-r--r--lispref/loading.texi12
-rw-r--r--mac/ChangeLog5
-rwxr-xr-xmac/make-package12
-rw-r--r--man/ChangeLog10
-rw-r--r--man/custom.texi3
-rw-r--r--man/org.texi152
-rw-r--r--src/ChangeLog75
-rw-r--r--src/buffer.c3
-rw-r--r--src/ccl.c1
-rw-r--r--src/emacs.c2
-rw-r--r--src/fileio.c1
-rw-r--r--src/fns.c2
-rw-r--r--src/image.c109
-rw-r--r--src/lread.c37
-rw-r--r--src/minibuf.c22
-rw-r--r--src/search.c4
-rw-r--r--src/syssignal.h5
-rw-r--r--src/term.c6
-rw-r--r--src/unexelf.c14
-rw-r--r--src/window.c1
-rw-r--r--src/xterm.c1
77 files changed, 5320 insertions, 1477 deletions
diff --git a/ChangeLog b/ChangeLog
index 69096da32de..b725c67f3d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
412005-09-09 Eli Zaretskii <eliz@fencepost.gnu.org> 412005-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 @@
12005-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
12005-10-17 Bill Wohler <wohler@newt.com> 62005-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
39a bitmap appearence. 39a 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.
43This is to avoid allocating insane amounts of memory due to bogus
44image size specifications.
45Note: rather than clipping images that are too big (this may be
46non-trivial to do correctly in all cases -- and thus non-trivial to
47test), 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
59so 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
63TCP/IP server processes created with `make-network-process' consume 53TCP/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 @@
12005-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
62005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change)
7
8 * Makefile (e/eterm-color): Rename eterm to eterm-color.
9
102005-10-18 Chong Yidong <cyd@stupidchicken.com>
11
12 * NEWS: New variable `max-image-size'.
13
12005-10-17 Bill Wohler <wohler@newt.com> 142005-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:
21relock: 21relock:
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.
29TIC=tic 29TIC=tic
30e/eterm: e/eterm.ti 30e/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
diff --git a/etc/NEWS b/etc/NEWS
index 3c9044d95d8..e21f74a0216 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -113,6 +113,11 @@ much pure storage it will approximately need.
113contents of buffers from a core dump and save them to files easily, should 113contents of buffers from a core dump and save them to files easily, should
114emacs crash. 114emacs crash.
115 115
116---
117** The Emacs terminal emulation in term.el uses a different terminfo name.
118The Emacs terminal emulation in term.el now uses "eterm-color" as its
119terminfo 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
1505Rcirc is an Internet relay chat (IRC) client. It supports
1506simultaneous connections to multiple IRC servers. Each discussion
1507takes place in its own buffer. For each connection you can join
1508several channels (many-to-many) and participate in private
1509(one-to-one) chats. Both channel and private chats are contained in
1510separate buffers.
1511
1512To start an IRC session, type M-x irc, and follow the prompts for
1513server, 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
1817decryption. Per-topic basis enables interspersing encrypted-text and
1818clear-text within a single file to your hearts content, using symmetric
1819and/or public key modes. Time-limited key caching, user-provided
1820symmetric key hinting and consistency verification, auto-encryption of
1821pending topics on save, and more, make it easy to use encryption in
1822powerful 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
1798to `woman-use-topic-at-point' and behaves differently: if this 1837to `woman-use-topic-at-point' and behaves differently: if this
1799variable is non-nil, the `woman' command uses the word at point 1838variable 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
4733images 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 @@
1eterm|Emacs term.el terminal emulator term-protocol-version 0.96, 1eterm-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
3857C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED 3857C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED
38645974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0 38645974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0
387801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2 387801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2
388415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E02221090 388415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E14A21FEF
3892BB6DBA4C0F57B6505E06154D2FD2B4867047BA56876080E6355F74A94B6110E 38941EC3005C351D229B3D1186D118B72EE4143CB89492E211F7490D664ACDAD2D9
390519BDFCCE8B1591398350C973E52643947FF0DDF1EF1D5BDC2CB548691337378 39070F1FDD65D3A6D84370B8AC3F5FCCF497D067D5A98CC0319404B6825FDB73587
391CF13E83C7724774281EBCCD04A9A6193DFCAA31067CCDD98444C705CDFC58F57 39151D7066CDD0EB40033BFA664BA84E58540F849C0D7987B8F9A7569879351F681
39251343E8EEF46E9B779B89D59ABE35BAB4F08719816215E434BEB69263F40E144 392AC379AA1CDEADCDAF6910C3BCC38E053F6530D9674D6E5E8352DFE3B4F9D74A8
393B30D52B749F3B66A9147F225777BC69BB72A12C96852AB90629CB453EC8BEF3D 3937F1E76E795110F46E7C5548B85426CEC3E9977B97EFC5DCBA8891784CEEF8917
39462FD39F7DFF6F9466E98EB42D718EC3F40773D76EFB2FF4E7261C3C64A4C937E 39439BC430CC40DC166C51C1984F1734AD604002716FD4488FADC935CF801AB0DD7
395823F633F19C6F58F4BD5E0EF012ECBECC797680A1B862AED6A1DFFD252155E20 3956C865C611509DA17DFBE1A230D6A3F7D21826AEDA368C7EB0DFC740698D2A196
39657E8B6B0156FEED1987931DE5EF1CA6D3B580BEAF56C71D8A2385481CFF22E6E 396C637BACEA9501C7D421EA39C6B49327913ED5CA51990AE2D3E5AA63732907DC2
3977B6D2FB8F139B5FC183BF5FA5E1ECADE0C78F6F43F37AF77F228E6E41B98142C 397F5A64A50D2E20A1881F9B1BAA746F639EA45158DEEF3D84C08AAD15D0FA0FCAF
398085427FF927194E7BE2B84ECCA36BA40DD7EDB158D3DA6109F4668FD12AB988B 398F0C5195372E83862031BD25044DA8B5DA9A9DFB248B001D0F8E957E8810BFE7F
3990D65E1E14C092F865452DC646E0C246376ACA12C01F17D714A4DB87EDE98B6C3 3996507B8B1D8D3E81F33D615F899EC881E671E421D66BAEFB992F15E481EA42330
40060E5A0F414813EF3392168D164463CDB5D55CE2862008ED4FD65F113195E5CE8 4009B880E308BED0527EDBBB718761A8488B218135211541F65096AE8D70F8A8D31
401854F473644A50DAAC5D39A3E10D690ECEE89CABBFA93D2B91F4116FAB704797C 4016F6D498318D7C59D355F95650C05C489BBC03779570A4F8FEBC0FF26716243FB
402C8397FDDC9F364013CDCAE9E9704B1DE28E2CD476AF57C3A30460AF14634C05E 40215D4D03E6E8A8FC09F3F06EB19DBA15E5CF724243C0CE942EFC0771E267C15DC
4037F1F232F563BFE0C7C3D669700A38A4752AE88BB814DFD08B40E9E7F8BFA0252 40330CC67D47504E7CD7FB549D03EDBC6D655EC9BD66160085A2AE4797BE3E87933
404177405ECFE96FC249A6F1B530AF5CF106E21EFE0AC0729C36385E022BBA827F1 404B77CCD6DCF1026E598CB760903ECC82CAE5F6139EFB2B980B7C72552D0A8291F
40568C11A91E90CA1472AB5767F14821E8FE5E32C7DB4A88FB64E746187CEF23FCE 405F3CCA05628B50DECD30786F7DC9ECC532AE8AC212562F7F691D8CE393E02FF78
406C499D2472AF392EBB6F79F714AC991F390769C25DC58D364147D868AC08DD739 406971E6D5A607F3394A57FF995BF0AFB94E16A619C89A3BE5F49F0AC96A65C76AA
407FA4602613467E3F2B04ECCCD12333F55D80BA4132883B2498D652E61D4E0096C 407305C15CD82BC540D42BA924BC728948A6EEABF03A7D2E5448226D6AA94729DE9
408B5193FA063E5C4131397D76C9656CE31CDC41D24C17F3208971BB853FDCB3F62 4088CCA2D5832408F1685761DF7376EAE3BA2C1E5D1CC394D93E681B3931DE59B1A
409B3CC083E6D9682CACA448112C84C0FC9FB19C8AB13E0C33EDFEC2A4CC16AB125 409E69218C1108EB831FDACDFCEFE511E471665D8124E795F675E10814006F950EC
410044C048B65011725D34571D9C235736B61A485F7FF0835C7294A6FF2E48194F1 41033CC631392FB4C0A49D99E01EC3559A9D761F0C877982865FD2F61B97BCC3C4D
4118FFF4C5A055091AFF95E674F9CD2E43ECCA77F4876B5B50A1D5B38319D594246 41167392977694F889E3C5DD8DACC55498FC38586BE2AA0F754B618EC820C7C80C7
412CCA3CD4F81AB3CE49B648FB21F0959801B814422D31DA4F7C3581032F8310E76 41258145708C6B98C5163D2B1EBFF47116E4D38A046A1E4FD901110F1A1045CE82E
41395660ABF1A1DB536081F61FBB83AE5C8B47A9E0575FC475754DEC3689B28582C 413C2020AFC6AAAEDFA12028E2142B2B3C743907C4E8D1090D29C105BE00D870796
414016062AA7AA63EE703DBC73ACCB5316DC3A12A2B7926D132D5B463B01452B475 414D76E5D390490E7DE28C0A8A0AB39A6E9247EF7C5B20B01F55ECCB14F875BEA2E
41551862ED934A55F3DEB560FE2CAC39909C99CBDCA1F7239D122D9FFDE76D90D8E 415CE4397FF9523E58FE23AF03EC2289D401C1048BAECB98394EC222615811D06F0
4160576A645714E190BE1938E8A9EF1E4E5C55AC58899C2ED571F246A612EB73EBD 416D162CF83F6F4C7A87A4DACD987AD4B64428F992AF4EC203DEEDCCEC70C3368A7
41724B76697C6A4FFDF1447CA182096A771B26788DD9456E0DD04C83119B0E1D0C7 4179570872B3AAAAE34A6E7168005DE1E5F6AF4C469205E19739271735BB60127B9
4183C4323F13AC8786BF2B89F3759180E58AA599D2F981FE280E82768C0E3ABBBA7 41850153CE55340595903F815841594ECE6B84AAF2E83725C4C8995D39EF436EB0D
419CC14B6521FE6179CDD5EFD68E9BDC2F53B5D6C25155564176618EA019D0BA472 419AA7C9BA7BA7A4BC876D5C554FFE4A055CF8815650B5D6B7048744AB7EB39560C
42076C553A27871443019F43AE1B1B898AAFE70EA1F274C57582E70719AF3A53597 42009FE285561A0A04190B35170F3306CCBBE6A37ED07BECF11E890BD890FED9B80
4211E88D7603DC99E5113062024B63E9BE65CE676E4F61DDB8F77E40C47A8F7D6A8 421330AC0D1288C028E7B1E8753C32F1C03E01C694D69561524E930583B8F98B82F
4222590664A97ED1D14547FCBED2C7E37BC09558954D4E3B93DFC48E504BCCE7865 422EA5832D1283F330D4ABDF1B941386CF90028C8D4F33B453B9AD6137D69F0FCDF
423E44F4C479A27F3BCF551203BB51F443630B06F3D75D24EE7478B1AF78130174F 42353E0BB814947DC58E45DC165478E74E07AAF3B5EF3F79A90F24A18B7F9CB8057
424FCE0B804DBCE20F62989ECD03A0CC1A42A1F7FBB673EED9E93E1B36D6E3E9905 424A94085D4C2B2FF62ECED65D8C47BB939AE969AEFBAE94F6B230F965D21BC9C2D
42524E71A3391786905FFF7A2B56FC23AE64D4478D25ECDFAE9235606EEDC854E62 4257C22B7F8CAC5FB01891A63EC9FC9900AEAC00AB0743D201DCD68AFEC5F877F4E
426F2EE5F50849138DE28C569D08961EACE1E6AA1787825B0706C532ABE724AD9D9 4263EA013E883AB0FF98AD3A4D85ADA45C5F51CB33061EA7129C1FB68D146450014
42787B1F459B0197A9F2B8002686E814BC91A91DEC9C0BE90F3F76242E3709228E3 427E98BAD39D0CC6A58E0F1D6E3AD6BD0F0FDDB9E3123843FBBFBC7C6C5A4854AF9
428DE8116E7138751A8854E8A515BBA1E0F8A16C77BFABB6562601B85E1497E6E82 4281F6E260D6E09CD14B764276F5F33E6539FAB56C3ABB3AB24ACDD7D1937B6A459
429AE4B8688DD6FDEFCD53226058BC6923EE68A195F375DC42448DD39905439A38D 4299D846E6AF2138B361A827CA9C5D8AE11CDD8714EAB13BE223C81FBCCE0FFF57A
4301B61CC01CEF9D2618F72E05E018A9E83AB1BACA13D1FAEE362F60C2E00523558 430779FF50E761E533AFE08A5AFADB1FBF2DA3CBB35E7003C76D205040BCF2C1815
431E801B3BC8F79E4079D10627DAC3EE837B39337BFA4FCCE26FFAE8B9AAD60B710 4310FCB1609829AC06A1D2CFF13ADA1C23BD25EDE48815255E0C0CC62901D210EA2
4320BDDAADC236257D1DC9A7C41F83EE6F44573A357A3A1820D03685C919D80293C 4322F5A1F8330AC0677DFB0F2CD0E8922570584A21C0278941EE54F9CC993BE5BDB
4331276AAB97166B2D0D82D1045075648ACCA7933FF2B68F7584DA6E78899F0F5C2 4336DA0EF7ACA47555152AA2EDF27F5CFB2E3D0512795F464D30FD2C1F71241EC90
434247A46AD8162A61671A1B633DF24EBFCC985C029223B98362431118BD6ADFAE5 4342EF44228E348D3E696BDCEB802354583BBFB408879320D23D735E7C06A0A513A
43561A8C91E79306D1E3D4DFA5073C6BAB2DD04D441418B47015A7A0F21DA1C1B8C 435E053521E2365A4430F131612CB06FACC0F436B9F36E927F5AB4142F9E18BE935
4360E9B5DAF91CDCB69F86B62B4C003BE88B4DAE2D5F9DC00FEA9D3136B7EBF92E2 436892C440CE0D23939723F9C9680130AF7BC1FAEC6381EF863E9824A4E619646B1
4377AD8617DEEEE72E869E2483548B56B90BC88F8E767676341B45FD0C000B8E080 4372FC51140B5AD7A1DA320E3BFB961A5C807B919DB572898ABBDF7AA831641426B
43842CC156B75ABFA7026D54B31FFE73D285A2330C7698727BCA6511F8C404994EB 4388F743177E98D22574D0F0EB55673533D3105E4C708697B61ACD89C5C5F6E46AA
4398C8D437CB593291E8816FFFE3E4BD7BAADA3CB009982EC7F0192C5429FF37D2A 4399D5EB05B7E5ED1B663AA74D84EE8BC451A44459DA6399FD72992DED97BF05AF2
440AC8DD62D454A8B50857804BDB8EBA7347902EEDCB394FF153503E77174D71439 44059139D6470F50EA8D263F645D9C0EBFA5BA30E8CD7D4F489E0EB18B5C07BCE4C
441A57D9941E1EC82D2CC49847933FF387BC7EC6E730BA6EFE48A9BB5B1A6785DCC 441CACD432ED5316356DE895C256C5FB47EBA7AABC06A92E6A360BC9174ED0F5754
442AD7A9557FF402D8AF864E0FAEB0AAAE4C93243F3E6C550A18047F2CB9AB57FAC 44208F4539D8ADD26D7B27FD753572667649F8A2EDAB9A7D312FD5C26503384980F
443CE3F57FA2072D37763FB32172C2908B152948BE21051D26715C9326B858D538C 443345E11F3722283EF2DB9EE15A4F04CB6797B15AE0970BC2747A7F9A229275638
444B9C8A6DDF567C6DC6E7DBFE7CFD29A498490AC16D964B1FC1FD81B95735A5E3B 4447BCDD3B7BF28FF5A143999CCF53AF3E02D8AE4B9AE572D7C2B77350509A91044
44503CE325D2138969138F3B6CB027E54C987E4C81E52EFA77A824B40F71B2EA2CC 44589F3725CB95A0F124F3E9D7504127684617509ABF65DF8821B6A168365CA625B
446E98F2AB61546E4BFADE41731E48D6EE82C19257DD9FFF78CF3D01A2055863099 446139CBF549F604FB8319B3C62770FB61114B5EA4FB1F992AA99F32543BB4464C3
44721C06567DF3F852DC96838488CBB41D5D587BAC66C9586F093E493E1EFA65260 447C86C5D85FCA3E7E1285A51167D5C17608A6C0CAEF95952461A93B1FC9CFFBC50
4489B9F0148227A5D3F69FFF499675F0A52EF0615E8272825E69D0D8496CAD940CA 448602F25835D3A566300DAF0FCA7046930CBCA09155621BD65518ECD5B698A6FA3
44993655503DA72D62D8D35C6E25337ADF834198C750910461C25965925D0DEF604 449A391E92872397BA95E7B5EA69A0EE6F9C74ECB5AA83C2FAF2B031D17E0B6FBBD
450844C1257BFF739EAD0918630473F5B9E88A5AB0417815239189E0738A1134655 450CA02AA882F8925967CA744D3837890DC7D1ACBBD1F0BDA8E61B88A230F4B8291
451DCF9B009A68120E823B23C770F7AD7C0A11EBE9962D3F14940C8D2C1A7295F63 45173D37F471AF6AB22BB3434F00F3A35A330B69459F40DC5EE430AD2F9710580B5
452908BD22A418F4E8F81526FC827CBA16BA143050278D4F2FECBBFAFD3DC8003F8 452E93F75AC1E6B516138D92BC9EE6D3085ED02616EA1474848DFEFF3A7DD443DF0
45381FD27C56330B33BEBA0EFEF1F0384C45756B1A74339E232873504E55DB50E3B 4533B421295AF2BC090C869E92C2A774FC327D15C6AB3EE92E2B16C401740E9B1B9
45459A2CA167D209142C1ED6029313C73B7D83B0E22B1410C01519206795FA33F63 454B22B4663C9348DD5F24264352C56D872CE93DA420AA8922E572F587600346B8E
455C88A326500EB96700A24A434382BEEA0D0692E12E3AC72D568AA0133B0CCCF70 4554194D11B37433D0874BBD33A8B2E67F36D7A55298664F9E96DDA20846F9E9746
456C34C979B31975536089EA02286AC17FAC1CC980FDB0BA382F7755602DCB18CEA 456657A4F0A63D14437AC61F22DAAB23095BBD7FF8C1EB24D43DFB6A2C62B574A96
457C862957FD6DA71D7180B3AFA8851458B5DA45DD8C5336E7033F4E957CFC2C08D 457CAB867CF40194ED7CD9EB634AD076B42337636CFE681137A96F393CD73DE2FAA
4581B3F550A219034ACFE7353BDB815B7B65BAF0F947BFC3C5E47AAB9FEE752B938 458904D9F703D141D344272DD9DE9F18C74929E8DFF9CD108E69E5540A8C8D10B9D
45934F5E6AADE58FD6F827B0649DB56F21097A780F57E253AA57CA6D5C97AB407B8 4593D715CBCA486ABB3E010BA1F20F728ED2C1855B85AAE3E9AA00ACCC7DB968CD4
4608646B1652557344AB12A962D745016BF5E3E712E56520A30D2D4725FA67B2AC4 4603A03EB9270B8BF51C74881BFDABD1B25E51B3E91FF7137FBBDD7D8077E3EA554
4618E331D28063727F0DCB494D6DE60F01FC86DD340EB5C8201CEE5C83B141A6FF9 4613125D1E104B26596D96EAB6B19D148A037CCAAA3469AD06B424DE6521795668A
46272974B88E35BE6061626D570539AB1BA69183EBD64FEDDE0E3C8221A5190DA08 4625D8AB2F65264CC20B20BD7C5D0DDF2AE0932F99D8400DC31F81030AACEA27251
46358853CB53920A109561473A0E0A3E6C89E66F9A5372483CDF9CB9F05F6AD5AD1 46378278C3FACBCCDC668DCECDA033F23D408BFB7E2A787D77433E23D8A36452FA9
464F673B2DB23090B73C08E0D914366AFF8190366111E0504E11A1B123E2E752B75 4647339E1A9036034A6C1D10162BC409D6B8F899CD0448C64DA643E5A38A70470CE
46590728C69D7FBCCFD6411CBE4AF4734CD67F4F4CF231F38F4A2085C9896C5CE05 4658C8F251D7916D7786F91BD21A15FCCA149A035DD219B523F23C1CA6B07C04678
4668DC64395C62FDFB3ED92FBF66451DA41385E35FF0E0B381DCEBAF01CB9550679 466EE2ED5DECE5C1B4DD835FDFB1A50D4BC57491203E521E85B8BD5635F2BCDCD00
467A0B3016A0E6CAC3E9C9B6FCDD0991B3AD4DB08B899A321FB78EE4205A0440285 467A3CF1125C8B29191E5192A22A725E0A0A26E4A6F4E19EC36E506B78EB090FA14
468BE7D4AECB70BF2574EFD1A8E715AF68DC99E30DE8233C557AA120584199A80EB 468C3F5C4476665D6BD48BE1990D3B53E9BF58D70253490E9D2BB274A16F8BCB411
469BCABC03A01AAEF4259F4740D3E217288BBDD85F690BFF141CAD097B6E7353364 469B9B1133ECA1723C52328CBF108DD84B55F8CFAA7C642824357A76A2FA12D8BBF
470CE25F9818D743CE61A3EC151B120462A411332FE32F279F7BE76014AC2BF7C44 470392474CD645BC9AB430E6031BE0220F603DC75498A4189CCB239E4F3B27B4076
471C9B2E6A156F4F63C2522470963BF1FE855AD6A083349BAE5A077AE1381F0E264 471C3793944F26B44330FB42973EF70E86F740C684F123F121BDE3758C551EEFC49
4724F3CC894E16A0B1E5195B66CB83F0904E3C9C3154E87231CFF119A00165C4338 47269A082AD4F3FFA89509A7B8922CFB8C971C072D498712A1A5F6BF254C9A4CBA4
4737EBE20D9F9F7E73AE9DBFF5A5B25E241A52C180843852748415EB5F040B38D59 473AA3652A56675C7359DE901E292A9826D3BC140843A7799A05D20C56AE586F178
474FA08110F79D73ABDF3AABCB1A95933E7A56120D63B473ACA80B80769638ED878 474090E9E55876958C665923401901D4825DD5C9B7AB686AE1B38314CDFB6DAAC1B
4750E0513D8134962A1C350712424910E4528AB2C27F805E73D0C204B94809C5872 475FCF2CFB4C404E173988FB1CC35297B3DC7A32F45DB7C1971973F9BA501982760
476DE2B60DB49C7414001AE889875E6FE43F8D3BDE20EA92F4B92F9E9077F96987A 476E353B8DE47C6065C128680E51C080D5D3A0C9BE09C25D85E4D1E6087C9CF4F51
477FAF2EF0CE7FD75387CC8E98CCEC81F1EC31955098C66936CFAC4200A7896B245 47713AB80E75EC442CE2F2E0B6F7D13733E939A3F983BA540FA236A6AADAB9C7734
478CD57EE8BFF38CF671576240C466CD5AE235E46DDA8825C72619AD25EBD9B4D20 478510C858581725CFEB2A46BAECDCAFF7E726D140F50C2A0109ECA4C1ADAAFF17C
479B0DBC776CFB8E8F988903E59573D77D9CD6AC5CA6447323B9B6B9D4EA9C975A6 4793269DD90145A9007639A54DFACDAD0FE945E97A370DAF3F0B4D66F847E0CBC17
480CAC725E12C3B10BD7D38BED398F49D132D850B737979658BE3D6585D63052366 480F8D6E5D5E124BC85379C1FB15E82280F157ABDEB2CB67CC25DD0C4DF157B5177
481255234F4A3A6CFA9E1B1CA462CD6FBFE67F8B02E7988BD6C81AECB1396AFB4C9 48160A7EA491389E573905653A694F31DAD0052BFE5A252C902B3976F5522526DB0
4826CF9F41A9426D1AE18A3CA08062CD08FF430935081B48EF4FF53093B1BD25B15 482CB9423C892CC9348C40DD844BF5F87BCE0D8C7E42AAABB2DAFA3001976360946
48313B8F3207B3F5AF6788364DD45853A1ABB21E67848184228238C7290ECDD5B6F 4838DD8EEEB4D2F1A5CE8139AF70FFE8C72E8CD4F891C679D93D7BAF53B850CE9B3
4846A755FCA9D9422FB325FC74A8831C33F053DED1525FC298DCFA03F382FE259CB 4847672AD44717E88EB64C9EBB80727A6CDE2E07A14E686B5A452CC456FFE933F75
4856DA17A718CFBC755A5EA1B46AACB7C5882B341D01EF761625804C83A2073E41E 485F323DFB14573F37D26F04CDFF33F6560BDFE530B4E3352F44608EB26D49EEC8C
486C1B47DF7037677D53BEBB9D1EBCE59E1D10E68C4E4BC9972443FFDE127B6A7AC 486E1BDFF8ECE3823670BDDF72C4FF89327ABA853713667E4EC04D8981644D0AA5F
4870ACA3D597FD27904183920B6050DF7F6D2B6EFF4FDE0BF73863020BD00C03803 4875D872283F02F1B108533B833A33BAAE41CE4C4097242DDCA81896EC33E38F88D
488DF70E829030D042FF85E288550BA31479A53EA746760D4D330EF65A9CD017EB4 4880ECD5F240C274A5949BEE7EDA1511A2636028161A8612EF580116BD6C212821A
48975528EDC8F9D527098258D7C89A642333C73CEB113F80D3D507E0D7E62BECEC5 489B0C917365705937924B58BCA415E2B3C6E3191E80921F0A49F2D3AC371DEA089
490C63C8545A01F94E2ED182472AA6AC86864E3725C31930B0ED0B8AE8AC33FE5D2 49078FCFAA20EB6325FF3D9E57717F0A75135401322746EDE63970B7EBB07728CFA
4915A2AADDCECA9877DBBB9CBDD7255F5AE1F0D64A399447AAECAC3360D77BB85D0 491641B345A2C00B9C526191AE25B66EB97AB3A32A41D57D9B2501BBD4765137BD1
49249988DF9FD104F31917A03ED7C3319CD51EF4DE19D7EAA3292DD8D1BE8A729AF 49204993E60EBC3DE43523B24BE3B4BA26F493C38168DA4899251AE82541118B28D
493ED576D7D298EEF456B4E252B9057A8186328ADAFE674FD28936FA4A66AA8CEFE 493C653F14878DC30A9CADB3C8833968F135FCD7BFB1D2FE028C74636491D9FC892
494FD75A180F88B56FF34C353EA48E19D94BD98B0BD330A06D2FDE75D950EED3A61 49481553B1775FF95FF9CAF675A2E7208CA84610F9C39F37474E18569C0209EBDCC
495ED046D38B86429EAD3C8FD076BBF224F97A07EB96DF43027A1F3C841080B08D9 495EAAF9D06A63499C6EFC91AA8FDB9F159A6FAB1F62DFE56FA0E37BD5BDA0F17E4
49690669E035C80E052EF8C209097AC6C1EA442E6E553055D659573CC1764866C76 496FAE3E27A36F95629EC2064D6A411108E721FD1091D6E9AAA5B0C0B3D41833C62
4974A998871A49FE54F852DC81C19EB833DCB827C4FFEA4203C1539FB6057006EFC 4974733535A726EB6AB936498812D50200AB915F8CAEA47C036F1542AFBE2E53067
4988C9FAAF9E4676EA22CAC6907105292F59169E0690CAAC7C5D71E6CA25220BB09 4986366E355003FE82F28A456E79E921853B15964E911D08176F607E695FCF541A7
4996B815EE86C14BB4FC2EB5F684E96A5A23813F0979D07990723861939EA40A6A8 499C20A3CE2A2835093F8CD0FDE40DBF10B8E96D06EFBD2D7CABAF21D411B105044
500B6B360F5DB0062A426036CEF16485B4BBB0A18056E8BEA923884EB5876F82A90 500431A1E87CF0CCEB10D9A9D09E84307DD362E885160EA24DC0A06D0308347E3FD
501F9B175F1F9C0DEAC73DBF7A8B8B735C271CCB85181FA5007706E31D349571B9B 501E8FD32456AD30269D2DC5D0E34379382B637493ECF9F143F44022A1B045BB3F3
502C876251A0DEB34DB2715CD37B5F38CE8D5AF46C338C98B70FF11535D355ACFC7 5026E99BF86A1AD87FEF11786DCD4443459C7F5BB2B4F3914E162DA2FD998E46067
5039107738B8907A52BEEE7EF642593D486EE15CEA7D17328F58D2C453FFC9D5422 50307E10461AF5E065685A43BA4F1A843001D412550BC868DE93A91740B62F08026
50435084974E464ADD547B26F3FA94988DF0B1F36ECD048D41C8459A258698DA53A 5043B37B93D95448DBAEFF1089726A975FCB9BD5375457173AD766C8F99DCC54952
505B71546604E7EBACAD7A9A949451A5841B3CBFC65E818B6923003CC9CB2D0EE17 5054AC00377464E80A168669A183FD69A2E31BC22989E4F34F4ACF043424598BBA5
50654DB8F558DA7CC3E5678CA5F2317A0713B8CA73D4B4F555BF5CB00410B7CAC34 50663A6EE2FF886BB0DD160FD91860CAC052E47A55BD334A5F97F8DE2ED3675D3FA
507C862B645F311E814A23F60810162C6E7FCC2830ABE3BEF1F60975F1ADEE9174A 507B838CA438EBA043D638793F04477EA8201C718124597CF1693BB99A627AFAB1D
50882E67ADFEAF665F4DEB6EFA2A12F2A44AFF5D5B73FE036AF2BDC271E44E5C119 5085345D2F17CC96A4387BD5822186B3E488DCB0A1531F931424D9E75D19685CD15
509F3165F00248C3CFBE900A4D925B9E99BD7B72549DA2E26BDDAA760936F7D056E 50909A5014BE0FD6CDE63FF735D1BA182D015877DF843368FD7A8AC312D53A951B5
51016214EFC4BF143588FDC9195389359F05FB38B07FA192895B5482BC16DA48FB2 510FA02B36337098B97B1B4FA84133BD030F7E8647B8D32697DF9E9B15D08B43187
511675F45BE53D1FD413192E344AE1B8D4D34B6DE4BD2C5F0CCAC25D8C416E82FF4 511BBF609E074F0DA9CDEE2A959D46410B33E1C91A3BD703BE0B7E9698CF942BD9A
5128DD67C02CE58BE6C1411750195A6FC57186BA2A501D9E94E55B99435FF0B80A9 512564C9B7F806FF1ECF1FF29C95F8733AE1BC08A607108A09E3B4B2919523164CF
513468ABE2014EB30AADC5512550BCC194B2654CF439E669779FFA2D0D956B02311 513ACB794B5D3438B55F72700257BC5BC00735E5BDE3DF55202841314593C815857
5149A7C15A34D3EB890D1971307E85CF10C316A560454ABEFE5B9E4BF9E12D2C18B 514428574BBD6DF0DF89D69B7246F212E81F88320B21D4E9B1BFE85329AA1794FE9
515D42ABCC8A9E848028BE311B0315E3EF2DA66F87C0204D62172F3DA5392489B4D 515C8F7FA2B8A3668A2E4129350B330074831072AF3E48E672AF033D89C1C56A830
5166DE4005E73F3C7CA198F6EAF1359C7B41E0A9B6A1D4E5BA635A376157910521D 5165D358A92F340D0D5AF454DF9D8731215747F30990B10C18BAD25DBA0883C080D
517516AD8BF7275725C81D75D553D6C45807422C979E85896967933C80B693FAFDD 5178098362B9A9A0ADD65EAEFEE0DA098BDD1D351B262F18562164300DA97EC921B
5187A0BF5CFD1CB0C19CB60517BC725F5B5AE16D38E9878CC4B80B5CA95C942E6FC 518E290B5B3C68B8695C4BFA1081CCC558E17D64A42B8769F217747D850813D66BF
5192DABE3617E5CF76CC6CD83F257E7B7B746D164A26B451D400C8177946FA447EE 5195A399CD0E8B145D7C09527F6F9CEE142BD62B7F050C4B34D2001BA539633D9AC
5206A68C961E78DFBC76DF68AEBD9E1061DC729088E4C2FE68DB331A031B42BFB26 520E02A1A4FE6225931E56289151500BDAB61556F7D599C8EC2FCC90B4DA68AF3AC
52114045F941615EA0D1ADB1F7672FF6726AC59AF4835115B14ADB0C6422BAE128B 521370EC9FB3ED88649561481D299B57B7800CC76B3E8094F6C46832625AFF88D98
522956F8AA6F35773757D13EF82C640F1D79E7904AE638958A63F8D4B48534B6758 52299F49FD3A089606A43DB6FB466118E44BC51397CA38E6251E6C8B100AF453754
523EE840A51857C852EB04680C6B5789D0EF46178A02801CDE990D2C1689B7FCA63 5236922D3E1F1F197DABF2B07B98B77B9451F62F4CC6543B4C27ACEECBC0640930F
524D3F3953340DBFDCA3FEDE5F026F0C15EB43848B78A6C2D6C01231FDDDC0A67CF 52430336891857317B46FC98DD069AED6944CD0B527C961BDA2232ED479D72C7C54
525AF1C673B95370C4FB888B551BC360762DB048D91F614A764E9EB618111122664 525C44D4EF3AD0B1F9F96A9F5A1D35D91EE77BAE7C77326BD0DDBD396BC3C78FAF5
526C33BDDA6C8996B8B85A3583C5661B5B66B8222B46325F6244E0323B3B3EEE469 526DFEEEB59B05F0B1FE8E1347F26D09DC5534B3F1BB47B897154515E893795D4A9
527433F262863585D54DF1F11AEF52C2114CB0AFCDCD2AF7C6C7ED155B1F58B84C1 527897D7BCEA2D54AB60EB39F67399FF8777FACC4B706FC2A6137DA53A343BDC1DD
528AB11520AB2D62C3DECDD638D83E42195B8315BCB37C1A7A0BE6BA1274AC9C4FB 528C0EBF311507475F6D00FD877EA29C8DAC798BFB33D9B1506AD583A2C508D231F
529FB9647197DED96DD50FBDFE9E46050400B78F04744E687ED5F51DCD04067DACB 5290EDF3ACBD0B48DCD12F4789AFE4B2B18390ACACB86E1333AC38DA0C1D0158061
530E4299E7EEC824DEBE6D165C463B920A4BBD08EC3554F4CEE40F044529AA8F059 5309CDEDB47CBC1CD43D191C47DC214C61EF98CD5065F63D203696B384EF1FDE092
53181AEC16191D42BCE549DC373DC8252D8AB83C4512BCB4FDF83603D629B26E302 53178F5DECDA175900094D90AAE4CC26A7AE779B4393DC49DBCAFAA7F319421F54F
532A49E90B234503D5622FFB038E8EA2CE5794FA2E97E80FE5231ECE372A35DB9B5 5327A3AFC61D68CC5F74668C7028666B95DC14E522F11200155893EDDAD0B06F60F
533D7D86AC8B690635AC11789940493C7D37934E2FDF8F56433824C7F2AAFA357D4 53333D2CDC6F75FF167606FBE426B627FB8661AB7B9ED104AB11ECAA5EED3717D5A
5346952E877C901139D1F68F379DE71A51C0F7EAA3272A412744C52F9782DAFA97B 534B491E48C5A6E778274EB5B854135DF8FF07CFE9795CC8C69079CACA09FFE5C08
5358A753144988536ADAE7964B6E7D63191C1C521DCB90656DD8AF540C67D30B644 535FC73A41C878B439E706F6C33093D4AE7E13B17EF32E115B684E9A27DB490CC35
536048B0CC17F54090F1CAE35B59F190BDC2A473BA8BBAC2D8E4004E6BFB02FE922 536DBCA03AFF0ACA4825176AB8071299BFE1F1FBB225E6915F0D52C6A5AEBD603D2
537849F6DE710ABDE45BF0CBCC91EA5FE97806C059617D5EB64FBBEDBC570A39F5C 537151C5441BEA1EE87D9F4010C4642CF89B2776351C30153B226A1A5C4654BB683
538DB4C9E35F3C57E6693196066843B53DF3633C3E44F4A3857DEE327121DFB0BF6 5384AA2107029F120A491BD4103D186F800B9B785C953150094080848B6AF8969F6
5393CFA4F3FD2EE79DE54ED1E66168B6718F0DB0EAE4B0387AC2D680E60BAE49478 5392FE34B3631F4E50DC0EA5FE4C0826CEDA30D3F3E2983FCEC4EC872420A6ED8AF
5400D89683C04CF89CB5B22CA2A5B4F56827388AEC1263EC0E0918E12E26834FF3D 540EC8B02888837927D0A7574031B2853921132DE3C564F24E909FBC63690B02033
541E53BF07C6670109AC0236F4676C014782B9AB4C139499A0E72A8FF6101A39F5B 5410D3069D8DDA63DE8DA7667D07810FDD5D4C877DDC1C180F667D6361B77E666D0
54299B33D6EF20B9A959159EC1BDFE1AAC8846352DE5B3B29137A34E8ACD5883FD9 54229AC20B15BDDE9E42ACA7802A4B74D31E91CE3FCF105A7F65B543172C8DF6248
54356F140D6BF3A66A4E2B547CF555DBAA3C8A04E2616873C76AD8E0257C8224EA9 543256541684153DA1EC7550E86B55DA0E87B70DF90D88358C9AC8FECA82AABCB39
5445EF69C5EE5BBA0D9DAA564EE3648A3F19AC70652EF6B2529D87E11FF3102A846 544552DC96D1EC3310264EA111713839C45F469D16CE5510807897D58C3B2154429
5454AB88679CF80547A3D94A2EFFAC31005CAB09BEF2B9D20B5AEB4FA1882126B62 545A2A01B2F8956B7FABF2764E131A7A819772BE63983E017737286CF2CA8C42A90
546B7C151CE7A504381B3E24EE88FC789B0ED87A13A3A04AB0742940DEEB24B5D3D 5462ACFAA2AADA5EE0B125415518D1F19BAE94E3EF1419A2CF9A954C37E078CE895
54775FDCDA9B817FA318C932E9397E4E4011714EA81D69717F21470ABA8BA20DDDD 547C582992082BFF6E7A6C93C322A76A7AB7D96532B0D91603461C0903C9464D2F5
548A9ECF00C6804214BC82B20C91A445C6B0B5158F57315CF1939539F6A2FFEF426 5487F93383EB60120E8246DE8FB13A8C5253591A4FEA03E20BCDB972851572174F6
549E493FCF410E5D576AF15B178E77E65B79328A79ECC7A681C6C8585EFCE1DC079 549DEC5F8D863641E7868FFA14D5087F98A13B7142769E04447FD93EC724D3B34CF
550C0F140D40EC95B468564DE0BAFA0EB3E70BE89797146F56B7BE9A4B7BF3E5B8F 55039CE00821D0E9FA5DC4255AF09F985174AE10C86FB18BE347A0E228723D00B0B
551BCECD50A1793FCE65EBA1E335247E3964BE095810964326D580CF2F26133A799 551968644728D65B7F3B726B287DA8419536F7BD24E7F64BA8FFCF260373183DFEF
5521A078D83BD6E550812CC56CF295A1E6545B339440A1D3392866B9E4500428130 55236FD6696ED0DA7F01D48551C51B07276C39A3F4E2771E36DCE6A01EBA288868C
553E42B64F1E4824FB0D785F787C7A0515DD39678008950E25564E3E148190F8C30 5538FD6E7CFB42318DF9350BF110A57BC4E3DAA29D922A39EFAF2A307912B1123EB
554922D719A29798C3C120EEDD5BC0F4C321F82C08761E68D8400993655CEB31839 5544E0AC2F8006FCDE4D27E66E0494E52938403C0D06E7898DE0C9A550081FAE7A1
555A98154FE243670B464AC40BAD7F18893F517A09D7EB5CB30CAD9ADF62DF7D9DA 5550998F8AC69B3FBD7903293C3DF14DD1FBEEDCC3A3ACA963137A768025CE3FB50
5565F60EC004A9B9A49DD43005B66E05EDEDBCD49B94DCA88E91F6D359ECF19FC2D 556939B0571F1A89237FABD6ED4AEC9D14428FC1C77FA5405B8FD3DFA363072C841
557660EEDB26CD608D0B2E0867633CF353F16804E2E8155C9DF6B6FEEEB2CE1FEF0 557D0A118CCE8484C9BE169BF1CA9BB822F5248AD79D18821236DCF4B4615E3CC9F
5589492C875FDDA09F81D8266766E6CE28199D1EA777FF67F71F3F7BEB60A2DEF9E 558FA968FAC447C718C3178C0EB5C7560B1E858ABDB3E2F0476D10CF52DF8CF62B0
55968B059FB0135812071176E44A70C38A3FA80648225631B16B17D683343313F52 5597B6FF34D91D63901C1B35D58585449C903198846DB9DB58787F2AAFF1E392807
560810F6E7D60BB7C895317C6C0A93289B1A29E6D221E55BE350547FD775CE2F77F 560F0FABADA9576D36CCFEC151C64CBA1E91CDDC9B96D59A9743072C8D45C2CCB2F
56194ACA7430811E849E86F87C4913D04E15B704A8059C9F4E9B15EB1F32F081F19 56114BE3125DE785EF47E874C4BAAA3A487DF75B8C6F680664176C9097B1C3176DD
56249255ABA9890AE20DEF0BCEB216B5372DE32AED9577FFD9E06 562DBAD73CC453120BE2B47F5247C215E790B79BACA9C817CCE7F8DA2D8F791F5E3
563C1B9F32A34AE5B452CCD75FC55C1785AB8AB43029D6663ED0A6855FCC56B5443
5642379BDA7EF132F
5630000000000000000000000000000000000000000000000000000000000000000 5650000000000000000000000000000000000000000000000000000000000000000
5640000000000000000000000000000000000000000000000000000000000000000 5660000000000000000000000000000000000000000000000000000000000000000
5650000000000000000000000000000000000000000000000000000000000000000 5670000000000000000000000000000000000000000000000000000000000000000
@@ -2031,271 +2033,273 @@ A208ED52A9684A802003AAD6D9FCD5A3CF635FCC938931CB94C751212CCCDA6E
20316EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B 20336EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B
20322E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3 20342E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3
203342EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189 203542EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189
20348EAEDFDBC8802E6C8D2F78857CE66105FEFAA26AA62235515B9DF83D86CA7F06 203698B28CF2783D9BCBCF089F9E4BA80AE4FE0C21376BC144EB419F3C346A540126
20354887E80BC9C14A4C5974463498998052A711AF175999917AB6530A5981D5FC02 20378DF517CB30F5C2CE09D7A269D6A02229EF415D7D9412198AABE493F3B7344688
2036F6F5BDAFD469D43E2E2134C6BFF0B68ED9CABD7A14B0F0C2427F14682AD3E1E5 203872145D60CD95F113A968F7C0C8FD1A4550EEB73BFB9231FE6C942BF859FDD93A
2037EC92396EF1DF4FC20F1B574F1FDF7BE782DAEB1490C2182F017E633F47EE6B56 2039E4D428B7E16F01633448536CBDED367E9F725417992A4C7297DF9048760E2E64
2038971A2837D4C9E8C78E5B28D34BA512FBD85CC07117D7A261904D6E2C57413264 2040FAD313DF07F86486996EC840E235EB5B661F915092A6A80D0CC932FC4FFBC7C1
2039DC745E50EACD437C729BCA09AA240BF7F99B11DABC36B90AD717BED1439D1649 2041B1B9A1E7E71936CAE5B0729BF1D8B8BF42D0520FB7591D868D18DC4692B21881
2040A8F219ABF3C3E8275B4C41DD3251907E90601B7625C72E4EC7BB58EE544E09CC 2042AB73A3FFB3A0C6DAC4C9C6757EA9F17955336AA938DF2380AF0EEBD694CFE55A
2041D86769AE126E8325A6997F7163187B190B0C73F76783EE86095540C40C86CDBE 2043D8BE01F9991D94DE9980879E94FB1959CA21EA09BFF8D335D24C6B1DBEA913E2
2042B2ED24860D2224024AA004929555C0C4EA645EFEE62B7A20DFFAB78A256704E4 20449757D5110C7018A959C9C20873440610C113BCF278CF74EE3EB1B2BEA6BCA663
20430BE2A5E2DFD2086BB24376D399A14888757AACCCAAB87C123445F38C7B2D6B75 2045C451D157CF420C4CDCD949309FD52FDF4189DA36ECC22CEEC43A43337F6BB755
20443E7EB1D517A4B4C8770251666F76C1F1C79DE62671BD3D0CAD2C1434D9E0E931 2046BF613B711D1970B4F5D1C120064169F70BCA3A784B06B2542EFFB32FB5A0A534
2045883723EB811D9906BE8305278E586493C90CEAA20307064A29F20BB204E5CEA8 20474C560825DD4CE51941AC685E0CC87AF48AACDF6CFB9720CAB78588A05910431F
2046FE94F52A5DE7C1F3F7403F642F29E81F2B38760DB0F0DFE9775FDFE49C685F69 2048096A2CE6059506C9496EBCF1737F801C66E96CB8093C650A49DC7D1AC6B81FFB
2047360C20D3ACAFD0BF01C813DEF6C95F16BFB43923A78B5B20112BBA77DCFB3F81 2049C20DC5BA3AC25C709A2FB2C848F203CC862BFECF195115FDB3BE0EB82FA85B0B
20487DE00A59336368DE9737943A9B33160D3FA500B5C74D36BDACC54A5D6862056E 20506E83A4093122A7F459AA330606E6B6CF32C5C46656DA827AD81A86D162C7EE6C
2049B02CD766308328E2C8C7FC41A0E9B21C75C08219195CD22FC5D3A99AC9FB25C7 20510A3C0D61FACEACA53E633519D7FA77DA807D0035C88C86FAE3167C8BDCF24481
20501D72A08B5B86B4866CBA3CC965743CFDB0FBD2DC51EB24BA7BC9E6C99A03259E 20520387070337F0388FDDB757C2A5CFAD9C2883F7F2FBB71CCD3043B35684F4ACF9
2051B78BFBAE4DA928215E1B969FD6B00E3C44393AE4C0F3A18E380A55BB8EAD5713 2053BC0A50F9C33ECD20084082D97A71E9680E90A560B6C1760408F7CC1C18347AD2
205244D479967A07C711E8DB24C3E01EC9F0B6C2F936DBFB3F3B5FBF0850C55B9A38 2054391C7D660D50126E5B26EB49384B95BAF472769097F8FD4566D03C776F18AC7C
20532C546BED80AFE9B30E3AA308FD575FBF349F4C556A1F5227495EB5A313CC6AAA 2055C68934D967A97840034FE6966A4C44384283D25549B89163A50C27CA0E9D130F
2054BA779533C79CC35EE45C86333E307864EDD1BB5D45BC3058BA88A351FD39312B 2056E01B62AB10A8461CAF49567BF6C5A37442AF6EFAFDF352B5BDCE9301D1C0EEA4
2055B031A56703E91714EEE44056F6B826090B63CD30144C95B88A3E5B250A2B2AF8 20573CCBCF70A8AF88C6C8A2EFA29541ACA6E8DA7254E4FA8B1768BED363E885C639
20569254E991853F7C8165185BAEBA1F088C9AE10B16B618F8E32352DEB52967E3A9 2058256E15CE6AB3F8D5F5F19828041A25E0B5F21AE224C8CB7F51333ACFE8C820CF
2057A39E6DF485104508B77B3569AF0FF6AC768EAB7432BCD14F18B0A6B2D7AF694D 205967ECD12BCE156DEB74737FF42B3A2684679EA97ACE6E24A1A9ECD7DAC0F00248
2058958E51BF543A3A337FE6CA854586F2FD61C5835A939AD374CB05BC334CD893C8 2060BE2A74F13F7808F8B6D001882951DBA633E4D21C47E326270AD50E91F1717F28
2059031FE1D92920DB07488228C03FDEF985574836565885E5023CEFE96AD27D2F7F 20611A183A3F7603CE9F9DD8D798C5CF6D94144F1E2CB378726523E7B2080B753CFE
2060468DE1FE34C26216CF4219288A88DB2512CC9A79BBC672D38A430B643B64D09A 2062D7D53773219CB1EFE995DC623A1EFFE70215F3DC17CC0695DBBAD0DEF043D57E
2061C2A82DD14F6AC4085C2B2D950839F1B3DBE701AD3F4488ADFC4953056AE03B04 2063226BE50D8F31C5DB8401636BA1FFAE520EBCF2AC99C4390E4D878028DF493B45
20620CAB248A3697303B74171D342AC88F6E436A28970752BBDDA6A49CA78DFC76EB 206493CC8971CBED42848099D1CAF836A594802973FCA3BC632CF8DFEDAACD30F3B8
20638A2EAF1E6E663DE24E221125555B79CFD316BD450196DFE80AFC35F9D0EFD36E 206523933ACB3833F98296207ECC26336902EE4E61AC47F838CCA4BA4343F37337FF
2064FA0D1050E4CE2DF26B9605FB8950E2BBE6C873F1621DDD52FC977D9A7E5E5DCB 2066BC2F5D2C17B7496D794BDC9FCADF1F68710EF935BEBCA4F766D1C463D36BA87A
20653C7200B775513A763647F6DF8C6EBCB415242654867A519A57880271AB25A9C8 206777634687592D7570EFD3218A155AF4F799D425EBAECDD6D53FF4BAE6AC83413B
20669255B10E0D0FEF324CC97D1BE4278C69A7ED352FFDD4B83FA569CDF24E8698E3 2068819D0EBC3BE6F5B0503D39629FADA6A2210B7EED0D23EE9536948C36D1BCE955
206704CAB5E8F66EB18BACADCB452E7E2D93FAA3D7DED9E392E7A82B2E343F61CC6C 2069978E6F5A5D5150913C1C9675FB4CC807136796691E186405E6188F536730D89F
2068D8943214CB064C361930803CF4C470925857C83D9FA4871854E84980762F8B11 207087987272EFE130166003DB3A723063C331688174788EB915C09C6D73037E0721
2069CAC395DC7C24DA3D94C70903CF0B406F67D71E37835A40A676CEE1780C955E7E 2071B43F4365D9974F1786CDCA4DE9F2EF193DD46149B5A24098FD0106045E309809
20702699F15A82AF0138A106E0BB7C179F1480678F90D7794777652300C073D8127C 2072C88067CB5C35DB60F64DFFDF774BB30035F9C4509534F34A07E50A04BFAF6747
20719C0F6C08AF449C339C324B286BCF56CA6CB069D351AAEE86C04BBF3BFED533B5 207331D3A2A56AB7F755BDF243345811E8AAB524A920B0F17EE914D3015EFBDD74A9
20724993C9EDAE588F9122BBF1D830E1B024235EBF5842FCD14DA0E759453A0A87D0 2074868823DB2338532AA4094051E3CD43B29B18EB3B9AAD4C4EF5D755AA3D323D11
2073569C89320936EF3A9A93865600133C2800BD77A49A7CB1EA1ABC17A89AEA5383 20759440B1A2C01A0375BCF13162A3962224F04A28FC15D5000B796E39F80016F858
207450740DB2DBA5A00ABB556FDD5181B8086CC1683703829BD9995E9B9928ED6CE6 2076989E64B8B9B43289FDF3CCE2D020AD995A3D7736C4A7BCCD31440EAC5518B970
20754ADACDFB73DE333CA7B8F7DB17EB25C30846D9DF5110FBF2A5B004E80486B5F0 2077043E2AF5D3B5618FD9D5C5716403B43D2773D94CEE751CB545AE7C8AF1431FF1
2076F0A5E9EE3B37FDF87E52A65CA61DAF5774521BE090875605FC33445A8CB47470 2078C9C8B77065FC01530E2BDCB91308510BFFB756432885FFE7E51B8F5D078D2ED1
20775C088A7AAED828BD3D93BE80F93CCBB71B702DA053B9CF4C5D949678B54E7D7B 20791D894839E7AAD86FC90850472B81CE2B9F67BCF8AF334B1CCD1E4C3AAB470867
20788B4D28E3283310890884A4DEE9BA606770C8FC52FAA87A1846E402F5110F79CF 2080591E32CC9EDDFE53FACDC1F10AB7D5200B79C5F52D0278D47E6A5D1487018879
2079685AD45742AA00FA8304E668BB4B3A78BA2BE8717306419F4EE1EC696B4C8CD9 2081528FA32BE86D7CA2C7D74A4C83DC5403EE7B5ECD0265AC43381C55C9A2A7D0B0
20800877326DE7DCCE619D86F9A75C194CD7406A9B1B9C962A381DA83707264F879F 2082100D59724CEBF79065CF467722D098AEEA112DE97D3A63B5DA728AD9649EEE38
2081FF16DBFB7B15D38347423C4D14CB8B26007BF591AC6A0FA815852433CE4AC18A 20830FC7E3C2DF87FC75FC71FE7A1FB29CE0412A292E7D0AA49C6EB3169726CA4D35
20824FD19818F04737C71BBF48C925699AFCFDD25D92010069D2568E655B43A2A88E 20844B346F90F80759A98A4FACCD4BD3443C5D495209D5B8371CD9F609B2F31D0089
20833F734C472714E5FC7CAD6189611A10FC281118DA6D78743B9F5CA56301888AB4 208553BE78E3031A481353B21AC539D1D0DB15D125C5A215B85C967330877CCB8E4E
20841B4099F9593D046157054869A6267C12474BABDAF528DD0E0F2452C38052787C 2086FFA3B31297E1FF68B1F037146EE0CF72442E5D97231D60A780EFAEBD557BDF25
208512B04D3F2A46888BBA6ED82374485BDFF8B887B8238105D63E912B01D25FB099 20872841E68C8D9DD235D19D7949A847BA813AFDC78C45A3ADC0C594DDE1502632AC
2086834F60570D0E50CFF2ABC21162EAED3B6D1E8F3575E285EB59A3CFE0D4291255 2088C9DDF7F22C37569C4B6721F5D4E0DC02AD038A293C751E4270D83CCE38E33C0D
208740EFDDD282C4A213FD3313C21DC6D90AD561435DF54236CA665EE4B45D7F57C8 2089935A016C2E48A3B0B302EBC153592938C504B6E2F534DF5905DF530889A46DE2
2088C43B9AFF7AB6E35C1D3BF42CC45DAD238B10F782559007BBA003B508CB25C41F 2090EF823D01C77EC705A38576040991BE498E2ABB8AF0EDF14F762E43FAD1F77BFA
20898CA0B35779C6B5EA62D3F3D4543E12863DCC7A41432DF12464F119E9584C8BFD 2091526507E86F108E6BC293E737B1CEF52CE5F4601AB761B18761351C8865F6C1D4
2090FD46563D85185C21A221D398AC93B79C1206975DAB906418E4F27DB339B6B50E 2092662420E1E761ECD0D3ADD8DDA3B4B8DFB78BC27F33BFE6CC5A2A60B31CEB007E
2091BE1CB70F5ADACA9635B61CCC4DC831CC3EF73AB139061D725190EA2E0C8FD7C6 20939B6D571226EFD67FAD3EABFFEE981225FEDE1627645BB5E881907B0F30E66158
20928D805D2D19A2F54769D68ACE92B6DBF22C0A2EDB9B45C604E724FABE2762AA93 2094251F0FFE3FA1C010C937B6C8DC8C4A8649156947B204563B30167D4D480EA6D5
20932F30FE0FF0FFA874FD655D416F254BC4EE83EFC2489DDA222C669FDDDC14170E 2095E74571126EC1F19961983A135064DE001B9F0F2FD8D63D1D9A9992964239056F
2094607B85563BECB3D0D397CDF9CFD6E1D7FF5116334317A188FB8537B38B328CDE 20961983B84C152AAEC909E8B27FA29D309EC0FAC516F297438DF16F5DC70E3CCFA2
20952D05354E9774AAA3BD0E21053683879F89324F1714B42DF0A6E9D902BA5373E3 2097CA7ACC09A83BC9B7912CDD58E0B367BF41F581162C100F3633A8DF70BFA80565
20962A6E95367DD0CFCEC5F1576631969BC441CA14E5E927FE46CB26601D492B8A9E 20986EAA455575E8433805C923ACCD1DA4FD9A08B5A344329C61F897749DBAC3644E
2097D5FB32EC9BECA60CA49A241C5F432B2E71B4EC4AE2E4CAF8A488CE89639F2008 2099F76DEA49E774150D58B868B341B40EF1ED951DD2E8EFB95C2B71C0F9FE556CAC
209804762E7F895F5865655E81AEEF5B4CB02E47ABEA8E35F95B289B5BF52D760539 2100AA0B805105F924AD53DF8A8792293A7C6EC634BBF784534EC60AFDDDE7A5ECFD
209953C5F2950A886B43E4D6AF59199A6C8CDAA2BB2767D5ABDEFFCD40EEFA0B1D02 21017DD6399B84BED1B6603DB2807E0021CBEA0C2AB014EBDC670D082AFAB26B3151
2100ED629131B0FFBD54693A602AC1BD15745E2C80C4A9DB293EA112393CC16A3904 2102101B9111E538CC9508786CD5B4322F6D8BE43455BC8D585663C2494F2A941AF9
2101A26BA8FFD378D0C13D656ECEEBCCDB6F177777CB24359791F987BBC6A8F9F33F 21035DF7A512F936105B6C0B71E4A29C189CB175F1B4ADCFEF1EE300551A573ECDEE
210254919747ABC99A0C994F65151C777472AF32480E21399F6FF16BAB2B1501FE31 2104BCD73740A44D6FCA66E22AF39A236E27C4BACDB41D616039AB10B308C0671129
21039D991F02F20235D5117B1255622EDECC52FB0A752C9DC5CF7DB8B8213E0386E1 21054DF112BCC3F0709D96E00C54FC5D335632C107058AAD26366DE0A1E8D2448845
21044CE8CA8116B3326DE080035488E7E68F52DB93B456B7DBE5CE4A10298083B1DA 210699DB48A0F053672ACF7208F8EC728FAD0950599396813185862034E128C29EB2
21058C1C682D701299958D772E7ADD0E94944F0C4CD12A23DE08FAC08469CDA4B7FA 21075D0EA2C06F8B067F2199455E44998E7B523FF19A1F7CDAB6BA06E166E471090C
21067E7C86A82C998975B0CF64527869AA22388B3338C0DB25B26B3C5BB43DF9AB3A 2108C3C7C2005CC0757F5A07CB3B1C6D050D1BDB00BE0DCD9EBB1A7CFF6E4BCF162E
21077A356DAA33B0B36B4C39330635FE1D8BD33A00208B49F15CE341A54C5698F447 2109FC95B6895F5E6E90C10D6D8F17CAC2B271105BAB3EA0605C8561E3DDD996DBA3
210843638F0B8EEEC6BA29DE5F016365CD09342039C6C30D2C25E38BF1D6DBB78580 21105DCF762D40B38DFA30086967C407F20618613CC7E2A854FF0F25CEED4DAA58FD
2109F0BF68CDFBD27D25AA0D9B60D91AE236157C9C5293046695E6C6C74388CB4E69 21114EF8C4DA724D2B21D0DBE3F53D2D9D26FD15DAFAF81DFB2809B05BBE5B2A79B6
211043B316C090C3641E1B846FAC1579770B4A2D0F55847CA1162DEDFD59D544E402 21126BE13F46F5A94F43763AAF260231DD3C2774A165FE4D2E7C8788F23609E36249
21110D472889C3B8177FC1FC57A1D56894750787A6388A9F53004575B85437674062 2113622A714A19B91ECEAC16D64CF55F761A801815A384506B6A3342EADB2671B107
2112E93B2517E379DFD6F735B363D5588591A1D5C384193B6FC50CF4BFF941307783 21147E2099F4480AB218B8FE2CA0F6696851F6431DC6758E7C4E551ED27BAF6E28DB
21133D23C679FB825C99E536B1D0638AE039CD1B38D3FDD72FF18A3E686C32576328 211583AD73C80504F0ABE98095A525EFF2667E1F23380D5E9B5406830B8EE04A82D6
2114F16A3090AA2D5527009F821A5F6DAEC910982407451BC6442762B8486C3F923C 21160C016ECA5D0E0D22253CD23E5D4F758A919833AD851EAE0AB007BB05E6234D86
21154F2EA39609025D5BC6345EB42A74342304819397459C7C576AA92ECEB4584D58 2117FB4070BC98506C718BD3FDEB8F98CDEC8F628F1BEF4727630C09987EE93A05A3
2116BF275974AF38FD6CE06A25EC5659D9BE7F616602D48CD61A3F9303500D1A1DA1 2118E27FDD103ED344DCF579D4E47AA29EAC5E0415C64319AB8121EE933F2DEF6C65
2117E6D0EAD6141B3E5209E6728DC6436AC89E27D591C4A1057467C5EE398CFFBDC5 211992D3067DAC8D228F566265AE3F51C5B5B63847066C8E15766E9C17212D17BFF3
2118E9E9DBE6649F926671D15AC22E4DA06D2E882BB371682172D21F108D62BABC36 21203EDE7E9380DC748E30D7A441020650E6244E0A0F10B9CCB08D9D184F31557E86
211928F0A65F816E0F389C27419EFA98B070B4F761AF9E8277D1AAA42D8CA68B51CA 2121728D0D17E69D02F9139F114BE9365B5789ECD22D525B0B3F4F77BAE59FD5EEB3
212021C09C83AD39A9B94EB527F4E114EEAD8DFA8996EA536E0FB71EFCAB6EBD5EA0 21229D04F26B3EEE5107BE27FF59AE320732610814C77CC42C6A2CFBBDAC95B1692E
21211C3840716B944F6DD6B7BA486F188202D879A07242550A1487F96E0704EBA09E 2123CB3AB1E0663590BD79F72322ED01417F7839CDCDD86E16A3FF7486D1BBBFBEA7
2122BF6EBCA8AEEFE48EB5CE14CB3E3D7823DDE0EE6700D5E5D60D76A677FE18AD56 2124CC9A15F1D85E99982E657D5E6CCEC362878C63C70776B7F3129A81E71FAC756C
21236752653E7333CC4C21229079F40F4DCC756362B8BBF4AC77C527E285956B1543 21253B9D5BC099F11271EE45E8912DD6E519BE47540FA7E6CDEF4E0AE2FA78EC9909
21244268C9CCFDECF6E4E5A9B65893AC7C707465E0502AF76E458B6193B943F8CB3E 2126A3BA4AA0498A42D363EF9BD3EA3F44DD192054D99E2BA96AE79D58F1FBF4FEF0
2125AEDDEC24C24AD1DF95B958EB48F9D79608A2C53D281F77801B1D0191E2456B17 21271C0BE069B0D181A6BA16E7856A55A1252CB6E1CAE718F061B0D69A697F30212D
2126825825502754E688CACD557422C5EEF2221F39DE067051611D118020DD2CF23B 2128ABAF64B49495CE8C2C3A021F1B63EFBECAEB14FF0F933679D4825ABA027BFD16
2127F7530C9F085AD552E0EE0E2A0967631D36D3F19F16D0C3EBA4806B1B050F74E3 21298FEEDA3BEDB9333856DD7DC8DEE7C6F1A6E571996CA3850C3EC6F7AB56217F89
2128D101E032C64C8950560EA38C473099D45DB3E9B3ECE0F5DD604B3AB8CE424618 2130BD0E5D306E9D173050124427C0639C9CB1093BC5DFAA4975639E844BD57128FD
2129BFB6BF2A357CA3FDE707BA64B42BF9585E95F717FAA6157E6B03D098EED24DF5 21318565FAB45473C77772EF4B5AF7AD6BBA291A06952A9FE634909480CDCA5D2924
2130DA296997ABFD50D085092AF1FBA05DD63A354200134E6CC02AC5978CD7F5DB4C 2132AAC8A378DE44DEC27FB92F3EB49C2CEFBE1C9C8FF1ABEAD47EBE178369E562CD
21319F6480918FE5348DD6908C6CC33413E41B41E308CA598AE14E61C1E61F8EED96 213383863901139FB4CD2C62B5813AC5FA42972CD918E866C218F88F0F358066E169
2132995E95D2AF962AD7E7E08AE45FE5A15A9C9B9C9A4A003F80EE6A35EC9DE3428A 2134AEAB4A6706F7B863BB95ED3F75F0B8C358511167E30277CA4B7D9C3829A6C4AE
213398863BBD9F3247BBD3661EABA6DB4A885E3CF961E3FA211BC75B97C01AF1D196 2135382314835A27CF8DB04BD2E399315430B41AE224403FB3DC5A6E6E703CBD290F
21345A67092149A7D759804BDCE977EB1BBE8E150DF922B7E9AB6F90A8F4373BDDE2 21360C186179130FD6D362480F725AF7DA8FC53C3A74DFC8358BA617299FF5FB80EE
2135AEB4BEB35DA4876795B5401A84BC613A43F425FCF92E9F9EF479CCC441C2B35C 21373F50D30ED2ACA85ED86802C32FF46B6EEA7C574A0571A73B11E5260F8DCB7C3A
2136EF2745005AA4890E904004C66434408374D569A1ED0B6CFB30A26C91C9ADC8F3 21388664F92A46775E19F1EE687862A4DF83C32B055EDE4FE626C6227B0B2CCC8C42
213707EC65241B13F5B9741527DBE436E8C9DB6FF461A78391AC480D5A8AF8DF33AE 2139065FCFE0EBA1778CA4AF232E795337F1F581B7904EACBE02B7C331F1089F2021
213879AB46290DDD2C1D6BD0CBAC35EE36496EAE145D52353E6EB263DFE620EB54B0 21402E14F5B5F0D0F20A157BDB8CF35DBCE84930A8B594FC8D49B86DDFC8D7698F59
213949651CA5B551077E59A0963F707F1DEB5B329BDB46F59537854B982C7A5C5D43 2141552900CA17022719DA2DE504CB3EF99369FEAEE2B8B692F0A63A5380D4E3ADC2
21406DD9398FB9D035DA69C9874094104F4EF073E8FD995C8FC81D8B285E22CEB34D 2142B8A1A4C3D4B521F6A96AD5F04FAD50D4365038A650FF9B78CFB879B546006A42
2141568F6609A5902886875DE5C52C496D5146D200BF495F5EC143B93CC49E5C2A08 2143468D77BEAA748544C863C4CCA988E13C4FEC9D4516A4056A79B8162198B0B0ED
2142D4267B161D4AAD19A05EF614886BC60A66A6342FB499480F38BDEBC97E0A5C1E 2144598F9A702420A7A466628922632F3EAA31D81063D23706D2BABE7072FD3F1869
21435759955496515E544266E1DC67620A31A47997B6AD78F5DAB4640EF4AFC5E0FE 214559256BCDABE36BFA51C205ABB4FE86E0818930A18BEF080E680AD529E3C53B69
2144EAB4677B4D02CEB83868BB7E0192DC0B8B2A32A78575A4019A7137F206223238 2146640C131261131FABD462CBDCDCFB35AD7EE87A9B651394CCB46E992BDF79C47F
2145C754551A6644A3D3DFFBF819916ED174FDEF284DABE4179FF24F406303547ABF 21477044848CDBCF7260DB57EC13AFF48F65FAC15FBB95A84DB9B5AA65CD2A44A5A4
2146D453EF90B6713978992A11DF0D0CBCCF423AF7D29B171AA79978EEA46574BF14 2148BBD2598F7C46E0F55FBD3CD60D8D26B384367F3680FB23A431C4F9E4013B5FEF
21472A631C701B921C6746067A40AC96F5A05D3F60834F5A63363D05D44CFE0E6820 214979674CC608B23BA474CEE87C7C1C89505F95AF66DADA954C08B90DF6EA5C3D35
2148E467E28CF920243F3B01A09F20D91DDACDEDB5EDA65CC9CA01C395BCE006F690 21502B6B28A4E65078A4644625C6B5748CD9F0C8E6CD8DAFCC6768448C0E1844B067
21498D83231B3015692822C11F541E5D4A6651A315151A26C4A145D7D4644682B094 2151B8FE4642141CFD6AF18BE1D8D0C42ADF8EA56B2DECB0E105102329E01A326D2B
21509A8870FD7E6AD333E7A78933BACD0F28A1B8CBCA57A7FE19AB2165A22648D09C 2152185371ED000FF8F10B2642191C1C8896C287CC5B02F7D0D2961311E9FDE97967
21517796E45EF0F36605561BE1F039106DA70ED7C603081D459F004CDA4B4CD201EC 2153125F17AF2BC1C0D9E81082A0F2CAAFA85586E83DCF821169F643E378ED0C06AB
2152E7653A8311DC66B95AE6DBBDEEBA50016D14ADE0488FE1AB0377B7049A0F9A09 2154F0107C05B6C20E8C219B1EA372AFE14556BB26E265DDB35EC1A29E698ADDDC82
215314B16EA09F1EE2565D567EE0FA21C712F5DBD1CC53E8C23E40338E43C4965BE4 2155B3DB2749CC168E27B40ED391851B5D9265D59BAFC8ED28A3317D56BED94EE667
2154EEF1CAE961E2F2C9775BD78274FB62016A7363FA3D3936D02667EA6841775DF9 2156C829329BACB09D1B1F7A416F23BCE70366C60E5CB4F058F00A490C2FCAF90255
21553CBF9165389CCFA9392D139735575C3662F0355BC343851BCEDD7CA61278EB0B 2157EDD033037A2DD77F576CDF4B793FD62E5EF1DA9CA07EF7196356FC92141F0786
2156A7810A4317C52B15F559C0F0762A0F4A17D52052779B655C3F77CD0613D07367 21587E55CA7D70BD6C095106F365D80C5E56DA0A2EFF8BD6F4274138ED558DC888C1
215752BB9BF23D904FD1B70AD6C107EB1831C241BA878BD7CF0B2EFAA4BD2E3F9BCF 21591795AED007DE68040372974BAF475526BD0833CEFB3D115467DBA008921D3B7B
2158D09A2A4F2C9EE9D742ED921721701AC2ACD6E9754CDB6E1EAD891B0D63474600 216020213B1FEFAC68B2F8881274841562A098631B4DF3055E4F993C8E3668431C87
215924C221A5550472C685E6BC6ADAF7BAD61135D960B66B59A524423CF6815407B5 2161363304114F12F7A6741E63B57EFFAD0451125284641B7B63A155786F0F30AAA6
216029ACEE91F08C4F3AFF74931786D014BDF6F85A57C50C50CA13082F0F962D8A7D 2162B4AA243909838427881299D4A812037868176E78080B58D71BD4DB349F5FC40B
2161D91BB97760E1DF2A8051FEE387AEC967524E8AA2D6D4C824AADD46EDF9683DB5 216393E93AB792213570A54812E4289E434C7C41EC8EB1D725071DF30C07955B8354
21626FDD72CCA7D000BE8BD526F5AC2990ECAA151A4B65F87BACAB9CEDFE7F2BE5BF 2164142DED8CC2746850ABEBFC9FB474A8A4B4C955E2C4B1B95C20FB7D7785D6B2C2
21630DA724EF6AA670E37CB8DFCE9D32A90590831C9E71FA8C929F01C09D379B819F 216527C53F46B5650208C05D672AC1591BE11F4EE6C139315C57010445E788312C39
2164C86B1F1CA2DCCAD147496898756107F3B1EA3FF25D603E625C3ADB1A122C4010 2166A20F2316933C10C67BAC33DAF32442A0321E4C9372C2B4D80414454E518C65DD
2165B1A8BE368C268F1938CC1DA24ED7F22634A4B3DEBCEFE6AC250B9384F7A34131 2167B0D18FECA4B9D7A86A11E9B3F2E56119450551092CB2E7B4DDD3858FA8BC80E5
216636A38C1589FFA8EDB470D62EE09EE9F19E6CC76F0EBDA2C9E9D6276C466F02BD 21686C883015EA7B770A8B51D56AD6A14D22DAF80229DF1026A723C1BA653915123F
21675F6F9E9AF9A74793B8B36C36E8C198215EB0259F871FD4356A9FFB3337988711 2169A1D57F518B44F0613521CDD32EB9A1E4E986FF5093B81985A00E0CFF355C61C0
21685A84B7829626D3C7FBAD3D4FD5EA30953408BB97D77229F5C27150D72CBB6A6C 2170A8D01874FB5C462A3B3A317E027AF79D5820B473A61CE2D6F759CB48B441341C
21694585FE13E452D977DBF7EC2639F06B0D0420D965CAB90E1797DE9D201E1219AA 2171C98393C31626FB7459EDE4953D114D2A3C3266EB03F4A4545BB737E6C3BF0B5B
21703B06CD074470641FE3CDD17A17E68FB3B7F2B5498F2C74D6209EB97EF626286C 21724186E06CD1EEBB1DC515A1727CBECC5770212BD638BD04D1A4F2662E8DEA0713
21711982FD51DB1B80CF8D3AAC6C449AF5B32966D483B12C4C2C4C2359523B603892 2173B3580AEFA6AA79AA7DDFEF04F877B1C7C763B553FC4DB31E7E73FAD239C8B871
217213109BA0D7E208DC74CFC4583AF2F0E50AE9458F5112A780991C8B6EA248E76E 2174208FE433C3902A84A0580CC2F7EF3BE276175F6A6197FBEE6E039A1AC985D478
217315C78B3B068C5BFFB1F015A9639EFBCCCC5507206D204EC199CE2D38A2A2F7ED 217558C86EDCE81805640D4A87D5AE7155DF9F2092966CA7A1ACF9B04AD4ADFE7EFF
2174E9604F1F146AAC9F21B0F6E306202E5BA947C38FA3C9CFE0E2332A903E9F9360 21764FF711FC4D9E9CF66C395A26F25309BE09019E61F5B70C50BEF2EE54CCEDB425
2175C3C8750D8DA48FA999397CB7C98F130E449E6116D120DA2902137B9B9CD92D4F 2177B9A0A84E2E142E4B388D3DD88062AA6FFD55B671AA4442011FD17EA9FA0B67E2
217648BA0A077EDF1BE73E43A4C445D9D3738EFE2674FB1849F2037D7CE3D43D126A 2178D4A2BF06F00F5B90EB8B4318F026B9F3D7862266615E87A226A0BACB505E0FD3
2177607D72B5EEDD491EBDBC9E45EE8AD7E07DE4B0AB22698CCA2800DC307C2D3726 21792340134D25DA26A26EB4569D95B57DFFD5BCFE6CB99AD2CCE1B98C250A621F70
2178A98D432531FED2BD1FFE8329A23FFE76837D502A7453FA4EDD1C6EEC8DDCC96B 2180A5B45601163E7CBBC9FB212E7FC224C6C9B8B3AD91D68B5244428AE7309CE55C
2179C23543F90CC51B078F513E0444CA873332E146B87785078084B6E5E89DF07C68 21811213620A6E7AEB379F5C2374A10948A21E307EB064D46BB725F6CCFD4F0BEDBF
21803777F088436E1D5E5D3EC8078E5D4079AE89C546EEEF93B5EC16CB8C6D95051B 218213F46A187209D019FEB51E0743A145821281A3FD631CC2A4B1A26BD2A1260756
2181DF0D5B1B59487483402198EE5D20DF471DC29330012EB2934FF9321E5F55D42E 21833B54198F049B25A82FC4A40E3253B0A9B96E9E5A8E6FA072BC0C4D4957F4FF35
21829DDAC8B2A5ABC0549D3E31F4E700F92F92D41991E3680C74D3C8D78FC37F24E0 21841C57C6511C9DF81D02BEEA475A63108A5C89DDFCEF769227899948AA28D761F3
21836A00CB6FA5145BBA9637DE8A8BCB5DA54E4CBF2A42874A277D8BE7BE258BDFB3 2185233CB498C5178B8EF70CA1AE12602B5BB28D113B77E275D952EEFCA9111F921B
2184580E4360299187051E62C27B2C79CDDB9B279A2059325CBA86847B13893AA6D9 2186C8AC69D314A324B93B03C97DE285958FB13FCF5D4B2F9E855CE45345ED0D8E39
2185E497C6A771868237B064D20953D44DEDCDA37586ECDE68994A96EB8013753EF2 21875615922765C0CAA288969E056D81CAF8012E4DF8FC543DC0FD54E1B32529C054
2186CAACD7045E07B8440DCBE8DCBD6862A14E349691C93C83F9F7F9E67C5A746BC0 2188862911D2061DAE5AC576AF98809CACF6A86405B0A83DBBE664917625AD60143D
21877864B3E9938BB5A8D244DE021D45B7766364F5AA1BC2BA0633404F00AD6A097C 2189A22DDD3FC2419A51285E8774E5BE1632EC12E29B6805E54B168B1C003385A74D
2188DC400FADF01566720B6341407C60045EEDD3187B79EE341FB867A0D1C61903BA 2190385865C5A46F79692553AF2792C11DBB6911E3FDB8CF3DD6F55D31E6C1F86D3B
21892FF729083A1D94B1B2CC31E28F6D098135E9008BF046650D8EA8881EC30C03CE 219119B86B8EAC47837594EF0EEB73D8EE06BB39B77A40E5C47752A314FD837F09BA
2190DEAC187BC4B92E3F8F90F6E433E3053A2841D95B4CD5A5536D2FD8BA3C8BFCA9 21925A84A5C73111B6AFD932B5B4A4E680428F4840AD627379E9E812730577AADE4F
2191BA560A0171B941AD077865DCFA6D7DCAAF5EBE285BD0807A7207BE986E8351BE 2193C96F1D16FB6D0BFA89779AA11708F81C9A5EEA31D608B2FA8898235219D82F81
219203064839D4358B16264538A453D42C095552F552383FBA044C7F2D47A3A69EC4 21941162F1DB9E2A85F397653B8A57D9E36380A70543A1492D217323D69E42278594
21936E5FD899E0E55CF0B94BDACBC436660DD0CB9C24030345944BF4C62FFA0C7A63 2195B7F54368880E22CD2E2F3BF701DA9CC29DE0C62AB31BCDAE82A2F695C98FEE90
219435F86BC16EB62F5B117458B12ED15387165036F2A2E106BF8D388075382D886E 2196EECA21BA77D17298F7E2DE6F74544B53CB85638E239EF670172951CC203F37DD
21955FCE7DE83E43F9145D0DAD6CCD00772F6D3C0804BA01B9DF8F31AFC3B2E0F7C1 219751471D4727E6FA2098076D9177EB995C676E21AC27AD84B90DF5620FD9952A6B
2196976A83DFFD9DE717AAEB614EE6C32DFB3E0592BDC29C18ED416AB637E8769C7C 2198637EA0337053F39A8101938A30F6B8E37D94D7FE31C980560519B6517155DED0
21979F0D9AC0F017A9CC75BA10EF9B30ED1C31DAA78D6CA6F3F71A988F0FBB0BA50E 2199A419B6D36CBEB64AF00518300C4AC1B9AD4336C7B099651AFC70D68C624DFB3B
21984775BD68A0FA366E16351193EC5390EC553437388EBE4153E678D850DFDBDBDD 22005A944675EA3ED1AE5FA7ADB63E5E0763F6BC4D4E83F8B1D1F355ACCB0F4869A0
2199BDFA73F47A3E6A800EEFDA70402B73E571B3B55A6475C055A89D0504423F829D 2201C29000EE68B8D3284D782874761908D83E461D247798A35BA1B4356C4869AAB2
2200FA76DD2C7D78280429E6527AAA64AD7FD074F300732771ACA43288CDBB3D26FD 22020263D440DFF69BF5ABE9362B1BFB8C5B6E6D8973AFDC4E76277104B8326EFE02
2201DD4A0AF02CED8E7503E6479643741581E0565970A56C7DD5D7E1C314639EA886 2203B08A5D00A6FBF10413C2B8B3E2C1BFF9F235772014C39D48821097390F760062
22020E581B4DE3742FB93683F0BF5932019AF0AE1DF9A2812B3E0200C6FCED8AB6E0 220403B12B90A7C766E19E6BA87211D33F2AF5F921F7387E42246E71EBE0470C0A61
2203C5256611D969FF4472771FC0ADB16E71A5C32BB6E3C3A79C832C32574262ACE4 22052FBE7DC210AA55310FF8CAED5D089801DD513F6995F84D87CCCEC287B1A2E98C
220420225A253F4B5C750903DF5D9F5C3AD6DE75500F2B2584973612115924906460 2206958C180C6434CAC5514B8E0BDB98FD47ECB991F7687EA48BC5348C48C6231793
2205AE9AB02B1DEE0AACD47B7610241ADFEA06EEC2677BA7CEA0CF3CA93BE4083710 2207D6A6AF77ADD045C90876876BCDDA1CD33A64CC745FA39E924D6CB69A26501BAD
22061956D6974422517019551C92FC19CDFFCAEF2A26C9508D206D9642D66B33971C 220834DFD096F155ADE23EDE1D17394F19D4DA037740556124BE10A1CF66EBFC7CD9
22078996CDFD0789B2DFB9460A8E00BD6E2BA83120E94E4EBFBBD5A06C2C77555465 2209093891E8C4C084B16B589A627B7807E2216E0E9E9E76E28AB4EB52E8121AB21B
2208B50579BBC9EBF8C6D9066C4114383392998324DCF86B9ADC935F66176E019DBB 221068EECA8901ACBAC21610C80BD3039902AB708A0C393EA723B8C0A42626C99BA9
2209081AE411E45A1499A7DF7B5C998C6DF917AB3D43639CE6365AFBACE5FF30A70F 2211F7B4E369F4DF12F9D8F5747BED03ABF2292FBA592F614468CEBE74BC3BA016AA
2210F0B0087701AA9C5E871A97EF789F94A222F7E586BE8BD1C83FF7E0A429918A8C 221275CBD88BA886C0FCACACB6BB14B57CB27189B6716F58DADBA7F0D94D06CC3AB4
22110275B463A881742F71096D6ED5946BDF93CD1EA0D407C0542ACE030BE6214211 221341B9A6761B4F473624EB06346D2DD8C2F011BD9BD3BB17F9400E53083C924FAC
2212BB580CAF11EB8635D6C00052A5A0ADCED3CD6BD1E99141BE1D247CB48CE39CD6 221438B5457E6E2653DADF8AE603A45761A198B0E1C03CFAB17CC01C38F3FA36B17F
2213CAEE933C1068729E9A167515F743E0B66BD06481FFA48CE9C6DCF4F0145BC851 221564720594133B6994483BAC49C252F44AB1A80729ADD3C4D7A8E866694B1549BC
22140710C946391AABEFB70AA2D02DF83E68EED2305195B53B667331B9EF352D7FFF 2216CE77C1F1B8287F515DED9B124AABF35EEA5761C8D86289882D9D77AFA73B4EA1
221556EAC2571490A80E0F5EDB22EF988671B978CBA393FAEE0271A02AD4E7916FAD 22171BD12F4AF1416F83F99F9F70FE1B43210ACE9E76C0E0137F2018B2E89543F1ED
22165BA6E42816C0E4A6B59AD4882CBBE4279392940636B95B14AC72EC763F3C8DF5 2218B2C35DDCA5D68EF1641463D7B8378D195BABC1880DC6592FA2429A4FBC4DEB7C
2217158902E1144BCB9B77497B94AB6F985BAFE6A6EA919ADF5DC76D9547BFC10CF7 221967F1EAE1F0FCB79AD109EEF143B57C30CC105F65FDE1C80BAEA04282132BDA3C
2218F27AF0F3F369A40F0818EC70BA8D0E3064208B929F4691B4C3359FF49A32477F 2220B48050A7267DEF7F3F48C2A83308B16320E15564171171F46EF2CDDB10AB209C
2219E21B57B2C2D7A6C444C09147DAF3C53BBAF46FDC8F18F8F53534F69DB5568BFA 22214E7624373F4C6A49C566CE0B053667D12EFF5A434DDE23B32D0D3090318029CF
222041412B4050EBAD38E48DE3CB3B2024365A2D9436AFAE44DFA3B145EB031F2B34 2222BA8A095C50BCF1F6B0504DFCFB70752A9C68ECDD82FF949C2A17822C8E3DD91F
2221A98C93D81397DED7235D26F7C55B6E9DEC79AAD7ECD9D25119C11657E7F593C0 222315CF16B6CC6C8EF09178CC9111B5FA9D36278B47AA95D22D6959F7882B101F69
222200B3B94107B15D33F2B27BCB1C7544018613FCE5546AB33EA041BDD6DF071D9A 2224435085BA043D7465E896C536867A71DD95B07486B0DD43061FE0D4AE86C3A476
222393AB099D606F7B5437A61C294770AFD946F292CBC5C0E657DFD3B99645D02611 2225C37DDA978A549D60F17212C0F0BFD0E5EE4881686280AD90FC6090C0207FCED9
2224C3C2D5C083304436098C8BF60C7527F06997B4D10AE189322D279DB5834EDB43 2226C7D395F9BFC34591D1E73A55E7257753D2603D51B0861C11810A6B2129349511
2225FAC2E91C1E9B468583AE8EBB861898CE9415A6FA5E099EAAE096BDE2978A142B 2227B5AA65AA3F1191066CF75BA36421A46844BD99861F9F9F241C67979D51676C57
2226930EE1DE108AB039C1512D066AD015A88024072732AD9932203E38F8F822931C 22286D5F9C816AFAEFD24650564D8E2553A8535A2D4CC4C4C5C6D6108A9DA0D5AD91
2227226A39466C45C1D5161583730D41695AD184C7DA4A2F6E06599B0A7D2676C99F 2229EDA473D9BA0AA3313D850C749B3CB733FBB7B09670C6716B9856B9773D2EC073
2228265568564D74A19CFE27CE4F3EAF0F1C1AC97902FAF891506B735F9E35D4E91B 2230036471AA470AA02DEFC681ED77568508AB6A3BACB821B77E90A94CAC3CFF436A
222910A54E78899C211532A36D3C85D7C37B287D7D0BB3FCCF4922FA25A2B7EE57E9 2231C554E78721F7D5B16D70D131ABE62B6AB3CC687B1483A7A63A9563F4675295EA
22306F834FA1614758B455E4ED8A4F3BB2155EF04D18F8771DE6E441AD8B90CEC661 223278D3B2E73D08AC9056FAB8478A6F41E24E8904CD0C65C420C1808ED22BD4A42F
223181096112F28A4F5BF8C0D03647974574330A9DB9FD4858A866B827E02815D6FE 2233F86A163D8F8C4FA298AE20293367796E5793A8F129676795ADDA26C3BAAEA0AF
2232269545855B4C2978ADF3D01FD470375622DB6302841304C4B34DFC14C934A5EA 22342A4A2525B889D45ACEA22616BFEC7FCDF17927C5233FBD73C3C58005C843D5BF
2233D948AFF88638AB565855086B9BDC7ED1C2B1A2DCDE0237F64379FBF189B062BC 22357AEE8D1E6B17FE8ABC9BC16A7FACCD47D6B6CEC06016D29AFC9F9706C3109225
22343E271422401D7044171D1CF04BCE2334018509119BF2A1A9F77D539FB78049F7 2236FE7DD2CB5B7262A2D209B3AC7AE7B5999E5143D1ADE6F9FF55848878F5F1ED01
223555447125C1B1BC734D552A95A6542A45B56BC7A9D77D865D69FAD63EBB5CEF5C 2237879C62BC67853FC360480DEEB73694A6AE25C6B2B3DE9456D6FA372DF603352C
2236A6CC02E78F40A5F4D2D0083A57B9EE39AA1A85AB63F3611BD2F27CC4C0C38B99 2238EF498A11D4DF3C441A685AE00CBAEACF603B40527A7BC5102F082B508A869498
2237C66CE4ABA335F4E6325EF52E64BFB558C1B0C811C779A46F079E64639EC28C94 2239EE2741017999C5FD551668615F32AECF6008B8FFED14BA461B081C290C3E6C2C
22387FB1A2D4C30533813E739009C352DCF93441E0C61A2B43D180D495C62D4433E2 22409D11342D1F4FAC2037FAA555BC213857242D72D971081B89ADFCF15B26E6229A
2239D5CDC01224D6CE29F06FDFA328E338648FB3C47BBEAED76E2C10DB94B8B39D19 2241A753773EB8F05BD2C47A53B6B98D6017848D115FF490F1270ED226A588E5A714
22409A596EAB6D5E0033252119CD31BDC7857CF5833E011DB5330DAEC0C0C6C2CC37 224296E737DC61DF729881023D566D428DC4F534F2619326C2C2489D492E6483A322
2241C3B81DADE8B960867D48E26ADF34929E7A74C220048C250AFD23CD03CA8CAFE7 22434F93FD9A2582CFF04CB92BB84012A1217049A8EE353FEA7F6560A7EA329A0E16
2242AAA8D671FFE2654B5E129B632D2F6AE861C0868F7567ECE49364558EEBE71069 224452A6687FC795F57D0C9A1C54522D18B9A18BBF8A62CC93FAE2B98820149956BF
2243C1EBB2A01276A674D83944221FB6206A4CB07F451ECBEF842FC10C107ED7CF01 2245C8D0069F84CDDBF10D87E2459E0FA6DF4475AEB659F0C89DD652F25ACC69F19E
22447B1584DC6B33A0BB78B9741433E59446427D272CC35EA60C69988FB24E5F8FC6 22469095CE72CE55263AB14F075FB439D5FBF36BF5088312DEE7556E12C4852ADB07
2245B8E8B5980FCD7381BFC34789377156F357B7D3A2165913DBC2D15DF5CF92E6FB 2247FB99279C9465BF097FBAFAB6A381002ED4DE4797C61478E5A002C97E89BA81BA
224642DB4B09628D45936F15456A007230CC9EA9703C14B12443497C8961A46055D8 22482B9A50EA5A1FEE07DC11DB4611A1A7D24F97004E2867A807C508F17FCDD11E9B
2247FC5D1A2E3E03BB7993079353406FAB03AA50CE6D589EFAC8E186898D39A3B158 224991C9B72B563D938B38F392827AC23D05E414A3A1FE24199FE833CBF776E19E3C
224873A86DBEC6D4BA9F706E3E66AC32510865C7FC495CBDD03482F48F77A7C68A56 22509408C38FE23BC89E8310D49F866F0B6034564BB21238733744ACC21D6FEECCD7
22497FD81C53FCD359F3518A810A9EBF8B3287B3498FD8DC09612F46F8933B24F230 2251E4AA08F377CFC6CBF44CAC348CABB8FE34A6C51F5AF753F0C67B1A18F524681F
22506EA06D9CC090E62350DC87C37EE8C2A00B5B305B5F9DF024A354D218BBD6F893 22525E8053D13E460F59DEDC7EEF52CBB402C9E6A7988D07FA1928B1383D350E8A1E
225129C2455C3A6FA80442CF96F71EF417766B36BEA9599A148C741019958E5D9D6F 2253E06C576D198E12BB84C1CBCE4F47A93B569DF88BDC595E5A182E65418CAE4399
225257BD18C456126C9C2E61B26BA99CC24E381CF54DF698B638395DC4CF5646B297 2254E2B76AD0A8A073BAFAB2DEA554065E5A3191809390E23FD16842391B03DEC4B1
225335DF231EF503C8A9242ABEC825B86E6B1C396225DE9DD5A74CD4AB2E52CE5502 22553FC005A829DDEE375728DC73B3E2DB901F97491B827D688B949A07F78B10535F
2254E64FE52B841E9C903B6041010CF762B9DA460DBE1B7AB6547E56967AD50A20A8 2256662143A7D1772FA1DBCDACBE5F3527424DC787D6B404CE9714179DC10BBFBD9F
2255A3562CE86FE628FCBD8D5A46CDC6928CC907883B3B223D1BB39FFEC99C295471 2257C3E3DB0771D2C47D54473C15587342E8FE9190A6FB55CC0EDA521C73ED249D2C
22565819DA78E1A28E67BE9C9ECF030D17B750CF63A1FFCCE03488BBCD5AB8833229 2258927DD0BB776BF83492CD40DFA5514BA3986629B3B7B50BAC7351408A958CBBF3
2257129EFF723149ACCA53F3349F20A95175C634C1AECBA667E94A6EC7240CC73738 22598999CB05A73F244C1230391D6F89AF2A7ECC1755DA94C389305916CEBD43B233
225856853DA698EFBFBE8D4EA742115D056E60A5C563CE677211F762D78728F4A4FF 226088CBAFEFBFEDD7D54D00A9B88E1A391AAB951283F1BCD9E3AAED990F53BFA5BF
225916106B14CF733EC786BC81BF382D929C6E779BF2C5CAC1A7141311467B230972 2261054DEBA1607F632C1F3D7AF66881600F84EC835F86663C12F02F084D419C8E1D
2260473561159C7F359C249A40CC0A2B78153B1407C9B5C58B61BE08EE79D2361242 2262AA77E6B3B627BC87A41A4B42B1744F410AD59846D246592AA804212BA2F38867
22617F796F70F131C8EB601DCAC36940A0432598B85A9808D2E3A3AE04481AC98AD4 2263A63E5EC0F71239113A3BB841435B80CAECA592F499755906A5F4D8255F003C9B
2262765F604A00F6BFBFABC92FCDAFDA89DAF343D56D8BB390DD8196E65823CCBE14 22647E6CE9A6AD93B41203C0912D4603B39A9071F7473A5265958BEE4CBD6BA5870E
2263A44D12EC7460A65E46C3546D6A2C3B5E16B023DEE94A5F29CEEE87F773748F96 2265DE6307F6F32DE57998276F2D24D335305C3297C7B7CC3079845DF71FE32D093C
226432EF586A0CE0E35DC20A2F79A398A52060A5A4ACAAC9F38A5C5F5E18C5F548B6 2266545FAA90BE7119E3AB68E116EF3814521FEBD30724A1A3BE3217367D4221C1A6
226514EC4B3E3DCA73ECF7111C84980AB97DFBCC2B072D917EE0110248FF4728042E 22673A042C0475116EC08951E0D413148A91B123166C569E22BCA891EBF87D6A2F5D
2266F527F2B5BC1C5CA2FC93FA15ED3F83DC3992CA9ED5BF29EC2ACD3F65CFEFD598 2268C1E36AE701F0F5D78E7428AA902F84EE66A142D8B39A5F7EA6A85E1A000DD273
2267D3ED8D7F3D54D220D79CD51A599194E511A440B43F1976B944FBA750C80E786D 226986A48E2E0A836679744003B9825DC3F511512954C01A877F540C02B775B2D692
2268514014EB35E21B85CF8DE707B96B03B2BB973B9E215C1FC9816DB019765D5B25 2270174EA54BF7C32F0DC93CC6E85EE8AAD0CD80B0D634B60B49DC1D0E55334C3470
22690A1B77FAAA4E048CA5BA20CEA9CA184F59BF87DE90BED9DD310C7FAFE3E93583 227154907964F269EA9840FC8F3D8A72DCD773ECC2EA26CD64D42693FCD2AD8EEDA5
2270DC243BA6CFDD104A3B126AC33F040E706D9EC76C986C1BC084623E58EA5E197B 22727814FB8BF232E547D6783DAA15880758BC4ECD8C339C5C9E7A5847605C01B417
22712E35DC67BA1BC12FA7013F9212868299C2AA052521D0FE1C8117BA36553B8024 22735B378E0F1263B72D03AD49EE0D2893ECAD56F672B33E1652A664E87C4771B4CB
22724FFD05A76B5AB7285E06584ED89DE8E7B6BD50CBA86B0E167BD86820AD60112A 2274D3555B66D9E8B85B118881EAE0F13DD82A2F7F7A74CF71D23A7D26A6FA19C2BB
22739C90BECB87FFEEEC23104B36BEEEF385FEDF701E9CED8C77D1BD04DB0F5C7616 227536D0B4E38237CA9D6268C55D9CCA670CF3AC1B045B30E500EB34D7406EA82B0E
2274373AC3D57A4E056E1A22238E4E4873084E29B993B43F382D90161084F3243769 22760E876235556505BFAFDE2808C85978A2D04F50BF7FDF608670AA846A4434E80B
2275AEC08A9272E3F1FAC01BACD9FD24D0C7749423CF64078B39AF900305714A3980 22777960737EB91FAA6BA784E34FC21AE584696A87250DE7D95B315D57FF73E15FB4
22762CB0B3D6F122A6CEF41C2E290D8EFC54E4ECC8908FDAC9DFD7F3F0EE7A98D260 2278D124CBFFFD7A44764687B44F0470162CBCBD649F92C1FB7038D0A298CF33FECF
2277EC5C7E3484AFBDE096CCC71D9C2E2DDFA1429C0845AD23A6D235663086C76716 22798F9554259983FE727592E644CCD32C3D821C1994D924813AA9AB08BC233BE5B4
2278F5A9EAA8BD0B23D6A9482E452E0BFE1B2FD9B24FC4495C212B4EF23D328AE080 228050DC095DAC33090D55B8B7D7C0D2261D45A923366E0595F57AA2B7D7D8DC22CE
22798CD8DBF54981E161763D7F354A1A411A61D71C5CF36E551269024CEA701E9462 2281F7557E20252030E3C6D3980EE05700A59B8D620CF89083D6FF2E3E78E118B144
2280E09EC70BC5676B2F5DAA0202FBA4948E8E2F896DF94CF23CD93882F0C6F574F2 2282C92E2A6CDF33613CB1F74B59A6EA27E60C0156E287D05C5FA5EFCE3D4E864C39
2281C2508020035864D35D73E573105F13F1AF6CE24F4DDD537D52C1E04E1275BF48 2283CD87D636EE736F32A091F019B8E22429F50DCCA8B563A128F52C4157019DDC9B
22827F28BFA941FEC50C43AC453CCF22645BEED3434AE099A63DCDAA368C2DBDBB65 2284415524A99224287848685E353D92BE01BA661CE857F2C6172C81F5674044AE90
2283F1C83773639DC0E5E22521622A5A7F1FB6C05FA104E22AA914629A5599545712 22855ECDA6944F31B45F77434DCB074658847C1AE424418E9E05611D016416891078
22849612711D4D8702405003E5D3A94334E32AED660957DE864F657D0878A8636639 22862225718C42E8CCC730F90CACC6B97116BF183800AF69F01922856FF6B9B280C5
22853644D887B87ADB7148DEE4C3F40C302A018F0D8939D901080BDE7C64813DF7B5 2287110DA3BA79447ABFE1B341AF90FDD05DC5FEBE1F2E7130A3D50AC68502C433DB
228623D6484C7AD67B42AF576895873775C4D8BDFEF8D429317F10D9D344C429D5E8 2288534ADD5562E501CE0A212E855F1AC4FC1FF8D5379C9701F8DB718194CD20462D
22878C95A7CBD3BD08F28D46C620EAF97BC44FFF733970C76D2436BC46B04B5CB80D 2289155A814F7AE8F20892C88B0587EB52455276439C728B8AFB4ED2A51F1DB7F9B9
2288D6900BDE70957162C71B62F5E0B07637050ADFFF583014DA9F24DED2CA080F50 2290D35663433BE337AD1714E0B1488B062CF24D1763CB9AEE6E6C393ADDE0EDDD91
2289574262A788352244EE07ACA41E7827C30D40BF3DD7BBD32F1EE757A661B8F83B 229117EE00E06C4935F05F29CB4461DF3CEDEDCDC6434823CAD2B26FD43C24F6885B
22907CD28FE74546961C5A6AE1E201ED17343522264D3CA4C149FD0AE2ECE287068A 229237D6A22717992E0807E48E7876DA766F1B1CF264C70D0A3369B1F88D8E22023E
22913A269B22C8CF8EC9D6B375B38AC613F0F1F4A47C99404D541674B7C40C4CED3B 2293D1E58747EBE1AE3C32120E87FE87B76F7CED4053270A7E89AEDED4B6F24A5E8D
229279105290D297F9771072FCBCC89502405BA5D927C01062B3A781C45EB6048E73 22944F0801E430D2104D6700AC07A211CBBC57A43AB300C631564453D826C5E97BDC
2293961ECA73E091FCE341EB6723439B38B188EA498FE9E77B2E5E97880A4CC9ADFD 22953ED112A498A8398051492FE1B7A227AC36B18BDE5124A6650DFCE5846717DC0C
2294A6F3AF790B84BDEBD1331F77DF164ABC9B969BB5C431BD9FAF52539B339BAA9C 22962C388CC394AB0C398CEA7FC7FD2D7CA461D238AA6A0E22E1E507220225057BF5
229596ABC3D341722CD608CEF0F08D3E6AAE4962DB8198673B19F3C469559B993F5D 2297C76EE2E2B58C865B229EF8C8A89F18355678937A3720C6A4C150CA3C124CEA6B
2296DFF518F5EAF32191B9BC76165FA1A5CFE7B4BA741D140EFDF797F51807385F01 2298AA1862B18FA26E7F9E082D5F620B17FE5E5E1F85303D1719AAE1C3CA1B9AD700
2297A4DCD08030ADD12175887CBB60210FF5F275E8BD9706D69CE55F0D5030951A7B 229905DBE2CBB952C6E97BFC43FE8AE9EEFD5B6CDF601C65761526A0AEEAB5CA3A91
2298B0D31DFA257ADFA67C9914D4A1EFDC365AEAAA4B31FDA0D401A542 2300FF7C201BCE050030628D6933DDE2F17C7A9D3D8C0E985004A1E21EEBDF785E8E
230168EA0444A0C05DEEE046BB18A79C7ECFCBF5702B834459B78787D2A3513A0A39
23026CA03C25E2623919FA2B
22990000000000000000000000000000000000000000000000000000000000000000 23030000000000000000000000000000000000000000000000000000000000000000
23000000000000000000000000000000000000000000000000000000000000000000 23040000000000000000000000000000000000000000000000000000000000000000
23010000000000000000000000000000000000000000000000000000000000000000 23050000000000000000000000000000000000000000000000000000000000000000
@@ -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
231149.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 231549.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34
231230 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 231630 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44
23131[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 2[30 1[30 1[30 23171[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 1[30 2[30 1[30
231430 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42 231830 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42
231549.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36 231949.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36
23162[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14 23202[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14
@@ -2334,7 +2338,7 @@ TeXDict begin 55380996 39158280 1000 600 600 (orgcard.dvi)
2334rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 2338rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59
233520 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72 233920 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72
233653 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54 234053 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54
233751 50 53 6[20 2[35 3[35 35 35 1[35 20 24 20 55 35 27 234151 50 53 6[20 1[35 4[35 35 35 1[35 20 24 20 55 35 27
233827 20 2[35 59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont } 234227 20 2[35 59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont }
233971 66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 234371 66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76
234061 1[67 14[103 2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 234461 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
2351TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45 2355TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45
2352b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h 2356b(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
2354Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931 2358Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931
2355102 y Ff(1)-150 199 y Fg(\(autoload)38 b('org-mode)g("org")e("Org)h 2359102 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
2566TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45 2570TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45
2567b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h 2571b(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
2569120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 2573120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458
2570b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793 2574b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793
2571b Fg(C-u)36 b(C-c)g(C-r)-150 288 y Fi(add)24 b(curren)n(t)g(\014le)g 2575b 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)
2625y Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376 2629y Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376
2626b Fg(q)-150 4118 y Fi(exit)24 b(agenda,)h(remo)n(v)n(e)f(all)f(agenda)i 2630b 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
2629Fc(.txt)k Fi(and)32 b Fc(.html)38 b Fi(in)31 b(the)2046 2633Fc(.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
2631b(as)e(ASCI)r(I)i(\014le)820 b Fg(C-c)36 b(C-x)g(a)2046 2635b(as)e(ASCI)r(I)i(\014le)820 b Fg(C-c)36 b(C-x)g(a)2046
263229 y Fi(exp)r(ort)25 b(visible)e(text)i(only)e(\(e.g.)32 26363 y Fi(exp)r(ort)25 b(visible)e(text)i(only)e(\(e.g.)32
2633b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046 2637b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046
263499 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36 263873 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36
2635b(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 2639b(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
2637b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182 2641b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182
2638b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 337 y Fi(insert)23 b(template)j(of)d 2642b 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 2643b(as)e(iCalendar)h(\014le)718 b Fg(C-c)36 b(C-x)g(i)2046
2640y Fi(toggle)25 b(\014xed)f(width)g(for)f(en)n(try)h(or)g(region)295 2644376 y Fi(exp)r(ort)25 b(all)e(agenda)i(\014les)e(as)h(iCalendar)f
2641b 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
2642632 y Fi(mak)n(e)d(w)n(ords)g Fd(b)r(old)897 b Fg(*bold*)2046 2646b(all)f(agenda)j(\014les)d(to)h(single)g(iCal)f(\014le)161
2643702 y Fi(mak)n(e)24 b(w)n(ords)g Fc(italic)898 b Fg(/italic/)2046 2647b Fg(C-c)36 b(C-x)g(C-c)2046 538 y Fi(insert)23 b(template)j(of)d(exp)r
2644771 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
2645326 4 v 728 w Fg(_underlined_)2046 841 y Fi(sub-)f(and)i(sup)r 2649b(\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 2650b Fg(C-c)36 b(:)2046 725 y Fd(HTML)27 b(formatting)2046
2647925 y(E)2124 911 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37 2651818 y Fi(mak)n(e)d(w)n(ords)g Fd(b)r(old)897 b Fg(*bold*)2046
2648b(\\to)2046 981 y Fi(t)n(yp)r(eset)25 b(lines)f(in)f(\014xed)h(width)g 2652888 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 2653957 y Fi(mak)n(e)24 b(w)n(ords)g(underlined)p 2433 970
2654326 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
26561111 y(E)2124 1097 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37
2657b(\\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
2650b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37 2659b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37
2651b(with)f(|)2046 1120 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640 2660b(with)f(|)2046 1306 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640
2652b Fg(http:...)73 b(etc)2046 1190 y Fi(include)24 b(h)n(tml)g(tags)905 2661b Fg(http:...)73 b(etc)2046 1376 y Fi(include)24 b(h)n(tml)g(tags)905
2653b Fg(@<b>...@</b>)2046 1288 y Fd(Exp)r(ort)27 b(options)2046 2662b Fg(@<b>...@</b>)2046 1469 y Fd(Exp)r(ort)27 b(options)2046
26541386 y Fi(Include)20 b(additional)f(information)g(for)f(exp)r(ort)i(b)n 26631562 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
2658b Fg(M-TAB)22 b Fi(again)f(just)g(after)g(k)n(eyw)n(ord)g(is)g 2667b 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)
2660g(b)r(e)g(sho)n(wn)797 b Fg(#+TITLE:)2046 1764 y Fi(the)25 2669g(b)r(e)g(sho)n(wn)797 b Fg(#+TITLE:)2046 1934 y Fi(the)25
2661b(author)1115 b Fg(#+AUTHOR:)2046 1834 y Fi(authors)24 2670b(author)1115 b Fg(#+AUTHOR:)2046 2004 y Fi(authors)24
2662b(email)f(address)769 b Fg(#+EMAIL:)2046 1903 y Fi(language)25 2671b(email)f(address)769 b Fg(#+EMAIL:)2046 2074 y Fi(language)25
2663b(co)r(de)g(for)e(h)n(tml)732 b Fg(#+LANGUAGE:)2046 1973 2672b(co)r(de)g(for)e(h)n(tml)732 b Fg(#+LANGUAGE:)2046 2143
2664y Fi(free)23 b(text)i(description)f(of)g(\014le)626 b 2673y Fi(free)23 b(text)i(description)f(of)g(\014le)626 b
2665Fg(#+TEXT:)2046 2043 y Fi(...)30 b(whic)n(h)24 b(can)g(carry)g(o)n(v)n 2674Fg(#+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
2667y Fi(settings)25 b(for)d(the)j(exp)r(ort)f(pro)r(cess)g(-)f(see)h(b)r 2676y 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
2669b(for)h(the)g(OPTIONS)i(line)2046 2309 y Fi(set)24 b(n)n(um)n(b)r(er)g 2678b(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
26712379 y Fi(turn)24 b(on/o\013)h(section)f(n)n(um)n(b)r(ers)577 26802539 y Fi(turn)24 b(on/o\013)h(section)f(n)n(um)n(b)r(ers)577
2672b Fg(num:t)2046 2449 y Fi(turn)24 b(on/o\013)h(table)f(of)f(con)n(ten)n 2681b 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
2675b(on/o\013)h(quoted)g(h)n(tml)f(tags)548 b Fg(@:t)2046 2684b(on/o\013)h(quoted)g(h)n(tml)f(tags)548 b Fg(@:t)2046
26762658 y Fi(turn)24 b(on/o\013)h(\014xed)f(width)g(sections)464 26852818 y Fi(turn)24 b(on/o\013)h(\014xed)f(width)g(sections)464
2677b Fg(::t)2046 2728 y Fi(turn)24 b(on/o\013)h(tables)893 2686b Fg(::t)2046 2888 y Fi(turn)24 b(on/o\013)h(tables)893
2678b Fg(|:t)2046 2797 y Fi(turn)20 b(on/o\013)h(T)2444 2811 2687b Fg(|:t)2046 2957 y Fi(turn)20 b(on/o\013)h(T)2444 2971
2679y(E)2484 2797 y(X)e(syn)n(tax)i(for)f(sub/sup)r(er-scripts)70 2688y(E)2484 2957 y(X)e(syn)n(tax)i(for)f(sub/sup)r(er-scripts)70
2680b Fg(^:t)2046 2867 y Fi(turn)24 b(on/o\013)h(emphasised)f(text)578 2689b Fg(^:t)2046 3027 y Fi(turn)24 b(on/o\013)h(emphasised)f(text)578
2681b Fg(*:nil)2046 2937 y Fi(turn)24 b(on/o\013)h(T)2452 2690b Fg(*:nil)2046 3097 y Fi(turn)24 b(on/o\013)h(T)2452
26822951 y(E)2491 2937 y(X)e(macros)703 b Fg(TeX:t)2046 3035 26913111 y(E)2491 3097 y(X)e(macros)703 b Fg(TeX:t)2046 3190
2683y Fd(Commen)n(ts:)35 b(T)-7 b(ext)27 b(not)f(b)r(eing)i(exp)r(orted) 2692y Fd(Commen)n(ts:)35 b(T)-7 b(ext)27 b(not)f(b)r(eing)i(exp)r(orted)
26842046 3133 y Fi(T)-6 b(ext)22 b(b)r(efore)f(the)h(\014rst)f(headline)g 26932046 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
26863203 y(umen)n(t)29 b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44 26953353 y(umen)n(t)29 b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44
2687b(Lines)28 b(starting)g(with)g Fg(#)2046 3273 y Fi(are)j(commen)n(ts)g 2696b(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
26893343 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)2046 26983492 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)2046
26903441 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285 26993585 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285
2691b Fg(C-c)36 b(;)2046 3644 y Fh(Completion)2046 3800 y 2700b Fg(C-c)36 b(;)2046 3763 y Fh(Completion)2046 3897 y
2692Fi(In-bu\013er)e(completion)g(completes)h(TODO)d(k)n(eyw)n(ords)i(at)g 2701Fi(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
2694Fg(\\)p Fi(",)h(option)g(k)n(eyw)n(ords)g(after)f(\\)p 2703Fg(\\)p Fi(",)h(option)g(k)n(eyw)n(ords)g(after)f(\\)p
2695Fg(#-)p Fi(",)h(and)2046 3939 y(dictionary)c(w)n(ords)g(elsewhere.)2046 2704Fg(#-)p Fi(",)h(and)2046 4037 y(dictionary)c(w)n(ords)g(elsewhere.)2046
26964037 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702 b Fg(M-TAB)4242 27054130 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
2751Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838 2760Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838
27523768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21 27613768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21
2753b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826 2762b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826
2754y(v3.17)h(for)h(Org-Mo)r(de)e(3.17,)i(2005)4912 3882 2763y(v3.18)h(for)h(Org-Mo)r(de)e(3.18,)i(2005)4912 3882
2755y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3937 y(based)j(on)g(refcard)g 2764y(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
27574022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e 27664022 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 @@
12005-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
12005-09-27 Francesco Potort,Al(B <pot@gnu.org> 62005-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 */
477static bool ignoreindent; /* -I: ignore indentation in C */ 477static bool ignoreindent; /* -I: ignore indentation in C */
478static bool packages_only; /* --packages-only: in Ada, only tag packages*/ 478static 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 */
481static bool parsing_stdin; /* --parse-stdin used */ 486static 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 @@
12005-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
72005-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
202005-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
272005-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
322005-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
472005-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
682005-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
802005-10-21 Romain Francoise <romain@orebokech.com>
81
82 * net/rcirc.el: Now part of GNU Emacs. Update FSF's address.
83
842005-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
962005-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
1122005-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
1172005-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
1222005-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
1292005-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
1372005-10-20 Richard M. Stallman <rms@gnu.org>
138
139 * net/rcirc.el: New file.
140
1412005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change)
142
143 * term.el (term-term-name): Initialize to "eterm-color".
144
1452005-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
2182005-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
2262005-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
2312005-10-20 Reiner Steib <Reiner.Steib@gmx.de>
232
233 * textmodes/org.el (org-level-color-stars-only): Fix typo in docstring.
234
2352005-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
2412005-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
2502005-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
2622005-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
2682005-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
2742005-10-18 Chong Yidong <cyd@stupidchicken.com>
275
276 * image.el (create-image, find-image): Mention max-image-size in
277 docstring.
278
12005-10-18 Stefan Monnier <monnier@iro.umontreal.ca> 2792005-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
1182005-10-18 Jay Belanger <belanger@truman.edu> 3982005-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
1232005-10-18 Nick Roberts <nickrob@snap.net.nz> 4032005-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.
89Return 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
112A list value specifies a default layout for the current buffer, to be 137A list value specifies a default layout for the current buffer, to be
113applied upon activation of `allout-mode'. Any non-nil value will 138applied upon activation of `allout-mode'. Any non-nil value will
114automatically trigger `allout-mode', provided `allout-init' 139automatically trigger `allout-mode' \(provided `allout-init' has been called
115has been called to enable it. 140to enable this behavior).
116 141
117See the docstring for `allout-init' for details on setting up for 142See the docstring for `allout-init' for details on setting up for
118auto-mode-activation, and for `allout-expose-topic' for the format of 143auto-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
177See `allout-distinctive-bullets-string' for the other kind of 202See `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
191These bullets are used to distinguish topics from the run-of-the-mill 216These 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,
206software, according to the value of `allout-numbered-bullet'.) 232according to the value of `allout-numbered-bullet'.)
207 233
208See `allout-plain-bullets-string' for the selection of 234See `allout-plain-bullets-string' for the selection of
209alternating bullets. 235alternating bullets.
@@ -337,7 +363,6 @@ disables numbering maintenance."
337Set this var to the bullet you want to use for file cross-references." 363Set 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
386formatted copy." 411formatted 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
435See 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
442The key verifier is string associated with a file that is encrypted with
443the file's current symmetric encryption key. It is used, if present, to
444confirm that the key entered by the user is the same as the established
445one, or explicitly presenting the user with the choice to go with a
446new key when a difference is encountered.
447
448The 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
456See the docstring for the `allout-enable-file-variable-adjustment'
457variable 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
472See the docstring for the `allout-enable-file-variable-adjustment'
473variable 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
484The idea is to prevent file-system exposure of any un-encrypted stuff, and
485mostly 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
501For practical reasons, auto-saves always use the 'except-current policy
502when auto-encryption is enabled. \(Otherwise, spurious key prompts and
503unavoidable timing collisions are too disruptive.) If security for a file
504requires that even the current topic is never auto-saved in the clear,
505disable 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
611This can range from changes to existing entries, addition of new ones,
612and creation of a new local variables section when necessary.
495 613
496Outline mode uses Emacs change-triggered functions to detect unruly 614Emacs file variables adjustments are also inhibited if `enable-local-variables'
497changes to concealed regions. Set this var non-nil to disable the 615is nil.
498protection, potentially increasing text-entry responsiveness a bit.
499 616
500This var takes effect at `allout-mode' activation, so you may have to 617Operations potentially causing edits include allout encryption routines.
501deactivate and then reactivate the mode if you want to toggle the 618See the docstring for `allout-toggle-current-subtree-encryption' for
502behavior." 619details."
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
852resurrecting, on mode deactivation, bindings that existed before
853activation. 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
857resurrecting, on mode deactivation, bindings that existed before
858activation. 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
862See also `allout-post-command-business', `allout-write-file-hook',
863`allout-before-change-protect', and `allout-post-command-business'
864functions.")
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
878Allout outline mode regulates alteration of concealed text to protect 1003Maintained by allout-isearch-abort \(which is wrapped around the real
879against inadvertent, unnoticed changes. This is for use by specific, 1004isearch-abort), and monitored by allout-isearch-expose for action.")
880native outline functions to temporarily override that protection. 1005(make-variable-buffer-local 'allout-isearch-did-quit)
881It'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
898mode from prop-line file-var activation. Used by `allout-mode' function 1028mode from prop-line file-var activation. Used by `allout-mode' function
899to track repeats.") 1029to 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 1033sessions.")
904Currently just sets `allout-during-write-cue', so outline change-protection 1034(make-variable-buffer-local 'allout-file-key-verifier-string)
905knows 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
1039Intended as a file-specific (buffer local) setting, it defaults to the
1040value 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
1045associated with a file.
1046
1047It consists of an encrypted random string useful only to verify that a key
1048entered by the user is effective for decryption. The key itself is \*not*
1049recorded in the file anywhere, and the encrypted contents are random binary
1050characters to avoid exposing greater susceptibility to search attacks.
1051
1052The verifier string is retained as an Emacs file variable, as well as in
1053the 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
1061See the description of `allout-key-hint-handling' for details about how
1062the reminder is deployed.
1063
1064The hint is retained as an Emacs file variable, as well as in the emacs buffer
1065state, 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
1076This is used to decrypt the topic that was currently being edited, if it
1077was 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
1116Ie, if it was pending encryption and contained the point in its body before
1117the save.
1118
1119We use values stored in `allout-after-save-decrypt' to locate the topic
1120and 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.
920So `allout-post-command-business' should not reactivate it...") 1145So `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
939the `allout-layout' variable. (See `allout-layout' and 1163the `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 1167find-file-hook, and giving `allout-auto-activation' a suitable
944`allout-auto-activation' a suitable setting. 1168setting.
945 1169
946To prime your Emacs session for full auto-outline operation, include 1170To prime your Emacs session for full auto-outline operation, include
947the following two lines in your Emacs init file: 1171the 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
1023In addition to outline navigation and exposure, allout includes: 1250In 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
1035special `allout-mode' features and terminology. See also the outline 1263special `allout-mode' features and terminology. See also the outline
1036menubar additions for quick reference to many of the features, and see 1264menubar additions for quick reference to many of the features, and see
1037the docstring of the function `allout-init' for instructions on 1265the docstring of the function `allout-init' for instructions on
1038priming your Emacs session for automatic activation of `allout-mode'. 1266priming your emacs session for automatic activation of `allout-mode'.
1039 1267
1040 1268
1041The bindings are dictated by the `allout-keybindings-list' and 1269The 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
1048C-c C-u allout-up-current-level | C-c C-s allout-show-current-subtree 1276C-c C-u allout-up-current-level | C-c C-s allout-show-current-subtree
1049C-c C-f allout-forward-current-level | C-c C-o allout-show-current-entry 1277C-c C-f allout-forward-current-level | C-c C-o allout-show-current-entry
1050C-c C-b allout-backward-current-level | ^U C-c C-s allout-show-all 1278C-c C-b allout-backward-current-level | ^U C-c C-s allout-show-all
1051C-c C-e allout-end-of-current-entry | allout-hide-current-leaves 1279C-c C-e allout-end-of-entry | allout-hide-current-leaves
1052C-c C-a allout-beginning-of-current-entry, alternately, goes to hot-spot 1280C-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.
1064C-c<CR> allout-rebullet-topic Reconcile bullets of topic and its offspring 1292C-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.
1067C-c * allout-rebullet-current-heading Prompt for alternate bullet for 1295C-c b allout-rebullet-current-heading Prompt for alternate bullet for
1068 current topic. 1296 current topic.
1069C-c # allout-number-siblings Number bullets of topic and siblings - the 1297C-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,
1087C-c C-SPC allout-mark-topic 1315C-c C-SPC allout-mark-topic
1088C-c = c allout-copy-exposed-to-buffer 1316C-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*\".
1092C-c = p allout-flatten-exposed-to-buffer 1320C-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
1096ESC ESC (allout-init t) Setup Emacs session for outline mode 1324ESC ESC (allout-init t) Setup Emacs session for outline mode
1097 auto-activation. 1325 auto-activation.
1098 1326
1327 Encrypted Entries
1328
1329Outline mode supports easily togglable gpg encryption of topics, with
1330niceities like support for symmetric and key-pair modes, key timeout, key
1331consistency checking, user-provided hinting for symmetric key mode, and
1332auto-encryption of topics pending encryption on save. The aim is to enable
1333reliable topic privacy while preventing accidents like neglected
1334encryption, encryption with a mistaken key, forgetting which key was used,
1335and other practical pitfalls.
1336
1337See 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
1101Hot-spot operation provides a means for easy, single-keystroke outline 1342Hot-spot operation provides a means for easy, single-keystroke outline
@@ -1148,11 +1389,11 @@ Topic text constituents:
1148 1389
1149HEADER: The first line of a topic, include the topic PREFIX and header 1390HEADER: The first line of a topic, include the topic PREFIX and header
1150 text. 1391 text.
1151PREFIX: The leading text of a topic which distinguishes it from 1392PREFIX: 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
1406For reference by `allout-recent' funcs. Returns BEGINNING." 1665For 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
1614Optional argument LEVELS specifies the depth \(relative to start 1873Optional argument LEVELS specifies the depth \(relative to start
1615depth) for the chart. 1874depth) for the chart. Subsequent optional args are not for public
1875use.
1876
1877Point is left at the end of the subtree.
1616 1878
1617Charts are used to capture outline structure, so that outline altering 1879Charts are used to capture outline structure, so that outline-altering
1618routines need assess the structure only once, and then use the chart 1880routines need assess the structure only once, and then use the chart
1619for their elaborate manipulations. 1881for their elaborate manipulations.
1620 1882
@@ -1625,11 +1887,9 @@ list containing, recursively, the charts for the respective subtopics.
1625The chart for a topics' offspring precedes the entry for the topic 1887The chart for a topics' offspring precedes the entry for the topic
1626itself. 1888itself.
1627 1889
1628\(fn &optional LEVELS)" 1890The other function parameters are for internal recursion, and should
1629 1891not be specified by external callers. ORIG-DEPTH is depth of topic at
1630 ;; The other function parameters are for internal recursion, and should 1892starting 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) 2102If optional CURRENT is true (default false), then put point at the end of
2103the containing visible topic.
2104
2105Returns 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
2125Returns 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
1858If already there, move cursor to bullet for hot-spot operation. 2132If 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
1923Positions on heading line of containing topic. Error if unable to 2218Positions on heading line of containing topic. Error if unable to
1924ascend that far, or nil if unable to ascend but optional arg 2219ascend that far, or nil if unable to ascend but optional arg
1925DONT-COMPLAIN is non-nil." 2220DONT-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
1986Optional DEPTH specifies depth to traverse, default current depth. 2281Optional 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
2059Takes optional repeat-count, goes backward if count is negative. 2354Takes optional repeat-count, goes backward if count is negative.
2060 2355
2061Returns resulting position, else nil if none found." 2356Returns 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
2114Reveal concealed text that would be changed by current command, and
2115offer user choice to commit or forego the change. Unchanged text is
2116reconcealed. User has option to have changed text reconcealed.
2117
2118Undo commands are specially treated - the user is not prompted for
2119choice, the undoes are always committed (based on presumption that the
2120things being undone were already subject to this regulation routine),
2121and undoes always leave the changed stuff exposed.
2122
2123Changes to concealed regions are ignored while file is being written.
2124\(This is for the sake of functions that do change the file during
2125writes, like crypt and zip modes.)
2126
2127Locally bound in outline buffers to `before-change-functions', which
2128in Emacs 19 is run before any change to the buffer.
2129
2130Any functions which set [`this-command' to `undo', or which set]
2131`allout-override-protect' non-nil (as does, eg, allout-flag-chars)
2132are 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
2304char. When in this mode you can use regular cursor-positioning 2485char. When in this mode you can use regular cursor-positioning
2305command/keystrokes to relocate the cursor off of a bullet character to 2486command/keystrokes to relocate the cursor off of a bullet character to
2306return to regular interpretation of self-insert characters." 2487return 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
2345See `allout-init' for setup instructions." 2529See `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
2354Called as part of `allout-post-command-business'." 2538Called 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.
2372Ie, text following flag C-m \(carriage-return) is hidden until the
2373next C-j (newline) char.
2374
2375Returns 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
2414The function checks to ensure that the rebinding is done only once." 2586The 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
2615actual 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
2632New topic is situated after current one, unless optional flag BEFORE 2846New topic is situated after current one, unless optional flag BEFORE
2633is non-nil, or unless current line is complete empty (not even 2847is non-nil, or unless current line is complete empty (not even
2634whitespace), in which case open is done on current line. 2848whitespace), in which case open is done on current line.
2635 2849
2636If USE-SIB-BULLET is true, use the bullet of the prior sibling. 2850If USE_RECENT_BULLET is true, offer to use the bullet of the prior sibling.
2637 2851
2638Nuances: 2852Nuances:
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:
2802Negative universal arg means to open deeper, but place the new topic 3046Negative universal arg means to open deeper, but place the new topic
2803prior to the current one." 3047prior 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.
2812Negative universal arg means to place the new topic prior to the current 3056Negative universal arg means to place the new topic prior to the current
2813one." 3057one."
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
2821topic prior to the current one." 3065topic 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
3169All args are optional.
3170
2925If SOLICIT is non-nil, then the choice of bullet is solicited from 3171If SOLICIT is non-nil, then the choice of bullet is solicited from
2926user. If it's a character, then that character is offered as the 3172user. If it's a character, then that character is offered as the
2927default, otherwise the one suited to the context \(according to 3173default, otherwise the one suited to the context \(according to
2928distinction or depth) is offered. If non-nil, then the 3174distinction or depth) is offered. If non-nil, then the
2929context-specific bullet is just used. 3175context-specific bullet is just used.
2930 3176
2931Second arg NEW-DEPTH forces the topic prefix to that depth, regardless 3177Second arg DEPTH forces the topic prefix to that depth, regardless
2932of the topic's current depth. 3178of the topic's current depth.
2933 3179
2934Third arg NUMBER-CONTROL can force the prefix to or away from 3180Third arg NUMBER-CONTROL can force the prefix to or away from
2935numbered form. It has effect only if `allout-numbered-bullet' is 3181numbered form. It has effect only if `allout-numbered-bullet' is
2936non-nil and soliciting was not explicitly invoked (via first arg). 3182non-nil and soliciting was not explicitly invoked (via first arg).
2937Its effect, numbering or denumbering, then depends on the setting 3183Its effect, numbering or denumbering, then depends on the setting
2938of the fourth arg, INDEX. 3184of the forth arg, INDEX.
2939 3185
2940If NUMBER-CONTROL is non-nil and fourth arg INDEX is nil, then the 3186If NUMBER-CONTROL is non-nil and forth arg INDEX is nil, then the
2941prefix of the topic is forced to be non-numbered. Null index and 3187prefix of the topic is forced to be non-numbered. Null index and
2942non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and 3188non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and
2943non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil 3189non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil
2944INDEX is a number, then that number is used for the numbered 3190INDEX is a number, then that number is used for the numbered
2945prefix. Non-nil and non-number means that the index for the 3191prefix. Non-nil and non-number means that the index for the
2946numbered prefix will be derived by `allout-make-topic-prefix'. 3192numbered prefix will be derived by allout-make-topic-prefix.
2947 3193
2948Fifth arg DO-SUCCESSORS t means re-resolve count on succeeding 3194Fifth arg DO-SUCCESSORS t means re-resolve count on succeeding
2949siblings. 3195siblings.
@@ -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
3015Descends into invisible as well as visible topics, however. 3262Descends 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 3289See `allout-rebullet-heading' for rebulleting behavior.
3041contained subtopics. See `allout-rebullet-heading' for rebulleting
3042behavior.
3043 3290
3044Arg RELATIVE-DEPTH means to shift the depth of the entire 3291All arguments are optional.
3045topic that amount.
3046 3292
3047\(fn &optional RELATIVE-DEPTH)" 3293First arg RELATIVE-DEPTH means to shift the depth of the entire
3294topic that amount.
3048 3295
3049 ;; All args except the first one are for internal recursive use by the 3296The rest of the args are for internal recursive use by the function
3050 ;; function itself. 3297itself. 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
3429We disallow shifts that would result in the topic having a depth more than
3430one level greater than the immediately previous topic, to avoid containment
3431discontinuity. The first topic in the file can be adjusted to any positive
3432depth, 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
3456We disallow shifts that would result in the topic having a depth more than
3457one level greater than the immediately previous topic, to avoid containment
3458discontinuity. The first topic in the file can be adjusted to any positive
3459depth, 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
3248Does depth adjustment of yanked topics, when: 3556Does depth adjustment of yanked topics, when:
3249 3557
@@ -3259,7 +3567,7 @@ header into which it's being yanked.
3259 3567
3260The point is left in front of yanked, adjusted topics, rather than 3568The point is left in front of yanked, adjusted topics, rather than
3261at the end (and vice-versa with the mark). Non-adjusted yanks, 3569at the end (and vice-versa with the mark). Non-adjusted yanks,
3262however, are left exactly like normal, not outline specific yanks." 3570however, 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.
3777Ie, text following flag C-m \(carriage-return) is hidden until the
3778next C-j (newline) char.
3779
3780Returns 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
3483This is a way to give restricted peek at a concealed locality without the 3845This is a way to give restricted peek at a concealed locality without the
3484expense of exposing its context, but can leave the outline with aberrant 3846expense of exposing its context, but can leave the outline with aberrant
3485exposure. `allout-hide-current-entry-completely' or `allout-show-to-offshoot' 3847exposure. `allout-hide-current-entry-completely' or `allout-show-offshoot'
3486should be used after the peek to rectify the exposure." 3848should 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
4214format) instead.
4215
4216Dictate wholesale exposure scheme for current topic, according to SPEC.
3850 4217
3851SPEC is either a number or a list. Optional successive args 4218SPEC is either a number or a list. Optional successive args
3852dictate exposure for subsequent siblings of current topic. 4219dictate 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
3930Cursor is left at start position. 4294Cursor is left at start position.
3931 4295
4296Use this instead of obsolete `allout-exposure'.
4297
3932Examples: 4298Examples:
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
4160Apply FUNC to exposed portions FROM position TO position in buffer 4531All args are options; default values itemized below.
4532
4533Apply FUNCTION to exposed portions FROM position TO position in buffer
4161FROMBUF to buffer TOBUF. Sixth optional arg, FORMAT, designates an 4534FROMBUF to buffer TOBUF. Sixth optional arg, FORMAT, designates an
4162alternate presentation form: 4535alternate presentation form:
4163 4536
@@ -4170,7 +4543,7 @@ alternate presentation form:
4170 except for distinctive bullets. 4543 except for distinctive bullets.
4171 4544
4172Defaults: 4545Defaults:
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
4222or 4595or \`(depth prefix text bullet-plus)'
4223
4224 \`(depth prefix text bullet-plus)'
4225 4596
4226If `bullet-plus' is specified, it is inserted just after the entire prefix." 4597If `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
4888Contents includes body and subtopics.
4889
4890Currently only GnuPG encryption is supported.
4891
4892\**NOTE WELL** that the encrypted text must be ascii-armored. For gnupg
4893encryption, include the option ``armor'' in your ~/.gnupg/gpg.conf file.
4894
4895Both symmetric-key and key-pair encryption is implemented. Symmetric is
4896the default, use a single \(x4) universal argument for keypair mode.
4897
4898Encrypted topic's bullet is set to a `~' to signal that the contents of the
4899topic \(body and subtopics, but not heading) is pending encryption or
4900encrypted. An `*' asterisk immediately after the bullet signals that the
4901body 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
4903prompted for an ok to \(symmetric-key) encrypt the disclosed topics. NOTE
4904WELL that you must explicitly \(re)encrypt key-pair encrypted topics if you
4905want them to continue to be in key-pair mode.
4906
4907Level-1 topics, with prefix consisting solely of an `*' asterisk, cannot be
4908encrypted. If you want to encrypt the contents of a top-level topic, use
4909\\[allout-shift-in] to increase its depth.
4910
4911Failed transformation does not change the an entry being encrypted -
4912instead, the key is re-solicited and the transformation is retried.
4913\\[keyboard-quit] to abort.
4914
4915Decryption does symmetric or key-pair key mode depending on how the text
4916was encrypted. The encryption key is solicited if not currently available
4917from the key cache from a recent prior encryption action.
4918
4919Optional FETCH-KEY universal argument is used for two purposes - to provoke
4920key-pair instead of symmetric encryption, or to provoke clearing of the key
4921cache 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
4933The solicited key is retained for reuse in a buffer-specific cache for some
4934set period of time \(default, 60 seconds), after which the string is
4935nulled. `mailcrypt' provides the key caching functionality. You can
4936adjust the key cache timeout by ajdusting the setting of the elisp variable
4937`mc-passwd-timeout'.
4938
4939If the file previously had no associated key, or had a different key than
4940specified, the user is prompted to repeat the new one for corroboration. A
4941random string encrypted by the new key is set on the buffer-specific
4942variable `allout-key-verifier-string', for confirmation of the key when
4943next obtained, before encrypting or decrypting anything with it. This
4944helps avoid mistakenly shifting between keys.
4945
4946If allout customization var `allout-key-verifier-handling' is non-nil, an
4947entry 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
4949necessary. That setting is for retention of the key verifier across emacs
4950sessions.
4951
4952Similarly, `allout-key-hint-string' stores a user-provided reminder about
4953their key, and `allout-key-hint-handling' specifies when the hint is
4954presented, or if key hints are disabled. If enabled \(see the
4955`allout-key-hint-handling' docstring for details), the hint string is
4956stored in the local-variables section of the file, and solicited whenever
4957the 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
5049If optional DECRYPT is true (default false), then decrypt instead of
5050encrypt.
5051
5052Optional REKEY (default false) provokes clearing of the key cache to force
5053fresh prompting for the key.
5054
5055Optional RETRIED is for internal use - conveys the number of failed keys have
5056been solicited in sequence leading to this current call.
5057
5058Optional VERIFYING is for internal use, signifying processing of text
5059solely for verification of the cached key.
5060
5061Returns 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
5174We add key-verification to vanilla mc-activate-passwd.
5175
5176We depend in some cases on values of the following allout-encrypt-string
5177internal 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
5282TEXT 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
5338We also prompt for and situate a new reminder, if reminders are enabled.
5339
5340We massage the string to simplify programmatic adjustment. File variable
5341is `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
5366Derived 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
5393EXCEPT-MARK identifies a point whose containing topics should be excluded
5394from encryption. This supports 'except-current mode of
5395`allout-encrypt-unencrypted-on-saves'.
5396
5397Such a topic has the allout-topic-encryption-bullet without an
5398immediately following '*' that would mark the topic as being encrypted. It
5399must 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
5448EXCEPT-MARK identifies a point whose containing topics should be excluded
5449from encryption. This supports 'except-current mode of
5450`allout-encrypt-unencrypted-on-saves'.
5451
5452If a topic that is currently being edited was encrypted, we return a list
5453containing the location of the topic and the location of the cursor just
5454before the topic was encrypted. This can be used, eg, to decrypt the topic
5455and exactly resituate the cursor if this is being done as part of a file
5456save. 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
5527Returns 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
5555This activity is inhibited if either `enable-local-variables'
5556`allout-enable-file-variable-adjustment' are nil.
5557
5558When enabled, an entry for the variable is created if not already present,
5559or changed if established with a different value. The section for the file
5560variables, itself, is created if not already present. When created, the
5561section lines \(including the section line) exist as second-level topics in
5562a top-level topic at the end of the file.
5563
5564enable-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)."
4594Representations of actual backslashes - '\\\\\\\\' - are left as a 5651Representations of actual backslashes - '\\\\\\\\' - are left as a
4595single backslash. 5652single backslash.
4596 5653
4597\(fn REGEXP)" 5654Optional 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.
5694Unless 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
4643XEmacs takes two optional args, while GNU Emacs does not, 5707XEmacs takes two optional args, while mainline GNU Emacs does not,
4644so pass them along when appropriate." 5708so 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
247that the combined units table will be rebuilt.") 255that 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.
146This function assumes that your terminal uses the SO/SI characters; 146This function assumes that your terminal uses the SO/SI characters;
147it is meaningless for an X frame." 147it 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.
158This function assumes VT100-compatible escapes; it is meaningless for an 158This function assumes VT100-compatible escapes; it is meaningless for an
159X frame." 159X 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
121There are a number of support modes that may be used to speed up Font Lock mode 121Where major modes support different levels of fontification, you can use
122in various ways, specified via the variable `font-lock-support-mode'. Where 122the variable `font-lock-maximum-decoration' to specify which level you
123major modes support different levels of fontification, you can use the variable 123generally prefer. When you turn Font Lock mode on/off the buffer is
124`font-lock-maximum-decoration' to specify which level you generally prefer. 124fontified/defontified, though fontification occurs only if the buffer is
125When you turn Font Lock mode on/off the buffer is fontified/defontified, though 125less than `font-lock-maximum-size'.
126fontification occurs only if the buffer is less than `font-lock-maximum-size'.
127 126
128For example, to specify that Font Lock mode uses Lazy Lock mode as a support 127For example, to use maximum levels of fontification, put in your ~/.emacs:
129mode 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
134To add your own highlighting for some major mode, and modify the highlighting 131To 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
49with one argument, a string containing the image data. If PREDICATE returns 49with one argument, a string containing the image data. If PREDICATE returns
50a non-nil value, TYPE is the image's type.") 50a 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.
63When the name of an image file match REGEXP, it is assumed to
64be 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.
88Value is a symbol specifying the image type or nil if type cannot 103Value is a symbol specifying the image type or nil if type cannot
89be determined." 104be 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.
124Value is a symbol specifying the image type or nil if type cannot
125be 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.
108Value is a symbol specifying the image type, or nil if type cannot 155Value is a symbol specifying the image type, or nil if type cannot
109be determined." 156be 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.
171Value is a symbol specifying the image type, or nil if type cannot
172be 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.
135Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data. 199Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data.
136Optional PROPS are additional image attributes to assign to the image, 200Optional PROPS are additional image attributes to assign to the image,
137like, e.g. `:mask MASK'. 201like, e.g. `:mask MASK'.
138Value is the image created, or nil if images of type TYPE are not supported." 202Value is the image created, or nil if images of type TYPE are not supported.
203
204Images 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
317specification to be returned. Return nil if no specification is 385specification to be returned. Return nil if no specification is
318satisfied. 386satisfied.
319 387
320The image is looked for in `image-load-path'." 388The image is looked for in `image-load-path'.
389
390Image 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.
57FILE can be a file name, or a library name.
58A 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.
71FILE can be a file name, or a library name.
72A 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.
83FILE can be a file name, or a library name.
84A 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.
101This can include FILE itself." 102This can include FILE itself.
103FILE can be a file name, or a library name.
104A 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.
190The function `mail-setup' runs this hook." 191The 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,
197or t meaning should be initialized from your mail aliases file. 199or 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.
208nil means use indentation." 211nil 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.
214Used by `mail-yank-original' via `mail-indent-citation'." 218Used 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.
219Each hook function can find the citation between (point) and (mark t). 224Each hook function can find the citation between (point) and (mark t).
@@ -242,6 +247,7 @@ instead of no action."
242This enables the hook functions to see the whole message header 247This enables the hook functions to see the whole message header
243regardless of what part of it (if any) is included in the cited text.") 248regardless 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.
247It should match whatever sort of citation prefixes you want to handle, 253It 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.
306It is inserted before you edit the message, 314It 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.
313The functions \\[mail-send-on-exit] or \\[mail-dont-send] select 322The 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.
321If t, that means do allow it. nil means don't allow it. 331If 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
2691directory listing. This regular expression is designed to recognize dates 2696directory listing. This regular expression is designed to recognize dates
2692regardless of the language.") 2697regardless 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.
63Each 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.
73If nil, calculate the prefix dynamically to line up text
74underneath 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.
85Used 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.
95Channel buffers are truncated from the top to be no greater than this
96number. If zero or nil, no truncating is done.")
97
98(defvar rcirc-authinfo-file-name
99 "~/.rcirc-authinfo"
100 "File containing rcirc authentication passwords.
101The file consists of a single list, with each element itself a
102list with a SERVER-REGEXP string, a NICK-REGEXP string, a METHOD
103and the remaining method specific ARGUMENTS. The valid METHOD
104symbols are `nickserv', `chanserv' and `bitlbee'.
105
106The required ARGUMENTS for each METHOD symbol are:
107 `nickserv': PASSWORD
108 `chanserv': CHANNEL PASSWORD
109 `bitlbee': PASSWORD
110
111Example:
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.
118See also `rcirc-authinfo-file-name'.")
119
120(defvar rcirc-print-hooks nil
121 "Hook run after text is printed.
122Called with 5 arguments, PROCESS, SENDER, RESPONSE, TARGET and TEXT.")
123
124(defvar rcirc-prompt "%n> "
125 "Prompt string to use in irc buffers.
126
127The 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
132Setting this alone will not affect the prompt;
133use `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.
168If 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
182If any of the the optional SERVER, PORT, NICK or CHANNELS are not
183supplied, they are taken from the variables `rcirc-server',
184`rcirc-port', `rcirc-nick', and `rcirc-startup-channels',
185respectively."
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
223User will identify using the values of NICK, USER-NAME and
224FULL-NAME. The variable list of channel names in
225STARTUP-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.
288Debug text is written to `rcirc-log-buffer' if `rcirc-log-p' is
289non-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.
303Functions 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.
340Function 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.
409If 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.
483If 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.
617If 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.
628Create the buffer if it doesn't exist. If TARGET is nil, return
629the 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.
773Used 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.
829Format based on SENDER and RESPONSE. If ACTIVITY is non-nil,
830record 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'.
1026If 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.
1044Possible 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.
1063The function given by `rcirc-switch-to-buffer-function' is used to
1064show 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
1086Functions are called with a single argument, the buffer with the
1087activity. 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.
1211If 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.
1223With 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.
1314FUNCTION 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.
1586Passwords 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.
279FILE should be the name of a file created with the `etags' program. 287FILE 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."
922START is the position of <<. 932START is the position of <<.
923STRING is the actual word used as delimiter (f.ex. \"EOF\"). 933STRING is the actual word used as delimiter (f.ex. \"EOF\").
924INDENTED is non-nil if the here document's content (and the EOF mark) can 934INDENTED is non-nil if the here document's content (and the EOF mark) can
925be indented (i.e. a <<- was used rather than just <<)." 935be indented (i.e. a <<- was used rather than just <<).
936Point 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.
143Changing this value while Emacs is running is supported, but considered 148Changing this value while Emacs is running is supported, but considered
144unwise, unless you know what you are doing.") 149unwise, 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.
4576With a prefix argument, set VARIABLE to VALUE buffer-locally." 4576With 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.
1020The value is normally a string that was passed to `load': 1020The value is an absolute file name.
1021either an absolute file name, or a library name
1022\(with no directory name and no `.el' or `.elc' at the end).
1023It can also be nil, if the definition is not associated with any file. 1021It can also be nil, if the definition is not associated with any file.
1024 1022
1025If TYPE is nil, then any kind of definition is acceptable. 1023If 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.
779When nil, the entire headline is fontified. 783When nil, the entire headline is fontified.
780After changin this, requires restart of Emacs to become effective." 784After 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.
1499This 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.
9448The iCalendar file will be located in the same directory as the Org-mode
9449file, 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.
9456Each iCalendar file will be located in the same directory as the Org-mode
9457file, 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.
9464The 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.
9470If COMBINE is non-nil, combine all calendar entries into a single large
9471file 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.
9505The iCalendar buffer is still current when this hook is run.
9506A good way to use this is to tell a desktop calenndar application to re-read
9507the 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'.
9511When 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
9545SUMMARY:%s
9546END: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
9566SUMMARY:%s
9567SEQUENCE:1
9568PRIORITY:%d
9569END: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
9580VERSION:2.0
9581X-WR-CALNAME:%s
9582PRODID:-//%s//Emacs with Org-mode//EN
9583X-WR-TIMEZONE:Europe/Amsterdam
9584CALSCALE: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.
9592KEYWORD is added in front, to make a complete line like DTSTART....
9593When INC is non-nil, increase the hour by two (if time string contains
9594a 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
165This function returns either the value of the variable `sentence-end' 171This function returns either the value of the variable `sentence-end'
166if it is non-nil, or the default value constructed from the 172if it is non-nil, or the default value constructed from the
167variables `sentence-end-double-space', `sentence-end-without-period' 173variables `sentence-end-base', `sentence-end-double-space',
168and `sentence-end-without-space'. The default value specifies 174`sentence-end-without-period' and `sentence-end-without-space'.
169that in order to be recognized as the end of a sentence, the 175
170ending period, question mark, or exclamation point must be 176The default value specifies that in order to be recognized as the
171followed by two spaces, unless it's inside some sort of quotes or 177end of a sentence, the ending period, question mark, or exclamation point
172parenthesis. See Info node `(elisp)Standard Regexps'." 178must be followed by two spaces, with perhaps some closing delimiters
179in 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 @@
12005-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
12005-10-15 Richard M. Stallman <rms@gnu.org> 102005-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 @@
12005-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
62005-10-19 Kim F. Storm <storm@cua.dk>
7
8 * display.texi (Showing Images): Add max-image-size integer value.
9
102005-10-18 Chong Yidong <cyd@stupidchicken.com>
11
12 * display.texi (Showing Images): Document max-image-size.
13
12005-10-17 Richard M. Stallman <rms@gnu.org> 142005-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.
4058Focus}). 4058Focus}).
4059@end defun 4059@end defun
4060 4060
4061@defvar max-image-size
4062@tindex max-image-size
4063This variable is used to define the maximum size of image that Emacs
4064will load. Emacs will refuse to load (and display) any image that is
4065larger than this limit.
4066
4067If the value is an integer, it directly specifies the maximum
4068image height and width, measured in pixels. If it is a floating
4069point number, it specifies the maximum image height and width
4070as a ratio to the frame height and width. If the value is
4071non-numeric, there is no explicit limit on the size of images.
4072
4073The purpose of this variable is to prevent unreasonably large images
4074from accidentally being loaded into Emacs. It only takes effect the
4075first time an image is loaded. Once an image is placed in the image
4076cache, 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
736acceptable. If @var{type} is @code{defun} or @code{defvar}, that 736acceptable. If @var{type} is @code{defun} or @code{defvar}, that
737specifies function definition only or variable definition only. 737specifies function definition only or variable definition only.
738 738
739The value is the file name as it was specified to @code{load}: 739The value is normally an absolute file name. It can also be
740either 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).
742It 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
749This variable's value is an alist connecting library names with the 747This variable's value is an alist connecting library file names with the
750names of functions and variables they define, the features they provide, 748names of functions and variables they define, the features they provide,
751and the features they require. 749and the features they require.
752 750
753Each element is a list and describes one library. The @sc{car} of the 751Each element is a list and describes one library. The @sc{car} of the
754list is the name of the library, as a string. The rest of the list 752list is the absolute file name of the library, as a string. The rest
755elements have these forms: 753of 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 @@
12005-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
12005-09-24 Eli Zaretskii <eliz@gnu.org> 62005-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
55self_contained=no 55self_contained=no
56app_symlink=no 56app_symlink=no
57full_dist=yes 57full_dist=yes
58compressed_dist=no
58build_in_place=no 59build_in_place=no
59keep_directory=no 60keep_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
299fi 303fi
300 304
305if 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
311fi
312
301if test "$with_app" == "yes"; then 313if 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 @@
12005-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
62005-10-21 Carsten Dominik <dominik@science.uva.nl>
7
8 * org.texi (Summary): Mention iCalendar support.
9 (Exporting): Document iCalendar support.
10
12005-10-18 Romain Francoise <romain@orebokech.com> 112005-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
791with @kbd{M-x set-variable}. This reads the variable name with the 791with @kbd{M-x set-variable}. This reads the variable name with the
792minibuffer (with completion), and then reads a Lisp expression for the 792minibuffer (with completion), and then reads a Lisp expression for the
793new value using the minibuffer a second time. For example, 793new value using the minibuffer a second time (you can insert the old
794value into the minibuffer for editing via @kbd{M-n}). For example,
794 795
795@example 796@example
796M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET} 797M-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
159Exporting 159Exporting
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
165HTML 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.
204Plain text URL-like links connect to websites, emails, Usenet 209Plain text URL-like links connect to websites, emails, Usenet
205messages, BBDB entries, and any files related to the projects. For 210messages, BBDB entries, and any files related to the projects. For
206printing and sharing of notes, an Org-mode file can be exported as a 211printing and sharing of notes, an Org-mode file can be exported as a
207structured ASCII file, or as HTML. 212structured ASCII file, as HTML, or (todo and agenda items only) as an
213iCalendar file.
208 214
209Org-mode keeps simple things simple. Not every outline branch needs 215Org-mode keeps simple things simple. Not every outline branch needs
210to be an action item, not every action item needs to have priority or 216to be an action item, not every action item needs to have priority or
@@ -2048,6 +2054,11 @@ calendars.
2048@item H 2054@item H
2049Show holidays for three month around the cursor date. 2055Show 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
2059Export a single iCalendar file containing entries from all agenda files.
2060Not 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
2153For printing and sharing of notes, an Org-mode document can be
2154exported as an ASCII file, or as HTML. In the exported version, the
2155first 3 outline levels will become headlines, defining a general
2156document structure. Additional levels will be exported as itemize
2157lists. If you want that transition to occur at a different level,
2158specify it with a prefix argument. For example,
2159 2160
2160@example 2161For printing and sharing of notes, Org-mode documents can be exported
2161@kbd{M-1 M-x org-export-as-html} 2162as ASCII or HTML files. To incorporate entries with associated times
2162@end example 2163like deadlines or appointments into a desktop calendar program like
2163@noindent 2164iCal, Org-mode can also produce extracts in the iCalendar format.
2164creates 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
2183will be exported. For an org file @file{myfile.org}, the ASCII file 2183will be exported. For an org file @file{myfile.org}, the ASCII file
2184will be @file{myfile.txt}. The file will be overwritten without 2184will be @file{myfile.txt}. The file will be overwritten without
2185warning. 2185warning.
2186@end table
2187
2188@cindex headline levels, for exporting
2189In the exported version, the first 3 outline levels will become
2190headlines, defining a general document structure. Additional levels
2191will be exported as itemize lists. If you want that transition to occur
2192at 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
2197creates only top level headlines and does the rest as items. Lines
2198starting with @samp{#} and subtree starting with the word @samp{COMMENT}
2199will not be exported.
2200
2201@node HTML export, iCalendar export, ASCII export, Exporting
2202@section HTML export
2203@cindex HTML export
2204
2205Org-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
2188Export as HTML file @file{myfile.html}. 2213Export as HTML file @file{myfile.html}.
@@ -2197,8 +2222,25 @@ Insert template with export options, see below.
2197Toggle fixed-width for entry (QUOTE) or region, see below. 2222Toggle 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 2226In the exported version, the first 3 outline levels will become
2227headlines, defining a general document structure. Additional levels
2228will be exported as itemize lists. If you want that transition to occur
2229at 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
2234creates 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
2203Not all text is transferred literally to the exported HTML file. The 2245Not all text is transferred literally to the exported HTML file. The
2204exporter implements the following interpretation: 2246exporter implements the following interpretation:
@@ -2248,8 +2290,8 @@ Plain @samp{<} and @samp{>} are always transformed to @samp{&lt;} and
2248If these conversions conflict with your habits of typing ASCII text, 2290If these conversions conflict with your habits of typing ASCII text,
2249they can all be turned off with corresponding variables. 2291they 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}
2295TeX: @r{turn on/off @TeX{} macros} 2337TeX: @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
2303Lines starting with @samp{#} in column zero are treated as comments 2345Lines starting with @samp{#} in column zero are treated as comments
2304and will never be exported. Also entire subtrees starting with the 2346and will never be exported. Also entire subtrees starting with the
2305word @samp{COMMENT} will never be exported. Finally, any text before 2347word @samp{COMMENT} will never be exported. Finally, any text before
2306the first headline will not be exported either. 2348the first headline will not be exported either. This applies also for
2349ASCII 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.
2311Toggle the COMMENT keyword at the beginning of an entry. 2354Toggle 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
2360Some people like to use Org-mode for keeping track of projects, but
2361still prefer a standard calendar application for anniversaries and
2362appointments. In this case it can be useful to have deadlines and
2363other time-stamped items in Org-mode files show up in the calendar
2364application. Org-mode can export calendar information in the standard
2365iCalendar format.
2366
2367@table @kbd
2368@kindex C-c C-x i
2369@item C-c C-x i
2370Create iCalendar entries for the current file and store them in the same
2371directory, using a file extension @file{.ics}.
2372@kindex C-c C-x C-i
2373@item C-c C-x C-i
2374Like @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
2376file will be written.
2377@kindex C-c C-x c
2378@item C-c C-x c
2379Create 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
2384How this calendar is best read and updated, depends on the on the
2385application you are using. For example, when using iCal under Apple
2386MacOS X, you could create a new calendar @samp{OrgMode} (the default
2387name 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
2390overwrite the corresponding file
2391@file{~/Library/Calendars/OrgMode.ics}. You may even use AppleScript
2392to 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 @@
12005-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
92005-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
142005-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
352005-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
402005-10-20 Olli Savia <ops@iki.fi> (tiny change)
41
42 * syssignal.h [__Lynx__]: Undef SIGPOLL along with SIGIO.
43
442005-10-20 Andreas Schwab <schwab@suse.de>
45
46 * minibuf.c (Fdisplay_completion_list): Doc fix.
47
482005-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
542005-10-19 Romain Francoise <romain@orebokech.com>
55
56 * emacs.c (main): Update copyright year.
57
582005-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
702005-10-18 Richard M. Stallman <rms@gnu.org>
71
72 * search.c (Fstring_match): Doc fix.
73
12005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 742005-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 @@
82005-10-16 Masatake YAMATO <jet@gyve.org> 812005-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
142005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 872005-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
485clone_per_buffer_values (from, to) 485clone_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
5112init_buffer () 5112init_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
diff --git a/src/ccl.c b/src/ccl.c
index 562215218bc..a5a39ca0d4b 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -2119,7 +2119,6 @@ int
2119check_ccl_update (ccl) 2119check_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}
diff --git a/src/fns.c b/src/fns.c
index 73ed21d0fbe..d0d4da4cd57 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -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
1100static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); 1100static struct image *make_image P_ ((Lisp_Object spec, unsigned hash));
1101static void free_image P_ ((struct frame *f, struct image *img)); 1101static void free_image P_ ((struct frame *f, struct image *img));
1102static int check_image_size P_ ((struct frame *f, int width, int height));
1102 1103
1104#define MAX_IMAGE_SIZE 6.0
1105Lisp_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
1160int
1161check_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));
2551static int xbm_load_image P_ ((struct frame *f, struct image *img, 2593static int xbm_load_image P_ ((struct frame *f, struct image *img,
2552 unsigned char *, unsigned char *)); 2594 unsigned char *, unsigned char *));
2553static int xbm_image_p P_ ((Lisp_Object object)); 2595static int xbm_image_p P_ ((Lisp_Object object));
2554static int xbm_read_bitmap_data P_ ((unsigned char *, unsigned char *, 2596static int xbm_read_bitmap_data P_ ((struct frame *f,
2597 unsigned char *, unsigned char *,
2555 int *, int *, unsigned char **)); 2598 int *, int *, unsigned char **));
2556static int xbm_file_p P_ ((Lisp_Object)); 2599static 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
2941static int 2984static int
2942xbm_read_bitmap_data (contents, end, width, height, data) 2985xbm_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.
8305Emacs will not load an image into memory if its pixel width or
8306pixel height exceeds this limit.
8307
8308If the value is an integer, it directly specifies the maximum
8309image height and width, measured in pixels. If it is a floating
8310point number, it specifies the maximum image height and width
8311as a ratio to the frame height and width. If the value is
8312non-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
670If optional fifth arg MUST-SUFFIX is non-nil, insist on 670If 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
674Loading a file records its definitions, and its `provide' and
675`require' calls, in an element of `load-history' whose
676car is the file name loaded. See `load-history'.
677
673Return t if file exists. */) 678Return 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.
3884Each alist element is a list that starts with a file name, 3890Each alist element is a list that starts with a file name,
3885except for one element (optional) that starts with nil and describes 3891except for one element (optional) that starts with nil and describes
3886definitions evaluated from buffers not visiting files. 3892definitions 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)'.
3890An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)', 3896An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)',
3891and means that SYMBOL was an autoload before this file redefined it 3897and means that SYMBOL was an autoload before this file redefined it
3892as a function. */); 3898as a function.
3899
3900For a preloaded file, the file name recorded is relative to the main Lisp
3901directory. 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.
2367The actual completion alternatives, as inserted, are given `mouse-face' 2367The actual completion alternatives, as inserted, are given `mouse-face'
2368properties of `highlight'. 2368properties of `highlight'.
2369At the end, this runs the normal hook `completion-setup-hook'. 2369At the end, this runs the normal hook `completion-setup-hook'.
2370It can find the completion buffer in `standard-output'. 2370It can find the completion buffer in `standard-output'.
2371The optional second arg COMMON-SUBSTRING is a string. 2371The optional second arg COMMON-SUBSTRING is a string.
2372It is used to put faces, `completions-first-difference` and 2372It 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
2375specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil, 2375specified by COMMON-SUBSTRING. If COMMON-SUBSTRING is nil,
2376the faces are not put. 2376the faces are not put.
2377Internally, COMMON-SUBSTRING is bound to `completion-common-substring' 2377Internally, COMMON-SUBSTRING is bound to `completion-common-substring'
2378during running `completion-setup-hook'. */) 2378during 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
2563static Lisp_Object
2564display_completion_list_1 (list)
2565 Lisp_Object list;
2566{
2567 return Fdisplay_completion_list (list, Qnil);
2568}
2569
2562DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_completion_help, 2570DEFUN ("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
430DEFUN ("string-match", Fstring_match, Sstring_match, 2, 3, 0, 430DEFUN ("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.
432Case is ignored if `case-fold-search' is non-nil in the current buffer. 432Matching ignores case if `case-fold-search' is non-nil.
433If third arg START is non-nil, start search at that index in STRING. 433If third arg START is non-nil, start search at that index in STRING.
434For index of first char beyond the match, do (match-end 0). 434For 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
8103x_calc_absolute_position (f) 8103x_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