Merge from emacs--devo--0, gnus--rel--5.10
authorMiles Bader <miles@gnu.org>
Fri, 4 Jul 2008 00:09:30 +0000 (00:09 +0000)
committerMiles Bader <miles@gnu.org>
Fri, 4 Jul 2008 00:09:30 +0000 (00:09 +0000)
Patches applied:

 * emacs--devo--0  (patch 1254-1310)

   - Update from CVS
   - Fix behavior of text-scale-increase when text-scale-mode is disabled
   - Tweak interface of buffer-face-mode functions
   - Fix variable names in buffer-face-mode-invoke
   - Fix autoload building command in src Makefile
   - Fix autoload directives in lisp/face-remap.el
   - (text-scale-adjust): Bind `echo-keystrokes' to nil.
   - Handle void selection in mouse-appearance-menu
   - Update from CVS: lisp/ibuf-ext.el (diff-sentinel): Declare.
   - Fix a bug with parsing of overlapping markup sequences in rcirc
   - Merge from emacs--rel--22
   - Implement display-time wrap/line-prefix feature
   - Merge from gnus--devo--0
   - Add missing doc/misc/ChangeLog entry

 * emacs--rel--22  (patch 277)
 * gnus--rel--5.10  (patch 297)

   - Update from CVS

2008-07-02  Juanma Barranquero  <lekktu@gmail.com>

   * lisp/nnimap.el (nnimap-id):
   * lisp/sieve-manage.el (sieve-manage-open): Doc fixes.

2008-07-02  Francesc Rocher  <rocher@member.fsf.org>

   * lisp/gnus.el (gnus-group-startup-message): Prefer SVG or PNG image,
   if available.

2008-06-25  Stefan Monnier  <monnier@iro.umontreal.ca>

   * lisp/mm-util.el (mm-with-multibyte, mm-with-unibyte): Remove.

   * lisp/nnkiboze.el (nnkiboze-generate-group):
   Use explicit mm-disable-multibyte rather than mm-with-unibyte.

   * lisp/nnmairix.el: Require CL.

Revision: emacs@sv.gnu.org/gnus--devo--0--patch-517

27 files changed:
etc/images/README
etc/images/gnus/README
etc/images/gnus/gnus.png [new file with mode: 0644]
etc/images/gnus/gnus.svg [new file with mode: 0644]
etc/images/splash.png [new file with mode: 0644]
etc/images/splash.svg [new file with mode: 0644]
lisp/ChangeLog
lisp/ChangeLog.2
lisp/gnus-demon.el
lisp/gnus.el
lisp/hashcash.el
lisp/message.el
lisp/mm-util.el
lisp/mml1991.el
lisp/nndb.el
lisp/nnimap.el
lisp/nnkiboze.el
lisp/nnmairix.el
lisp/rfc2047.el
lisp/sasl-ntlm.el
lisp/sasl.el
lisp/sieve-manage.el
lisp/smime.el
lisp/vc-annotate.el [new file with mode: 0644]
lisp/vc-dir.el [new file with mode: 0644]
texi/gnus.texi
texi/sasl.texi

index c7aa704..25b2195 100644 (file)
@@ -16,22 +16,24 @@ Thanks to jan.h.d@swipnet.se for the help.
 
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
-* The following icons are a part of Emacs:
+* The following icons are part of Emacs.  All are licensed under the
+  GNU General Public License version 3 (see COPYING) or later.
+  The xpm and svg files contain copyright and license information, but
+  it is reproduced here for convenience.  
 
 File: mh-logo.xpm
 
 File: mh-logo.xpm
-Author: Satyaki Das
-Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
-  Free Software Foundation, Inc.
-License: GNU General Public License version 3 or later (see COPYING)
-
-The files splash.xpm, splash8.xpm contain copyright and license
-information, but it is reproduced here for convenience.
+  Author: Satyaki Das
+  Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+    Free Software Foundation, Inc.
 
 Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm
   Author: Luis Fernandes <elf@ee.ryerson.ca>
 
 Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm
   Author: Luis Fernandes <elf@ee.ryerson.ca>
-  Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+  Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
     Free Software Foundation, Inc.
     Free Software Foundation, Inc.
-  License: GNU General Public License version 3 or later (see COPYING)
+
+Files: splash.png, splash.svg
+  Author: Francesc Rocher <rocher@member.fsf.org>
+  Copyright (C) 2008 Free Software Foundation, Inc.
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
index 16a52f1..2b58238 100644 (file)
@@ -1,10 +1,14 @@
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
+* The following icons are part of Emacs.  All are licensed under the
+  GNU General Public License version 3 (see COPYING) or later.
+  The file gnus.svg contains copyright and license information, but it
+  is reproduced here for convenience.
+
 Files: important.xpm, unimportant.xpm
 Author: Simon Josefsson <simon@josefsson.org>
 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
   Free Software Foundation, Inc.
 Files: important.xpm, unimportant.xpm
 Author: Simon Josefsson <simon@josefsson.org>
 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
   Free Software Foundation, Inc.
-License: GNU General Public License version 3 or later (see COPYING)
 
 Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm
 
 Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm
@@ -20,9 +24,13 @@ Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
 Author: Luis Fernandes <elf@ee.ryerson.ca>
 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
   Free Software Foundation, Inc.
 Author: Luis Fernandes <elf@ee.ryerson.ca>
 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
   Free Software Foundation, Inc.
-License: GNU General Public License version 3 or later (see COPYING)
 
 
-The following icons are from GNOME 2.x. They are not part of Emacs,
+Files: gnus.png, gnus.svg
+  Author: Francesc Rocher <rocher@member.fsf.org>
+  Copyright (C) 2008 Free Software Foundation, Inc.
+
+
+* The following icons are from GNOME 2.x. They are not part of Emacs,
 but are distributed and used by Emacs.  They are licensed under the
 GNU General Public License version 2 or later.  See the source of the
 gnome-icons-theme package for more information.
 but are distributed and used by Emacs.  They are licensed under the
 GNU General Public License version 2 or later.  See the source of the
 gnome-icons-theme package for more information.
diff --git a/etc/images/gnus/gnus.png b/etc/images/gnus/gnus.png
new file mode 100644 (file)
index 0000000..f497993
Binary files /dev/null and b/etc/images/gnus/gnus.png differ
diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg
new file mode 100644 (file)
index 0000000..da3d413
--- /dev/null
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Gnu Emacs Logo
+
+   Copyright (C) 2008
+   Free Software Foundation, Inc.
+
+   Author: Francesc Rocher <f.rocher@member.fsf.org>
+
+   This file is part of GNU Emacs.
+
+   GNU Emacs is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   GNU Emacs is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2182"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   width="260.05341"
+   height="264.41125"
+   version="1.0"
+   sodipodi:docname="gnus.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:docbase="/home/rocher/local/fret/devel/emacs/etc/images/gnus"
+   style="display:inline">
+  <metadata
+     id="metadata2166">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://www.gnu.org/copyleft/gpl.html" />
+        <dc:title>gnus</dc:title>
+        <dc:date>2008/06/28</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Francesc Rocher</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>GPL</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:description>gnus splash image</dc:description>
+        <cc:license
+           rdf:resource="http://www.gnu.org/copyleft/gpl.html" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="768"
+     inkscape:window-width="872"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="2.0914389"
+     inkscape:cx="130.0267"
+     inkscape:cy="132.20563"
+     inkscape:window-x="1620"
+     inkscape:window-y="48"
+     inkscape:current-layer="layer1"
+     showgrid="false" />
+  <defs
+     id="defs2184" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-212.83046,-131.30737)">
+    <path
+       style="fill:#ffcc00;fill-opacity:1"
+       d="M 260.5116,393.86288 C 262.4558,387.05826 267.2179,379.59417 297.5589,335.79513 C 319.8161,303.66546 330.6302,287.20557 331.3011,284.43711 C 333.0433,277.24717 333.8671,278.40273 332.422,286.00932 C 331.6536,290.05378 330.814,293.91798 330.5562,294.59643 C 329.9147,296.28421 263.0752,392.98791 261.2542,394.86288 C 259.97,396.18503 259.882,396.06646 260.5116,393.86288 z M 329.012,337.40194 C 329.012,329.74759 337.5126,308.05531 346.2698,293.36288 C 352.585,282.76738 356.0658,278.66265 357.6327,279.96306 C 360.1959,282.09035 360.2435,284.91669 357.7795,288.68079 C 348.0751,303.50587 344.2235,309.82445 343.039,312.86288 C 342.2885,314.78788 339.997,319.28788 337.9468,322.86288 C 335.8965,326.43788 333.6994,331.01438 333.0643,333.03289 C 331.7287,337.27788 329.012,340.20698 329.012,337.40194 z M 433.7142,310.70702 C 432.4323,301.35502 439.5948,263.14948 445.9643,245.36288 C 453.3999,224.59932 462.3035,187.01802 464.5939,166.7291 C 466.2806,151.78888 466.39427,150.80924 464.5937,145.48334 C 462.93203,140.5683 461.13308,138.66246 458.2794,135.86712 L 453.27086,132.20754 L 456.6769,131.86288 C 461.6112,131.86288 468.5389,137.86276 471.5396,144.73501 C 475.9375,154.80727 469.1008,193.79566 457.4889,224.86288 C 456.1527,228.43788 453.9429,236.08788 452.5782,241.86288 C 451.2135,247.63788 449.3929,254.61288 448.5324,257.36288 C 446.2294,264.72267 441.012,292.37437 441.012,297.21983 C 441.012,299.89703 439.8131,303.91285 437.6813,308.3766 L 434.3507,315.35061 L 433.7142,310.70702 z M 365.0631,287.61288 C 364.3799,285.87462 364.6166,285.04955 366.1039,283.98525 C 369.6205,281.46876 374.6693,273.55113 384.4649,255.19145 C 394.0909,237.14958 397.4834,232.60267 396.4281,239.15726 C 396.1442,240.92035 395.6983,243.71288 395.4372,245.36288 C 395.1761,247.01288 393.3158,250.83788 391.3032,253.86288 C 389.2906,256.88788 384.5367,265.43788 380.7391,272.86288 C 376.9414,280.28788 373.1295,287.15038 372.2681,288.11288 C 370.0173,290.62794 366.1425,290.35905 365.0631,287.61288 z M 320.6995,262.21705 C 320.3213,261.83892 320.0085,256.09205 320.0042,249.44621 C 319.9968,237.8214 319.8735,237.11784 316.7542,230.90534 C 314.6707,226.75574 312.0521,223.33733 309.4273,221.34075 L 305.3427,218.23371 L 307.5276,215.04493 L 309.7126,211.85615 L 312.2239,214.18355 C 318.5615,220.05696 320.0866,224.73813 320.89,240.78293 C 321.2726,248.42216 321.9363,253.34314 322.6144,253.56709 C 323.5922,253.89002 325.7193,249.88561 329.6283,240.36288 C 330.5606,238.09183 330.8754,237.84885 330.924,239.36288 C 331.0132,242.14152 328.403,251.64049 326.3917,255.85659 C 325.4718,257.78505 324.4153,260.0111 324.0441,260.80336 C 323.2442,262.51029 321.6616,263.17921 320.6995,262.21705 z M 245.1628,252.33639 C 242.7335,250.29224 242.012,248.8836 242.012,246.18509 L 242.012,242.68509 L 245.0499,245.24139 C 247.4506,247.26142 248.7618,247.66988 251.2999,247.18844 C 261.6191,245.23115 277.1998,234.54682 293.4888,218.25787 C 305.9223,205.82438 308.2914,205.51694 300.9064,217.2953 C 297.7695,222.29833 293.4637,226.68597 282.6564,235.89191 C 268.2506,248.16321 260.2183,253.05838 252.4128,254.32337 C 248.8949,254.8935 247.867,254.6118 245.1628,252.33639 z M 253.5564,224.18379 C 252.8479,221.3612 255.3686,216.65779 265.7868,201.36288 C 274.8859,188.00461 280.3419,181.70108 281.3091,183.42939 C 282.2829,185.16947 280.4642,188.16253 267.644,205.91868 C 262.7666,212.67391 257.7486,220.13306 256.493,222.49457 C 254.2534,226.70659 254.1976,226.73871 253.5564,224.18379 z M 384.1421,211.31896 C 380.7719,208.48314 379.5828,205.79041 380.4684,203.00013 C 381.0442,201.18604 381.1572,201.18566 384.7957,202.98583 C 389.6343,205.37981 394.2581,204.2146 402.3056,198.57322 C 408.5766,194.17721 413.0548,188.59621 417.4561,179.69171 C 419.3087,175.94368 420.7236,174.19872 421.6285,174.54597 C 423.516,175.27026 422.6184,178.34159 417.0017,190.37802 C 413.2533,198.41088 411.2578,201.35952 406.9201,205.27556 C 397.3226,213.94009 389.6701,215.97043 384.1421,211.31896 z M 349.133,205.78403 C 347.8246,205.26039 339.6679,197.95186 331.007,189.54285 C 314.4595,173.47664 311.9119,171.8466 303.3959,171.87654 C 296.4656,171.9009 295.032,172.81115 290.3019,180.19054 L 285.7873,187.23384 L 284.2923,183.79836 C 283.47,181.90885 282.4863,179.27759 282.1062,177.95112 C 281.7262,176.62464 280.6639,175.42908 279.7456,175.2943 C 278.8273,175.15952 276.1491,173.50192 273.794,171.61075 C 271.4389,169.71957 268.6984,167.88177 267.7041,167.52675 C 265.0385,166.57501 258.442,170.33611 255.7003,174.37086 C 252.3997,179.22817 236.1965,193.87325 232.3241,195.49923 C 229.2026,196.80994 224.2969,196.49006 220.8863,194.75342 C 219.99224,194.29815 217.81391,191.671 216.04559,188.91531 L 212.83046,183.90496 L 214.80788,178.98414 C 217.15719,174.46058 217.72614,175.73223 218.2264,179.21246 C 219.18564,185.88569 227.68275,189.64961 233.5992,186.55932 C 236.89108,184.8399 252.69001,170.52231 255.8597,166.33149 C 257.20184,164.55698 260.1603,162.00113 262.5471,160.73493 C 266.7567,158.50172 266.9938,158.48379 270.4593,160.13637 C 275.6317,162.60292 282.7604,169.52516 284.1848,173.46442 C 284.8607,175.33358 285.6949,176.86288 286.0385,176.86288 C 287.1145,176.86288 290.7063,172.50475 292.4119,169.12981 C 295.3372,163.34131 302.301,161.46605 311.3959,164.01764 C 314.6954,164.9433 318.6863,168.30161 331.512,180.94492 C 344.6932,193.93873 348.2487,196.90999 351.6941,197.81043 C 358.8294,199.67523 363.2588,198.02956 373.0854,189.86288 C 374.0781,189.03788 375.8498,185.88788 377.0226,182.86288 C 379.1772,177.30564 381.012,174.43132 381.012,176.61327 C 381.012,179.76831 373.6837,197.57365 371.7267,199.17339 C 363.2349,206.11521 361.752,206.86338 356.6119,206.7995 C 353.8069,206.76463 350.4414,206.30768 349.133,205.78403 z M 433.3755,165.01518 C 432.4887,162.66574 432.7313,161.09102 434.7622,156.01518 C 436.967,150.50427 437.5192,149.86288 440.0588,149.86288 C 443.1917,149.86288 445.26134,150.88627 443.04984,151.7349 C 442.27424,152.03251 440.6717,155.12671 440.0503,158.04922 C 439.1073,162.48386 436.241,167.86288 434.8209,167.86288 C 434.6171,167.86288 433.9667,166.58142 433.3755,165.01518 z "
+       id="path2180"
+       sodipodi:nodetypes="csssssccssssssccssscccsssssccccsssssssccsscccccsssssscccccsssssccssssccsssssssccsscccssssssscccssssssssssssssssccsssssc" />
+    <path
+       style="fill:#bf9900;fill-opacity:1"
+       d="M 260.04229,388.62496 C 260.04229,388.26779 262.41982,381.75886 265.3257,374.16067 L 270.60912,360.34578 L 302.0757,315.68057 C 319.38233,291.1147 333.61856,271.09097 333.71178,271.18339 C 333.80501,271.27582 333.11629,275.17516 332.1813,279.84861 L 330.48132,288.34578 L 296.61135,337.34578 C 264.11074,384.3647 260.04229,390.06972 260.04229,388.62496 z M 335.05416,340.71822 C 335.08273,332.59962 342.90077,312.31861 351.0582,299.20165 C 361.32924,282.68606 362.26372,281.87063 364.84686,287.16962 C 366.25843,290.0653 369.41495,290.67354 372.08298,288.56398 C 375.51683,285.84889 380.03165,278.64484 389.67374,260.49539 C 395.24604,250.00657 400.36753,241.23737 401.05483,241.00827 C 402.01257,240.68902 402.13639,241.96455 401.58489,246.46875 C 401.0637,250.72541 399.8145,254.01845 397.05407,258.4125 C 394.95789,261.7492 390.67229,269.6242 387.5305,275.9125 C 384.38872,282.2008 380.31753,289.451 378.48342,292.02406 C 376.64931,294.59711 373.9974,298.97426 372.59029,301.75106 C 368.67817,309.47125 362.50895,311.98005 358.85614,307.33625 C 357.77044,305.95601 356.44994,305.09384 355.9217,305.42031 C 354.21874,306.4728 350.06567,313.70826 348.00838,319.20686 C 346.90756,322.14908 344.70815,326.53397 343.1208,328.95106 C 341.53346,331.36816 339.66859,335.26362 338.97666,337.60766 C 338.28473,339.95169 337.11643,342.36929 336.38044,342.9801 C 335.30763,343.87046 335.04464,343.42196 335.05416,340.71822 z M 426.51573,311.58247 C 424.295,305.9694 431.46333,266.71003 438.975,243.34578 C 449.77938,209.73992 452.64775,197.05569 454.04936,176.68519 C 454.96702,163.34843 454.96666,163.3447 452.25475,157.85768 C 449.80808,152.90735 449.07425,152.22791 444.7659,150.92392 C 437.56998,148.74594 435.05822,150.01328 433.02221,156.8493 C 431.37096,162.3935 429.09988,166.84578 427.92306,166.84578 C 427.57209,166.84578 426.72504,165.4941 426.04074,163.84204 C 424.90188,161.09259 425.14703,160.10787 428.93648,152.21044 C 436.06395,137.3564 443.83129,130.05358 450.98168,131.48366 C 456.22602,132.53253 462.61341,139.07407 464.61888,145.44997 C 466.30125,150.79865 466.29973,151.75864 464.58462,167.19573 C 463.13938,180.20371 461.75469,186.94649 457.46738,201.85317 C 454.53978,212.03223 451.15045,222.60723 449.93555,225.35317 C 446.1278,233.95946 435.54286,279.84531 433.44365,296.84578 C 432.61201,303.58079 427.5826,314.27908 426.51573,311.58247 z M 321.70896,253.17911 C 321.34229,252.81245 321.03695,247.97495 321.03042,242.42911 C 321.01146,226.31633 317.22788,216.41482 309.49941,212.25276 C 307.59799,211.22878 306.04229,210.18189 306.04229,209.92634 C 306.04229,208.49277 316.49525,193.84578 317.51833,193.84578 C 319.99152,193.84578 326.75558,199.72182 328.49015,203.37716 C 333.52767,213.99294 332.83118,233.93705 326.98086,246.59578 C 323.69212,253.71184 323.04713,254.51728 321.70896,253.17911 z M 244.54744,244.71616 C 240.09276,240.8049 240.10279,238.80779 244.62887,228.50779 C 251.12687,213.72028 279.13707,173.54057 281.38247,175.78597 C 282.70155,177.10505 279.80235,182.49237 274.46237,188.64499 C 269.3537,194.5311 259.18508,209.65448 255.66693,216.5987 C 252.14831,223.54384 252.80477,226.43547 258.23185,227.89683 C 260.41964,228.48594 263.56598,228.67004 265.22372,228.30593 C 271.51092,226.92503 284.00526,217.92955 300.05241,203.23049 C 301.68769,201.73258 303.03384,201.22253 303.91486,201.76703 C 306.03123,203.07502 296.56646,216.17624 288.01264,223.77902 C 271.80417,238.18538 260.40653,245.44918 251.29744,247.17791 C 248.61178,247.6876 247.44854,247.26336 244.54744,244.71616 z M 385.05208,203.08715 C 383.14399,202.1294 380.92795,200.16456 380.12756,198.72084 C 378.77163,196.27507 378.93462,195.50718 382.51548,187.47084 C 386.47833,178.57722 388.11251,177.21384 390.15681,181.09578 C 392.28002,185.12758 395.18904,185.76578 402.36307,183.77366 C 406.32748,182.67281 414.04229,176.5005 414.04229,174.42959 C 414.04229,172.88138 419.26037,164.84578 420.26573,164.84578 C 421.92875,164.84578 420.892,169.30215 417.54229,176.55216 C 415.61729,180.71857 414.04229,184.60238 414.04229,185.18286 C 414.04229,189.11353 400.4626,201.51494 394.28759,203.2235 C 393.0475,203.56662 391.24279,204.06811 390.27712,204.33793 C 389.31144,204.60775 386.96018,204.0449 385.05208,203.08715 z M 351.04229,197.71284 C 348.53009,196.99762 343.02663,192.26267 331.54229,180.93585 C 318.71242,168.28195 314.72677,164.92651 311.42627,164.00055 C 302.33137,161.44895 295.36758,163.32421 292.44224,169.11271 C 290.73664,172.48766 287.1448,176.84578 286.06886,176.84578 C 285.72522,176.84578 284.89106,175.31648 284.21516,173.44732 C 282.79071,169.50806 275.66202,162.58582 270.4896,160.11927 C 267.0241,158.46669 266.78705,158.48462 262.5774,160.71783 C 260.19059,161.98404 257.18126,164.50249 255.89001,166.31439 C 252.89963,170.51055 237.46336,184.53731 233.62954,186.54223 C 229.94244,188.47042 223.46343,187.71137 220.79008,185.03803 C 219.53025,183.77819 218.15867,179.73726 216.94597,173.71255 C 215.909,168.56083 214.85791,163.44578 214.61023,162.34578 C 214.36254,161.24578 214.77878,159.51283 215.5352,158.49477 C 216.86599,156.70366 217.03603,156.7143 220.78906,158.82362 C 222.92227,160.02255 225.74927,162.75363 227.07128,164.8927 C 229.98826,169.61248 233.49513,170.68159 238.2193,168.2913 C 243.83735,165.44874 252.09545,158.65646 255.73355,153.88584 C 261.53439,146.27922 267.01031,140.89191 269.60251,140.24131 C 270.95713,139.90132 274.42274,140.39104 277.30387,141.32958 C 281.31123,142.63498 283.68866,144.31886 287.42036,148.49485 L 292.29844,153.9537 L 294.13431,150.93486 C 296.60368,146.8743 304.74442,142.84578 310.48053,142.84578 C 318.1271,142.84578 324.55144,146.55377 334.0772,156.46527 C 338.7714,161.34955 343.75341,166.74716 345.14834,168.45995 C 354.26564,179.65481 368.97614,182.16041 374.81884,173.51365 C 376.07095,171.66063 378.24823,169.06481 379.65725,167.74515 L 382.2191,165.34578 L 381.49679,169.21635 C 380.17312,176.3093 374.99275,188.27876 372.22815,190.63193 C 364.00605,197.63042 357.90971,199.66799 351.04229,197.71284 z "
+       id="path2169" />
+  </g>
+</svg>
diff --git a/etc/images/splash.png b/etc/images/splash.png
new file mode 100644 (file)
index 0000000..9d05131
Binary files /dev/null and b/etc/images/splash.png differ
diff --git a/etc/images/splash.svg b/etc/images/splash.svg
new file mode 100644 (file)
index 0000000..353053c
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Gnu Emacs Logo
+
+   Copyright (C) 2008
+   Free Software Foundation, Inc.
+
+   Author: Francesc Rocher <f.rocher@members.fsf.org>
+   Based on the original work by Luis Fernandes <elf@ee.ryerson.ca>
+
+   This file is part of GNU Emacs.
+
+   GNU Emacs is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   GNU Emacs is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg6706"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   width="271"
+   height="217"
+   version="1.0"
+   sodipodi:docname="splash.svg"
+   inkscape:label="fg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:docbase="/home/rocher/local/fret/devel/emacs/etc/images"
+   style="display:inline">
+  <metadata
+     id="metadata2314">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>splash</dc:title>
+        <dc:date>2008/06/28</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Francesc Rocher</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>GPL</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:description>GNU Emacs splash image</dc:description>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Based on the original work by Luis Fernandes.</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <cc:license
+           rdf:resource="http://www.gnu.org/copyleft/gpl.html" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6709">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 108.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="271 : 108.5 : 1"
+       inkscape:persp3d-origin="135.5 : 72.333333 : 1"
+       id="perspective2498" />
+    <linearGradient
+       id="linearGradient2558">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop2560" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop2562" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2550">
+      <stop
+         style="stop-color:#2997f6;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop2552" />
+      <stop
+         style="stop-color:#2997f6;stop-opacity:0.78431374;"
+         offset="1"
+         id="stop2554" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8019">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8021" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop8023" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7896">
+      <stop
+         style="stop-color:#fc644b;stop-opacity:0.78431374;"
+         offset="0"
+         id="stop7898" />
+      <stop
+         style="stop-color:#fc644b;stop-opacity:0.78431374;"
+         offset="1"
+         id="stop7900" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2550"
+       id="linearGradient2556"
+       x1="147.62743"
+       y1="92.09787"
+       x2="145.82028"
+       y2="203.60176"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2558"
+       id="linearGradient2564"
+       x1="130.93193"
+       y1="92.09787"
+       x2="129.53438"
+       y2="203.60176"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7896"
+       id="linearGradient2567"
+       gradientUnits="userSpaceOnUse"
+       x1="148.13887"
+       y1="145.57669"
+       x2="179.22762"
+       y2="44.272839"
+       gradientTransform="translate(-2.4002643e-7,-2.6398943e-6)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8019"
+       id="linearGradient2569"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.3535448,0.3535474)"
+       x1="91.959305"
+       y1="48.593826"
+       x2="74.102982"
+       y2="153.43918" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7896"
+       id="linearGradient2425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-2.4002643e-7,-2.6398943e-6)"
+       x1="147.52159"
+       y1="0.92070419"
+       x2="147.12886"
+       y2="211.99936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8019"
+       id="linearGradient2427"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.3535448,0.3535474)"
+       x1="131.99864"
+       y1="0.56715417"
+       x2="131.99864"
+       y2="211.64581" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-height="973"
+     inkscape:window-width="1280"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#000000"
+     id="base"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="125.4227"
+     inkscape:cy="119.51264"
+     inkscape:window-x="1280"
+     inkscape:window-y="0"
+     inkscape:current-layer="layer4"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     width="271px"
+     height="217px"
+     showgrid="false">
+    <sodipodi:guide
+       orientation="1,0"
+       position="15.291184,193.74726"
+       id="guide3598" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="20.4375,213.5"
+       id="guide3600" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid3602" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="268.5238,3.0935922"
+       id="guide3604" />
+  </sodipodi:namedview>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="bg-emacs"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#000000;display:inline"
+       d="M 6.1695811,203.2763 C 1.8388869,199.67523 2.1127919,195.96424 7.4902622,185.38334 C 11.360302,177.76853 13.266697,175.4371 23.932576,165.27521 C 31.613767,157.95698 35.347917,153.77925 34.210011,153.77692 C 33.227002,153.77489 30.969631,152.89774 29.193641,151.82767 C 23.060428,148.13228 25.538468,143.16627 40.345042,129.48016 C 50.392956,120.19262 61.808486,111.61667 70.72365,106.65814 C 82.250389,100.24706 96.306288,95.980687 100.16995,97.720313 C 104.08818,99.484523 103.03488,102.63111 96.454855,108.81859 C 90.856953,114.08255 78.904354,121.98483 77.956715,121.04837 C 77.726566,120.82094 80.412877,118.60777 83.926288,116.13022 C 88.080496,113.20081 90.545462,110.71551 90.975316,109.02305 C 91.33886,107.59164 91.404962,106.19187 91.122204,105.91245 C 90.458257,105.25633 77.249121,109.36745 72.429356,111.73027 C 59.551532,118.04343 39.874422,133.36949 39.874422,137.08657 C 39.874422,142.86737 51.14064,143.84144 61.015932,138.91444 C 67.925573,135.46708 72.661938,133.89327 72.661938,135.04468 C 72.661938,137.28595 60.432861,146.98956 53.740114,150.05889 C 43.112945,154.93258 35.762073,159.85609 27.416547,167.69001 C 19.721397,174.91343 16.028956,180.83255 16.028956,185.94475 C 16.028956,189.40325 18.963121,192.0724 22.764992,192.0724 C 30.62106,192.0724 35.876253,188.9229 58.932752,170.39661 C 64.024743,166.30511 70.24216,161.77637 72.749233,160.33274 C 77.152328,157.79733 81.603988,156.8733 81.603988,158.49475 C 81.603988,159.39101 71.902629,175.78836 68.545674,180.56606 L 66.324887,183.72675 L 68.710427,181.76307 C 70.022484,180.68304 72.455695,178.4739 74.117585,176.85386 C 86.700092,164.58817 95.303775,158.6898 100.61269,158.6898 C 103.05577,158.6898 104.71944,159.20786 105.0555,160.0733 C 105.56783,161.39265 104.60656,165.7543 102.87196,169.98097 C 102.34023,171.27663 103.90906,170.40701 107.48361,167.4247 C 114.82361,161.30083 121.37103,157.70795 125.19076,157.70795 C 129.70556,157.70795 129.95775,159.64928 126.41484,167.131 C 122.70859,174.95765 122.24133,181.95468 125.24549,184.64134 C 127.07268,186.27542 127.36995,186.23152 131.95202,183.65102 C 134.58906,182.16591 137.86439,179.99005 139.23053,178.81577 C 149.46228,170.02101 177.9823,153.45154 179.79411,155.24929 C 180.60737,156.05623 178.12436,157.94916 169.4855,163.10808 C 155.42407,171.50523 147.19459,179.74778 147.18403,185.44497 C 147.17845,188.45426 147.44709,188.59782 150.28011,187.09951 C 154.812,184.70273 153.8964,186.99676 148.9992,190.30881 C 136.22123,198.95077 131.99912,197.37717 137.76983,186.12356 L 140.28337,181.22184 L 132.44653,186.55593 C 118.74115,195.88442 113.35412,197.77987 109.99145,194.45687 C 107.41491,191.91072 108.0274,184.95007 111.41082,178.32662 C 114.12045,173.02219 115.23973,168.50821 113.84539,168.50821 C 111.49183,168.50821 106.46299,172.71228 100.63284,179.55382 C 90.793753,191.09971 83.05265,198.34612 81.276958,197.67276 C 80.089364,197.22241 80.775746,195.19677 84.767238,187.37233 C 87.499959,182.01541 90.812332,176.39446 92.128056,174.88131 C 96.600938,169.7373 95.099966,167.92406 88.497732,170.49572 C 84.81171,171.93148 80.128461,175.82237 68.486498,187.12126 C 54.869574,200.3369 49.810033,204.05197 49.810033,200.83481 C 49.810033,200.25402 51.598443,196.75276 53.784278,193.05424 C 55.970112,189.35572 57.758522,186.10662 57.758522,185.83402 C 57.758522,185.56141 59.483841,182.76661 61.592555,179.62335 C 63.701269,176.48009 65.762511,172.85458 66.17309,171.56667 C 66.919324,169.22591 66.918152,169.22607 63.084238,171.99663 C 60.974779,173.52102 57.460454,176.37942 55.274619,178.34864 C 53.088785,180.31787 50.128748,182.77536 48.696748,183.80974 C 47.264758,184.84412 43.017285,188.15826 39.257918,191.17449 C 35.498561,194.19072 28.855244,198.71947 24.495001,201.23837 C 15.041456,206.69965 10.847465,207.16605 6.1695811,203.2763 z M 164.29064,193.48948 C 159.4721,190.15427 162.86071,176.51691 170.15765,169.87785 C 173.44029,166.89116 182.32808,160.65348 183.30102,160.65348 C 183.57191,160.65348 182.26182,163.55747 180.38971,167.10679 C 174.95449,177.41134 176.14222,185.19951 183.14894,185.19951 C 189.0246,185.19951 194.10068,182.21811 204.1072,172.88981 C 215.28273,162.47177 224.96686,156.86895 233.29431,156.00343 C 239.43659,155.36503 238.29588,156.74072 229.57959,160.48342 C 220.35337,164.44507 217.59282,166.29563 213.98901,170.93468 C 209.42368,176.81148 208.87974,180.47831 212.1011,183.66166 C 214.13209,185.66868 215.62028,186.18012 219.41545,186.1753 C 222.03596,186.17198 225.40955,185.53543 226.91231,184.76077 C 228.41507,183.9861 229.6446,183.7216 229.6446,184.173 C 229.6446,185.28011 220.19356,190.10495 217.98855,190.12349 C 217.02219,190.13162 214.44312,190.77498 212.25728,191.55316 C 210.07145,192.33135 205.7225,192.98744 202.59297,193.01114 C 197.62523,193.04877 196.70033,192.74874 195.30725,190.64771 C 194.36788,189.23094 193.97736,187.41378 194.35775,186.22942 C 195.17832,183.67453 194.67478,183.70501 190.13081,186.4853 C 176.77802,194.6554 169.0151,196.7596 164.29064,193.48948 z M 234.61241,194.08755 C 233.24626,193.62688 230.67542,193.20594 228.89943,193.15211 C 222.98176,192.97275 225.31175,190.63745 233.95678,188.08324 C 236.17336,187.42834 236.66631,187.53872 236.25502,188.59786 C 235.1982,191.31943 244.23779,192.08477 249.79613,189.74434 C 255.20132,187.46838 257.82958,183.84491 257.89957,178.57248 C 257.95845,174.13691 257.81176,173.88692 254.48363,172.75123 C 252.57103,172.09857 245.97626,171.53962 239.82861,171.50915 C 227.02389,171.44566 225.67995,170.38628 232.78291,165.95527 C 242.22085,160.06764 252.77878,155.74427 257.71879,155.74427 C 263.253,155.74427 263.25585,157.15717 257.72368,158.1684 C 253.89831,158.86764 244.11025,163.87967 242.95139,165.73264 C 241.73834,167.67225 245.04566,168.47814 254.2804,168.49317 C 262.75089,168.50696 263.71804,168.70786 265.95474,170.91818 C 269.71614,174.6352 269.37098,180.55553 265.16441,184.47426 C 257.75353,191.37807 241.6262,196.45259 234.61241,194.08755 z"
+       id="bg-emacs"
+       inkscape:label="bg-emacs" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="emacs"
+     style="opacity:1;display:inline">
+    <path
+       style="opacity:1;fill:url(#linearGradient2556);fill-opacity:1;stroke:url(#linearGradient2564);display:inline"
+       d="M 4.931694,200.50384 C 0.57293401,196.83617 0.84861401,193.05655 6.260934,182.27996 C 10.156054,174.52432 12.074804,172.14977 22.809804,161.79994 C 30.540774,154.34636 34.299124,150.09137 33.153844,150.08899 C 32.164464,150.08693 29.892464,149.19355 28.104964,148.10369 C 21.932004,144.33996 24.426104,139.2821 39.328634,125.34288 C 49.441664,115.88357 60.931174,107.14901 69.904114,102.09877 C 81.505554,95.569112 95.652544,91.223832 99.541235,92.995632 C 103.48487,94.792472 102.42474,97.997262 95.802074,104.29918 C 90.167894,109.66049 78.137834,117.70892 77.184054,116.75514 C 76.952414,116.52351 79.656134,114.26941 83.192314,111.74604 C 87.373444,108.76245 89.854384,106.23118 90.287024,104.50742 C 90.652924,103.04954 90.719454,101.62388 90.434864,101.33929 C 89.766614,100.67104 76.471874,104.85819 71.620874,107.26471 C 58.659594,113.69463 38.854964,129.30414 38.854964,133.08996 C 38.854964,138.97768 50.194194,139.96976 60.133484,134.95164 C 67.087904,131.44052 71.854964,129.8376 71.854964,131.01031 C 71.854964,133.29303 59.546634,143.1761 52.810514,146.3022 C 42.114474,151.26603 34.715964,156.28059 26.316354,164.2594 C 18.571334,171.61641 14.854964,177.645 14.854964,182.85175 C 14.854964,186.37421 17.808144,189.09273 21.634654,189.09273 C 29.541634,189.09273 34.830884,185.88498 58.036804,167.01606 C 63.161794,162.84889 69.419504,158.23639 71.942824,156.76606 C 76.374454,154.18376 80.854964,153.24264 80.854964,154.89408 C 80.854964,155.80691 71.090734,172.50752 67.712024,177.37359 L 65.476844,180.59273 L 67.877844,178.59273 C 69.198404,177.49273 71.647384,175.24273 73.320044,173.59273 C 85.984094,161.10019 94.643534,155.09273 99.986845,155.09273 C 102.44577,155.09273 104.12022,155.62038 104.45846,156.50182 C 104.97411,157.84557 104.00661,162.28789 102.26076,166.59273 C 101.72558,167.91235 103.30459,167.02665 106.90231,163.98918 C 114.28987,157.75205 120.87972,154.09273 124.72421,154.09273 C 129.26827,154.09273 129.52209,156.06996 125.95622,163.69005 C 122.22595,171.66145 121.75566,178.78789 124.77929,181.52424 C 126.61832,183.18854 126.91752,183.14383 131.52929,180.5156 C 134.18342,179.00302 137.47997,176.78692 138.85497,175.59092 C 149.15302,166.63351 177.85787,149.7576 179.68142,151.58859 C 180.49995,152.41046 178.00085,154.3384 169.30601,159.59273 C 155.15345,168.14518 146.87064,176.54017 146.86001,182.34273 C 146.85439,185.40767 147.12477,185.55389 149.97615,184.02787 C 154.53741,181.58676 153.61588,183.92322 148.68694,187.29652 C 135.82616,196.09831 131.57669,194.49561 137.3848,183.03387 L 139.91463,178.04149 L 132.027,183.47424 C 118.2328,192.97525 112.81086,194.90576 109.4264,191.5213 C 106.83316,188.92806 107.44962,181.83868 110.85497,175.09273 C 113.58216,169.6902 114.70869,165.09273 113.30531,165.09273 C 110.9365,165.09273 105.87507,169.37455 100.00713,176.34262 C 90.104284,188.10205 82.313014,195.48248 80.525814,194.79667 C 79.330524,194.33799 80.021354,192.27488 84.038714,184.30573 C 86.789144,178.84974 90.122984,173.12483 91.447234,171.5837 C 95.949104,166.34455 94.438404,164.49778 87.793384,167.117 C 84.083474,168.57931 79.369874,172.54216 67.652464,184.05002 C 53.947294,197.51008 48.854964,201.29386 48.854964,198.0172 C 48.854964,197.42566 50.654964,193.85965 52.854964,190.09273 C 55.054964,186.32581 56.854964,183.01662 56.854964,182.73897 C 56.854964,182.46132 58.591464,179.61483 60.713844,176.41344 C 62.836224,173.21205 64.910824,169.51949 65.324064,168.20776 C 66.075134,165.8237 66.073954,165.82387 62.215194,168.64567 C 60.092064,170.19825 56.554964,173.10952 54.354964,175.11516 C 52.154964,177.12081 49.175744,179.62375 47.734464,180.67726 C 46.293194,181.73077 42.018194,185.1062 38.234464,188.17821 C 34.450744,191.25023 27.764374,195.86273 23.375874,198.42822 C 13.861064,203.9905 9.6398944,204.46553 4.931694,200.50384 z M 164.07748,190.53602 C 159.22771,187.13912 162.63828,173.24955 169.98251,166.4877 C 173.28643,163.44577 182.23181,157.09273 183.21106,157.09273 C 183.48371,157.09273 182.16513,160.05043 180.28088,163.66539 C 174.81044,174.16052 176.00587,182.09273 183.05799,182.09273 C 188.97173,182.09273 194.08071,179.05619 204.15208,169.55537 C 215.40003,158.94465 225.14692,153.23821 233.52834,152.35668 C 239.71042,151.70647 238.56232,153.10761 229.78954,156.91953 C 220.50353,160.95445 217.72509,162.83923 214.09793,167.56408 C 209.50301,173.54957 208.95555,177.28421 212.19778,180.52644 C 214.24193,182.57058 215.73977,183.09147 219.55953,183.08657 C 222.19703,183.08318 225.59248,182.43486 227.10498,181.64587 C 228.61748,180.85688 229.85498,180.58749 229.85498,181.04723 C 229.85498,182.17482 220.34269,187.08889 218.12339,187.10778 C 217.15076,187.11606 214.55498,187.77131 212.35498,188.56389 C 210.15498,189.35647 205.77785,190.02469 202.62803,190.04883 C 197.6281,190.08716 196.69721,189.78158 195.2951,187.64169 C 194.34964,186.19872 193.95659,184.34795 194.33944,183.14169 C 195.16533,180.53954 194.65853,180.57059 190.08511,183.4023 C 176.64579,191.7235 168.83256,193.86662 164.07748,190.53602 z M 234.85498,191.14515 C 233.47998,190.67596 230.89248,190.24723 229.10498,190.19241 C 223.14896,190.00973 225.49405,187.63124 234.1951,185.02979 C 236.42605,184.36278 236.92219,184.4752 236.50824,185.55393 C 235.44457,188.32583 244.54274,189.10533 250.1371,186.72161 C 255.57732,184.40356 258.22261,180.71308 258.29306,175.34313 C 258.35232,170.82553 258.20468,170.57092 254.85498,169.41422 C 252.92998,168.74949 246.29248,168.18021 240.10498,168.14917 C 227.21728,168.08451 225.86463,167.00554 233.01362,162.49258 C 242.51273,156.49606 253.13908,152.09273 258.1111,152.09273 C 263.68118,152.09273 263.68405,153.53176 258.11603,154.56169 C 254.26587,155.27386 244.41437,160.37859 243.248,162.26583 C 242.02709,164.24131 245.35584,165.0621 254.65043,165.07741 C 263.17582,165.09146 264.14923,165.29607 266.40043,167.54727 C 270.1862,171.33304 269.83881,177.36286 265.60498,181.35407 C 258.14607,188.38556 241.91422,193.55393 234.85498,191.14515 z"
+       id="emacs"
+       inkscape:label="emacs" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="bg-gnu"
+     style="display:inline">
+    <path
+       id="bg-gnu"
+       d="M 57.964139,213.18663 C 60.419089,204.75722 65.429969,194.08978 70.273479,186.98184 C 75.998719,178.57993 77.670749,176.26272 99.036976,147.11956 C 115.95228,124.04737 118.30926,120.64653 121.64961,114.49211 C 123.19636,111.6423 124.83543,109.31064 125.29198,109.31064 C 126.47686,109.31064 126.39522,109.66459 123.65471,116.40903 C 122.29766,119.74874 121.18735,122.85645 121.18735,123.31503 C 121.18735,123.7736 118.20323,128.91551 114.55597,134.74148 C 105.54448,149.13603 103.76812,151.84051 101.44011,154.71012 C 100.3392,156.06717 97.576726,159.84224 95.301296,163.09916 C 93.025866,166.35608 90.702336,169.52146 90.137886,170.13334 C 89.573446,170.74522 87.335119,173.78537 85.163849,176.88923 C 78.455459,186.47891 69.027339,199.54123 67.687459,201.10211 C 66.985889,201.9194 64.635389,205.57568 62.464109,209.22717 C 58.292149,216.24324 56.654209,217.68444 57.964139,213.18663 z M 124.61625,186.04563 C 124.83962,185.36711 126.14939,181.15242 127.52686,176.67964 C 130.98125,165.46294 141.22429,145.66263 147.31637,138.42553 L 149.80876,135.46469 L 152.06645,138.17879 C 154.75072,141.40568 155.95939,141.52233 160.11276,138.95541 C 163.2081,137.04239 167.82894,129.56665 180.26663,106.34981 C 184.82883,97.833765 185.29178,97.282245 185.31415,100.33657 C 185.35582,106.02506 163.04187,147.45245 155.89413,154.95686 C 151.76625,159.29073 149.69002,159.57951 147.02425,156.19054 C 145.95679,154.83349 144.70321,153.72397 144.23852,153.72494 C 142.61294,153.72834 132.1245,172.68283 127.71922,183.57827 C 126.89618,185.61384 125.76994,187.27931 125.21646,187.27931 C 124.66298,187.27931 124.39289,186.72416 124.61625,186.04563 z M 209.02547,157.62164 C 209.02547,149.06737 216.70827,114.14492 221.39068,101.41508 C 224.44307,93.116695 228.74413,77.605995 229.73782,71.313245 C 230.16639,68.599145 231.23241,62.603446 232.10672,57.989476 C 232.98105,53.375516 233.69701,44.783596 233.69775,38.896326 C 233.69933,26.407625 232.49195,23.375465 226.57475,21.007875 C 218.92783,17.948175 216.38102,19.325695 213.53943,28.058435 C 211.79252,33.427035 209.80633,35.888836 208.08175,34.822986 C 206.18062,33.648025 207.02503,29.812025 210.98936,21.614295 C 219.14998,4.7391768 225.58607,0.53542684 235.51027,5.5983768 C 241.178,8.4898368 244.5555,15.424745 244.5555,24.170665 C 244.5555,34.830366 237.51803,64.304686 230.236,84.143525 C 225.74887,96.368055 218.63951,124.4602 215.34281,142.99293 C 213.23722,154.8297 212.18359,158.67625 210.81231,159.53262 C 209.23367,160.5185 209.02547,160.29584 209.02547,157.62164 z M 112.30406,95.774855 C 112.30335,86.107635 112.04448,84.586865 109.48419,79.208805 C 106.81201,73.595725 102.18346,67.858935 100.32692,67.858935 C 99.858122,67.858935 99.474552,67.299035 99.474552,66.614716 C 99.474552,64.835656 108.19817,52.067806 109.41371,52.067806 C 111.15723,52.067806 116.88946,58.299936 118.94539,62.430736 C 121.55774,67.679455 122.31172,75.379195 121.23073,85.768925 C 120.26817,95.020455 117.08016,103.86358 114.14025,105.43697 C 112.40375,106.36632 112.30479,105.84561 112.30406,95.774855 z M 42.858299,98.382615 C 38.870809,95.246035 39.403889,91.231535 45.304209,79.963515 C 50.287489,70.446755 55.424119,62.397976 66.798189,46.283706 C 73.416469,36.907226 75.458009,34.630905 76.402269,35.575166 C 77.203719,36.376616 73.776549,41.731156 64.898629,53.548226 C 47.914999,76.154535 46.116239,84.637005 58.306059,84.637005 C 61.619079,84.637005 64.380449,83.932335 66.788859,82.472295 C 73.165649,78.606515 85.039239,69.582285 90.356266,64.560456 C 93.212106,61.863176 95.826996,59.934616 96.167146,60.274766 C 97.215066,61.322676 91.247486,71.864225 88.330109,74.118685 C 86.814629,75.289785 82.440909,78.912715 78.610739,82.169635 C 74.780549,85.426555 70.024799,89.201625 68.042379,90.558675 C 66.059969,91.915725 63.630929,93.753035 62.644519,94.641595 C 60.390529,96.671985 50.693159,100.42814 47.705199,100.42814 C 46.469649,100.42814 44.288549,99.507655 42.858299,98.382615 z M 169.7749,60.406226 C 165.40905,57.348266 165.38722,55.857466 169.58131,47.184626 L 173.49686,39.087756 L 176.05125,42.123476 C 179.08264,45.726076 182.7945,46.065336 188.79309,43.288076 C 193.61332,41.056386 197.11837,37.355796 200.57535,30.848485 L 203.19691,25.913765 L 202.7015,29.722235 C 201.96128,35.412666 192.58555,51.658577 187.75951,55.613156 C 180.48049,61.577766 173.9372,63.321616 169.7749,60.406226 z M 136.97847,54.083106 C 135.0786,53.068216 128.47651,46.850616 122.30716,40.266216 C 110.74484,27.926045 102.95202,22.459455 96.922976,22.459455 C 92.611736,22.459455 87.006919,26.267795 85.102389,30.491285 C 82.350399,36.594116 81.142179,37.013716 78.889729,32.648845 C 75.725529,26.517155 66.110359,18.511675 61.909959,18.511675 C 61.279849,18.511675 55.705859,23.640995 49.523299,29.910165 C 38.010599,41.584146 32.761459,45.096006 26.763059,45.137516 C 23.263229,45.161736 18.999129,42.054906 16.400189,37.587106 C 14.809579,34.852746 14.849989,34.512975 17.497749,28.357115 C 19.009679,24.841995 20.584839,21.077735 20.998129,19.992085 C 21.652009,18.274415 21.991459,18.555015 23.613259,22.153815 C 25.529349,26.405655 29.950509,30.355015 32.794169,30.355015 C 36.955659,30.355015 44.328219,24.959145 54.247879,14.653345 C 63.827629,4.7006968 65.105539,3.7074968 68.331459,3.7074968 C 72.636069,3.7074968 77.912339,6.8782868 83.025429,12.537855 C 85.100189,14.834365 86.897599,16.562795 87.019689,16.378815 C 87.141779,16.194835 87.967249,14.881735 88.854049,13.460805 C 89.740846,12.039875 92.549116,9.6567568 95.094626,8.1649868 C 98.790816,5.9988768 100.57197,5.5483668 103.93934,5.9279268 C 110.80604,6.7018968 118.98765,12.481855 129.22745,23.792885 C 138.48067,34.014145 146.97435,40.224466 151.70045,40.224466 C 155.50397,40.224466 161.22658,36.521316 164.17375,32.152895 C 166.60256,28.552815 167.0995,28.209095 167.36029,29.948825 C 167.53023,31.082475 166.07293,35.512926 164.12185,39.794286 C 160.75337,47.185936 157.19211,51.363797 151.37603,54.746936 C 148.31837,56.525536 140.9114,56.184026 136.97847,54.083106 z"
+       style="opacity:1;fill:#000000;display:inline"
+       inkscape:label="bg-gnu" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="gnu"
+     style="opacity:1;display:inline">
+    <path
+       style="fill:url(#linearGradient2425);fill-opacity:1;stroke:url(#linearGradient2427);stroke-width:0.97730815"
+       d="M 61.076106,208.96096 C 63.507076,200.61386 68.469036,190.05059 73.265246,183.01206 C 78.934586,174.69219 80.590286,172.3976 101.74788,143.53901 C 118.49803,120.69211 120.83199,117.32446 124.13972,111.23014 C 125.67137,108.40816 127.29443,106.09927 127.74652,106.09927 C 128.91983,106.09927 128.83899,106.44977 126.12524,113.12835 C 124.78145,116.43545 123.68197,119.51281 123.68197,119.96691 C 123.68197,120.42101 120.727,125.51271 117.11535,131.28179 C 108.19185,145.5358 106.43283,148.21386 104.12755,151.05546 C 103.03739,152.39925 100.30189,156.13747 98.048676,159.36258 C 95.795466,162.58769 93.494626,165.72216 92.935686,166.32808 C 92.376756,166.93398 90.160296,169.94445 88.010216,173.018 C 81.367336,182.51404 72.031276,195.44882 70.704486,196.99445 C 70.009766,197.80377 67.682206,201.42433 65.532126,205.04018 C 61.400906,211.98774 59.778956,213.41486 61.076106,208.96096 z M 127.0774,182.08499 C 127.29858,181.41309 128.59556,177.23956 129.95958,172.81045 C 133.38024,161.70328 143.52325,142.0963 149.55585,134.92988 L 152.02391,131.99795 L 154.25955,134.68555 C 156.91761,137.88092 158.11448,137.99645 162.2273,135.45458 C 165.29241,133.56025 169.86813,126.15749 182.18437,103.16735 C 186.70202,94.734476 187.16045,94.188338 187.18261,97.212831 C 187.22387,102.84577 165.1278,143.86866 158.04986,151.29979 C 153.96228,155.59134 151.90633,155.8773 149.26659,152.52142 C 148.20955,151.17762 146.96821,150.07893 146.50805,150.0799 C 144.89835,150.08326 134.51232,168.85268 130.15006,179.64172 C 129.33506,181.65742 128.21981,183.30663 127.67174,183.30663 C 127.12367,183.30663 126.85621,182.7569 127.0774,182.08499 z M 210.6624,153.93855 C 210.6624,145.46781 218.27017,110.88634 222.90686,98.280809 C 225.92945,90.063464 230.18852,74.704222 231.1725,68.472911 C 231.59689,65.785315 232.65248,59.848166 233.51827,55.279251 C 234.38405,50.710335 235.09303,42.202312 235.09375,36.372532 C 235.09532,24.005777 233.89974,21.003224 228.04031,18.65875 C 220.46806,15.628931 217.94613,16.993 215.13227,25.640465 C 213.40243,30.956652 211.43564,33.394405 209.7279,32.338969 C 207.84533,31.175475 208.68148,27.37694 212.60711,19.259251 C 220.68804,2.5489063 227.06129,-1.6137938 236.88858,3.3997163 C 242.50098,6.2629463 245.84549,13.130142 245.84549,21.790666 C 245.84549,32.346272 238.87674,61.532787 231.66581,81.177917 C 227.22251,93.283081 220.18256,121.1009 216.91805,139.45268 C 214.83302,151.17387 213.78968,154.98286 212.43178,155.83087 C 210.86856,156.80712 210.6624,156.58663 210.6624,153.93855 z M 114.88542,92.695674 C 114.88472,83.122844 114.62838,81.616923 112.09309,76.291377 C 109.447,70.733105 104.86364,65.052333 103.02522,65.052333 C 102.561,65.052333 102.18119,64.497902 102.18119,63.820263 C 102.18119,62.058579 110.81963,49.415401 112.0233,49.415401 C 113.7498,49.415401 119.42604,55.586675 121.4619,59.677138 C 124.04875,64.874602 124.79536,72.499162 123.72493,82.787443 C 122.77177,91.948632 119.61489,100.7054 116.70368,102.26342 C 114.98414,103.1837 114.88615,102.66807 114.88542,92.695674 z M 46.117766,95.277953 C 42.169206,92.172018 42.697086,88.196715 48.539786,77.038724 C 53.474416,67.61489 58.560886,59.644698 69.823886,43.687774 C 76.377556,34.40285 78.399156,32.148763 79.334196,33.083797 C 80.127816,33.877423 76.734116,39.179682 67.942886,50.881363 C 51.125096,73.266927 49.343886,81.666573 61.414686,81.666573 C 64.695356,81.666573 67.429756,80.968786 69.814656,79.523 C 76.129176,75.694973 87.886836,66.758858 93.151936,61.786064 C 95.979886,59.115122 98.569246,57.205392 98.906066,57.542219 C 99.943756,58.579901 94.034456,69.018517 91.145556,71.250958 C 89.644886,72.410631 85.313876,75.998184 81.521096,79.223302 C 77.728306,82.448419 73.018996,86.186623 71.055936,87.530422 C 69.092886,88.87422 66.687566,90.693597 65.710786,91.57348 C 63.478806,93.584045 53.876116,97.303502 50.917336,97.303502 C 49.693856,97.303502 47.534056,96.392006 46.117766,95.277953 z M 171.79508,57.6724 C 167.47186,54.644298 167.45024,53.16805 171.60338,44.5799 L 175.48071,36.562094 L 178.01015,39.56817 C 181.01195,43.135591 184.68755,43.471543 190.62758,40.721402 C 195.40074,38.511498 198.87156,34.847043 202.29479,28.403277 L 204.89074,23.516737 L 204.40017,27.288026 C 203.66718,32.922889 194.383,49.01016 189.60409,52.926128 C 182.39615,58.832494 175.91674,60.559318 171.79508,57.6724 z M 139.3189,51.411018 C 137.43758,50.406042 130.89996,44.249152 124.79084,37.729043 C 113.34143,25.509367 105.62471,20.096158 99.654526,20.096158 C 95.385376,20.096158 89.835296,23.867317 87.949366,28.04956 C 85.224246,34.092801 84.027826,34.5083 81.797366,30.186057 C 78.664066,24.11424 69.142776,16.186925 64.983386,16.186925 C 64.359436,16.186925 58.839876,21.266163 52.717686,27.474119 C 41.317406,39.034109 36.119516,42.511671 30.179686,42.552781 C 26.714036,42.576765 22.491566,39.500273 19.917996,35.076099 C 18.342936,32.368437 18.382946,32.031988 21.004846,25.936231 C 22.502016,22.45543 24.061796,18.727927 24.471046,17.652887 C 25.118546,15.951984 25.454676,16.229839 27.060646,19.793504 C 28.958026,24.003825 33.336016,27.914623 36.151906,27.914623 C 40.272756,27.914623 47.573326,22.571437 57.396126,12.36627 C 66.882336,2.5108063 68.147766,1.5273063 71.342186,1.5273063 C 75.604766,1.5273063 80.829526,4.6671363 85.892686,10.271446 C 87.947186,12.54552 89.727046,14.257073 89.847936,14.07489 C 89.968836,13.892711 90.786246,12.59243 91.664386,11.185376 C 92.542526,9.7783256 95.323366,7.4184763 97.844026,5.9412663 C 101.50413,3.7963063 103.26788,3.3502063 106.60239,3.7260463 C 113.40203,4.4924663 121.50375,10.215986 131.64357,21.416572 C 140.80643,31.538025 149.21716,37.687703 153.89713,37.687703 C 157.6635,37.687703 163.33024,34.020716 166.24863,29.69495 C 168.65373,26.130021 169.14581,25.789654 169.40405,27.5124 C 169.57233,28.634976 168.12927,33.022171 166.19724,37.261722 C 162.86165,44.581197 159.33516,48.718266 153.57588,52.068368 C 150.54808,53.829602 143.21343,53.491422 139.3189,51.411018 z"
+       id="gnu"
+       inkscape:label="gnu" />
+  </g>
+</svg>
index 0ce3f48..ac2adfb 100644 (file)
 
        * gnus-score.el (gnus-score-find-trace): Add "Total score" line.
 
 
        * gnus-score.el (gnus-score-find-trace): Add "Total score" line.
 
+2008-07-02  Juanma Barranquero  <lekktu@gmail.com>
+
+       * nnimap.el (nnimap-id):
+       * sieve-manage.el (sieve-manage-open): Doc fixes.
+
+2008-07-02  Francesc Rocher  <rocher@member.fsf.org>
+
+       * gnus.el (gnus-group-startup-message): Prefer SVG or PNG image,
+       if available.
+
+2008-06-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * mm-util.el (mm-with-multibyte, mm-with-unibyte): Remove.
+
+       * nnkiboze.el (nnkiboze-generate-group):
+       Use explicit mm-disable-multibyte rather than mm-with-unibyte.
+
+       * nnmairix.el: Require CL.
+
 2008-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * dgnushack.el: Autoload get-display-table and put-display-table for
 2008-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * dgnushack.el: Autoload get-display-table and put-display-table for
 
 2008-06-14  Aidan Kehoe  <kehoea@parhasard.net>
 
 
 2008-06-14  Aidan Kehoe  <kehoea@parhasard.net>
 
-       * gnus-util.el (gnus-put-display-table, gnus-get-display-table): New
-       macros that expand to an `aset'/`aref' call under Emacs, and to a
+       * gnus-util.el (gnus-put-display-table, gnus-get-display-table):
+       New macros that expand to an `aset'/`aref' call under Emacs, and to a
        runtime choice under XEmacs.
 
        runtime choice under XEmacs.
 
-       * gnus-sum.el (gnus-summary-set-display-table): Use
-       `gnus-put-display-table', `gnus-get-display-table',
+       * gnus-sum.el (gnus-summary-set-display-table):
+       Use `gnus-put-display-table', `gnus-get-display-table',
        `gnus-set-display-table' for the display table, instead of `aset'.
 
        `gnus-set-display-table' for the display table, instead of `aset'.
 
-       * gnus-xmas.el (gnus-xmas-summary-set-display-table): Use
-       `gnus-put-display-table', `gnus-get-display-table',
+       * gnus-xmas.el (gnus-xmas-summary-set-display-table):
+       Use `gnus-put-display-table', `gnus-get-display-table',
        `gnus-set-display-table' for the display table.
 
 2008-06-14  Reiner Steib  <Reiner.Steib@gmx.de>
        `gnus-set-display-table' for the display table.
 
 2008-06-14  Reiner Steib  <Reiner.Steib@gmx.de>
 2004-09-01  Simon Josefsson  <jas@extundo.com>
 
        * message.el (message-canlock-generate): Require sha1, not
 2004-09-01  Simon Josefsson  <jas@extundo.com>
 
        * message.el (message-canlock-generate): Require sha1, not
-       sha1-el.  (Can we get rid of this require alltogheter? It is ugly
+       sha1-el.  (Can we get rid of this require altogether?  It is ugly
        to require within a function.  Sadly, if sha1.el isn't loaded, the
        let binding in m-c-g will hide the defcustom definition, which is
        bad.)
        to require within a function.  Sadly, if sha1.el isn't loaded, the
        let binding in m-c-g will hide the defcustom definition, which is
        bad.)
index c80508a..6834cc0 100644 (file)
 
 2003-05-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 
 2003-05-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.el (gnus-logo-color-alist): Added no colours.
+       * gnus.el (gnus-logo-color-alist): Added no colors.
 
 2003-05-09  Dave Love  <fx@gnu.org>
 
 
 2003-05-09  Dave Love  <fx@gnu.org>
 
        * mm-encode.el (mm-encode-content-transfer-encoding): Fix error
        message.  (Gnus does not "default" to using 8bit for the message,
        it default to use 8bit encoding and the user-supplied CTE
        * mm-encode.el (mm-encode-content-transfer-encoding): Fix error
        message.  (Gnus does not "default" to using 8bit for the message,
        it default to use 8bit encoding and the user-supplied CTE
-       value.  Calling this behaviour "treating it as 8bit" is perhaps
+       value.  Calling this behavior "treating it as 8bit" is perhaps
        better.)
 
        * mm-bodies.el (mm-body-encoding): Intern encoding if needed
        better.)
 
        * mm-bodies.el (mm-body-encoding): Intern encoding if needed
        (imap-remassoc): Copied from `gnus-remassoc'.
        (imap-add-callback): New function.
        (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous
        (imap-remassoc): Copied from `gnus-remassoc'.
        (imap-add-callback): New function.
        (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous
-       behaviour.
+       behavior.
        (imap-parse-response): Call the callback.
 
        * message.el (message-insert-canlock): New variable.
        (imap-parse-response): Call the callback.
 
        * message.el (message-insert-canlock): New variable.
index 565be3b..bf7b4db 100644 (file)
@@ -1,4 +1,4 @@
-;;; gnus-demon.el --- daemonic Gnus behaviour
+;;; gnus-demon.el --- daemonic Gnus behavior
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
index 8c7559b..fe34891 100644 (file)
@@ -1015,7 +1015,9 @@ be set in `.emacs' instead."
                                    (symbol-value 'image-load-path))
                                   (t load-path)))
            (image (find-image
                                    (symbol-value 'image-load-path))
                                   (t load-path)))
            (image (find-image
-                   `((:type xpm :file "gnus.xpm"
+                   `((:type svg :file "gnus.svg")
+                     (:type png :file "gnus.png")
+                     (:type xpm :file "gnus.xpm"
                             :color-symbols
                             (("thing" . ,(car gnus-logo-colors))
                              ("shadow" . ,(cadr gnus-logo-colors))
                             :color-symbols
                             (("thing" . ,(car gnus-logo-colors))
                              ("shadow" . ,(cadr gnus-logo-colors))
index 4875cbb..7f29151 100644 (file)
@@ -50,6 +50,8 @@
 (eval-and-compile
   (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
 
 (eval-and-compile
   (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
 
+(eval-when-compile (require 'cl))      ; for case
+
 (defgroup hashcash nil
   "Hashcash configuration."
   :group 'mail)
 (defgroup hashcash nil
   "Hashcash configuration."
   :group 'mail)
index 8ccce96..0a38ec0 100644 (file)
@@ -4543,7 +4543,7 @@ to find out how to use this."
        (apply
         'call-process-region (point-min) (point-max)
         message-qmail-inject-program nil nil nil
        (apply
         'call-process-region (point-min) (point-max)
         message-qmail-inject-program nil nil nil
-        ;; qmail-inject's default behaviour is to look for addresses on the
+        ;; qmail-inject's default behavior is to look for addresses on the
         ;; command line; if there're none, it scans the headers.
         ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin.
         ;;
         ;; command line; if there're none, it scans the headers.
         ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin.
         ;;
index ad09213..453beae 100644 (file)
@@ -1093,20 +1093,6 @@ Emacs 23 (unicode)."
 (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
 
 (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
 
-(defmacro mm-with-unibyte (&rest forms)
-  "Eval the FORMS with the default value of `enable-multibyte-characters' nil."
-  `(let (default-enable-multibyte-characters)
-     ,@forms))
-(put 'mm-with-unibyte 'lisp-indent-function 0)
-(put 'mm-with-unibyte 'edebug-form-spec '(body))
-
-(defmacro mm-with-multibyte (&rest forms)
-  "Eval the FORMS with the default value of `enable-multibyte-characters' t."
-  `(let ((default-enable-multibyte-characters t))
-     ,@forms))
-(put 'mm-with-multibyte 'lisp-indent-function 0)
-(put 'mm-with-multibyte 'edebug-form-spec '(body))
-
 (defun mm-find-charset-region (b e)
   "Return a list of Emacs charsets in the region B to E."
   (cond
 (defun mm-find-charset-region (b e)
   "Return a list of Emacs charsets in the region B to E."
   (cond
index 17793b2..1a7588b 100644 (file)
@@ -133,7 +133,7 @@ Whether the passphrase is cached at all is controlled by
             'never))
        cipher
        (result-buffer (get-buffer-create "*GPG Result*")))
             'never))
        cipher
        (result-buffer (get-buffer-create "*GPG Result*")))
-    ;; Strip MIME Content[^ ]: headers since it will be ASCII ARMOURED
+    ;; Strip MIME Content[^ ]: headers since it will be ASCII ARMORED
     (goto-char (point-min))
     (while (looking-at "^Content[^ ]+:") (forward-line))
     (unless (bobp)
     (goto-char (point-min))
     (while (looking-at "^Content[^ ]+:") (forward-line))
     (unless (bobp)
@@ -213,7 +213,7 @@ Whether the passphrase is cached at all is controlled by
   (let ((text (current-buffer))
        cipher
        (result-buffer (get-buffer-create "*GPG Result*")))
   (let ((text (current-buffer))
        cipher
        (result-buffer (get-buffer-create "*GPG Result*")))
-    ;; Strip MIME Content[^ ]: headers since it will be ASCII ARMOURED
+    ;; Strip MIME Content[^ ]: headers since it will be ASCII ARMORED
     (goto-char (point-min))
     (while (looking-at "^Content[^ ]+:") (forward-line))
     (unless (bobp)
     (goto-char (point-min))
     (while (looking-at "^Content[^ ]+:") (forward-line))
     (unless (bobp)
@@ -303,7 +303,7 @@ Whether the passphrase is cached at all is controlled by
     (let ((cte (save-restriction
                 (narrow-to-region (point-min) (point))
                 (mail-fetch-field "content-transfer-encoding"))))
     (let ((cte (save-restriction
                 (narrow-to-region (point-min) (point))
                 (mail-fetch-field "content-transfer-encoding"))))
-      ;; Strip MIME headers since it will be ASCII armoured.
+      ;; Strip MIME headers since it will be ASCII armored.
       (forward-line 1)
       (delete-region (point-min) (point))
       (when cte
       (forward-line 1)
       (delete-region (point-min) (point))
       (when cte
@@ -424,7 +424,7 @@ If no one is selected, default secret key is used.  "
     (let ((cte (save-restriction
                 (narrow-to-region (point-min) (point))
                 (mail-fetch-field "content-transfer-encoding"))))
     (let ((cte (save-restriction
                 (narrow-to-region (point-min) (point))
                 (mail-fetch-field "content-transfer-encoding"))))
-      ;; Strip MIME headers since it will be ASCII armoured.
+      ;; Strip MIME headers since it will be ASCII armored.
       (forward-line 1)
       (delete-region (point-min) (point))
       (when cte
       (forward-line 1)
       (delete-region (point-min) (point))
       (when cte
index 53ad696..6028958 100644 (file)
@@ -1,7 +1,7 @@
 ;;; nndb.el --- nndb access for Gnus
 
 ;;; nndb.el --- nndb access for Gnus
 
-;; Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2006, 2007,
+;;   200 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;         Kai Grossjohann <grossjohann@ls6.informatik.uni-dortmund.de>
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;         Kai Grossjohann <grossjohann@ls6.informatik.uni-dortmund.de>
@@ -307,7 +307,7 @@ Optional LAST is ignored."
                            ; nndb-request-rename-group does not exist
                                        ; todo -- maybe later
 
                            ; nndb-request-rename-group does not exist
                                        ; todo -- maybe later
 
-;; -- standard compatability functions
+;; -- standard compatibility functions
 
 (deffoo nndb-status-message (&optional server)
   "Return server status as a string."
 
 (deffoo nndb-status-message (&optional server)
   "Return server status as a string."
index 8a9d5c7..49166b8 100644 (file)
@@ -424,8 +424,8 @@ restrict visible folders.")
 
 (defcustom nnimap-id nil
   "Plist with client identity to send to server upon login.
 
 (defcustom nnimap-id nil
   "Plist with client identity to send to server upon login.
-Nil means no information is sent, symbol `no' to disable ID query
-alltogheter, or plist with identifier-value pairs to send to
+A nil value means no information is sent, symbol `no' to disable ID query
+altogether, or plist with identifier-value pairs to send to
 server.  RFC 2971 describes the list as follows:
 
    Any string may be sent as a field, but the following are defined to
 server.  RFC 2971 describes the list as follows:
 
    Any string may be sent as a field, but the following are defined to
index ab657a6..9ad06a8 100644 (file)
@@ -247,101 +247,102 @@ Finds out what articles are to be part of the nnkiboze groups."
     (unless info
       (error "No such group: %s" group))
     ;; Load the kiboze newsrc file for this group.
     (unless info
       (error "No such group: %s" group))
     ;; Load the kiboze newsrc file for this group.
-    (mm-with-unibyte
-      (when (file-exists-p newsrc-file)
-       (load newsrc-file))
-      (let ((coding-system-for-write nnkiboze-file-coding-system))
-       (gnus-make-directory (file-name-directory nov-file))
-       (with-temp-file nov-file
-         (when (file-exists-p nov-file)
-           (insert-file-contents nov-file))
-         (setq nov-buffer (current-buffer))
-         ;; Go through the active hashtb and add new all groups that match the
-         ;; kiboze regexp.
-         (mapatoms
-          (lambda (group)
-            (and (string-match nnkiboze-regexp
-                               (setq gname (symbol-name group))) ; Match
-                 (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
-                 (numberp (car (symbol-value group))) ; It is active
-                 (or (> nnkiboze-level 7)
-                     (and (setq glevel
-                                (gnus-info-level (gnus-get-info gname)))
-                          (>= nnkiboze-level glevel)))
-                 (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
-                 (push (cons gname (1- (car (symbol-value group))))
-                       nnkiboze-newsrc)))
-          gnus-active-hashtb)
-         ;; `newsrc' is set to the list of groups that possibly are
-         ;; component groups to this kiboze group.  This list has elements
-         ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
-         ;; number that has been kibozed in GROUP in this kiboze group.
-         (setq newsrc nnkiboze-newsrc)
-         (while newsrc
-           (if (not (setq active (gnus-active (caar newsrc))))
-               ;; This group isn't active after all, so we remove it from
-               ;; the list of component groups.
-               (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
-             (setq lowest (cdar newsrc))
-             ;; Ok, we have a valid component group, so we jump to it.
-             (switch-to-buffer gnus-group-buffer)
-             (gnus-group-jump-to-group (caar newsrc))
-             (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
-             (setq ginfo (gnus-get-info (gnus-group-group-name))
-                   orig-info (gnus-copy-sequence ginfo)
-                   num-unread (gnus-group-unread (caar newsrc)))
-             (unwind-protect
-                 (progn
-                   ;; We set all list of article marks to nil.  Since we operate
-                   ;; on copies of the real lists, we can destroy anything we
-                   ;; want here.
-                   (when (nth 3 ginfo)
-                     (setcar (nthcdr 3 ginfo) nil))
-                   ;; We set the list of read articles to be what we expect for
-                   ;; this kiboze group -- either nil or `(1 . LOWEST)'.
-                   (when ginfo
-                     (setcar (nthcdr 2 ginfo)
-                             (and (not (= lowest 1)) (cons 1 lowest))))
-                   (when (and (or (not ginfo)
-                                  (> (length (gnus-list-of-unread-articles
-                                              (car ginfo)))
-                                     0))
-                              (progn
-                                (ignore-errors
-                                  (gnus-group-select-group nil))
-                                (eq major-mode 'gnus-summary-mode)))
-                     ;; We are now in the group where we want to be.
-                     (setq method (gnus-find-method-for-group
-                                   gnus-newsgroup-name))
-                     (when (eq method gnus-select-method)
-                       (setq method nil))
-                     ;; We go through the list of scored articles.
-                     (while gnus-newsgroup-scored
-                       (when (> (caar gnus-newsgroup-scored) lowest)
-                         ;; If it has a good score, then we enter this article
-                         ;; into the kiboze group.
-                         (nnkiboze-enter-nov
-                          nov-buffer
-                          (gnus-summary-article-header
-                           (caar gnus-newsgroup-scored))
-                          gnus-newsgroup-name))
-                       (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
-                     ;; That's it.  We exit this group.
-                     (when (eq major-mode 'gnus-summary-mode)
-                       (kill-buffer (current-buffer)))))
-               ;; Restore the proper info.
-               (when ginfo
-                 (setcdr ginfo (cdr orig-info)))
-               (setcar (gnus-group-entry (caar newsrc)) num-unread)))
-           (setcdr (car newsrc) (cdr active))
-           (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
-           (setq newsrc (cdr newsrc)))))
-      ;; We save the kiboze newsrc for this group.
-      (gnus-make-directory (file-name-directory newsrc-file))
-      (with-temp-file newsrc-file
-       (insert "(setq nnkiboze-newsrc '")
-       (gnus-prin1 nnkiboze-newsrc)
-       (insert ")\n")))
+    (when (file-exists-p newsrc-file)
+      (load newsrc-file))
+    (let ((coding-system-for-write nnkiboze-file-coding-system))
+      (gnus-make-directory (file-name-directory nov-file))
+      (with-temp-file nov-file
+        (mm-disable-multibyte)
+        (when (file-exists-p nov-file)
+          (insert-file-contents nov-file))
+        (setq nov-buffer (current-buffer))
+        ;; Go through the active hashtb and add new all groups that match the
+        ;; kiboze regexp.
+        (mapatoms
+         (lambda (group)
+           (and (string-match nnkiboze-regexp
+                              (setq gname (symbol-name group))) ; Match
+                (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
+                (numberp (car (symbol-value group))) ; It is active
+                (or (> nnkiboze-level 7)
+                    (and (setq glevel
+                               (gnus-info-level (gnus-get-info gname)))
+                         (>= nnkiboze-level glevel)))
+                (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
+                (push (cons gname (1- (car (symbol-value group))))
+                      nnkiboze-newsrc)))
+         gnus-active-hashtb)
+        ;; `newsrc' is set to the list of groups that possibly are
+        ;; component groups to this kiboze group.  This list has elements
+        ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
+        ;; number that has been kibozed in GROUP in this kiboze group.
+        (setq newsrc nnkiboze-newsrc)
+        (while newsrc
+          (if (not (setq active (gnus-active (caar newsrc))))
+              ;; This group isn't active after all, so we remove it from
+              ;; the list of component groups.
+              (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
+            (setq lowest (cdar newsrc))
+            ;; Ok, we have a valid component group, so we jump to it.
+            (switch-to-buffer gnus-group-buffer)
+            (gnus-group-jump-to-group (caar newsrc))
+            (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
+            (setq ginfo (gnus-get-info (gnus-group-group-name))
+                  orig-info (gnus-copy-sequence ginfo)
+                  num-unread (gnus-group-unread (caar newsrc)))
+            (unwind-protect
+                (progn
+                  ;; We set all list of article marks to nil.  Since we operate
+                  ;; on copies of the real lists, we can destroy anything we
+                  ;; want here.
+                  (when (nth 3 ginfo)
+                    (setcar (nthcdr 3 ginfo) nil))
+                  ;; We set the list of read articles to be what we expect for
+                  ;; this kiboze group -- either nil or `(1 . LOWEST)'.
+                  (when ginfo
+                    (setcar (nthcdr 2 ginfo)
+                            (and (not (= lowest 1)) (cons 1 lowest))))
+                  (when (and (or (not ginfo)
+                                 (> (length (gnus-list-of-unread-articles
+                                             (car ginfo)))
+                                    0))
+                             (progn
+                               (ignore-errors
+                                 (gnus-group-select-group nil))
+                               (eq major-mode 'gnus-summary-mode)))
+                    ;; We are now in the group where we want to be.
+                    (setq method (gnus-find-method-for-group
+                                  gnus-newsgroup-name))
+                    (when (eq method gnus-select-method)
+                      (setq method nil))
+                    ;; We go through the list of scored articles.
+                    (while gnus-newsgroup-scored
+                      (when (> (caar gnus-newsgroup-scored) lowest)
+                        ;; If it has a good score, then we enter this article
+                        ;; into the kiboze group.
+                        (nnkiboze-enter-nov
+                         nov-buffer
+                         (gnus-summary-article-header
+                          (caar gnus-newsgroup-scored))
+                         gnus-newsgroup-name))
+                      (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
+                    ;; That's it.  We exit this group.
+                    (when (eq major-mode 'gnus-summary-mode)
+                      (kill-buffer (current-buffer)))))
+              ;; Restore the proper info.
+              (when ginfo
+                (setcdr ginfo (cdr orig-info)))
+              (setcar (gnus-group-entry (caar newsrc)) num-unread)))
+          (setcdr (car newsrc) (cdr active))
+          (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
+          (setq newsrc (cdr newsrc)))))
+    ;; We save the kiboze newsrc for this group.
+    (gnus-make-directory (file-name-directory newsrc-file))
+    (with-temp-file newsrc-file
+      (mm-disable-multibyte)
+      (insert "(setq nnkiboze-newsrc '")
+      (gnus-prin1 nnkiboze-newsrc)
+      (insert ")\n"))
   (unless inhibit-list-groups
     (save-excursion
       (set-buffer gnus-group-buffer)
   (unless inhibit-list-groups
     (save-excursion
       (set-buffer gnus-group-buffer)
index dbc0a55..6917b77 100644 (file)
 
 ;;; Code:
 
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))       ;For (pop (cdr ogroup)).
+
 (require 'nnoo)
 (require 'gnus-group)
 (require 'gnus-sum)
 (require 'nnoo)
 (require 'gnus-group)
 (require 'gnus-sum)
index 89c10a9..ea52747 100644 (file)
@@ -291,7 +291,7 @@ Should be called narrowed to the head of the message."
             ;; 8-bit names.  The group name mail copy just got
             ;; unconditionally encoded.  Previously, it would ask
             ;; whether to encode, which was quite confusing for the
             ;; 8-bit names.  The group name mail copy just got
             ;; unconditionally encoded.  Previously, it would ask
             ;; whether to encode, which was quite confusing for the
-            ;; user.  If the new behaviour is wrong, tell me. I have
+            ;; user.  If the new behavior is wrong, tell me. I have
             ;; left the old code commented out below.
             ;; -- Per Abrahamsen <abraham@dina.kvl.dk> Date: 2001-10-07.
             ;; Modified by Dave Love, with the commented-out code changed
             ;; left the old code commented out below.
             ;; -- Per Abrahamsen <abraham@dina.kvl.dk> Date: 2001-10-07.
             ;; Modified by Dave Love, with the commented-out code changed
index 41a1fdb..7b8af9c 100644 (file)
   '(ignore                             ;nothing to do before making
     sasl-ntlm-request                  ;authentication request
     sasl-ntlm-response)                        ;response to challenge
   '(ignore                             ;nothing to do before making
     sasl-ntlm-request                  ;authentication request
     sasl-ntlm-response)                        ;response to challenge
-  "A list of functions to be called in sequnece for the NTLM
-authentication steps.  Ther are called by 'sasl-next-step.")
+  "A list of functions to be called in sequence for the NTLM
+authentication steps.  They are called by `sasl-next-step'.")
 
 (defun sasl-ntlm-request (client step)
   "SASL step function to generate a NTLM authentication request to the server.
 
 (defun sasl-ntlm-request (client step)
   "SASL step function to generate a NTLM authentication request to the server.
-Called from 'sasl-next-step.
+Called from `sasl-next-step'.
 CLIENT is a vector [mechanism user service server sasl-client-properties]
 STEP is a vector [<previous step function> <result of previous step function>]"
   (let ((user (sasl-client-name client)))
 CLIENT is a vector [mechanism user service server sasl-client-properties]
 STEP is a vector [<previous step function> <result of previous step function>]"
   (let ((user (sasl-client-name client)))
@@ -49,7 +49,7 @@ STEP is a vector [<previous step function> <result of previous step function>]"
 
 (defun sasl-ntlm-response (client step)
   "SASL step function to generate a NTLM response against the server
 
 (defun sasl-ntlm-response (client step)
   "SASL step function to generate a NTLM response against the server
-challenge stored in the 2nd element of STEP.  Called from 'sasl-next-step."
+challenge stored in the 2nd element of STEP.  Called from `sasl-next-step'."
   (let* ((user (sasl-client-name client))
         (passphrase
          (sasl-read-passphrase (format "NTLM passphrase for %s: " user)))
   (let* ((user (sasl-client-name client))
         (passphrase
          (sasl-read-passphrase (format "NTLM passphrase for %s: " user)))
index 23d8e62..6616bff 100644 (file)
@@ -86,7 +86,7 @@ The second argument PLIST is the new property list."
   (setplist (aref client 4) plist))
 
 (defun sasl-client-set-property (client property value)
   (setplist (aref client 4) plist))
 
 (defun sasl-client-set-property (client property value)
-  "Add the given property/value to CLIENT."
+  "Add the given PROPERTY/VALUE to CLIENT."
   (put (aref client 4) property value))
 
 (defun sasl-client-property (client property)
   (put (aref client 4) property value))
 
 (defun sasl-client-property (client property)
@@ -103,7 +103,7 @@ The second argument PLIST is the new property list."
 (defun sasl-make-mechanism (name steps)
   "Make an authentication mechanism.
 NAME is a IANA registered SASL mechanism name.
 (defun sasl-make-mechanism (name steps)
   "Make an authentication mechanism.
 NAME is a IANA registered SASL mechanism name.
-STEPS is list of continuation function."
+STEPS is list of continuation functions."
   (vector name
          (mapcar
           (lambda (step)
   (vector name
          (mapcar
           (lambda (step)
@@ -121,7 +121,7 @@ STEPS is list of continuation function."
   (aref mechanism 1))
 
 (defun sasl-find-mechanism (mechanisms)
   (aref mechanism 1))
 
 (defun sasl-find-mechanism (mechanisms)
-  "Retrieve an apropriate mechanism object from MECHANISMS hints."
+  "Retrieve an appropriate mechanism object from MECHANISMS hints."
   (let* ((sasl-mechanisms sasl-mechanisms)
         (mechanism
          (catch 'done
   (let* ((sasl-mechanisms sasl-mechanisms)
         (mechanism
          (catch 'done
@@ -147,9 +147,9 @@ STEPS is list of continuation function."
 
 (defun sasl-next-step (client step)
   "Evaluate the challenge and prepare an appropriate next response.
 
 (defun sasl-next-step (client step)
   "Evaluate the challenge and prepare an appropriate next response.
-The data type of the value and optional 2nd argument STEP is nil or
-opaque authentication step which holds the reference to the next action
-and the current challenge.  At the first time STEP should be set to nil."
+The data type of the value and 2nd argument STEP is nil or opaque
+authentication step which holds the reference to the next action and
+the current challenge.  At the first time STEP should be set to nil."
   (let* ((steps
          (sasl-mechanism-steps
           (sasl-client-mechanism client)))
   (let* ((steps
          (sasl-mechanism-steps
           (sasl-client-mechanism client)))
index 38fece2..513aa9f 100644 (file)
@@ -443,12 +443,12 @@ Returns t if login was successful, nil otherwise."
 
 (defun sieve-manage-open (server &optional port stream auth buffer)
   "Open a network connection to a managesieve SERVER (string).
 
 (defun sieve-manage-open (server &optional port stream auth buffer)
   "Open a network connection to a managesieve SERVER (string).
-Optional variable PORT is port number (integer) on remote server.
-Optional variable STREAM is any of `sieve-manage-streams' (a symbol).
-Optional variable AUTH indicates authenticator to use, see
-`sieve-manage-authenticators' for available authenticators.  If nil, chooses
-the best stream the server is capable of.
-Optional variable BUFFER is buffer (buffer, or string naming buffer)
+Optional argument PORT is port number (integer) on remote server.
+Optional argument STREAM is any of `sieve-manage-streams' (a symbol).
+Optional argument AUTH indicates authenticator to use, see
+`sieve-manage-authenticators' for available authenticators.
+If nil, chooses the best stream the server is capable of.
+Optional argument BUFFER is buffer (buffer, or string naming buffer)
 to work in."
   (setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000))))
   (with-current-buffer (get-buffer-create buffer)
 to work in."
   (setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000))))
   (with-current-buffer (get-buffer-create buffer)
index 712880d..c7d32e4 100644 (file)
@@ -63,7 +63,7 @@
 ;;
 ;; Now you should be able to sign messages!  Create a buffer and write
 ;; something and run M-x smime-sign-buffer RET RET and you should see
 ;;
 ;; Now you should be able to sign messages!  Create a buffer and write
 ;; something and run M-x smime-sign-buffer RET RET and you should see
-;; your message MIME armoured and a signature.  Encryption, M-x
+;; your message MIME armored and a signature.  Encryption, M-x
 ;; smime-encrypt-buffer, should also work.
 ;;
 ;; To be able to verify messages you need to build up trust with
 ;; smime-encrypt-buffer, should also work.
 ;;
 ;; To be able to verify messages you need to build up trust with
diff --git a/lisp/vc-annotate.el b/lisp/vc-annotate.el
new file mode 100644 (file)
index 0000000..63a99f1
--- /dev/null
@@ -0,0 +1,631 @@
+;;; vc-annotate.el --- VC Annotate Support
+
+;; Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+;;   2007, 2008 Free Software Foundation, Inc.
+
+;; Author:     Martin Lorentzson  <emwson@emw.ericsson.se>
+;; Maintainer: FSF
+;; Keywords: tools
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;; 
+
+(require 'vc-hooks)
+(require 'vc)
+
+;;; Code:
+(eval-when-compile
+  (require 'cl))
+
+(defcustom vc-annotate-display-mode 'fullscale
+  "Which mode to color the output of \\[vc-annotate] with by default."
+  :type '(choice (const :tag "By Color Map Range" nil)
+                (const :tag "Scale to Oldest" scale)
+                (const :tag "Scale Oldest->Newest" fullscale)
+                (number :tag "Specify Fractional Number of Days"
+                        :value "20.5"))
+  :group 'vc)
+
+(defcustom vc-annotate-color-map
+  (if (and (tty-display-color-p) (<= (display-color-cells) 8))
+      ;; A custom sorted TTY colormap
+      (let* ((colors
+             (sort
+              (delq nil
+                    (mapcar (lambda (x)
+                              (if (not (or
+                                        (string-equal (car x) "white")
+                                        (string-equal (car x) "black") ))
+                                  (car x)))
+                            (tty-color-alist)))
+              (lambda (a b)
+                (cond
+                 ((or (string-equal a "red") (string-equal b "blue")) t)
+                 ((or (string-equal b "red") (string-equal a "blue")) nil)
+                 ((string-equal a "yellow") t)
+                 ((string-equal b "yellow") nil)
+                 ((string-equal a "cyan") t)
+                 ((string-equal b "cyan") nil)
+                 ((string-equal a "green") t)
+                 ((string-equal b "green") nil)
+                 ((string-equal a "magenta") t)
+                 ((string-equal b "magenta") nil)
+                 (t (string< a b))))))
+            (date 20.)
+            (delta (/ (- 360. date) (1- (length colors)))))
+       (mapcar (lambda (x)
+                 (prog1
+                     (cons date x)
+                   (setq date (+ date delta)))) colors))
+    ;; Normal colormap: hue stepped from 0-240deg, value=1., saturation=0.75
+    '(( 20. . "#FF3F3F")
+      ( 40. . "#FF6C3F")
+      ( 60. . "#FF993F")
+      ( 80. . "#FFC63F")
+      (100. . "#FFF33F")
+      (120. . "#DDFF3F")
+      (140. . "#B0FF3F")
+      (160. . "#83FF3F")
+      (180. . "#56FF3F")
+      (200. . "#3FFF56")
+      (220. . "#3FFF83")
+      (240. . "#3FFFB0")
+      (260. . "#3FFFDD")
+      (280. . "#3FF3FF")
+      (300. . "#3FC6FF")
+      (320. . "#3F99FF")
+      (340. . "#3F6CFF")
+      (360. . "#3F3FFF")))
+  "Association list of age versus color, for \\[vc-annotate].
+Ages are given in units of fractional days.  Default is eighteen
+steps using a twenty day increment, from red to blue.  For TTY
+displays with 8 or fewer colors, the default is red to blue with
+all other colors between (excluding black and white)."
+  :type 'alist
+  :group 'vc)
+
+(defcustom vc-annotate-very-old-color "#3F3FFF"
+  "Color for lines older than the current color range in \\[vc-annotate]]."
+  :type 'string
+  :group 'vc)
+
+(defcustom vc-annotate-background "black"
+  "Background color for \\[vc-annotate].
+Default color is used if nil."
+  :type '(choice (const :tag "Default background" nil) (color))
+  :group 'vc)
+
+(defcustom vc-annotate-menu-elements '(2 0.5 0.1 0.01)
+  "Menu elements for the mode-specific menu of VC-Annotate mode.
+List of factors, used to expand/compress the time scale.  See `vc-annotate'."
+  :type '(repeat number)
+  :group 'vc)
+
+(defvar vc-annotate-mode-map
+  (let ((m (make-sparse-keymap)))
+    (define-key m "a" 'vc-annotate-revision-previous-to-line)
+    (define-key m "d" 'vc-annotate-show-diff-revision-at-line)
+    (define-key m "D" 'vc-annotate-show-changeset-diff-revision-at-line)
+    (define-key m "f" 'vc-annotate-find-revision-at-line)
+    (define-key m "j" 'vc-annotate-revision-at-line)
+    (define-key m "l" 'vc-annotate-show-log-revision-at-line)
+    (define-key m "n" 'vc-annotate-next-revision)
+    (define-key m "p" 'vc-annotate-prev-revision)
+    (define-key m "w" 'vc-annotate-working-revision)
+    (define-key m "v" 'vc-annotate-toggle-annotation-visibility)
+    m)
+  "Local keymap used for VC-Annotate mode.")
+
+;;; Annotate functionality
+
+;; Declare globally instead of additional parameter to
+;; temp-buffer-show-function (not possible to pass more than one
+;; parameter).  The use of annotate-ratio is deprecated in favor of
+;; annotate-mode, which replaces it with the more sensible "span-to
+;; days", along with autoscaling support.
+(defvar vc-annotate-ratio nil "Global variable.")
+
+;; internal buffer-local variables
+(defvar vc-annotate-backend nil)
+(defvar vc-annotate-parent-file nil)
+(defvar vc-annotate-parent-rev nil)
+(defvar vc-annotate-parent-display-mode nil)
+
+(defconst vc-annotate-font-lock-keywords
+  ;; The fontification is done by vc-annotate-lines instead of font-lock.
+  '((vc-annotate-lines)))
+
+(define-derived-mode vc-annotate-mode special-mode "Annotate"
+  "Major mode for output buffers of the `vc-annotate' command.
+
+You can use the mode-specific menu to alter the time-span of the used
+colors.  See variable `vc-annotate-menu-elements' for customizing the
+menu items."
+  ;; Frob buffer-invisibility-spec so that if it is originally a naked t,
+  ;; it will become a list, to avoid initial annotations being invisible.
+  (add-to-invisibility-spec 'foo)
+  (remove-from-invisibility-spec 'foo)
+  (set (make-local-variable 'truncate-lines) t)
+  (set (make-local-variable 'font-lock-defaults)
+       '(vc-annotate-font-lock-keywords t)))
+
+(defun vc-annotate-toggle-annotation-visibility ()
+  "Toggle whether or not the annotation is visible."
+  (interactive)
+  (funcall (if (memq 'vc-annotate-annotation buffer-invisibility-spec)
+               'remove-from-invisibility-spec
+             'add-to-invisibility-spec)
+           'vc-annotate-annotation)
+  (force-window-update (current-buffer)))
+
+(defun vc-annotate-display-default (ratio)
+  "Display the output of \\[vc-annotate] using the default color range.
+The color range is given by `vc-annotate-color-map', scaled by RATIO.
+The current time is used as the offset."
+  (interactive (progn (kill-local-variable 'vc-annotate-color-map) '(1.0)))
+  (message "Redisplaying annotation...")
+  (vc-annotate-display ratio)
+  (message "Redisplaying annotation...done"))
+
+(defun vc-annotate-oldest-in-map (color-map)
+  "Return the oldest time in the COLOR-MAP."
+  ;; Since entries should be sorted, we can just use the last one.
+  (caar (last color-map)))
+
+(defun vc-annotate-get-time-set-line-props ()
+  (let ((bol (point))
+        (date (vc-call-backend vc-annotate-backend 'annotate-time))
+        (inhibit-read-only t))
+    (assert (>= (point) bol))
+    (put-text-property bol (point) 'invisible 'vc-annotate-annotation)
+    date))
+
+(defun vc-annotate-display-autoscale (&optional full)
+  "Highlight the output of \\[vc-annotate] using an autoscaled color map.
+Autoscaling means that the map is scaled from the current time to the
+oldest annotation in the buffer, or, with prefix argument FULL, to
+cover the range from the oldest annotation to the newest."
+  (interactive "P")
+  (let ((newest 0.0)
+       (oldest 999999.)                ;Any CVS users at the founding of Rome?
+       (current (vc-annotate-convert-time (current-time)))
+       date)
+    (message "Redisplaying annotation...")
+    ;; Run through this file and find the oldest and newest dates annotated.
+    (save-excursion
+      (goto-char (point-min))
+      (while (not (eobp))
+        (when (setq date (vc-annotate-get-time-set-line-props))
+          (when (> date newest)
+           (setq newest date))
+          (when (< date oldest)
+           (setq oldest date)))
+        (forward-line 1)))
+    (vc-annotate-display
+     (/ (- (if full newest current) oldest)
+        (vc-annotate-oldest-in-map vc-annotate-color-map))
+     (if full newest))
+    (message "Redisplaying annotation...done \(%s\)"
+            (if full
+                (format "Spanned from %.1f to %.1f days old"
+                        (- current oldest)
+                        (- current newest))
+              (format "Spanned to %.1f days old" (- current oldest))))))
+
+;; Menu -- Using easymenu.el
+(easy-menu-define vc-annotate-mode-menu vc-annotate-mode-map
+  "VC Annotate Display Menu"
+  `("VC-Annotate"
+    ["By Color Map Range" (unless (null vc-annotate-display-mode)
+                 (setq vc-annotate-display-mode nil)
+                 (vc-annotate-display-select))
+     :style toggle :selected (null vc-annotate-display-mode)]
+    ,@(let ((oldest-in-map (vc-annotate-oldest-in-map vc-annotate-color-map)))
+        (mapcar (lambda (element)
+                  (let ((days (* element oldest-in-map)))
+                    `[,(format "Span %.1f days" days)
+                      (vc-annotate-display-select nil ,days)
+                      :style toggle :selected
+                      (eql vc-annotate-display-mode ,days) ]))
+                vc-annotate-menu-elements))
+    ["Span ..."
+     (vc-annotate-display-select
+      nil (float (string-to-number (read-string "Span how many days? "))))]
+    "--"
+    ["Span to Oldest"
+     (unless (eq vc-annotate-display-mode 'scale)
+       (vc-annotate-display-select nil 'scale))
+     :help
+     "Use an autoscaled color map from the oldest annotation to the current time"
+     :style toggle :selected
+     (eq vc-annotate-display-mode 'scale)]
+    ["Span Oldest->Newest"
+     (unless (eq vc-annotate-display-mode 'fullscale)
+       (vc-annotate-display-select nil 'fullscale))
+     :help
+     "Use an autoscaled color map from the oldest to the newest annotation"
+     :style toggle :selected
+     (eq vc-annotate-display-mode 'fullscale)]
+    "--"
+    ["Toggle annotation visibility" vc-annotate-toggle-annotation-visibility
+     :help
+     "Toggle whether the annotation is visible or not"]
+    ["Annotate previous revision" vc-annotate-prev-revision
+     :help "Visit the annotation of the revision previous to this one"]
+    ["Annotate next revision" vc-annotate-next-revision
+     :help "Visit the annotation of the revision after this one"]
+    ["Annotate revision at line" vc-annotate-revision-at-line
+     :help
+     "Visit the annotation of the revision identified in the current line"]
+    ["Annotate revision previous to line" vc-annotate-revision-previous-to-line
+     :help "Visit the annotation of the revision before the revision at line"]
+    ["Annotate latest revision" vc-annotate-working-revision
+     :help "Visit the annotation of the working revision of this file"]
+    ["Show log of revision at line" vc-annotate-show-log-revision-at-line
+     :help "Visit the log of the revision at line"]
+    ["Show diff of revision at line" vc-annotate-show-diff-revision-at-line
+     :help "Visit the diff of the revision at line from its previous revision"]
+    ["Show changeset diff of revision at line"
+     vc-annotate-show-changeset-diff-revision-at-line
+     :enable
+     (eq 'repository (vc-call-backend ,vc-annotate-backend 'revision-granularity))
+     :help "Visit the diff of the revision at line from its previous revision"]
+    ["Visit revision at line" vc-annotate-find-revision-at-line
+     :help "Visit the revision identified in the current line"]))
+
+(defun vc-annotate-display-select (&optional buffer mode)
+  "Highlight the output of \\[vc-annotate].
+By default, the current buffer is highlighted, unless overridden by
+BUFFER.  `vc-annotate-display-mode' specifies the highlighting mode to
+use; you may override this using the second optional arg MODE."
+  (interactive)
+  (when mode (setq vc-annotate-display-mode mode))
+  (pop-to-buffer (or buffer (current-buffer)))
+  (cond ((null vc-annotate-display-mode)
+         ;; The ratio is global, thus relative to the global color-map.
+         (kill-local-variable 'vc-annotate-color-map)
+        (vc-annotate-display-default (or vc-annotate-ratio 1.0)))
+        ;; One of the auto-scaling modes
+       ((eq vc-annotate-display-mode 'scale)
+        (vc-exec-after `(vc-annotate-display-autoscale)))
+       ((eq vc-annotate-display-mode 'fullscale)
+        (vc-exec-after `(vc-annotate-display-autoscale t)))
+       ((numberp vc-annotate-display-mode) ; A fixed number of days lookback
+        (vc-annotate-display-default
+         (/ vc-annotate-display-mode
+             (vc-annotate-oldest-in-map vc-annotate-color-map))))
+       (t (error "No such display mode: %s"
+                 vc-annotate-display-mode))))
+
+;;;###autoload
+(defun vc-annotate (file rev &optional display-mode buf move-point-to)
+  "Display the edit history of the current file using colors.
+
+This command creates a buffer that shows, for each line of the current
+file, when it was last edited and by whom.  Additionally, colors are
+used to show the age of each line--blue means oldest, red means
+youngest, and intermediate colors indicate intermediate ages.  By
+default, the time scale stretches back one year into the past;
+everything that is older than that is shown in blue.
+
+With a prefix argument, this command asks two questions in the
+minibuffer.  First, you may enter a revision number; then the buffer
+displays and annotates that revision instead of the working revision
+\(type RET in the minibuffer to leave that default unchanged).  Then,
+you are prompted for the time span in days which the color range
+should cover.  For example, a time span of 20 days means that changes
+over the past 20 days are shown in red to blue, according to their
+age, and everything that is older than that is shown in blue.
+
+If MOVE-POINT-TO is given, move the point to that line.
+
+Customization variables:
+
+`vc-annotate-menu-elements' customizes the menu elements of the
+mode-specific menu.  `vc-annotate-color-map' and
+`vc-annotate-very-old-color' define the mapping of time to colors.
+`vc-annotate-background' specifies the background color."
+  (interactive
+   (save-current-buffer
+     (vc-ensure-vc-buffer)
+     (list buffer-file-name
+          (let ((def (vc-working-revision buffer-file-name)))
+            (if (null current-prefix-arg) def
+              (read-string
+               (format "Annotate from revision (default %s): " def)
+               nil nil def)))
+          (if (null current-prefix-arg)
+              vc-annotate-display-mode
+            (float (string-to-number
+                    (read-string "Annotate span days (default 20): "
+                                 nil nil "20")))))))
+  (vc-ensure-vc-buffer)
+  (setq vc-annotate-display-mode display-mode) ;Not sure why.  --Stef
+  (let* ((temp-buffer-name (format "*Annotate %s (rev %s)*" (buffer-name) rev))
+         (temp-buffer-show-function 'vc-annotate-display-select)
+         ;; If BUF is specified, we presume the caller maintains current line,
+         ;; so we don't need to do it here.  This implementation may give
+         ;; strange results occasionally in the case of REV != WORKFILE-REV.
+         (current-line (or move-point-to (unless buf (line-number-at-pos)))))
+    (message "Annotating...")
+    ;; If BUF is specified it tells in which buffer we should put the
+    ;; annotations.  This is used when switching annotations to another
+    ;; revision, so we should update the buffer's name.
+    (when buf (with-current-buffer buf
+               (rename-buffer temp-buffer-name t)
+               ;; In case it had to be uniquified.
+               (setq temp-buffer-name (buffer-name))))
+    (with-output-to-temp-buffer temp-buffer-name
+      (let ((backend (vc-backend file)))
+        (vc-call-backend backend 'annotate-command file
+                         (get-buffer temp-buffer-name) rev)
+        ;; we must setup the mode first, and then set our local
+        ;; variables before the show-function is called at the exit of
+        ;; with-output-to-temp-buffer
+        (with-current-buffer temp-buffer-name
+          (unless (equal major-mode 'vc-annotate-mode)
+            (vc-annotate-mode))
+          (set (make-local-variable 'vc-annotate-backend) backend)
+          (set (make-local-variable 'vc-annotate-parent-file) file)
+          (set (make-local-variable 'vc-annotate-parent-rev) rev)
+          (set (make-local-variable 'vc-annotate-parent-display-mode)
+               display-mode))))
+
+    (with-current-buffer temp-buffer-name
+      (vc-exec-after
+       `(progn
+          ;; Ideally, we'd rather not move point if the user has already
+          ;; moved it elsewhere, but really point here is not the position
+          ;; of the user's cursor :-(
+          (when ,current-line           ;(and (bobp))
+            (goto-line ,current-line)
+            (setq vc-sentinel-movepoint (point)))
+          (unless (active-minibuffer-window)
+            (message "Annotating... done")))))))
+
+(defun vc-annotate-prev-revision (prefix)
+  "Visit the annotation of the revision previous to this one.
+
+With a numeric prefix argument, annotate the revision that many
+revisions previous."
+  (interactive "p")
+  (vc-annotate-warp-revision (- 0 prefix)))
+
+(defun vc-annotate-next-revision (prefix)
+  "Visit the annotation of the revision after this one.
+
+With a numeric prefix argument, annotate the revision that many
+revisions after."
+  (interactive "p")
+  (vc-annotate-warp-revision prefix))
+
+(defun vc-annotate-working-revision ()
+  "Visit the annotation of the working revision of this file."
+  (interactive)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((warp-rev (vc-working-revision vc-annotate-parent-file)))
+      (if (equal warp-rev vc-annotate-parent-rev)
+         (message "Already at revision %s" warp-rev)
+       (vc-annotate-warp-revision warp-rev)))))
+
+(defun vc-annotate-extract-revision-at-line ()
+  "Extract the revision number of the current line."
+  ;; This function must be invoked from a buffer in vc-annotate-mode
+  (vc-call-backend vc-annotate-backend 'annotate-extract-revision-at-line))
+
+(defun vc-annotate-revision-at-line ()
+  "Visit the annotation of the revision identified in the current line."
+  (interactive)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
+      (if (not rev-at-line)
+         (message "Cannot extract revision number from the current line")
+       (if (equal rev-at-line vc-annotate-parent-rev)
+           (message "Already at revision %s" rev-at-line)
+         (vc-annotate-warp-revision rev-at-line))))))
+
+(defun vc-annotate-find-revision-at-line ()
+  "Visit the revision identified in the current line."
+  (interactive)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
+      (if (not rev-at-line)
+         (message "Cannot extract revision number from the current line")
+       (vc-revision-other-window rev-at-line)))))
+
+(defun vc-annotate-revision-previous-to-line ()
+  "Visit the annotation of the revision before the revision at line."
+  (interactive)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((rev-at-line (vc-annotate-extract-revision-at-line))
+         (prev-rev nil))
+      (if (not rev-at-line)
+         (message "Cannot extract revision number from the current line")
+       (setq prev-rev
+             (vc-call-backend vc-annotate-backend 'previous-revision
+                               vc-annotate-parent-file rev-at-line))
+       (vc-annotate-warp-revision prev-rev)))))
+
+(defun vc-annotate-show-log-revision-at-line ()
+  "Visit the log of the revision at line."
+  (interactive)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
+      (if (not rev-at-line)
+         (message "Cannot extract revision number from the current line")
+       (vc-print-log rev-at-line)))))
+
+(defun vc-annotate-show-diff-revision-at-line-internal (fileset)
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let ((rev-at-line (vc-annotate-extract-revision-at-line))
+         (prev-rev nil))
+      (if (not rev-at-line)
+         (message "Cannot extract revision number from the current line")
+       (setq prev-rev
+             (vc-call-backend vc-annotate-backend 'previous-revision
+                               vc-annotate-parent-file rev-at-line))
+       (if (not prev-rev)
+           (message "Cannot diff from any revision prior to %s" rev-at-line)
+         (save-window-excursion
+           (vc-diff-internal
+            nil
+            ;; The value passed here should follow what
+            ;; `vc-deduce-fileset' returns.
+            (cons vc-annotate-backend (cons fileset nil))
+            prev-rev rev-at-line))
+         (switch-to-buffer "*vc-diff*"))))))
+
+(defun vc-annotate-show-diff-revision-at-line ()
+  "Visit the diff of the revision at line from its previous revision."
+  (interactive)
+  (vc-annotate-show-diff-revision-at-line-internal (list vc-annotate-parent-file)))
+
+(defun vc-annotate-show-changeset-diff-revision-at-line ()
+  "Visit the diff of the revision at line from its previous revision for all files in the changeset."
+  (interactive)
+  (when (eq 'file (vc-call-backend vc-annotate-backend 'revision-granularity))
+    (error "The %s backend does not support changeset diffs" vc-annotate-backend))
+  (vc-annotate-show-diff-revision-at-line-internal nil))
+
+(defun vc-annotate-warp-revision (revspec)
+  "Annotate the revision described by REVSPEC.
+
+If REVSPEC is a positive integer, warp that many revisions
+forward, if possible, otherwise echo a warning message.  If
+REVSPEC is a negative integer, warp that many revisions backward,
+if possible, otherwise echo a warning message.  If REVSPEC is a
+string, then it describes a revision number, so warp to that
+revision."
+  (if (not (equal major-mode 'vc-annotate-mode))
+      (message "Cannot be invoked outside of a vc annotate buffer")
+    (let* ((buf (current-buffer))
+          (oldline (line-number-at-pos))
+          (revspeccopy revspec)
+          (newrev nil))
+      (cond
+       ((and (integerp revspec) (> revspec 0))
+       (setq newrev vc-annotate-parent-rev)
+       (while (and (> revspec 0) newrev)
+          (setq newrev (vc-call-backend vc-annotate-backend 'next-revision
+                                        vc-annotate-parent-file newrev))
+          (setq revspec (1- revspec)))
+       (unless newrev
+         (message "Cannot increment %d revisions from revision %s"
+                  revspeccopy vc-annotate-parent-rev)))
+       ((and (integerp revspec) (< revspec 0))
+       (setq newrev vc-annotate-parent-rev)
+       (while (and (< revspec 0) newrev)
+          (setq newrev (vc-call-backend vc-annotate-backend 'previous-revision
+                                        vc-annotate-parent-file newrev))
+          (setq revspec (1+ revspec)))
+       (unless newrev
+         (message "Cannot decrement %d revisions from revision %s"
+                  (- 0 revspeccopy) vc-annotate-parent-rev)))
+       ((stringp revspec) (setq newrev revspec))
+       (t (error "Invalid argument to vc-annotate-warp-revision")))
+      (when newrev
+       (vc-annotate vc-annotate-parent-file newrev
+                     vc-annotate-parent-display-mode
+                     buf
+                    ;; Pass the current line so that vc-annotate will
+                    ;; place the point in the line.
+                    (min oldline (progn (goto-char (point-max))
+                                         (forward-line -1)
+                                         (line-number-at-pos))))))))
+
+(defun vc-annotate-compcar (threshold a-list)
+  "Test successive cons cells of A-LIST against THRESHOLD.
+Return the first cons cell with a car that is not less than THRESHOLD,
+nil if no such cell exists."
+ (let ((i 1)
+       (tmp-cons (car a-list)))
+   (while (and tmp-cons (< (car tmp-cons) threshold))
+     (setq tmp-cons (car (nthcdr i a-list)))
+     (setq i (+ i 1)))
+   tmp-cons))                          ; Return the appropriate value
+
+(defun vc-annotate-convert-time (time)
+  "Convert a time value to a floating-point number of days.
+The argument TIME is a list as returned by `current-time' or
+`encode-time', only the first two elements of that list are considered."
+  (/ (+ (* (float (car time)) (lsh 1 16)) (cadr time)) 24 3600))
+
+(defun vc-annotate-difference (&optional offset)
+  "Return the time span in days to the next annotation.
+This calls the backend function annotate-time, and returns the
+difference in days between the time returned and the current time,
+or OFFSET if present."
+   (let ((next-time (vc-annotate-get-time-set-line-props)))
+     (when next-time
+       (- (or offset
+             (vc-call-backend vc-annotate-backend 'annotate-current-time))
+         next-time))))
+
+(defun vc-default-annotate-current-time (backend)
+  "Return the current time, encoded as fractional days."
+  (vc-annotate-convert-time (current-time)))
+
+(defvar vc-annotate-offset nil)
+
+(defun vc-annotate-display (ratio &optional offset)
+  "Highlight `vc-annotate' output in the current buffer.
+RATIO, is the expansion that should be applied to `vc-annotate-color-map'.
+The annotations are relative to the current time, unless overridden by OFFSET."
+  (when (/= ratio 1.0)
+    (set (make-local-variable 'vc-annotate-color-map)
+        (mapcar (lambda (elem) (cons (* (car elem) ratio) (cdr elem)))
+                vc-annotate-color-map)))
+  (set (make-local-variable 'vc-annotate-offset) offset)
+  (font-lock-mode 1))
+
+(defun vc-annotate-lines (limit)
+  (while (< (point) limit)
+    (let ((difference (vc-annotate-difference vc-annotate-offset))
+          (start (point))
+          (end (progn (forward-line 1) (point))))
+      (when difference
+        (let* ((color (or (vc-annotate-compcar difference vc-annotate-color-map)
+                          (cons nil vc-annotate-very-old-color)))
+               ;; substring from index 1 to remove any leading `#' in the name
+               (face-name (concat "vc-annotate-face-"
+                                  (if (string-equal
+                                       (substring (cdr color) 0 1) "#")
+                                      (substring (cdr color) 1)
+                                    (cdr color))))
+               ;; Make the face if not done.
+               (face (or (intern-soft face-name)
+                         (let ((tmp-face (make-face (intern face-name))))
+                           (set-face-foreground tmp-face (cdr color))
+                           (when vc-annotate-background
+                            (set-face-background tmp-face
+                                                 vc-annotate-background))
+                           tmp-face))))        ; Return the face
+          (put-text-property start end 'face face)))))
+  ;; Pretend to font-lock there were no matches.
+  nil)
+
+(provide 'vc-annotate)
+
+;; arch-tag: c3454a89-80e5-4ffd-8993-671b59612898
+;;; vc-annotate.el ends here
diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el
new file mode 100644 (file)
index 0000000..5beba0b
--- /dev/null
@@ -0,0 +1,1067 @@
+;;; vc-dir.el --- Directory status display under VC
+
+;; Copyright (C) 2007, 2008
+;;   Free Software Foundation, Inc.
+
+;; Author:   Dan Nicolaescu <dann@ics.uci.edu>
+;; Keywords: tools
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Credits:
+
+;; The original VC directory status implementation was based on dired.
+;; This implementation was inspired by PCL-CVS.
+;; Many people contributed comments, ideas and code to this
+;; implementation.  These include:
+;;
+;;   Alexandre Julliard  <julliard@winehq.org>
+;;   Stefan Monnier  <monnier@iro.umontreal.ca>
+;;   Tom Tromey  <tromey@redhat.com>
+
+;;; Commentary:
+;;
+
+;;; Todo:  see vc.el.
+
+(require 'vc-hooks)
+(require 'vc)
+(require 'tool-bar)
+(require 'ewoc)
+
+;;; Code:
+(eval-when-compile
+  (require 'cl))
+
+(defcustom vc-dir-mode-hook nil
+  "Normal hook run by `vc-dir-mode'.
+See `run-hooks'."
+  :type 'hook
+  :group 'vc)
+
+;; Used to store information for the files displayed in the directory buffer.
+;; Each item displayed corresponds to one of these defstructs.
+(defstruct (vc-dir-fileinfo
+            (:copier nil)
+            (:type list)            ;So we can use `member' on lists of FIs.
+            (:constructor
+             ;; We could define it as an alias for `list'.
+            vc-dir-create-fileinfo (name state &optional extra marked directory))
+            (:conc-name vc-dir-fileinfo->))
+  name                                  ;Keep it as first, for `member'.
+  state
+  ;; For storing backend specific information.
+  extra
+  marked
+  ;; To keep track of not updated files during a global refresh
+  needs-update
+  ;; To distinguish files and directories.
+  directory)
+
+(defvar vc-ewoc nil)
+
+(defvar vc-dir-process-buffer nil
+  "The buffer used for the asynchronous call that computes status.")
+
+(defvar vc-dir-backend nil
+  "The backend used by the current *vc-dir* buffer.")
+
+(defun vc-dir-move-to-goal-column ()
+  ;; Used to keep the cursor on the file name column.
+  (beginning-of-line)
+  (unless (eolp)
+    ;; Must be in sync with vc-default-status-printer.
+    (forward-char 25)))
+
+(defun vc-dir-prepare-status-buffer (bname dir backend &optional create-new)
+  "Find a buffer named BNAME showing DIR, or create a new one."
+  (setq dir (expand-file-name dir))
+  (let*
+        ;; Look for another buffer name BNAME visiting the same directory.
+        ((buf (save-excursion
+               (unless create-new
+                 (dolist (buffer (buffer-list))
+                   (set-buffer buffer)
+                   (when (and (derived-mode-p 'vc-dir-mode)
+                              (eq vc-dir-backend backend)
+                              (string= (expand-file-name default-directory) dir))
+                     (return buffer)))))))
+    (or buf
+        ;; Create a new buffer named BNAME.
+        (with-current-buffer (create-file-buffer bname)
+          (cd dir)
+          (vc-setup-buffer (current-buffer))
+          ;; Reset the vc-parent-buffer-name so that it does not appear
+          ;; in the mode-line.
+          (setq vc-parent-buffer-name nil)
+          (current-buffer)))))
+
+(defvar vc-dir-menu-map
+  (let ((map (make-sparse-keymap "VC-dir")))
+    (define-key map [quit]
+      '(menu-item "Quit" quit-window
+                 :help "Quit"))
+    (define-key map [kill]
+      '(menu-item "Kill Update Command" vc-dir-kill-dir-status-process
+                 :enable (vc-dir-busy)
+                 :help "Kill the command that updates the directory buffer"))
+    (define-key map [refresh]
+      '(menu-item "Refresh" revert-buffer
+                 :enable (not (vc-dir-busy))
+                 :help "Refresh the contents of the directory buffer"))
+    (define-key map [remup]
+      '(menu-item "Hide up-to-date" vc-dir-hide-up-to-date
+                 :help "Hide up-to-date items from display"))
+    ;; Movement.
+    (define-key map [sepmv] '("--"))
+    (define-key map [next-line]
+      '(menu-item "Next line" vc-dir-next-line
+                 :help "Go to the next line" :keys "n"))
+    (define-key map [previous-line]
+      '(menu-item "Previous line" vc-dir-previous-line
+                 :help "Go to the previous line"))
+    ;; Marking.
+    (define-key map [sepmrk] '("--"))
+    (define-key map [unmark-all]
+      '(menu-item "Unmark All" vc-dir-unmark-all-files
+                 :help "Unmark all files that are in the same state as the current file\
+\nWith prefix argument unmark all files"))
+    (define-key map [unmark-previous]
+      '(menu-item "Unmark previous " vc-dir-unmark-file-up
+                 :help "Move to the previous line and unmark the file"))
+
+    (define-key map [mark-all]
+      '(menu-item "Mark All" vc-dir-mark-all-files
+                 :help "Mark all files that are in the same state as the current file\
+\nWith prefix argument mark all files"))
+    (define-key map [unmark]
+      '(menu-item "Unmark" vc-dir-unmark
+                 :help "Unmark the current file or all files in the region"))
+
+    (define-key map [mark]
+      '(menu-item "Mark" vc-dir-mark
+                 :help "Mark the current file or all files in the region"))
+
+    (define-key map [sepopn] '("--"))
+    (define-key map [open-other]
+      '(menu-item "Open in other window" vc-dir-find-file-other-window
+                 :help "Find the file on the current line, in another window"))
+    (define-key map [open]
+      '(menu-item "Open file" vc-dir-find-file
+                 :help "Find the file on the current line"))
+    (define-key map [sepvcdet] '("--"))
+    ;; FIXME: This needs a key binding.  And maybe a better name
+    ;; ("Insert" like PCL-CVS uses does not sound that great either)...
+    (define-key map [ins]
+      '(menu-item "Show File" vc-dir-show-fileentry
+                 :help "Show a file in the VC status listing even though it might be up to date"))
+    (define-key map [annotate]
+      '(menu-item "Annotate" vc-annotate
+                 :help "Display the edit history of the current file using colors"))
+    (define-key map [diff]
+      '(menu-item "Compare with Base Version" vc-diff
+                 :help "Compare file set with the base version"))
+    (define-key map [log]
+     '(menu-item "Show history" vc-print-log
+     :help "List the change log of the current file set in a window"))
+    ;; VC commands.
+    (define-key map [sepvccmd] '("--"))
+    (define-key map [update]
+      '(menu-item "Update to latest version" vc-update
+                 :help "Update the current fileset's files to their tip revisions"))
+    (define-key map [revert]
+      '(menu-item "Revert to base version" vc-revert
+                 :help "Revert working copies of the selected fileset to their repository contents."))
+    (define-key map [next-action]
+      ;; FIXME: This really really really needs a better name!
+      ;; And a key binding too.
+      '(menu-item "Check In/Out" vc-next-action
+                 :help "Do the next logical version control operation on the current fileset"))
+    (define-key map [register]
+      '(menu-item "Register" vc-register
+                 :help "Register file set into the version control system"))
+    map)
+  "Menu for dispatcher status")
+
+;; VC backends can use this to add mode-specific menu items to
+;; vc-dir-menu-map.
+(defun vc-dir-menu-map-filter (orig-binding)
+  (when (and (symbolp orig-binding) (fboundp orig-binding))
+    (setq orig-binding (indirect-function orig-binding)))
+  (let ((ext-binding
+         (when (derived-mode-p 'vc-dir-mode)
+          (vc-call-backend vc-dir-backend 'extra-status-menu))))
+    (if (null ext-binding)
+       orig-binding
+      (append orig-binding
+             '("----")
+             ext-binding))))
+
+(defvar vc-dir-mode-map
+  (let ((map (make-keymap)))
+    (suppress-keymap map)
+    ;; VC commands
+    (define-key map "v" 'vc-next-action)   ;; C-x v v
+    (define-key map "=" 'vc-diff)         ;; C-x v =
+    (define-key map "i" 'vc-register)     ;; C-x v i
+    (define-key map "+" 'vc-update)       ;; C-x v +
+    (define-key map "l" 'vc-print-log)    ;; C-x v l
+    ;; More confusing than helpful, probably
+    ;;(define-key map "R" 'vc-revert) ;; u is taken by dispatcher unmark.
+    ;;(define-key map "A" 'vc-annotate) ;; g is taken by dispatcher refresh
+    ;; Marking.
+    (define-key map "m" 'vc-dir-mark)
+    (define-key map "M" 'vc-dir-mark-all-files)
+    (define-key map "u" 'vc-dir-unmark)
+    (define-key map "U" 'vc-dir-unmark-all-files)
+    (define-key map "\C-?" 'vc-dir-unmark-file-up)
+    (define-key map "\M-\C-?" 'vc-dir-unmark-all-files)
+    ;; Movement.
+    (define-key map "n" 'vc-dir-next-line)
+    (define-key map " " 'vc-dir-next-line)
+    (define-key map "\t" 'vc-dir-next-directory)
+    (define-key map "p" 'vc-dir-previous-line)
+    (define-key map [backtab] 'vc-dir-previous-directory)
+    ;;; Rebind paragraph-movement commands.
+    (define-key map "\M-}" 'vc-dir-next-directory)
+    (define-key map "\M-{" 'vc-dir-previous-directory)
+    (define-key map [C-down] 'vc-dir-next-directory)
+    (define-key map [C-up] 'vc-dir-previous-directory)
+    ;; The remainder.
+    (define-key map "f" 'vc-dir-find-file)
+    (define-key map "\C-m" 'vc-dir-find-file)
+    (define-key map "o" 'vc-dir-find-file-other-window)
+    (define-key map "\C-c\C-c" 'vc-dir-kill-dir-status-process)
+    (define-key map [down-mouse-3] 'vc-dir-menu)
+    (define-key map [mouse-2] 'vc-dir-toggle-mark)
+    (define-key map "x" 'vc-dir-hide-up-to-date)
+
+    ;; Hook up the menu.
+    (define-key map [menu-bar vc-dir-mode]
+      `(menu-item
+       ;; VC backends can use this to add mode-specific menu items to
+       ;; vc-dir-menu-map.
+       "VC-dir" ,vc-dir-menu-map :filter vc-dir-menu-map-filter))
+    map)
+  "Keymap for directory buffer.")
+
+(defmacro vc-at-event (event &rest body)
+  "Evaluate `body' with point located at event-start of `event'.
+If `body' uses `event', it should be a variable,
+ otherwise it will be evaluated twice."
+  (let ((posn (make-symbol "vc-at-event-posn")))
+    `(let ((,posn (event-start ,event)))
+       (save-excursion
+         (set-buffer (window-buffer (posn-window ,posn)))
+         (goto-char (posn-point ,posn))
+         ,@body))))
+
+(defun vc-dir-menu (e)
+  "Popup the dispatcher status menu."
+  (interactive "e")
+  (vc-at-event e (popup-menu vc-dir-menu-map e)))
+
+(defvar vc-dir-tool-bar-map
+  (let ((map (make-sparse-keymap)))
+    (tool-bar-local-item-from-menu 'vc-dir-find-file "open"
+                                  map vc-dir-mode-map)
+    (tool-bar-local-item "bookmark_add"
+                        'vc-dir-toggle-mark 'vc-dir-toggle-mark map
+                        :help "Toggle mark on current item")
+    (tool-bar-local-item-from-menu 'vc-dir-previous-line "left-arrow"
+                                  map vc-dir-mode-map
+                                  :rtl "right-arrow")
+    (tool-bar-local-item-from-menu 'vc-dir-next-line "right-arrow"
+                                  map vc-dir-mode-map
+                                  :rtl "left-arrow")
+    (tool-bar-local-item-from-menu 'vc-print-log "info"
+                                  map vc-dir-mode-map)
+    (tool-bar-local-item-from-menu 'revert-buffer "refresh"
+                                  map vc-dir-mode-map)
+    (tool-bar-local-item-from-menu 'nonincremental-search-forward
+                                  "search" map)
+    (tool-bar-local-item-from-menu 'vc-dir-kill-dir-status-process "cancel"
+                                  map vc-dir-mode-map)
+    (tool-bar-local-item-from-menu 'quit-window "exit"
+                                  map vc-dir-mode-map)
+    map))
+
+(defun vc-dir-node-directory (node)
+  ;; Compute the directory for NODE.
+  ;; If it's a directory node, get it from the the node.
+  (let ((data (ewoc-data node)))
+    (or (vc-dir-fileinfo->directory data)
+       ;; Otherwise compute it from the file name.
+       (file-name-directory
+        (expand-file-name
+         (vc-dir-fileinfo->name data))))))
+
+(defun vc-dir-update (entries buffer &optional noinsert)
+  "Update BUFFER's ewoc from the list of ENTRIES.
+If NOINSERT, ignore elements on ENTRIES which are not in the ewoc."
+  ;; Add ENTRIES to the vc-dir buffer BUFFER.
+  (with-current-buffer buffer
+    ;; Insert the entries sorted by name into the ewoc.
+    ;; We assume the ewoc is sorted too, which should be the
+    ;; case if we always add entries with vc-dir-update.
+    (setq entries
+         ;; Sort: first files and then subdirectories.
+         ;; XXX: this is VERY inefficient, it computes the directory
+         ;; names too many times
+         (sort entries
+               (lambda (entry1 entry2)
+                 (let ((dir1 (file-name-directory (expand-file-name (car entry1))))
+                       (dir2 (file-name-directory (expand-file-name (car entry2)))))
+                   (cond
+                    ((string< dir1 dir2) t)
+                    ((not (string= dir1 dir2)) nil)
+                    ((string< (car entry1) (car entry2))))))))
+    ;; Insert directory entries in the right places.
+    (let ((entry (car entries))
+         (node (ewoc-nth vc-ewoc 0)))
+      ;; Insert . if it is not present.
+      (unless node
+       (let ((rd (file-relative-name default-directory)))
+         (ewoc-enter-last
+          vc-ewoc (vc-dir-create-fileinfo
+                   rd nil nil nil (expand-file-name default-directory))))
+       (setq node (ewoc-nth vc-ewoc 0)))
+
+      (while (and entry node)
+       (let* ((entryfile (car entry))
+              (entrydir (file-name-directory (expand-file-name entryfile)))
+              (nodedir (vc-dir-node-directory node)))
+         (cond
+          ;; First try to find the directory.
+          ((string-lessp nodedir entrydir)
+           (setq node (ewoc-next vc-ewoc node)))
+          ((string-equal nodedir entrydir)
+           ;; Found the directory, find the place for the file name.
+           (let ((nodefile (vc-dir-fileinfo->name (ewoc-data node))))
+             (cond
+              ((string-lessp nodefile entryfile)
+               (setq node (ewoc-next vc-ewoc node)))
+              ((string-equal nodefile entryfile)
+               (setf (vc-dir-fileinfo->state (ewoc-data node)) (nth 1 entry))
+               (setf (vc-dir-fileinfo->extra (ewoc-data node)) (nth 2 entry))
+               (setf (vc-dir-fileinfo->needs-update (ewoc-data node)) nil)
+               (ewoc-invalidate vc-ewoc node)
+               (setq entries (cdr entries))
+               (setq entry (car entries))
+               (setq node (ewoc-next vc-ewoc node)))
+              (t
+               (ewoc-enter-before vc-ewoc node
+                                  (apply 'vc-dir-create-fileinfo entry))
+               (setq entries (cdr entries))
+               (setq entry (car entries))))))
+          (t
+           ;; We might need to insert a directory node if the
+           ;; previous node was in a different directory.
+           (let* ((rd (file-relative-name entrydir))
+                  (prev-node (ewoc-prev vc-ewoc node))
+                  (prev-dir (vc-dir-node-directory prev-node)))
+             (unless (string-equal entrydir prev-dir)
+               (ewoc-enter-before
+                vc-ewoc node (vc-dir-create-fileinfo rd nil nil nil entrydir))))
+           ;; Now insert the node itself.
+           (ewoc-enter-before vc-ewoc node
+                              (apply 'vc-dir-create-fileinfo entry))
+           (setq entries (cdr entries) entry (car entries))))))
+      ;; We're past the last node, all remaining entries go to the end.
+      (unless (or node noinsert)
+       (let ((lastdir (vc-dir-node-directory (ewoc-nth vc-ewoc -1))))
+         (dolist (entry entries)
+           (let ((entrydir (file-name-directory (expand-file-name (car entry)))))
+             ;; Insert a directory node if needed.
+             (unless (string-equal lastdir entrydir)
+               (setq lastdir entrydir)
+               (let ((rd (file-relative-name entrydir)))
+                 (ewoc-enter-last
+                  vc-ewoc (vc-dir-create-fileinfo rd nil nil nil entrydir))))
+             ;; Now insert the node itself.
+             (ewoc-enter-last vc-ewoc
+                              (apply 'vc-dir-create-fileinfo entry)))))))))
+
+(defun vc-dir-busy ()
+  (and (buffer-live-p vc-dir-process-buffer)
+       (get-buffer-process vc-dir-process-buffer)))
+
+(defun vc-dir-kill-dir-status-process ()
+  "Kill the temporary buffer and associated process."
+  (interactive)
+  (when (buffer-live-p vc-dir-process-buffer)
+    (let ((proc (get-buffer-process vc-dir-process-buffer)))
+      (when proc (delete-process proc))
+      (setq vc-dir-process-buffer nil)
+      (setq mode-line-process nil))))
+
+(defun vc-dir-kill-query ()
+  ;; Make sure that when the status buffer is killed the update
+  ;; process running in background is also killed.
+  (if (vc-dir-busy)
+    (when (y-or-n-p "Status update process running, really kill status buffer? ")
+      (vc-dir-kill-dir-status-process)
+      t)
+    t))
+
+(defun vc-dir-next-line (arg)
+  "Go to the next line.
+If a prefix argument is given, move by that many lines."
+  (interactive "p")
+  (with-no-warnings
+    (ewoc-goto-next vc-ewoc arg)
+    (vc-dir-move-to-goal-column)))
+
+(defun vc-dir-previous-line (arg)
+  "Go to the previous line.
+If a prefix argument is given, move by that many lines."
+  (interactive "p")
+  (ewoc-goto-prev vc-ewoc arg)
+  (vc-dir-move-to-goal-column))
+
+(defun vc-dir-next-directory ()
+  "Go to the next directory."
+  (interactive)
+  (let ((orig (point)))
+    (if
+       (catch 'foundit
+         (while t
+           (let* ((next (ewoc-next vc-ewoc (ewoc-locate vc-ewoc))))
+             (cond ((not next)
+                    (throw 'foundit t))
+                   (t
+                    (progn
+                      (ewoc-goto-node vc-ewoc next)
+                      (vc-dir-move-to-goal-column)
+                      (if (vc-dir-fileinfo->directory (ewoc-data next))
+                          (throw 'foundit nil))))))))
+       (goto-char orig))))
+
+(defun vc-dir-previous-directory ()
+  "Go to the previous directory."
+  (interactive)
+  (let ((orig (point)))
+    (if
+       (catch 'foundit
+         (while t
+           (let* ((prev (ewoc-prev vc-ewoc (ewoc-locate vc-ewoc))))
+             (cond ((not prev)
+                    (throw 'foundit t))
+                   (t
+                    (progn
+                      (ewoc-goto-node vc-ewoc prev)
+                      (vc-dir-move-to-goal-column)
+                      (if (vc-dir-fileinfo->directory (ewoc-data prev))
+                          (throw 'foundit nil))))))))
+       (goto-char orig))))
+
+(defun vc-dir-mark-unmark (mark-unmark-function)
+  (if (use-region-p)
+      (let ((firstl (line-number-at-pos (region-beginning)))
+           (lastl (line-number-at-pos (region-end))))
+       (save-excursion
+         (goto-char (region-beginning))
+         (while (<= (line-number-at-pos) lastl)
+           (funcall mark-unmark-function))))
+    (funcall mark-unmark-function)))
+
+(defun vc-dir-parent-marked-p (arg)
+  ;; Return nil if none of the parent directories of arg is marked.
+  (let* ((argdir (vc-dir-node-directory arg))
+        (arglen (length argdir))
+        (crt arg)
+        data dir)
+    ;; Go through the predecessors, checking if any directory that is
+    ;; a parent is marked.
+    (while (setq crt (ewoc-prev vc-ewoc crt))
+      (setq data (ewoc-data crt))
+      (setq dir (vc-dir-node-directory crt))
+      (when (and (vc-dir-fileinfo->directory data)
+                (vc-string-prefix-p dir argdir))
+       (when (vc-dir-fileinfo->marked data)
+         (error "Cannot mark `%s', parent directory `%s' marked"
+                (vc-dir-fileinfo->name (ewoc-data arg))
+                (vc-dir-fileinfo->name data)))))
+    nil))
+
+(defun vc-dir-children-marked-p (arg)
+  ;; Return nil if none of the children of arg is marked.
+  (let* ((argdir-re (concat "\\`" (regexp-quote (vc-dir-node-directory arg))))
+        (is-child t)
+        (crt arg)
+        data dir)
+    (while (and is-child (setq crt (ewoc-next vc-ewoc crt)))
+      (setq data (ewoc-data crt))
+      (setq dir (vc-dir-node-directory crt))
+      (if (string-match argdir-re dir)
+         (when (vc-dir-fileinfo->marked data)
+           (error "Cannot mark `%s', child `%s' marked"
+                  (vc-dir-fileinfo->name (ewoc-data arg))
+                  (vc-dir-fileinfo->name data)))
+       ;; We are done, we got to an entry that is not a child of `arg'.
+       (setq is-child nil)))
+    nil))
+
+(defun vc-dir-mark-file (&optional arg)
+  ;; Mark ARG or the current file and move to the next line.
+  (let* ((crt (or arg (ewoc-locate vc-ewoc)))
+         (file (ewoc-data crt))
+        (isdir (vc-dir-fileinfo->directory file)))
+    (when (or (and isdir (not (vc-dir-children-marked-p crt)))
+             (and (not isdir) (not (vc-dir-parent-marked-p crt))))
+      (setf (vc-dir-fileinfo->marked file) t)
+      (ewoc-invalidate vc-ewoc crt)
+      (unless (or arg (mouse-event-p last-command-event))
+       (vc-dir-next-line 1)))))
+
+(defun vc-dir-mark ()
+  "Mark the current file or all files in the region.
+If the region is active, mark all the files in the region.
+Otherwise mark the file on the current line and move to the next
+line."
+  (interactive)
+  (vc-dir-mark-unmark 'vc-dir-mark-file))
+
+(defun vc-dir-mark-all-files (arg)
+  "Mark all files with the same state as the current one.
+With a prefix argument mark all files.
+If the current entry is a directory, mark all child files.
+
+The commands operate on files that are on the same state.
+This command is intended to make it easy to select all files that
+share the same state."
+  (interactive "P")
+  (if arg
+      ;; Mark all files.
+      (progn
+       ;; First check that no directory is marked, we can't mark
+       ;; files in that case.
+       (ewoc-map
+        (lambda (filearg)
+          (when (and (vc-dir-fileinfo->directory filearg)
+                     (vc-dir-fileinfo->marked filearg))
+            (error "Cannot mark all files, directory `%s' marked"
+                   (vc-dir-fileinfo->name filearg))))
+        vc-ewoc)
+       (ewoc-map
+        (lambda (filearg)
+          (unless (vc-dir-fileinfo->marked filearg)
+            (setf (vc-dir-fileinfo->marked filearg) t)
+            t))
+        vc-ewoc))
+    (let ((data (ewoc-data (ewoc-locate vc-ewoc))))
+      (if (vc-dir-fileinfo->directory data)
+         ;; It's a directory, mark child files.
+         (let ((crt (ewoc-locate vc-ewoc)))
+           (unless (vc-dir-children-marked-p crt)
+             (while (setq crt (ewoc-next vc-ewoc crt))
+               (let ((crt-data (ewoc-data crt)))
+                 (unless (vc-dir-fileinfo->directory crt-data)
+                   (setf (vc-dir-fileinfo->marked crt-data) t)
+                   (ewoc-invalidate vc-ewoc crt))))))
+       ;; It's a file
+       (let ((state (vc-dir-fileinfo->state data))
+             (crt (ewoc-nth vc-ewoc 0)))
+         (while crt
+           (let ((crt-data (ewoc-data crt)))
+             (when (and (not (vc-dir-fileinfo->marked crt-data))
+                        (eq (vc-dir-fileinfo->state crt-data) state)
+                        (not (vc-dir-fileinfo->directory crt-data)))
+               (vc-dir-mark-file crt)))
+           (setq crt (ewoc-next vc-ewoc crt))))))))
+
+(defun vc-dir-unmark-file ()
+  ;; Unmark the current file and move to the next line.
+  (let* ((crt (ewoc-locate vc-ewoc))
+         (file (ewoc-data crt)))
+    (setf (vc-dir-fileinfo->marked file) nil)
+    (ewoc-invalidate vc-ewoc crt)
+    (unless (mouse-event-p last-command-event)
+      (vc-dir-next-line 1))))
+
+(defun vc-dir-unmark ()
+  "Unmark the current file or all files in the region.
+If the region is active, unmark all the files in the region.
+Otherwise mark the file on the current line and move to the next
+line."
+  (interactive)
+  (vc-dir-mark-unmark 'vc-dir-unmark-file))
+
+(defun vc-dir-unmark-file-up ()
+  "Move to the previous line and unmark the file."
+  (interactive)
+  ;; If we're on the first line, we won't move up, but we will still
+  ;; remove the mark.  This seems a bit odd but it is what buffer-menu
+  ;; does.
+  (let* ((prev (ewoc-goto-prev vc-ewoc 1))
+        (file (ewoc-data prev)))
+    (setf (vc-dir-fileinfo->marked file) nil)
+    (ewoc-invalidate vc-ewoc prev)
+    (vc-dir-move-to-goal-column)))
+
+(defun vc-dir-unmark-all-files (arg)
+  "Unmark all files with the same state as the current one.
+With a prefix argument unmark all files.
+If the current entry is a directory, unmark all the child files.
+
+The commands operate on files that are on the same state.
+This command is intended to make it easy to deselect all files
+that share the same state."
+  (interactive "P")
+  (if arg
+      (ewoc-map
+       (lambda (filearg)
+        (when (vc-dir-fileinfo->marked filearg)
+          (setf (vc-dir-fileinfo->marked filearg) nil)
+          t))
+       vc-ewoc)
+    (let* ((crt (ewoc-locate vc-ewoc))
+          (data (ewoc-data crt)))
+      (if (vc-dir-fileinfo->directory data)
+         ;; It's a directory, unmark child files.
+         (while (setq crt (ewoc-next vc-ewoc crt))
+           (let ((crt-data (ewoc-data crt)))
+             (unless (vc-dir-fileinfo->directory crt-data)
+               (setf (vc-dir-fileinfo->marked crt-data) nil)
+               (ewoc-invalidate vc-ewoc crt))))
+       ;; It's a file
+       (let ((crt-state (vc-dir-fileinfo->state (ewoc-data crt))))
+         (ewoc-map
+          (lambda (filearg)
+            (when (and (vc-dir-fileinfo->marked filearg)
+                       (eq (vc-dir-fileinfo->state filearg) crt-state))
+              (setf (vc-dir-fileinfo->marked filearg) nil)
+              t))
+          vc-ewoc))))))
+
+(defun vc-dir-toggle-mark-file ()
+  (let* ((crt (ewoc-locate vc-ewoc))
+         (file (ewoc-data crt)))
+    (if (vc-dir-fileinfo->marked file)
+       (vc-dir-unmark-file)
+      (vc-dir-mark-file))))
+
+(defun vc-dir-toggle-mark (e)
+  (interactive "e")
+  (vc-at-event e (vc-dir-mark-unmark 'vc-dir-toggle-mark-file)))
+
+(defun vc-dir-delete-file ()
+  "Delete the marked files, or the current file if no marks."
+  (interactive)
+  (mapc 'vc-delete-file (or (vc-dir-marked-files)
+                            (list (vc-dir-current-file)))))
+
+(defun vc-dir-find-file ()
+  "Find the file on the current line."
+  (interactive)
+  (find-file (vc-dir-current-file)))
+
+(defun vc-dir-find-file-other-window ()
+  "Find the file on the current line, in another window."
+  (interactive)
+  (find-file-other-window (vc-dir-current-file)))
+
+(defun vc-dir-current-file ()
+  (let ((node (ewoc-locate vc-ewoc)))
+    (unless node
+      (error "No file available"))
+    (expand-file-name (vc-dir-fileinfo->name (ewoc-data node)))))
+
+(defun vc-dir-marked-files ()
+  "Return the list of marked files."
+  (mapcar
+   (lambda (elem) (expand-file-name (vc-dir-fileinfo->name elem)))
+   (ewoc-collect vc-ewoc 'vc-dir-fileinfo->marked)))
+
+(defun vc-dir-marked-only-files-and-states ()
+  "Return the list of conses (FILE . STATE) for the marked files.
+For marked directories return the corresponding conses for the
+child files."
+  (let ((crt (ewoc-nth vc-ewoc 0))
+       result)
+    (while crt
+      (let ((crt-data (ewoc-data crt)))
+       (if (vc-dir-fileinfo->marked crt-data)
+           ;; FIXME: use vc-dir-child-files-and-states here instead of duplicating it.
+           (if (vc-dir-fileinfo->directory crt-data)
+               (let* ((dir (vc-dir-fileinfo->directory crt-data))
+                      (dirlen (length dir))
+                      data)
+                 (while
+                     (and (setq crt (ewoc-next vc-ewoc crt))
+                          (vc-string-prefix-p dir
+                                               (progn
+                                                 (setq data (ewoc-data crt))
+                                                 (vc-dir-node-directory crt))))
+                   (unless (vc-dir-fileinfo->directory data)
+                     (push
+                      (cons (expand-file-name (vc-dir-fileinfo->name data))
+                            (vc-dir-fileinfo->state data))
+                      result))))
+             (push (cons (expand-file-name (vc-dir-fileinfo->name crt-data))
+                         (vc-dir-fileinfo->state crt-data))
+                   result)
+             (setq crt (ewoc-next vc-ewoc crt)))
+         (setq crt (ewoc-next vc-ewoc crt)))))
+    result))
+
+(defun vc-dir-child-files-and-states ()
+  "Return the list of conses (FILE . STATE) for child files of the current entry if it's a directory.
+If it is a file, return the corresponding cons for the file itself."
+  (let* ((crt (ewoc-locate vc-ewoc))
+        (crt-data (ewoc-data crt))
+         result)
+    (if (vc-dir-fileinfo->directory crt-data)
+       (let* ((dir (vc-dir-fileinfo->directory crt-data))
+              (dirlen (length dir))
+              data)
+         (while
+             (and (setq crt (ewoc-next vc-ewoc crt))
+                   (vc-string-prefix-p dir (progn
+                                             (setq data (ewoc-data crt))
+                                             (vc-dir-node-directory crt))))
+           (unless (vc-dir-fileinfo->directory data)
+             (push
+              (cons (expand-file-name (vc-dir-fileinfo->name data))
+                    (vc-dir-fileinfo->state data))
+              result))))
+      (push
+       (cons (expand-file-name (vc-dir-fileinfo->name crt-data))
+            (vc-dir-fileinfo->state crt-data)) result))
+    result))
+
+(defun vc-dir-resynch-file (&optional fname)
+  "Update the entries for FILE in any directory buffers that list it."
+  (let ((file (or fname (expand-file-name buffer-file-name))))
+    (if (file-directory-p file)
+       ;; FIXME: Maybe this should never happen?
+        ;; FIXME: But it is useful to update the state of a directory
+       ;; (more precisely the files in the directory) after some VC
+       ;; operations.
+       nil
+      (let ((found-vc-dir-buf nil))
+       (save-excursion
+         (dolist (status-buf (buffer-list))
+           (set-buffer status-buf)
+           ;; look for a vc-dir buffer that might show this file.
+           (when (derived-mode-p 'vc-dir-mode)
+             (setq found-vc-dir-buf t)
+             (let ((ddir (expand-file-name default-directory)))
+               (when (vc-string-prefix-p ddir file)
+                 (let*
+                      ;; FIXME: Any reason we don't use file-relative-name?
+                     ((file-short (substring file (length ddir)))
+                      (state (vc-call-backend vc-dir-backend 'state file))
+                      (extra (vc-call-backend vc-dir-backend
+                                              'status-fileinfo-extra file))
+                      (entry
+                       (list file-short state extra)))
+                   (vc-dir-update (list entry) status-buf))))))
+         ;; We didn't find any vc-dir buffers, remove the hook, it is
+         ;; not needed.
+         (unless found-vc-dir-buf
+            (remove-hook 'after-save-hook 'vc-dir-resynch-file)))))))
+
+(defvar use-vc-backend)  ;; dynamically bound
+
+(define-derived-mode vc-dir-mode special-mode "VC dir"
+  "Major mode for dispatcher directory buffers.
+Marking/Unmarking key bindings and actions:
+m - marks a file/directory or if the region is active, mark all the files
+     in region.
+    Restrictions: - a file cannot be marked if any parent directory is marked
+                  - a directory cannot be marked if any child file or
+                    directory is marked
+u - marks a file/directory or if the region is active, unmark all the files
+     in region.
+M - if the cursor is on a file: mark all the files with the same state as
+      the current file
+  - if the cursor is on a directory: mark all child files
+  - with a prefix argument: mark all files
+U - if the cursor is on a file: unmark all the files with the same state
+      as the current file
+  - if the cursor is on a directory: unmark all child files
+  - with a prefix argument: unmark all files
+
+
+\\{vc-dir-mode-map}"
+  (set (make-local-variable 'vc-dir-backend) use-vc-backend)
+  (setq buffer-read-only t)
+  (when (boundp 'tool-bar-map)
+    (set (make-local-variable 'tool-bar-map) vc-dir-tool-bar-map))
+  (let ((buffer-read-only nil))
+    (erase-buffer)
+    (set (make-local-variable 'vc-dir-process-buffer) nil)
+    (set (make-local-variable 'vc-ewoc)
+        (ewoc-create #'vc-dir-status-printer
+                     (vc-dir-headers vc-dir-backend default-directory)))
+    (set (make-local-variable 'revert-buffer-function)
+        'vc-dir-revert-buffer-function)
+    (set (make-local-variable 'list-buffers-directory)
+         (expand-file-name default-directory))
+    (add-hook 'after-save-hook 'vc-dir-resynch-file)
+    ;; Make sure that if the directory buffer is killed, the update
+    ;; process running in the background is also killed.
+    (add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t)
+    (vc-dir-refresh)))
+
+(defun vc-dir-headers (backend dir)
+  "Display the headers in the *VC dir* buffer.
+It calls the `status-extra-headers' backend method to display backend
+specific headers."
+  (concat
+   (propertize "VC backend : " 'face 'font-lock-type-face)
+   (propertize (format "%s\n" backend) 'face 'font-lock-variable-name-face)
+   (propertize "Working dir: " 'face 'font-lock-type-face)
+   (propertize (format "%s\n" dir) 'face 'font-lock-variable-name-face)
+   (vc-call-backend backend 'status-extra-headers dir)
+   "\n"))
+
+(defun vc-dir-refresh-files (files default-state)
+  "Refresh some files in the *VC-dir* buffer."
+  (let ((def-dir default-directory)
+       (backend vc-dir-backend))
+    (vc-set-mode-line-busy-indicator)
+    ;; Call the `dir-status-file' backend function.
+    ;; `dir-status-file' is supposed to be asynchronous.
+    ;; It should compute the results, and then call the function
+    ;; passed as an argument in order to update the vc-dir buffer
+    ;; with the results.
+    (unless (buffer-live-p vc-dir-process-buffer)
+      (setq vc-dir-process-buffer
+            (generate-new-buffer (format " *VC-%s* tmp status" backend))))
+    (lexical-let ((buffer (current-buffer)))
+      (with-current-buffer vc-dir-process-buffer
+        (cd def-dir)
+        (erase-buffer)
+        (vc-call-backend
+         backend 'dir-status-files def-dir files default-state
+         (lambda (entries &optional more-to-come)
+           ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items.
+           ;; If MORE-TO-COME is true, then more updates will come from
+           ;; the asynchronous process.
+           (with-current-buffer buffer
+             (vc-dir-update entries buffer)
+             (unless more-to-come
+               (setq mode-line-process nil)
+               ;; Remove the ones that haven't been updated at all.
+               ;; Those not-updated are those whose state is nil because the
+               ;; file/dir doesn't exist and isn't versioned.
+               (ewoc-filter vc-ewoc
+                            (lambda (info)
+                             ;; The state for directory entries might
+                             ;; have been changed to 'up-to-date,
+                             ;; reset it, othewise it will be removed when doing 'x'
+                             ;; next time.
+                             ;; FIXME: There should be a more elegant way to do this.
+                             (when (and (vc-dir-fileinfo->directory info)
+                                        (eq (vc-dir-fileinfo->state info)
+                                            'up-to-date))
+                               (setf (vc-dir-fileinfo->state info) nil))
+
+                              (not (vc-dir-fileinfo->needs-update info))))))))))))
+
+(defun vc-dir-revert-buffer-function (&optional ignore-auto noconfirm)
+  (vc-dir-refresh))
+
+(defun vc-dir-refresh ()
+  "Refresh the contents of the *VC-dir* buffer.
+Throw an error if another update process is in progress."
+  (interactive)
+  (if (vc-dir-busy)
+      (error "Another update process is in progress, cannot run two at a time")
+    (let ((def-dir default-directory)
+         (backend vc-dir-backend))
+      (vc-set-mode-line-busy-indicator)
+      ;; Call the `dir-status' backend function.
+      ;; `dir-status' is supposed to be asynchronous.
+      ;; It should compute the results, and then call the function
+      ;; passed as an argument in order to update the vc-dir buffer
+      ;; with the results.
+
+      ;; Create a buffer that can be used by `dir-status' and call
+      ;; `dir-status' with this buffer as the current buffer.  Use
+      ;; `vc-dir-process-buffer' to remember this buffer, so that
+      ;; it can be used later to kill the update process in case it
+      ;; takes too long.
+      (unless (buffer-live-p vc-dir-process-buffer)
+        (setq vc-dir-process-buffer
+              (generate-new-buffer (format " *VC-%s* tmp status" backend))))
+      ;; set the needs-update flag on all entries
+      (ewoc-map (lambda (info) (setf (vc-dir-fileinfo->needs-update info) t) nil)
+                vc-ewoc)
+      (lexical-let ((buffer (current-buffer)))
+        (with-current-buffer vc-dir-process-buffer
+          (cd def-dir)
+          (erase-buffer)
+          (vc-call-backend
+           backend 'dir-status def-dir
+           (lambda (entries &optional more-to-come)
+             ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items.
+             ;; If MORE-TO-COME is true, then more updates will come from
+             ;; the asynchronous process.
+             (with-current-buffer buffer
+               (vc-dir-update entries buffer)
+               (unless more-to-come
+                 (let ((remaining
+                        (ewoc-collect
+                         vc-ewoc 'vc-dir-fileinfo->needs-update)))
+                   (if remaining
+                       (vc-dir-refresh-files
+                        (mapcar 'vc-dir-fileinfo->name remaining)
+                        'up-to-date)
+                     (setq mode-line-process nil))))))))))))
+
+(defun vc-dir-show-fileentry (file)
+  "Insert an entry for a specific file into the current *VC-dir* listing.
+This is typically used if the file is up-to-date (or has been added
+outside of VC) and one wants to do some operation on it."
+  (interactive "fShow file: ")
+  (vc-dir-update (list (list (file-relative-name file) (vc-state file))) (current-buffer)))
+
+(defun vc-dir-hide-up-to-date ()
+  "Hide up-to-date items from display."
+  (interactive)
+  (let ((crt (ewoc-nth vc-ewoc -1))
+       (first (ewoc-nth vc-ewoc 0)))
+    ;; Go over from the last item to the first and remove the
+    ;; up-to-date files and directories with no child files.
+    (while (not (eq crt first))
+      (let* ((data (ewoc-data crt))
+            (dir (vc-dir-fileinfo->directory data))
+            (next (ewoc-next vc-ewoc crt))
+            (prev (ewoc-prev vc-ewoc crt))
+            ;; ewoc-delete does not work without this...
+            (inhibit-read-only t))
+         (when (or
+                ;; Remove directories with no child files.
+                (and dir
+                     (or
+                      ;; Nothing follows this directory.
+                      (not next)
+                      ;; Next item is a directory.
+                      (vc-dir-fileinfo->directory (ewoc-data next))))
+                ;; Remove files in the up-to-date state.
+                (eq (vc-dir-fileinfo->state data) 'up-to-date))
+           (ewoc-delete vc-ewoc crt))
+         (setq crt prev)))))
+
+(defun vc-dir-status-printer (fileentry)
+  (vc-call-backend vc-dir-backend 'status-printer fileentry))
+
+(defun vc-dir-deduce-fileset (&optional state-model-only-files)
+  (let ((marked (vc-dir-marked-files))
+       files
+       only-files-list
+       state
+       model)
+    (if marked
+       (progn
+         (setq files marked)
+         (when state-model-only-files
+           (setq only-files-list (vc-dir-marked-only-files-and-states))))
+      (let ((crt (vc-dir-current-file)))
+       (setq files (list crt))
+       (when state-model-only-files
+         (setq only-files-list (vc-dir-child-files-and-states)))))
+
+    (when state-model-only-files
+      (setq state (cdar only-files-list))
+      ;; Check that all files are in a consistent state, since we use that
+      ;; state to decide which operation to perform.
+      (dolist (crt (cdr only-files-list))
+       (unless (vc-compatible-state (cdr crt) state)
+         (error "%s:%s clashes with %s:%s"
+                (car crt) (cdr crt) (caar only-files-list) state)))
+      (setq only-files-list (mapcar 'car only-files-list))
+      (when (and state (not (eq state 'unregistered)))
+       (setq model (vc-checkout-model vc-dir-backend only-files-list))))
+    (list vc-dir-backend files only-files-list state model)))
+
+;;;###autoload
+(defun vc-dir (dir &optional backend)
+  "Show the VC status for DIR.
+Optional second argument BACKEND specifies the VC backend to use.
+Interactively, a prefix argument means to ask for the backend."
+  (interactive
+   (list
+    (read-file-name "VC status for directory: "
+                   default-directory default-directory t
+                   nil #'file-directory-p)
+    (if current-prefix-arg
+       (intern
+        (completing-read
+         "Use VC backend: "
+         (mapcar (lambda (b) (list (symbol-name b)))
+                 vc-handled-backends)
+         nil t nil nil)))))
+  (unless backend
+    (setq backend (vc-responsible-backend dir)))
+  (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend))
+  (if (derived-mode-p 'vc-dir-mode)
+      (vc-dir-refresh)
+    ;; FIXME: find a better way to pass the backend to `vc-dir-mode'.
+    (let ((use-vc-backend backend))
+      (vc-dir-mode))))
+
+(defun vc-default-status-extra-headers (backend dir)
+  ;; Be loud by default to remind people to add code to display
+  ;; backend specific headers.
+  ;; XXX: change this to return nil before the release.
+  (concat
+   (propertize "Extra      : " 'face 'font-lock-type-face)
+   (propertize "Please add backend specific headers here.  It's easy!"
+              'face 'font-lock-warning-face)))
+
+(defun vc-default-status-printer (backend fileentry)
+  "Pretty print FILEENTRY."
+  ;; If you change the layout here, change vc-dir-move-to-goal-column.
+  (let* ((isdir (vc-dir-fileinfo->directory fileentry))
+       (state (if isdir "" (vc-dir-fileinfo->state fileentry)))
+       (filename (vc-dir-fileinfo->name fileentry)))
+    (insert
+     (propertize
+      (format "%c" (if (vc-dir-fileinfo->marked fileentry) ?* ? ))
+      'face 'font-lock-type-face)
+     "   "
+     (propertize
+      (format "%-20s" state)
+      'face (cond ((eq state 'up-to-date) 'font-lock-builtin-face)
+                 ((memq state '(missing conflict)) 'font-lock-warning-face)
+                 (t 'font-lock-variable-name-face))
+      'mouse-face 'highlight)
+     " "
+     (propertize
+      (format "%s" filename)
+      'face
+      (if isdir 'font-lock-comment-delimiter-face 'font-lock-function-name-face)
+      'help-echo
+      (if isdir
+         "Directory\nVC operations can be applied to it\nmouse-3: Pop-up menu"
+       "File\nmouse-3: Pop-up menu")
+      'mouse-face 'highlight))))
+
+(defun vc-default-extra-status-menu (backend)
+  nil)
+
+(defun vc-default-status-fileinfo-extra (backend file)
+  "Default absence of extra information returned for a file."
+  nil)
+
+(provide 'vc-dir)
+
+;; arch-tag: 0274a2e3-e8e9-4b1a-a73c-e8b9129d5d15
+;;; vc-dir.el ends here
index 53bda3d..7e41f97 100644 (file)
@@ -12781,7 +12781,7 @@ Displayed when the signature has been hidden in the Article buffer.
 Displayed when Gnus has treated overstrike characters in the article buffer.
 
 @item e
 Displayed when Gnus has treated overstrike characters in the article buffer.
 
 @item e
-Displayed when Gnus has treated emphasised strings in the article buffer.
+Displayed when Gnus has treated emphasized strings in the article buffer.
 
 @end table
 
 
 @end table
 
index 3ba64d2..9874bb7 100644 (file)
@@ -124,9 +124,9 @@ A list of mechanism names.
 
 @defun sasl-find-mechanism mechanisms
 
 
 @defun sasl-find-mechanism mechanisms
 
-Retrieve an apropriate mechanism.
+Retrieve an appropriate mechanism.
 This function compares @var{mechanisms} and @code{sasl-mechanisms} then
 This function compares @var{mechanisms} and @code{sasl-mechanisms} then
-returns apropriate @code{sasl-mechanism} object.
+returns appropriate @code{sasl-mechanism} object.
 
 @example
 (let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
 
 @example
 (let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))