changeset 90488:4094c5298ae1

Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 314-319) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 107) - Update from CVS Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-78
author Miles Bader <miles@gnu.org>
date Tue, 20 Jun 2006 07:35:06 +0000
parents ef80dfaa8269 (current diff) d4401f19d62b (diff)
children 78a820ef12db
files etc/ChangeLog etc/TODO lisp/ChangeLog lisp/bindings.el lisp/cus-edit.el lisp/ediff-diff.el lisp/ediff-mult.el lisp/ediff-vers.el lisp/ediff-wind.el lisp/ediff.el lisp/emulation/viper-cmd.el lisp/emulation/viper-util.el lisp/emulation/viper.el lisp/files.el lisp/gnus/ChangeLog lisp/gnus/message.el lisp/international/characters.el lisp/mouse.el lisp/textmodes/org.el lisp/textmodes/tex-mode.el lispref/ChangeLog lispref/processes.texi man/ChangeLog man/ediff.texi man/faq.texi man/info.texi man/message.texi src/ChangeLog src/syntax.c src/window.c
diffstat 32 files changed, 1370 insertions(+), 748 deletions(-) [+]
line wrap: on
line diff
--- a/etc/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/etc/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,9 @@
+2006-06-19  Carsten Dominik  <dominik@science.uva.nl>
+
+	* orgcard.tex (section{Clocking Time}): Add new clocking
+	commands.
+	(section{Structure Editing}): Add global archiving command.
+
 2006-06-14  Thien-Thi Nguyen  <ttn@gnu.org>
 
 	* yow.lines: Delete existing data; add a new entry.
--- a/etc/TODO	Tue Jun 20 01:17:33 2006 +0000
+++ b/etc/TODO	Tue Jun 20 07:35:06 2006 +0000
@@ -305,6 +305,8 @@
 
 ** Check what hooks would help Emacspeak -- see the defadvising in W3.
 
+** Add definitions for symbol properties, for documentation purposes.
+
 ** Add horizontal scroll bars.
 
 ** Provide an optional feature which computes a scroll bar slider's
--- a/etc/orgcard.tex	Tue Jun 20 01:17:33 2006 +0000
+++ b/etc/orgcard.tex	Tue Jun 20 07:35:06 2006 +0000
@@ -1,5 +1,5 @@
 % Reference Card for Org Mode
-\def\orgversionnumber{4.37}
+\def\orgversionnumber{4.38}
 \def\year{2006}
 %
 %**start of header
@@ -288,10 +288,8 @@
 
 \section{Motion}
 
-\key{next heading}{C-c C-n}
-\key{previous heading}{C-c C-p}
-\key{next heading, same level}{C-c C-f}
-\key{previous heading, same level}{C-c C-b}
+\key{next/previous heading}{C-c C-n/p}
+\key{next/previous heading, same level}{C-c C-f/b}
 \key{backward to higher level heading}{C-c C-u}
 \key{jump to another place in document}{C-c C-j}
 \key{previous/next plain list item}{S-UP/DOWN$^3$}
@@ -306,13 +304,14 @@
 \key{promote current subtree up one level}{M-S-LEFT}
 \key{demote current subtree down one level}{M-S-RIGHT}
 
-\key{move subtree/list item up}{M-S-UP}
-\key{move subtree/list item down}{M-S-DOWN}
+\key{move subtree/list item up/down}{M-S-UP/DOWN}
 \key{kill subtree}{C-c C-x C-w}
 \key{copy subtree}{C-c C-x M-w}
 \key{yank subtree}{C-c C-x C-y}
+\key{narrow buffer to current subtree}{C-x n s}
 
 \key{archive subtree}{C-c \$}
+\key{archive all fully done children}{C-u C-c \$}
 To set archive location for current file, add a line like$^2$:
 \vskip -1mm
 \beginexample%
@@ -329,18 +328,13 @@
 %\key{agenda for the week}{C-c a$^1$}
 %\key{agenda for date at cursor}{C-c C-o}
 
-\section{Tags}
+\section{Dynamic Blocks}
 
-\key{set tags for current heading}{C-c C-c}
-\key{realign tags in all headings}{C-u C-c C-c}
-\key{create sparse tree with matching tags}{C-c \\}
-\key{globally (agenda) match tags at cursor}{C-c C-o}
+\key{update dynamic block at point}{C-c C-x C-u}
+\metax{update all dynamic blocks}{C-u C-c C-x C-u}
 
 \section{Tables}
 
-%Org-mode has its own built-in intuitive table editor with unique
-%capabilities.
-
 {\bf Creating a table}
 
 %\metax{insert a new Org-mode table}{M-x org-table-create}
@@ -466,6 +460,39 @@
 %\key{\kbd{vm://myself@some.where.org/folder\#id}}{\rm VM remote}
 
 
+\section{Remember-mode Integration}
+
+See the manual for how to make remember.el use Org-mode links and
+files.  The note-finishing command \kbd{C-c C-c} will first prompt for
+an org file. In the file, find a location with:
+
+\key{rotate subtree visibility}{TAB}
+\key{next heading}{DOWN}
+\key{previous heading}{UP}
+
+Insert the note with one of the following: 
+
+\key{as sublevel of heading at cursor}{RET}
+\key{right here (cursor not on heading)}{RET}
+\key{before current heading}{LEFT}
+\key{after current heading}{RIGHT}
+\key{shortcut to end of buffer (cursor at buf-start)}{RET}
+\key{Abort}{q}
+
+\section{Completion}
+
+In-buffer completion completes TODO keywords at headline start, TeX
+macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', TAGS
+after  ``{\tt :}'', and dictionary words elsewhere.
+
+\key{Complete word at point}{M-TAB}
+
+
+\newcolumn
+\title{Org-Mode Reference Card (2/2)}
+
+\centerline{(for version \orgversionnumber)}
+
 \section{TODO Items}
 
 \key{rotate the state of the current item}{C-c C-t}
@@ -480,6 +507,13 @@
 \key{\kbd{\#+SEQ_TODO: TODO TRY BLUFF DONE}}{\rm todo workflow}
 \key{\kbd{\#+TYP_TODO: Phil home work DONE}}{\rm todo types}
 
+\section{Tags}
+
+\key{set tags for current heading}{C-c C-c}
+\key{realign tags in all headings}{C-u C-c C-c}
+\key{create sparse tree with matching tags}{C-c \\}
+\key{globally (agenda) match tags at cursor}{C-c C-o}
+
 \section{Timestamps}
 
 \key{prompt for date and insert timestamp}{C-c .}
@@ -502,18 +536,15 @@
 %\key{... forward/backward one month}{M-S-LEFT/RIGT}
 
 
-\newcolumn
-\title{Org-Mode Reference Card (2/2)}
-
-\centerline{(for version \orgversionnumber)}
-
 \section{Clocking Time}
 
 \key{start clock on current item}{C-c C-x C-i}
 \key{stop clock on current item}{C-c C-x C-o}
 \key{cancel current clock}{C-c C-x C-x}
+
 \key{display total subtree times}{C-c C-x C-d}
 \key{remove displayed times}{C-c C-c}
+\key{insert/update table with clock report}{C-c C-x C-r}
 
 \section{Agenda Views}
 
@@ -577,7 +608,6 @@
 \key{Stop the clock (clock-out)}{O}
 \key{Cancel current clock}{X}
 
-\newcolumn
 
 {\bf Calendar commands}
 
@@ -593,6 +623,13 @@
 \key{quit agenda, remove agenda buffer}{q}
 \key{exit agenda, remove all agenda buffers}{x}
 
+\section{Calendar and Diary Integration}
+
+To include entries from the Emacs diary in your Org-mode agenda:
+\beginexample%
+(setq org-agenda-include-diary t)
+\endexample
+
 \section{Exporting and Publishing}
 
 Exporting creates files with extensions {\it .txt\/} and {\it .html\/}
@@ -629,18 +666,19 @@
 \key{language code for html}{\#+LANGUAGE:}
 \key{free text description of file}{\#+TEXT:}
 \key{... which can carry over multiple lines}{\#+TEXT:}
-\key{settings for the export process - see below}{\#+OPTIONS:}
+%\key{settings for the export process - see below}{\#+OPTIONS:}
+\key{settings for the export process}{\#+OPTIONS:}
 
-\key{set number of headline levels for export}{H:2}
-\key{turn on/off section numbers}{num:t}
-\key{turn on/off table of contents}{toc:t}
-\key{turn on/off linebreak preservation}{\\n:nil}
-\key{turn on/off quoted html tags}{@:t}
-\key{turn on/off fixed width sections}{::t}
-\key{turn on/off tables}{|:t}
-\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t}
-\key{turn on/off emphasised text}{*:nil}
-\key{turn on/off \TeX\ macros}{TeX:t}
+%\key{set number of headline levels for export}{H:2}
+%\key{turn on/off section numbers}{num:t}
+%\key{turn on/off table of contents}{toc:t}
+%\key{turn on/off linebreak preservation}{\\n:nil}
+%\key{turn on/off quoted html tags}{@:t}
+%\key{turn on/off fixed width sections}{::t}
+%\key{turn on/off tables}{|:t}
+%\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t}
+%\key{turn on/off emphasised text}{*:nil}
+%\key{turn on/off \TeX\ macros}{TeX:t}
 
 {\bf Comments: Text not being exported}
 
@@ -651,53 +689,20 @@
 
 \key{toggle COMMENT keyword on entry}{C-c ;}
 
-\section{Completion}
 
-In-buffer completion completes TODO keywords at headline start, TeX
-macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', TAGS
-after  ``{\tt :}'', and dictionary words elsewhere.
-
-\key{Complete word at point}{M-TAB}
-
-\section{Calendar and Diary Integration}
-
-To include entries from the Emacs diary in your Org-mode agenda:
-\beginexample%
-(setq org-agenda-include-diary t)
-\endexample
-
-\section{Remember-mode Integration}
-
-See the manual for how to make remember.el use Org-mode links and
-files.  The note-finishing command \kbd{C-c C-c} will first prompt for
-an org file. In the file, find a location with:
+%\section{CUA and pc-select compatibility}%
 
-\key{rotate subtree visibility}{TAB}
-\key{next heading}{DOWN}
-\key{previous heading}{UP}
-
-Insert the note with one of the following: 
-
-\key{as sublevel of heading at cursor}{RET}
-\key{right here (cursor not on heading)}{RET}
-\key{before current heading}{LEFT}
-\key{after current heading}{RIGHT}
-\key{shortcut to end of buffer (cursor at buf-start)}{RET}
-\key{Abort}{q}
-
-\section{CUA and pc-select compatibility}
-
-Configure the variable {\tt org-CUA-compatibility} to make Org-mode
-avoid the \kbd{S-<cursor>} bindings used by these modes.  When set,
-Org-mode will change the following keybindings (also in the agenda
-buffer, but not during date selection). See note mark four$^3$
-throughout the reference card.
-%\vskip-mm
-\beginexample
-S-UP    $\to$ M-p             S-DOWN  $\to$ M-n
-S-LEFT  $\to$ M--             S-RIGHT $\to$ M-+
-S-RET   $\to$ C-S-RET
-\endexample
+%Configure the variable {\tt org-CUA-compatibility} to make Org-mode
+%avoid the \kbd{S-<cursor>} bindings used by these modes.  When set,
+%Org-mode will change the following keybindings (also in the agenda
+%buffer, but not during date selection). See note mark four$^3$
+%throughout the reference card.
+%%\vskip-mm
+%\beginexample
+%S-UP    $\to$ M-p             S-DOWN  $\to$ M-n
+%S-LEFT  $\to$ M--             S-RIGHT $\to$ M-+
+%S-RET   $\to$ C-S-RET
+%\endexample
 
 \section{Notes}
 $^1$ This is only a suggestion for a binding of this command.  Choose
--- a/lisp/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,98 @@
+2006-06-20  Kenichi Handa  <handa@m17n.org>
+
+	* international/characters.el (word-combining-categories): Add
+	entries for 2-byte Han characters.
+
+2006-06-19  Richard Stallman  <rms@gnu.org>
+
+	* bindings.el (mode-line-format): Save some mode line space.
+
+	* files.el (find-file-noselect): Improve the question wording.
+	(basic-save-buffer-2): Mask UMASK against 666.
+
+	* mouse.el (mouse-drag-vertical-line-rightward-window): New function.
+	(mouse-drag-vertical-line): Call it.
+
+	* cus-edit.el (customize-option, customize-option-other-window): 
+	Error if SYMBOL is nil.
+
+2006-06-19  Carsten Dominik  <dominik@science.uva.nl>
+
+	* textmodes/org.el: Require noutline, also on XEmacs.
+	(org-end-of-subtree): Return point.
+	(org-dblock-start-re, org-dblock-end-re): New constants.
+	(org-create-dblock, org-prepare-dblock, org-map-dblocks)
+	(org-dblock-update, org-update-dblock, org-beginning-of-dblock)
+	(org-update-all-dblocks, org-find-dblock): New functions.
+	(org-collect-clock-time-entries): New function.
+	(org-html-handle-time-stamps): Never export CLOCK timeranges.
+	(org-fixup-indentation): Modified to deadl correctly with lines
+	starting with TAB.  Only one argument DIFF now.
+	(org-demote, org-promote): Call `org-fixup-indentation' with just
+	one argument, DIFF.
+	(org-mode): Don't mark buffer as modified when aligning tables.
+	(org-clock-sum): Don't makr buffer modified when adding time sum
+	properties.
+	(org-export-as-html): Added support for a link validation
+	function.
+	(org-archive-all-done): New function.
+	(org-archive-subtree): New prefix argument.  When set, archive all
+	done subtrees in this buffer.
+	(org-remove-clock-overlays)
+	(org-remove-occur-highlights): Use
+	`org-inhibit-highlight-removal'.
+	(org-inhibit-highlight-removal): New variable, for dynamic
+	scoping.
+	(org-put-clock-overlay): Don't swallow last headline character
+	when displaying overlay.
+	(org-store-link): Link to `image-mode' with just the file name.
+	
+
+2006-06-18  Michael Kifer  <kifer@cs.stonybrook.edu>
+	
+	* viper-cmd.el (viper-special-read-and-insert-char): use
+	read-key-sequence.
+	(viper-after-change-undo-hook): enhancements.
+	(viper-after-change-undo-hook): new hook.
+	(viper-undo): use viper-after-change-undo-hook.
+	(viper-add-newline-at-eob-if-necessary): widen before making changes.
+	(viper-next-line-at-bol): If point is on a widget or a button, simulate
+	clicking on that widget/button.
+	
+	* viper.el (viper-mode): allow for a separate cursor color in Emacs
+	state.
+	
+	* ediff-diff (ediff-test-patch-utility): catch errors.
+	(ediff-actual-diff-options, ediff-actual-diff3-options): new variables.
+	(ediff-set-actual-diff-options): new function.
+	(ediff-reset-diff-options, ediff-toggle-ignore-case):
+	use ediff-set-actual-diff-options.
+	(ediff-extract-diffs): catch errors.
+	(ediff-whitespace): add nonbreakable space.
+	(ediff-same-file-contents): catch errors.
+	
+	* ediff-mult.el (ediff-collect-custom-diffs): save
+	coding-system-for-read.
+	
+	* ediff-vers.el (ediff-keep-tmp-versions): new var.
+	(ediff-vc-internal, ediff-vc-merge-internal): use
+	ediff-delete-version-file.
+	(ediff-delete-version-file): new function.
+	
+	* ediff-wind.el (ediff-control-frame-parameters): set frame fringes.
+	
+	* ediff.el (ediff-directories, ediff-directory-revisions,
+	ediff-merge-directories, ediff-merge-directories-with-ancestor,
+	ediff-directories-internal, ediff-merge-directory-revisions,
+	ediff-merge-directory-revisions-with-ancestor,
+	ediff-directories3): use read-directory-name.
+	
+2006-06-18  Ralf Angeli  <angeli@caeruleus.net>
+
+	* textmodes/tex-mode.el (tex-font-lock-match-suscript): Remove
+	superfluous part of regexp for brace matching which is handled by
+	`scan-lists' call.
+
 2006-06-16  Richard Stallman  <rms@gnu.org>
 
 	* obsolete/options.el (list-options): Put "obsolete" msg in buffer.
--- a/lisp/bindings.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/bindings.el	Tue Jun 20 07:35:06 2006 +0000
@@ -299,8 +299,7 @@
      'mode-line-buffer-identification
      (propertize "   " 'help-echo help-echo)
      'mode-line-position
-     '(vc-mode vc-mode)
-     (propertize "   " 'help-echo help-echo)
+     `(vc-mode ("" vc-mode ,(propertize "   " 'help-echo help-echo)))
      'mode-line-modes
      `(which-func-mode ("" which-func-format ,dashes))
      `(global-mode-string (,dashes global-mode-string))
--- a/lisp/cus-edit.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/cus-edit.el	Tue Jun 20 07:35:06 2006 +0000
@@ -1055,6 +1055,8 @@
 (defun customize-option (symbol)
   "Customize SYMBOL, which must be a user option variable."
   (interactive (custom-variable-prompt))
+  (unless symbol
+    (error "No variable specified"))
   (let ((basevar (indirect-variable symbol)))
     (custom-buffer-create (list (list basevar 'custom-variable))
 			  (format "*Customize Option: %s*"
@@ -1070,6 +1072,8 @@
   "Customize SYMBOL, which must be a user option variable.
 Show the buffer in another window, but don't select it."
   (interactive (custom-variable-prompt))
+  (unless symbol
+    (error "No variable specified"))
   (let ((basevar (indirect-variable symbol)))
     (custom-buffer-create-other-window
      (list (list basevar 'custom-variable))
--- a/lisp/ediff-diff.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ediff-diff.el	Tue Jun 20 07:35:06 2006 +0000
@@ -65,10 +65,11 @@
 ;; The following functions needed for setting diff/diff3 options
 ;; test if diff supports the --binary option
 (defsubst ediff-test-utility (diff-util option &optional files)
-  (condition-case ()
+  (condition-case nil
       (eq 0 (apply 'call-process
 		   (append (list diff-util nil nil nil option) files)))
-    (file-error nil)))
+    (error (format "Cannot execute program %S." diff-util)))
+  )
 
 (defun ediff-diff-mandatory-option (diff-util)
   (let ((file (if (boundp 'null-device) null-device "/dev/null")))
@@ -77,13 +78,17 @@
 	   ((and (string= diff-util ediff-diff-program)
 		 (ediff-test-utility
 		  ediff-diff-program "--binary" (list file file)))
-	    "--binary")
+	    "--binary ")
 	   ((and (string= diff-util ediff-diff3-program)
 		 (ediff-test-utility
 		  ediff-diff3-program "--binary" (list file file file)))
-	    "--binary")
+	    "--binary ")
 	   (t ""))))
 
+
+;; must be before ediff-reset-diff-options to avoid compiler errors
+(fset 'ediff-set-actual-diff-options '(lambda () nil))
+
 ;; make sure that mandatory options are added even if the user changes
 ;; ediff-diff-options or ediff-diff3-options in the customization widget
 (defun ediff-reset-diff-options (symb val)
@@ -91,12 +96,9 @@
 	  (if (eq symb 'ediff-diff-options)
 	      ediff-diff-program
 	    ediff-diff3-program))
-	 (mandatory-option (ediff-diff-mandatory-option diff-program))
-	 (spacer (if (string-equal mandatory-option "") "" " ")))
-    (set symb
-	 (if (string-match mandatory-option val)
-	     val
-	   (concat mandatory-option spacer val)))
+	 (mandatory-option (ediff-diff-mandatory-option diff-program)))
+    (set symb (concat mandatory-option val))
+    (ediff-set-actual-diff-options)
     ))
 
 
@@ -155,7 +157,7 @@
   :group 'ediff-diff)
 
 ;; the actual options used in comparison
-(ediff-defvar-local ediff-actual-diff-options "" "")
+(ediff-defvar-local ediff-actual-diff-options ediff-diff-options "")
 
 (defcustom ediff-custom-diff-program ediff-diff-program
   "*Program to use for generating custom diff output for saving it in a file.
@@ -178,7 +180,7 @@
   :group 'ediff-diff)
 
 ;; the actual options used in comparison
-(ediff-defvar-local ediff-actual-diff3-options "" "")
+(ediff-defvar-local ediff-actual-diff3-options ediff-diff3-options "")
 
 (defcustom ediff-diff3-ok-lines-regexp
   "^\\([1-3]:\\|====\\|  \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)"
@@ -1272,7 +1274,9 @@
 		;; Similarly for Windows-*
 		;; In DOS, must synchronize because DOS doesn't have
 		;; asynchronous processes.
-		(apply 'call-process program nil buffer nil args)
+		(condition-case nil
+		    (apply 'call-process program nil buffer nil args)
+		  (error (format "Cannot execute program %S." program)))
 	      ;; On other systems, do it asynchronously.
 	      (setq proc (get-buffer-process buffer))
 	      (if proc (kill-process proc))
@@ -1328,7 +1332,8 @@
 Used for splitting difference regions into individual words.")
 (make-variable-buffer-local 'ediff-forward-word-function)
 
-(defvar ediff-whitespace " \n\t\f"
+;; \240 is unicode symbol for nonbreakable whitespace
+(defvar ediff-whitespace " \n\t\f\r\240"
   "*Characters constituting white space.
 These characters are ignored when differing regions are split into words.")
 (make-variable-buffer-local 'ediff-whitespace)
@@ -1442,11 +1447,13 @@
   "Return t if files F1 and F2 have identical contents."
   (if (and (not (file-directory-p f1))
            (not (file-directory-p f2)))
-      (let ((res
-	     (apply 'call-process ediff-cmp-program nil nil nil
-		    (append ediff-cmp-options (list f1 f2)))))
-	(and (numberp res) (eq res 0))))
-  )
+      (condition-case nil
+	  (let ((res
+		 (apply 'call-process ediff-cmp-program nil nil nil
+			(append ediff-cmp-options (list f1 f2)))))
+	    (and (numberp res) (eq res 0)))
+	(error (format "Cannot execute program %S." ediff-cmp-program)))
+    ))
 
 
 (defun ediff-same-contents (d1 d2 &optional filter-re)
@@ -1521,21 +1528,30 @@
       (setq file-list-list (cdr file-list-list)))
     (reverse result)))
 
+
+(defun ediff-set-actual-diff-options ()
+  (if ediff-ignore-case
+      (setq ediff-actual-diff-options 
+	    (concat ediff-diff-options " " ediff-ignore-case-option)
+	    ediff-actual-diff3-options
+	    (concat ediff-diff3-options " " ediff-ignore-case-option3))
+    (setq ediff-actual-diff-options ediff-diff-options
+	  ediff-actual-diff3-options ediff-diff3-options)
+    )
+  (setq-default ediff-actual-diff-options ediff-actual-diff-options
+		ediff-actual-diff3-options ediff-actual-diff3-options)
+  )
+
+
 ;; Ignore case handling - some ideas from drew.adams@@oracle.com
 (defun ediff-toggle-ignore-case ()
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (setq ediff-ignore-case (not ediff-ignore-case))
-  (cond (ediff-ignore-case
-	 (setq ediff-actual-diff-options
-	       (concat ediff-diff-options " " ediff-ignore-case-option)
-	       ediff-actual-diff3-options
-	       (concat ediff-diff3-options " " ediff-ignore-case-option3))
-	 (message "Ignoring regions that differ only in case"))
-	(t
-	 (setq ediff-actual-diff-options ediff-diff-options
-	       ediff-actual-diff3-options ediff-diff3-options)
-	 (message "Ignoring case differences turned OFF")))
+  (ediff-set-actual-diff-options)
+  (if ediff-ignore-case
+      (message "Ignoring regions that differ only in case")
+    (message "Ignoring case differences turned OFF"))
   (cond (ediff-merge-job
 	 (message "Ignoring letter case is too dangerous in merge jobs"))
 	((and ediff-diff3-job (string= ediff-ignore-case-option3 ""))
--- a/lisp/ediff-mult.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ediff-mult.el	Tue Jun 20 07:35:06 2006 +0000
@@ -1656,22 +1656,26 @@
 multifile patches.  For `ediff-directory-revisions', we insist that
 all marked sessions must be active."
   (interactive)
-  (or (ediff-buffer-live-p ediff-meta-diff-buffer)
-      (setq ediff-meta-diff-buffer
-	    (get-buffer-create
-	     (ediff-unique-buffer-name "*Ediff Multifile Diffs" "*"))))
-  (ediff-with-current-buffer ediff-meta-diff-buffer
-    (setq buffer-read-only nil)
-    (erase-buffer))
-  (if (> (ediff-operate-on-marked-sessions 'ediff-append-custom-diff) 0)
-      ;; did something
-      (progn
-	(display-buffer ediff-meta-diff-buffer 'not-this-window)
-	(ediff-with-current-buffer ediff-meta-diff-buffer
-	  (set-buffer-modified-p nil)
-	  (setq buffer-read-only t)))
-    (beep)
-    (message "No marked sessions found")))
+  (let ((coding-system-for-read ediff-coding-system-for-read))
+    (or (ediff-buffer-live-p ediff-meta-diff-buffer)
+	(setq ediff-meta-diff-buffer
+	      (get-buffer-create
+	       (ediff-unique-buffer-name "*Ediff Multifile Diffs" "*"))))
+    (ediff-with-current-buffer ediff-meta-diff-buffer
+			       (setq buffer-read-only nil)
+			       (erase-buffer))
+    (if (> (ediff-operate-on-marked-sessions 'ediff-append-custom-diff) 0)
+	;; did something
+	(progn
+	  (display-buffer ediff-meta-diff-buffer 'not-this-window)
+	  (ediff-with-current-buffer ediff-meta-diff-buffer
+				     (set-buffer-modified-p nil)
+				     (setq buffer-read-only t))
+	  (if (fboundp 'diff-mode)
+	      (with-current-buffer ediff-meta-diff-buffer
+		(diff-mode))))
+      (beep)
+      (message "No marked sessions found"))))
 
 (defun ediff-meta-show-patch ()
   "Show the multi-file patch associated with this group session."
--- a/lisp/ediff-vers.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ediff-vers.el	Tue Jun 20 07:35:06 2006 +0000
@@ -52,6 +52,13 @@
 	 )))
 ;; end pacifier
 
+(defcustom ediff-keep-tmp-versions nil
+  "*If t, do not delete temporary previous versions for the files on which
+comparison or merge operations are being performed."
+  :type 'boolean
+  :group 'ediff-vers
+  )
+
 ;; VC.el support
 
 (defun ediff-vc-latest-version (file)
@@ -87,8 +94,8 @@
 	      file2 (buffer-file-name)))
       (setq startup-hooks
 	    (cons `(lambda ()
-		     (delete-file ,file1)
-		     (or ,(string= rev2 "") (delete-file ,file2)))
+		     (ediff-delete-version-file ,file1)
+		     (or ,(string= rev2 "") (ediff-delete-version-file ,file2)))
 		  startup-hooks)))
     (ediff-buffers
      rev1buf rev2buf
@@ -199,12 +206,12 @@
       (setq startup-hooks
 	    (cons
 	     `(lambda ()
-		(delete-file ,(buffer-file-name buf1))
+		(ediff-delete-version-file ,(buffer-file-name buf1))
 		(or ,(string= rev2 "")
-		    (delete-file ,(buffer-file-name buf2)))
+		    (ediff-delete-version-file ,(buffer-file-name buf2)))
 		(or ,(string= ancestor-rev "")
 		    ,(not ancestor-rev)
-		    (delete-file ,(buffer-file-name ancestor-buf)))
+		    (ediff-delete-version-file ,(buffer-file-name ancestor-buf)))
 		)
 	     startup-hooks)))
     (if ancestor-rev
@@ -305,8 +312,13 @@
 	      (find-file-noselect (cvs-fileinfo->full-name fileinfo)))
 	    nil ; startup-hooks
 	    'ediff-revisions)))
-    (if (stringp tmp-file) (delete-file tmp-file))
-    (if (stringp ancestor-file) (delete-file ancestor-file))))
+    (if (stringp tmp-file) (ediff-delete-version-file tmp-file))
+    (if (stringp ancestor-file) (ediff-delete-version-file ancestor-file))))
+
+
+;; delete version file on exit unless ediff-keep-tmp-versions is true
+(defun ediff-delete-version-file (file)
+  (or ediff-keep-tmp-versions (delete-file file)))
 
 
 (provide 'ediff-vers)
--- a/lisp/ediff-wind.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ediff-wind.el	Tue Jun 20 07:35:06 2006 +0000
@@ -158,6 +158,8 @@
    '(scrollbar-height . 0)        ; XEmacs only
    '(menu-bar-lines . 0)          ; Emacs only
    '(tool-bar-lines . 0)          ; Emacs 21+ only
+   '(left-fringe    . 0)
+   '(right-fringe   . 0)
    ;; don't lower but auto-raise
    '(auto-lower . nil)
    '(auto-raise . t)
--- a/lisp/ediff.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/ediff.el	Tue Jun 20 07:35:06 2006 +0000
@@ -500,12 +500,13 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 f)
-     (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil))
-	   (ediff-read-file-name "Directory B to compare:"
-				 (if ediff-use-last-dir
-				     ediff-last-dir-B
-				   (ediff-strip-last-dir f))
-				 nil)
+     (list (setq f (read-directory-name
+		    "Directory A to compare:" dir-A nil 'must-match))
+	   (read-directory-name "Directory B to compare:"
+			   (if ediff-use-last-dir
+			       ediff-last-dir-B
+			     (ediff-strip-last-dir f))
+			   nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -532,8 +533,8 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 )
-     (list (ediff-read-file-name
-	    "Directory to compare with revision:" dir-A nil)
+     (list (read-directory-name
+	    "Directory to compare with revision:" dir-A nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -561,17 +562,17 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 f)
-     (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil))
-	   (setq f (ediff-read-file-name "Directory B to compare:"
-					 (if ediff-use-last-dir
-					     ediff-last-dir-B
-					   (ediff-strip-last-dir f))
-					 nil))
-	   (ediff-read-file-name "Directory C to compare:"
-				 (if ediff-use-last-dir
-				     ediff-last-dir-C
-				   (ediff-strip-last-dir f))
-				 nil)
+     (list (setq f (read-directory-name "Directory A to compare:" dir-A nil))
+	   (setq f (read-directory-name "Directory B to compare:"
+				   (if ediff-use-last-dir
+				       ediff-last-dir-B
+				     (ediff-strip-last-dir f))
+				   nil 'must-match))
+	   (read-directory-name "Directory C to compare:"
+			   (if ediff-use-last-dir
+			       ediff-last-dir-C
+			     (ediff-strip-last-dir f))
+			   nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -597,12 +598,13 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 f)
-     (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil))
-	   (ediff-read-file-name "Directory B to merge:"
-				 (if ediff-use-last-dir
-				     ediff-last-dir-B
-				   (ediff-strip-last-dir f))
-				 nil)
+     (list (setq f (read-directory-name "Directory A to merge:"
+					dir-A nil 'must-match))
+	   (read-directory-name "Directory B to merge:"
+			   (if ediff-use-last-dir
+			       ediff-last-dir-B
+			     (ediff-strip-last-dir f))
+			   nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -633,17 +635,17 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 f)
-     (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil))
-	   (setq f (ediff-read-file-name "Directory B to merge:"
+     (list (setq f (read-directory-name "Directory A to merge:" dir-A nil))
+	   (setq f (read-directory-name "Directory B to merge:"
 				 (if ediff-use-last-dir
 				     ediff-last-dir-B
 				   (ediff-strip-last-dir f))
-				 nil))
-	   (ediff-read-file-name "Ancestor directory:"
+				 nil 'must-match))
+	   (read-directory-name "Ancestor directory:"
 				 (if ediff-use-last-dir
 				     ediff-last-dir-C
 				   (ediff-strip-last-dir f))
-				 nil)
+				 nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -669,8 +671,8 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 )
-     (list (ediff-read-file-name
-	    "Directory to merge with revisions:" dir-A nil)
+     (list (read-directory-name
+	    "Directory to merge with revisions:" dir-A nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -699,8 +701,9 @@
    (let ((dir-A (ediff-get-default-directory-name))
 	 (default-regexp (eval ediff-default-filtering-regexp))
 	 )
-     (list (ediff-read-file-name
-	    "Directory to merge with revisions and ancestors:" dir-A nil)
+     (list (read-directory-name
+	    "Directory to merge with revisions and ancestors:"
+	    dir-A nil 'must-match)
 	   (read-string
 	    (if (stringp default-regexp)
 		(format "Filter through regular expression (default %s): "
@@ -733,11 +736,6 @@
 (defun ediff-directories-internal (dir1 dir2 dir3 regexp action jobname
 					&optional startup-hooks
 					merge-autostore-dir)
-  ;; ediff-read-file-name is set to attach a previously entered file name if
-  ;; the currently entered file is a directory.  This code takes care of that.
-  (setq dir1 (if (file-directory-p dir1) dir1 (file-name-directory dir1))
-	dir2 (if (file-directory-p dir2) dir2 (file-name-directory dir2)))
-
   (if (stringp dir3)
       (setq dir3 (if (file-directory-p dir3) dir3 (file-name-directory dir3))))
 
@@ -763,7 +761,7 @@
 	     (ediff-merge-metajob jobname)
 	     (not merge-autostore-dir))
 	(setq merge-autostore-dir
-	      (read-file-name "Save merged files in directory: "
+	      (read-directory-name "Save merged files in directory: "
 			      (if ediff-use-last-dir
 					ediff-last-merge-autostore-dir
 				      (ediff-strip-last-dir dir1))
@@ -823,7 +821,7 @@
 	     (ediff-merge-metajob jobname)
 	     (not merge-autostore-dir))
 	(setq merge-autostore-dir
-	      (read-file-name "Save merged files in directory: "
+	      (read-directory-name "Save merged files in directory: "
 			      (if ediff-use-last-dir
 				  ediff-last-merge-autostore-dir
 				(ediff-strip-last-dir dir1))
--- a/lisp/emulation/viper-cmd.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/emulation/viper-cmd.el	Tue Jun 20 07:35:06 2006 +0000
@@ -887,12 +887,15 @@
 		   (setq ch (aref (read-key-sequence nil) 0)))
 	       (insert ch))
 	      (t
-	       (setq ch (read-char-exclusive))
+	       ;;(setq ch (read-char-exclusive))
+	       (setq ch (aref (read-key-sequence nil) 0))
 	       ;; replace ^M with the newline
 	       (if (eq ch ?\C-m) (setq ch ?\n))
 	       ;; Make sure ^V and ^Q work as quotation chars
 	       (if (memq ch '(?\C-v ?\C-q))
-		   (setq ch (read-char-exclusive)))
+		   ;;(setq ch (read-char-exclusive))
+		   (setq ch (aref (read-key-sequence nil) 0))
+		 )
 	       (insert ch))
 	      )
 	(setq last-command-event
@@ -1730,20 +1733,34 @@
 
 ;; undoing
 
+;; hook used inside undo
+(defvar viper-undo-functions nil)
+
+;; Runs viper-before-change-functions inside before-change-functions
+(defun viper-undo-sentinel (beg end length)
+  (run-hook-with-args 'viper-undo-functions beg end length))
+
+(add-hook 'after-change-functions 'viper-undo-sentinel)
+
+;; Hook used in viper-undo
+(defun viper-after-change-undo-hook (beg end len)
+  (setq undo-beg-posn beg
+	undo-end-posn (or end beg))
+  ;; some other hooks may be changing various text properties in
+  ;; the buffer in response to 'undo'; so remove this hook to avoid
+  ;; its repeated invocation
+  (remove-hook 'viper-undo-functions 'viper-after-change-undo-hook 'local))
+
 (defun viper-undo ()
   "Undo previous change."
   (interactive)
   (message "undo!")
   (let ((modified (buffer-modified-p))
         (before-undo-pt (point-marker))
-	(after-change-functions after-change-functions)
 	undo-beg-posn undo-end-posn)
 
-    ;; no need to remove this hook, since this var has scope inside a let.
-    (add-hook 'after-change-functions
-	      '(lambda (beg end len)
-		 (setq undo-beg-posn beg
-		       undo-end-posn (or end beg))))
+    ;; the viper-after-change-undo-hook removes itself after the 1st invocation
+    (add-hook 'viper-undo-functions 'viper-after-change-undo-hook nil 'local)
 
     (undo-start)
     (undo-more 2)
@@ -1765,7 +1782,8 @@
 	    (goto-char undo-beg-posn)))
       (push-mark before-undo-pt t))
     (if (and (eolp) (not (bolp))) (backward-char 1))
-    (if (not modified) (set-buffer-modified-p t)))
+    ;;(if (not modified) (set-buffer-modified-p t))
+    )
   (setq this-command 'viper-undo))
 
 ;; Continue undoing previous changes.
@@ -1813,7 +1831,7 @@
 	    (setq viper-undo-needs-adjustment t)))))
 
 
-
+;;; Viper's destructive Command ring utilities
 
 (defun viper-display-current-destructive-command ()
   (let ((text (nth 4 viper-d-com))
@@ -1927,12 +1945,15 @@
       (end-of-line)
       ;; make sure all lines end with newline, unless in the minibuffer or
       ;; when requested otherwise (require-final-newline is nil)
-      (if (and (eobp)
-	       (not (bolp))
-	       require-final-newline
-	       (not (viper-is-in-minibuffer))
-	       (not buffer-read-only))
-	  (insert "\n"))))
+      (save-restriction
+	(widen)
+	(if (and (eobp)
+		 (not (bolp))
+		 require-final-newline
+		 (not (viper-is-in-minibuffer))
+		 (not buffer-read-only))
+	    (insert "\n")))
+      ))
 
 (defun viper-yank-defun ()
   (mark-defun)
@@ -3045,19 +3066,34 @@
     (setq this-command 'next-line)
     (if com (viper-execute-com 'viper-next-line val com))))
 
+
 (defun viper-next-line-at-bol (arg)
-  "Next line at beginning of line."
+  "Next line at beginning of line.
+If point is on a widget or a button, simulate clicking on that widget/button."
   (interactive "P")
-  (viper-leave-region-active)
-  (save-excursion
-    (end-of-line)
-    (if (eobp) (error "Last line in buffer")))
-  (let ((val (viper-p-val arg))
-	(com (viper-getCom arg)))
-    (if com (viper-move-marker-locally 'viper-com-point (point)))
-    (forward-line val)
-    (back-to-indentation)
-    (if com (viper-execute-com 'viper-next-line-at-bol val com))))
+  (let* ((field (get-char-property (point) 'field))
+	 (button (get-char-property (point) 'button))
+	 (doc (get-char-property (point) 'widget-doc))
+	 (widget (or field button doc)))
+    (if (and widget
+             (if (symbolp widget)
+                 (get widget 'widget-type)
+               (and (consp widget)
+                    (get (widget-type widget) 'widget-type))))
+        (widget-button-press (point))
+      (if (button-at (point))
+          (push-button)
+	;; not a widget or a button
+        (viper-leave-region-active)
+        (save-excursion
+          (end-of-line)
+          (if (eobp) (error "Last line in buffer")))
+        (let ((val (viper-p-val arg))
+              (com (viper-getCom arg)))
+          (if com (viper-move-marker-locally 'viper-com-point (point)))
+          (forward-line val)
+          (back-to-indentation)
+          (if com (viper-execute-com 'viper-next-line-at-bol val com)))))))
 
 
 (defun viper-previous-line (arg)
--- a/lisp/emulation/viper-util.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/emulation/viper-util.el	Tue Jun 20 07:35:06 2006 +0000
@@ -139,8 +139,8 @@
 
 (defsubst viper-get-cursor-color ()
   (viper-cond-compile-for-xemacs-or-emacs
-   ;; xemacs
-   (color-instance-name (frame-property (selected-frame) 'cursor-color))
+   (color-instance-name
+    (frame-property (selected-frame) 'cursor-color)) ; xemacs
    (cdr (assoc 'cursor-color (frame-parameters))) ; emacs
    ))
 
--- a/lisp/emulation/viper.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/emulation/viper.el	Tue Jun 20 07:35:06 2006 +0000
@@ -534,6 +534,10 @@
 (defun viper-mode ()
   "Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Viper'."
   (interactive)
+  (if (null viper-vi-state-cursor-color)
+      (modify-frame-parameters
+	(selected-frame)
+	(list (cons 'viper-vi-state-cursor-color (viper-get-cursor-color)))))
   (if (not noninteractive)
       (progn
 	;; if the user requested viper-mode explicitly
@@ -545,8 +549,6 @@
 	(if viper-first-time ; Important check.  Prevents mix-up of startup
 	    (progn	     ; and expert-level msgs when viper-mode recurses
 	      (setq viper-first-time nil)
-	      (setq viper-vi-state-cursor-color
-		    (viper-get-cursor-color))
 	      (if (not viper-inhibit-startup-message)
 		  (save-window-excursion
 		    (setq viper-inhibit-startup-message t)
--- a/lisp/files.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/files.el	Tue Jun 20 07:35:06 2006 +0000
@@ -1514,23 +1514,53 @@
 			   ;; hexl-mode.
 			   (not (eq major-mode 'hexl-mode)))
 		  (if (buffer-modified-p)
-		      (if (y-or-n-p (if rawfile
-					"Save file and revisit literally? "
-				      "Save file and revisit non-literally? "))
+		      (if (y-or-n-p
+			   (format 
+			    (if rawfile
+				"The file %s is already visited normally,
+and you have edited the buffer.  Now you have asked to visit it literally,
+meaning no coding system handling, format conversion, or local variables.
+Emacs can only visit a file in one way at a time.
+
+Do you want to save the file, and visit it literally instead? "
+				"The file %s is already visited literally,
+meaning no coding system handling, format conversion, or local variables.
+You have edited the buffer.  Now you have asked to visit the file normally,
+but Emacs can only visit a file in one way at a time.
+
+Do you want to save the file, and visit it normally instead? ")
+			    (file-name-nondirectory filename)))
 			  (progn
 			    (save-buffer)
 			    (find-file-noselect-1 buf filename nowarn
 						  rawfile truename number))
-			(if (y-or-n-p (if rawfile
-					  "Discard your edits and revisit file literally? "
-					"Discard your edits and revisit file non-literally? "))
+			(if (y-or-n-p
+			     (format 
+			      (if rawfile
+				  "\
+Do you want to discard your changes, and visit the file literally now? "
+				"\
+Do you want to discard your changes, and visit the file normally now? ")))
 			    (find-file-noselect-1 buf filename nowarn
 						  rawfile truename number)
 			  (error (if rawfile "File already visited non-literally"
 				   "File already visited literally"))))
-		    (if (y-or-n-p (if rawfile
-				      "Revisit file literally? "
-				    "Revisit file non-literally? "))
+		    (if (y-or-n-p 
+			 (format 
+			  (if rawfile
+			      "The file %s is already visited normally.
+You have asked to visit it literally,
+meaning no coding system decoding, format conversion, or local variables.
+But Emacs can only visit a file in one way at a time.
+
+Do you want to revisit the file literally now? "
+			    "The file %s is already visited literally,
+meaning no coding system decoding, format conversion, or local variables.
+You have asked to visit it normally,
+but Emacs can only visit a file in one way at a time.
+
+Do you want to revisit the file normally now? ")
+			  (file-name-nondirectory filename)))
 			(find-file-noselect-1 buf filename nowarn
 					      rawfile truename number)
 		      (error (if rawfile "File already visited non-literally"
@@ -3631,7 +3661,8 @@
 	    ;; Since we have created an entirely new file,
 	    ;; make sure it gets the right permission bits set.
 	    (setq setmodes (or setmodes
-			       (cons (or (file-modes buffer-file-name) umask)
+ 			       (cons (or (file-modes buffer-file-name)
+					 (logand ?\666 umask))
 				     buffer-file-name)))
 	    ;; We succeeded in writing the temp file,
 	    ;; so rename it.
--- a/lisp/gnus/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/gnus/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,7 @@
+2006-06-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* message.el (message-syntax-checks): Doc fix.
+
 2006-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-syntax-checks): Doc fix.
--- a/lisp/gnus/message.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/gnus/message.el	Tue Jun 20 07:35:06 2006 +0000
@@ -194,7 +194,7 @@
 `empty', `existing-newsgroups', `from', `illegible-text',
 `invisible-text', `long-header-lines', `long-lines', `message-id',
 `multiple-headers', `new-text', `newsgroups', `quoting-style',
-`repeated-newsgroups', `reply-to', `sendsys', `shoot',
+`repeated-newsgroups', `reply-to', `sender', `sendsys', `shoot',
 `shorten-followup-to', `signature', `size', `subject', `subject-cmsg'
 and `valid-newsgroups'."
   :group 'message-news
--- a/lisp/international/characters.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/international/characters.el	Tue Jun 20 07:35:06 2006 +0000
@@ -1078,7 +1078,10 @@
  char-script-table)
 
 (setq word-combining-categories
-      '((?l . ?l)))
+      '((?l . ?l)
+	(?C . ?C)
+	(?C . ?H)
+	(?C . ?K)))
 
 (setq word-separating-categories	;  (2-byte character sets)
       '((?A . ?K)			; Alpha numeric - Katakana
--- a/lisp/mouse.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/mouse.el	Tue Jun 20 07:35:06 2006 +0000
@@ -529,6 +529,24 @@
       (mouse-drag-mode-line-1 start-event nil))))
 
 
+(defun mouse-drag-vertical-line-rightward-window (window)
+  "Return a window that is immediately to the right of WINDOW, or nil."
+  (let ((bottom (nth 3 (window-inside-edges window)))
+	(left (nth 0 (window-inside-edges window)))
+	best best-right
+	(try (previous-window window)))
+    (while (not (eq try window))
+      (let ((try-top (nth 1 (window-inside-edges try)))
+	    (try-bottom (nth 3 (window-inside-edges try)))
+	    (try-right (nth 2 (window-inside-edges try))))
+	(if (and (< try-top bottom)
+		 (>= try-bottom bottom)
+		 (< try-right left)
+		 (or (null best-right) (> try-right best-right)))
+	    (setq best-right try-right best try)))
+      (setq try (previous-window try)))
+    best))
+
 (defun mouse-drag-vertical-line (start-event)
   "Change the width of a window by dragging on the vertical line."
   (interactive "e")
@@ -594,7 +612,8 @@
 			;; adjust the window on the left.
 			(if (eq which-side 'right)
 			    (selected-window)
-			  (previous-window))))
+			  (mouse-drag-vertical-line-rightward-window
+			   (selected-window)))))
 		   (setq x (- (car (cdr mouse))
 			      (if (eq which-side 'right) 0 2))
 			 edges (window-edges window)
--- a/lisp/textmodes/org.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/textmodes/org.el	Tue Jun 20 07:35:06 2006 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.36b
+;; Version: 4.38
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -90,6 +90,14 @@
 ;;
 ;; Recent changes
 ;; --------------
+;; Version 4.38
+;;    - noutline.el is now required (important for XEmacs users only).
+;;    - Dynamic blocks.
+;;    - Archiving of all level 1 trees without open TODO items.
+;;    - Clock reports can be inserted into the file in a special section.
+;;    - FAQ removed from the manual, now only on the web.
+;;    - Bug fixes.
+;;
 ;; Version 4.37
 ;;    - Clock-feature for measuring time spent on specific items.
 ;;    - Improved emphasizing allows configuration and stacking.
@@ -170,13 +178,18 @@
 (eval-when-compile
   (require 'cl)
   (require 'calendar))
-(require 'outline)
+;; For XEmacs, noutline is not yet provided by outline.el, so arrange for
+;; the file noutline.el being loaded.
+(if (featurep 'xemacs) (condition-case nil (require 'noutline)))
+;; We require noutline, which might be provided in outline.el
+(require 'outline) (require 'noutline)
+;; Other stuff we need.
 (require 'time-date)
 (require 'easymenu)
 
 ;;; Customization variables
 
-(defvar org-version "4.36b"
+(defvar org-version "4.38"
   "The version number of the file org.el.")
 (defun org-version ()
   (interactive)
@@ -2202,7 +2215,7 @@
              `org-emphasis-alist') will be allowed as pre/post, aiding
              inside-out matching.
 Use customize to modify this, or restart emacs after changing it."
-  :group 'org-fixme
+  :group 'org-font-lock
   :set 'org-set-emph-re
   :type '(list
 	  (sexp    :tag "Allowed chars in pre      ")
@@ -2216,19 +2229,23 @@
   '(("*" bold "<b>" "</b>")
     ("/" italic "<i>" "</i>")
     ("_" underline "<u>" "</u>")
-    ("=" shadow "<code>" "</code>"))
+    ("=" shadow "<code>" "</code>")
+    ("+" (:strike-through t) "<del>" "</del>")
+)
 "Special syntax for emphasised text.
 Text starting and ending with a special character will be emphasized, for
 example *bold*, _underlined_ and /italic/.  This variable sets the marker
 characters, the face to bbe used by font-lock for highlighting in Org-mode
 emacs buffers, and the HTML tags to be used for this.
 Use customize to modify this, or restart emacs after changing it."
-  :group 'org-fixme
+  :group 'org-font-lock
   :set 'org-set-emph-re
   :type '(repeat
 	  (list
 	   (string :tag "Marker character")
-	   (face :tag "Font-lock-face")
+	   (choice
+	    (face :tag "Font-lock-face")
+	    (plist :tag "Face property list"))
 	   (string :tag "HTML start tag")
 	   (string :tag "HTML end tag"))))
 
@@ -2708,6 +2725,7 @@
 (defvar gnus-group-name) ; from gnus
 (defvar gnus-article-current) ; from gnus
 (defvar w3m-current-url) ; from w3m
+(defvar w3m-current-title) ; from w3m
 (defvar mh-progs) ; from MH-E
 (defvar mh-current-folder) ; from MH-E
 (defvar mh-show-folder-buffer) ; from MH-E
@@ -2823,8 +2841,10 @@
       (insert "    -*- mode: org -*-\n\n"))
 
   (unless org-inhibit-startup
-    (if org-startup-align-all-tables
-	(org-table-map-tables 'org-table-align))
+    (when org-startup-align-all-tables
+      (let ((bmp (buffer-modified-p)))
+	(org-table-map-tables 'org-table-align)
+	(set-buffer-modified-p bmp)))
     (if org-startup-with-deadline-check
 	(call-interactively 'org-check-deadlines)
       (cond
@@ -3722,9 +3742,7 @@
     (replace-match up-head nil t)
     ;; Fixup tag positioning
     (and org-auto-align-tags (org-set-tags nil t))
-    (if org-adapt-indentation
-	(org-fixup-indentation (if (> diff 1) "^  " "^ ") ""
-			       (if (> diff 1) "^ ? ?\\S-" "^ ?\\S-")))))
+    (if org-adapt-indentation (org-fixup-indentation (- diff)))))
 
 (defun org-demote ()
   "Demote the current heading lower down the tree.
@@ -3737,8 +3755,7 @@
     (replace-match down-head nil t)
     ;; Fixup tag positioning
     (and org-auto-align-tags (org-set-tags nil t))
-    (if org-adapt-indentation
-	(org-fixup-indentation "^ " (if (> diff 1) "   " "  ") "^\\S-"))))
+    (if org-adapt-indentation (org-fixup-indentation diff))))
 
 (defun org-map-tree (fun)
   "Call FUN for every heading underneath the current one."
@@ -3767,20 +3784,23 @@
 		  (not (eobp)))
 	(funcall fun)))))
 
-;; FIXME: this does not work well with Tabulators.  This has to be re-written entirely.
-(defun org-fixup-indentation (from to prohibit)
-  "Change the indentation in the current entry by re-replacing FROM with TO.
-However, if the regexp PROHIBIT matches at all, don't do anything.
-This is being used to change indentation along with the length of the
-heading marker.  But if there are any lines which are not indented, nothing
-is changed at all."
+(defun org-fixup-indentation (diff)
+  "Change the indentation in the current entry by DIFF
+However, if any line in the current entry has no indentation, or if it
+would end up with no indentation after the change, nothing at all is done."
   (save-excursion
     (let ((end (save-excursion (outline-next-heading)
-			       (point-marker))))
+			       (point-marker)))
+	  (prohibit (if (> diff 0)
+			"^\\S-" 
+		      (concat "^ \\{0," (int-to-string (- diff)) "\\}\\S-")))
+	  col)
       (unless (save-excursion (re-search-forward prohibit end t))
-	(while (re-search-forward from end t)
-	  (replace-match to)
-	  (beginning-of-line 2)))
+	(while (re-search-forward "^[ \t]+" end t)
+	  (goto-char (match-end 0))
+	  (setq col (current-column))
+	  (if (< diff 0) (replace-match ""))
+	  (indent-to (+ diff col))))
       (move-marker end nil))))
 
 ;;; Vertical tree motion, cutting and pasting of subtrees
@@ -3984,6 +4004,14 @@
 	      (throw 'exit nil)))
 	t))))
 
+(defun org-narrow-to-subtree ()
+  "Narrow buffer to the current subtree."
+  (interactive)
+  (save-excursion
+    (narrow-to-region
+     (progn (org-back-to-heading) (point))
+     (progn (org-end-of-subtree t) (point)))))
+
 ;;; Plain list items
 
 (defun org-at-item-p ()
@@ -4292,103 +4320,259 @@
 
 ;;; Archiving
 
-(defun org-archive-subtree ()
+(defun org-archive-subtree (&optional find-done)
   "Move the current subtree to the archive.
 The archive can be a certain top-level heading in the current file, or in
 a different file.  The tree will be moved to that location, the subtree
-heading be marked DONE, and the current time will be added."
-  (interactive)
-  ;; Save all relevant TODO keyword-relatex variables
-  (let ((tr-org-todo-line-regexp org-todo-line-regexp) ; keep despite compiler
-	(tr-org-todo-keywords org-todo-keywords)
-	(tr-org-todo-interpretation org-todo-interpretation)
-	(tr-org-done-string org-done-string)
-	(tr-org-todo-regexp org-todo-regexp)
-	(tr-org-todo-line-regexp org-todo-line-regexp)
-	(this-buffer (current-buffer))
-	file heading buffer level newfile-p)
-    (if (string-match "\\(.*\\)::\\(.*\\)" org-archive-location)
+heading be marked DONE, and the current time will be added.
+
+When called with prefix argument FIND-DONE, find whole trees without any
+open TODO items and archive them (after getting confirmation from the user).
+If the cursor is not at a headline when this comand is called, try all level
+1 trees.  If the cursor is on a headline, only try the direct children of
+this heading. "
+  (interactive "P")
+  (if find-done
+      (org-archive-all-done)
+    ;; Save all relevant TODO keyword-relatex variables
+    
+    (let ((tr-org-todo-line-regexp org-todo-line-regexp) ; keep despite compiler
+	  (tr-org-todo-keywords org-todo-keywords)
+	  (tr-org-todo-interpretation org-todo-interpretation)
+	  (tr-org-done-string org-done-string)
+	  (tr-org-todo-regexp org-todo-regexp)
+	  (tr-org-todo-line-regexp org-todo-line-regexp)
+	  (this-buffer (current-buffer))
+	  file heading buffer level newfile-p)
+      (if (string-match "\\(.*\\)::\\(.*\\)" org-archive-location)
+	  (progn
+	    (setq file (format (match-string 1 org-archive-location)
+			       (file-name-nondirectory buffer-file-name))
+		  heading (match-string 2 org-archive-location)))
+	(error "Invalid `org-archive-location'"))
+      (if (> (length file) 0)
+	  (setq newfile-p (not (file-exists-p file))
+		buffer (find-file-noselect file))
+	(setq buffer (current-buffer)))
+      (unless buffer
+	(error "Cannot access file \"%s\"" file))
+      (if (and (> (length heading) 0)
+	       (string-match "^\\*+" heading))
+	  (setq level (match-end 0))
+	(setq heading nil level 0))
+      (save-excursion
+	;; We first only copy, in case something goes wrong
+	;; we need to protect this-command, to avoid kill-region sets it,
+	;; which would lead to duplication of subtrees
+	(let (this-command) (org-copy-subtree))
+	(set-buffer buffer)
+	;; Enforce org-mode for the archive buffer
+	(if (not (eq major-mode 'org-mode))
+	    ;; Force the mode for future visits.
+	    (let ((org-insert-mode-line-in-empty-file t))
+	      (call-interactively 'org-mode)))
+	(when newfile-p
+	  (goto-char (point-max))
+	  (insert (format "\nArchived entries from file %s\n\n"
+			  (buffer-file-name this-buffer))))
+	;; Force the TODO keywords of the original buffer
+	(let ((org-todo-line-regexp tr-org-todo-line-regexp)
+	      (org-todo-keywords tr-org-todo-keywords)
+	      (org-todo-interpretation tr-org-todo-interpretation)
+	      (org-done-string tr-org-done-string)
+	      (org-todo-regexp tr-org-todo-regexp)
+	      (org-todo-line-regexp tr-org-todo-line-regexp))
+	  (goto-char (point-min))
+	  (if heading
+	      (progn
+		(if (re-search-forward
+		     (concat "\\(^\\|\r\\)"
+			     (regexp-quote heading) "[ \t]*\\($\\|\r\\)")
+		     nil t)
+		    (goto-char (match-end 0))
+		  ;; Heading not found, just insert it at the end
+		  (goto-char (point-max))
+		  (or (bolp) (insert "\n"))
+		  (insert "\n" heading "\n")
+		  (end-of-line 0))
+		;; Make the subtree visible
+		(show-subtree)
+		(org-end-of-subtree t)
+		(skip-chars-backward " \t\r\n]")
+		(and (looking-at "[ \t\r\n]*")
+		     (replace-match "\n\n")))
+	    ;; No specific heading, just go to end of file.
+	    (goto-char (point-max)) (insert "\n"))
+	  ;; Paste
+	  (org-paste-subtree (1+ level))
+	  ;; Mark the entry as done, i.e. set to last work in org-todo-keywords
+	  (if org-archive-mark-done
+	      (org-todo (length org-todo-keywords)))
+	  ;; Move cursor to right after the TODO keyword
+	  (when org-archive-stamp-time
+	    (beginning-of-line 1)
+	    (looking-at org-todo-line-regexp)
+	    (goto-char (or (match-end 2) (match-beginning 3)))
+	    (insert "(" (format-time-string (cdr org-time-stamp-formats)
+					    (org-current-time))
+		    ")"))
+	  ;; Save the buffer, if it is not the same buffer.
+	  (if (not (eq this-buffer buffer)) (save-buffer))))
+      ;; Here we are back in the original buffer.  Everything seems to have
+      ;; worked.  So now cut the tree and finish up.
+      (let (this-command) (org-cut-subtree))
+      (if (and (not (eobp)) (looking-at "[ \t]*$")) (kill-line))
+      (message "Subtree archived %s"
+	       (if (eq this-buffer buffer)
+		   (concat "under heading: " heading)
+		 (concat "in file: " (abbreviate-file-name file)))))))
+
+(defun org-archive-all-done ()
+  "Archive sublevels of the current tree without open TODO items.
+If the cursor is not on a headline, try all level 1 trees.  If
+it is on a headline, try all direct children."
+  (let ((re (concat "^\\*+ +" org-not-done-regexp)) re1
+	(begm (make-marker))
+	(endm (make-marker))
+	beg end (cntarch 0))
+    (if (org-on-heading-p)
 	(progn
-	  (setq file (format (match-string 1 org-archive-location)
-			     (file-name-nondirectory buffer-file-name))
-		heading (match-string 2 org-archive-location)))
-      (error "Invalid `org-archive-location'"))
-    (if (> (length file) 0)
-	(setq newfile-p (not (file-exists-p file))
-	      buffer (find-file-noselect file))
-      (setq buffer (current-buffer)))
-    (unless buffer
-      (error "Cannot access file \"%s\"" file))
-    (if (and (> (length heading) 0)
-	     (string-match "^\\*+" heading))
-	(setq level (match-end 0))
-      (setq heading nil level 0))
+	  (setq re1 (concat "^" (regexp-quote
+				 (make-string 
+				  (1+ (- (match-end 0) (match-beginning 0)))
+				  ?*))
+			    " "))
+	  (move-marker begm (point))
+	  (move-marker endm (org-end-of-subtree)))
+      (setq re1 "^* ")
+      (move-marker begm (point-min))
+      (move-marker endm (point-max)))
     (save-excursion
-      ;; We first only copy, in case something goes wrong
-      ;; we need to protect this-command, to avoid kill-region sets it,
-      ;; which would lead to duplication of subtrees
-      (let (this-command) (org-copy-subtree))
-      (set-buffer buffer)
-      ;; Enforce org-mode for the archive buffer
-      (if (not (eq major-mode 'org-mode))
-	  ;; Force the mode for future visits.
-	  (let ((org-insert-mode-line-in-empty-file t))
-	    (call-interactively 'org-mode)))
-      (when newfile-p
-	(goto-char (point-max))
-	(insert (format "\nArchived entries from file %s\n\n"
-			(buffer-file-name this-buffer))))
-      ;; Force the TODO keywords of the original buffer
-      (let ((org-todo-line-regexp tr-org-todo-line-regexp)
-	    (org-todo-keywords tr-org-todo-keywords)
-	    (org-todo-interpretation tr-org-todo-interpretation)
-	    (org-done-string tr-org-done-string)
-	    (org-todo-regexp tr-org-todo-regexp)
-	    (org-todo-line-regexp tr-org-todo-line-regexp))
-	(goto-char (point-min))
-	(if heading
-	    (progn
-	      (if (re-search-forward
-		   (concat "\\(^\\|\r\\)"
-			   (regexp-quote heading) "[ \t]*\\($\\|\r\\)")
-		   nil t)
-		  (goto-char (match-end 0))
-		;; Heading not found, just insert it at the end
-		(goto-char (point-max))
-		(or (bolp) (insert "\n"))
-		(insert "\n" heading "\n")
-		(end-of-line 0))
-	      ;; Make the subtree visible
-	      (show-subtree)
-	      (org-end-of-subtree t)
-	      (skip-chars-backward " \t\r\n]")
-	      (and (looking-at "[ \t\r\n]*")
-		   (replace-match "\n\n")))
-	  ;; No specific heading, just go to end of file.
-	  (goto-char (point-max)) (insert "\n"))
-	;; Paste
-	(org-paste-subtree (1+ level))
-	;; Mark the entry as done, i.e. set to last work in org-todo-keywords
-	(if org-archive-mark-done
-	    (org-todo (length org-todo-keywords)))
-	;; Move cursor to right after the TODO keyword
-	(when org-archive-stamp-time
-	  (beginning-of-line 1)
-	  (looking-at org-todo-line-regexp)
-	  (goto-char (or (match-end 2) (match-beginning 3)))
-	  (insert "(" (format-time-string (cdr org-time-stamp-formats)
-					  (org-current-time))
-		  ")"))
-	;; Save the buffer, if it is not the same buffer.
-	(if (not (eq this-buffer buffer)) (save-buffer))))
-    ;; Here we are back in the original buffer.  Everything seems to have
-    ;; worked.  So now cut the tree and finish up.
-    (let (this-command) (org-cut-subtree))
-    (if (and (not (eobp)) (looking-at "[ \t]*$")) (kill-line))
-    (message "Subtree archived %s"
-	     (if (eq this-buffer buffer)
-		 (concat "under heading: " heading)
-	       (concat "in file: " (abbreviate-file-name file))))))
+      (goto-char begm)
+      (while (re-search-forward re1 endm t)
+	      beg (match-beginning 0)
+	      end (save-excursion (org-end-of-subtree t) (point)))
+	(goto-char beg)
+	(if (re-search-forward re end t)
+	    (goto-char end)
+	  (goto-char beg)
+	  (if (y-or-n-p "Archive this subtree (no open TODO items)? ")
+	      (progn
+		(org-archive-subtree)
+		(setq cntarch (1+ cntarch)))
+	    (goto-char end))))
+    (message "%d trees archived" cntarch)))
+
+;;; Dynamic blocks
+
+(defun org-find-dblock (name)
+  "Find the first dynamic block with name NAME in the buffer.
+If not found, stay at current position and return nil."
+  (let (pos)
+    (save-excursion
+      (goto-char (point-min))
+      (setq pos (and (re-search-forward (concat "^#\\+BEGIN:[ \t]+" name "\\>")
+					nil t)
+		     (match-beginning 0))))
+    (if pos (goto-char pos))
+    pos))
+
+(defconst org-dblock-start-re
+  "^#\\+BEGIN:[ \t]+\\(\\S-+\\)[ \t]+\\(.*\\)"
+  "Matches the startline of a dynamic block, with parameters.")
+
+(defconst org-dblock-end-re "^#\\+END\\([: \t\r\n]\\|$\\)"
+  "Matches the end of a dyhamic block.")
+
+(defun org-create-dblock (plist)
+  "Create a dynamic block section, with parameters taken from PLIST.
+PLIST must containe a :name entry which is used as name of the block."
+  (unless (bolp) (newline))
+  (let ((name (plist-get plist :name)))
+    (insert "#+BEGIN: " name)
+    (while plist
+      (if (eq (car plist) :name)
+	  (setq plist (cddr plist))
+	(insert " " (prin1-to-string (pop plist)))))
+    (insert "\n\n#+END:\n")
+    (beginning-of-line -2)))
+
+(defun org-prepare-dblock ()
+  "Prepare dynamic block for refresh.
+This empties the block, puts the cursor at the insert position and returns
+the property list including an extra property :name with the block name."
+  (unless (looking-at org-dblock-start-re)
+    (error "Not at a dynamic block"))
+  (let* ((beg (match-beginning 0))
+	 (begdel (1+ (match-end 0)))
+	 (name (match-string 1))
+	 (params (append (list :name name)
+			 (read (concat "(" (match-string 2) ")")))))
+    (unless (re-search-forward org-dblock-end-re nil t)
+      (error "Dynamic block not terminated"))
+    (delete-region begdel (match-beginning 0))
+    (goto-char begdel)
+    (open-line 1)
+    params))
+
+(defun org-map-dblocks (&optional command)
+  "Apply COMMAND to all dynamic blocks in the current buffer.
+If COMMAND is not given, use `org-update-dblock'."
+  (let ((cmd (or command 'org-update-dblock))
+	pos)
+    (save-excursion
+      (goto-char (point-min))
+      (while (re-search-forward org-dblock-start-re nil t)
+	(goto-char (setq pos (match-beginning 0)))
+	(condition-case nil
+	    (funcall cmd)
+	  (error (message "Error during update of dynamic block")))
+	(goto-char pos)
+	(unless (re-search-forward org-dblock-end-re nil t)
+	  (error "Dynamic block not terminated"))))))
+
+(defun org-dblock-update (&optional arg)
+  "User command for updating dynamic blocks.
+Update the dynamic block at point.  With prefix ARG, update all dynamic
+blocks in the buffer."
+  (interactive "P")
+  (if arg
+      (org-update-all-dblocks)
+    (or (looking-at org-dblock-start-re)
+	(org-beginning-of-dblock))
+    (org-update-dblock)))
+
+(defun org-update-dblock ()
+  "Update the dynamic block at point
+This means to empty the block, parse for parameters and then call
+the correct writing function."
+  (let* ((pos (point))
+	 (params (org-prepare-dblock))
+	 (name (plist-get params :name))
+	 (cmd (intern (concat "org-dblock-write:" name))))
+    (funcall cmd params)
+    (goto-char pos)))
+
+(defun org-beginning-of-dblock ()
+  "Find the beginning of the dynamic block at point.
+Error if there is no scuh block at point."
+  (let ((pos (point))
+	beg end)
+    (end-of-line 1)
+    (if (and (re-search-backward org-dblock-start-re nil t)
+	     (setq beg (match-beginning 0))
+	     (re-search-forward org-dblock-end-re nil t)
+	     (> (match-end 0) pos))
+	(goto-char beg)
+      (goto-char pos)
+      (error "Not in a dynamic block"))))
+
+(defun org-update-all-dblocks ()
+  "Update all dynamic blocks in the buffer.
+This function can be used in a hook."
+  (when (eq major-mode 'org-mode)
+    (org-map-dblocks 'org-update-dblock)))
+
 
 ;;; Completion
 
@@ -4783,16 +4967,18 @@
     (org-overlay-put ov 'face 'secondary-selection)
     (push ov org-occur-highlights)))
 
+(defvar org-inhibit-highlight-removal nil)
 (defun org-remove-occur-highlights (&optional beg end noremove)
   "Remove the occur highlights from the buffer.
 BEG and END are ignored.  If NOREMOVE is nil, remove this function
 from the `before-change-functions' in the current buffer."
   (interactive)
-  (mapc 'org-delete-overlay org-occur-highlights)
-  (setq org-occur-highlights nil)
-  (unless noremove
-    (remove-hook 'before-change-functions
-		 'org-remove-occur-highlights 'local)))
+  (unless org-inhibit-highlight-removal
+    (mapc 'org-delete-overlay org-occur-highlights)
+    (setq org-occur-highlights nil)
+    (unless noremove
+      (remove-hook 'before-change-functions
+		   'org-remove-occur-highlights 'local))))
 
 ;;; Priorities
 
@@ -5449,8 +5635,8 @@
   "Sum the times for each subtree.
 Puts the resulting times in minutes as a text property on each headline."
   (interactive)
-  (remove-text-properties (point-min) (point-max) '(:org-clock-minutes t))
-  (let* ((re (concat "^\\(\\*+\\)[ \t]\\|^[ \t]*"
+  (let* ((bmp (buffer-modified-p))
+	 (re (concat "^\\(\\*+\\)[ \t]\\|^[ \t]*"
 		     org-clock-string
 		     ".*=>[ \t]*\\([0-9]+\\):\\([0-9]+\\)[ \t]*$"))
 	 (lmax 30)
@@ -5458,6 +5644,7 @@
 	 (t1 0)
 	 (level 0)
 	 (lastlevel 0) time)
+    (remove-text-properties (point-min) (point-max) '(:org-clock-minutes t))
     (save-excursion
       (goto-char (point-max))
       (while (re-search-backward re nil t)
@@ -5475,7 +5662,8 @@
 		  (aset ltimes l 0))
 	    (goto-char (match-beginning 0))
 	    (put-text-property (point) (point-at-eol) :org-clock-minutes time))))
-      (setq org-clock-file-total-minutes (aref ltimes 0)))))
+      (setq org-clock-file-total-minutes (aref ltimes 0)))
+    (set-buffer-modified-p bmp)))
 
 (defun org-clock-display (&optional total-only)
   "Show subtree times in the entire buffer.
@@ -5510,11 +5698,11 @@
 	 (off 0)
 	 ov tx)
     (move-to-column c)
-    (if (eolp) (setq off 1))
     (unless (eolp) (skip-chars-backward "^ \t"))
     (skip-chars-backward " \t")
-    (setq ov (org-make-overlay (- (point) off) (point-at-eol))
-	  tx (concat (make-string (+ off (max 0 (- c (current-column)))) ?.)
+    (setq ov (org-make-overlay (1- (point)) (point-at-eol))
+	  tx (concat (buffer-substring (1- (point)) (point))
+		     (make-string (+ off (max 0 (- c (current-column)))) ?.)
 		     (org-add-props (format "%s %2d:%02d%s"
 					    (make-string l ?*) h m
 					    (make-string (- 10 l) ?\ ))
@@ -5528,11 +5716,12 @@
 BEG and END are ignored.  If NOREMOVE is nil, remove this function
 from the `before-change-functions' in the current buffer."
   (interactive)
-  (mapc 'org-delete-overlay org-clock-overlays)
-  (setq org-clock-overlays nil)
-  (unless noremove
-    (remove-hook 'before-change-functions
-		 'org-remove-clock-overlays 'local)))
+  (unless org-inhibit-highlight-removal
+    (mapc 'org-delete-overlay org-clock-overlays)
+    (setq org-clock-overlays nil)
+    (unless noremove
+      (remove-hook 'before-change-functions
+		   'org-remove-clock-overlays 'local))))
 
 (defun org-clock-out-if-current ()
   "Clock out if the current entry contains the running clock.
@@ -5557,6 +5746,113 @@
     (when (y-or-n-p "Save changed buffer?")
       (save-buffer))))
 
+(defun org-clock-report ()
+  "Create a table containing a report about clocked time.
+If the buffer contains lines
+#+BEGIN: clocktable :maxlevel 3 :emphasize nil
+
+#+END: clocktable
+then the table will be inserted between these lines, replacing whatever
+is was there before.  If these lines are not in the buffer, the table
+is inserted at point, surrounded by the special lines.
+The BEGIN line can contain parameters.  Allowed are:
+:maxlevel   The maximum level to be included in the table.  Default is 3.
+:emphasize  t/nil, if levell 1 and level 2 should be bold/italic in the table."
+  (interactive)
+  (org-remove-clock-overlays)
+  (unless (org-find-dblock "clocktable")
+    (org-create-dblock  (list :name "clocktable"
+			      :maxlevel 2 :emphasize nil)))
+  (org-update-dblock))
+
+(defun org-dblock-write:clocktable (params)
+  "Write the standard clocktable."
+  (let ((hlchars '((1 . "*") (2 . ?/)))
+	(emph nil)
+	(pos (point)) ipos
+	(ins (make-marker))
+	time h m p level hlc hdl maxlevel)
+    (setq maxlevel (or (plist-get params :maxlevel) 3)
+	  emph (plist-get params :emphasize))
+    (move-marker ins (point))
+    (setq ipos (point))
+    (insert-before-markers "Clock summary at [" 
+			   (substring
+			    (format-time-string (cdr org-time-stamp-formats))
+			    1 -1)
+			   "]\n|L|Headline|Time|\n")
+    (org-clock-sum)
+    (setq h (/ org-clock-file-total-minutes 60)
+	  m (- org-clock-file-total-minutes (* 60 h)))
+    (insert-before-markers "|-\n|0|" "*Total file time*| "
+			   (format "*%d:%02d*" h m)
+			   "|\n")
+    (goto-char (point-min))
+    (while (setq p (next-single-property-change (point) :org-clock-minutes))
+      (goto-char p)
+      (when (setq time (get-text-property p :org-clock-minutes))
+	(beginning-of-line 1)
+	(when (and (looking-at "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[0-9a-zA-Z_@:]+:\\)?[ \t]*$")
+		   (setq level (- (match-end 1) (match-beginning 1)))
+		   (<= level maxlevel))
+	  (setq hlc (if emph (or (cdr (assoc level hlchars)) "") "")
+		hdl (match-string 2)
+		h (/ time 60)
+		m (- time (* 60 h)))
+	  (save-excursion
+	    (goto-char ins)
+	    (if (= level 1) (insert-before-markers "|-\n"))
+	    (insert-before-markers
+	     "| " (int-to-string level) "|" hlc hdl hlc " |" 
+	     (make-string (1- level) ?|)
+	     hlc
+	     (format "%d:%02d" h m)
+	     hlc
+	     " |\n")))))
+    (goto-char ins)
+    (backward-delete-char 1)
+    (goto-char ipos)
+    (skip-chars-forward "^|")
+    (org-table-align)))
+
+(defun org-collect-clock-time-entries ()
+  "Return an internal list with clocking information.
+This list has one entry for each CLOCK interval.
+FIXME: describe the elements."
+  (interactive)
+  (let ((re (concat "^[ \t]*" org-clock-string
+		    " *\\[\\(.*?\\)\\]--\\[\\(.*?\\)\\]"))
+	rtn beg end next cont level title total closedp leafp
+	clockpos titlepos h m donep)
+    (save-excursion
+      (org-clock-sum)
+      (goto-char (point-min))
+      (while (re-search-forward re nil t)
+	(setq clockpos (match-beginning 0)
+	      beg (match-string 1) end (match-string 2)
+	      cont (match-end 0))
+	(setq beg (apply 'encode-time (org-parse-time-string beg))
+	      end (apply 'encode-time (org-parse-time-string end)))
+	(org-back-to-heading t)
+	(setq donep (org-entry-is-done-p))
+	(setq titlepos (point)
+	      total (or (get-text-property (1+ (point)) :org-clock-minutes) 0)
+	      h (/ total 60) m (- total (* 60 h))
+	      total (cons h m))
+	(looking-at "\\(\\*+\\) +\\(.*\\)")
+	(setq level (- (match-end 1) (match-beginning 1))
+	      title (org-match-string-no-properties 2))
+	(save-excursion (outline-next-heading) (setq next (point)))
+	(setq closedp (re-search-forward org-closed-time-regexp next t))
+	(goto-char next)
+	(setq leafp (and (looking-at "^\\*+ ")
+			 (<= (- (match-end 0) (point)) level)))
+	(push (list beg end clockpos closedp donep
+		    total title titlepos level leafp)
+	      rtn)
+	(goto-char cont)))
+    (nreverse rtn)))
+
 ;;; Agenda, and Diary Integration
 
 ;;; Define the mode
@@ -9186,8 +9482,8 @@
       (setq cpltxt (url-view-url t)
 	    link (org-make-link cpltxt)))
      ((eq major-mode 'w3m-mode)
-      (setq cpltxt w3m-current-url
-	    link (org-make-link cpltxt)))
+      (setq cpltxt (or w3m-current-title w3m-current-url)
+	    link (org-make-link w3m-current-url)))
 
      ((setq search (run-hook-with-args-until-success
 		    'org-create-file-search-functions))
@@ -9195,6 +9491,11 @@
 			 "::" search))
       (setq cpltxt (or description link)))
 
+     ((eq major-mode 'image-mode)
+      (setq cpltxt (concat "file:"
+			   (abbreviate-file-name buffer-file-name))
+	    link (org-make-link cpltxt)))      
+
      ((eq major-mode 'org-mode)
       ;; Just link to current headline
       (setq cpltxt (concat "file:"
@@ -9414,7 +9715,9 @@
 completed in the minibuffer (i.e. normally ~/path/to/file).
 
 With two \\[universal-argument] prefixes, enforce an absolute path even if the file
-is in the current directory or below."
+is in the current directory or below.
+With three \\[universal-argument] prefixes, negate the meaning of
+`org-keep-stored-link-after-insertion'."
   (interactive "P")
   (let (link desc entry remove file (pos (point)))
     (cond
@@ -9430,7 +9733,7 @@
       (setq link (read-string "Link: "
 			      (org-link-unescape
 			       (org-match-string-no-properties 1)))))
-     (complete-file
+     ((equal complete-file '(4))
       ;; Completing read for file names.
       (setq file (read-file-name "File: "))
       (let ((pwd (file-name-as-directory (expand-file-name ".")))
@@ -9455,7 +9758,8 @@
 		  org-insert-link-history
 		  (or (car (car org-stored-links)))))
       (setq entry (assoc link org-stored-links))
-      (if (not org-keep-stored-link-after-insertion)
+      (if (funcall (if (equal complete-file '(64)) 'not 'identity)
+		   (not org-keep-stored-link-after-insertion))
 	  (setq org-stored-links (delq (assoc link org-stored-links)
 				       org-stored-links)))
       (setq link (if entry (nth 1 entry) link)
@@ -12199,7 +12503,8 @@
 \[X] publish... (project will be prompted for)
 \[A] publish all projects")
 	(cmds
-	 '((?v . org-export-visible)
+	 '((?t . org-insert-export-options-template)
+	   (?v . org-export-visible)
 	   (?a . org-export-as-ascii)
 	   (?h . org-export-as-html)
 	   (?b . org-export-as-html-and-open)
@@ -12566,7 +12871,7 @@
 	  (match-string 1) "[[" (match-string 2) ":" (match-string 3) "]]")
 	 t t))
       ;; Find multiline emphasis and put them into single line
-      (when (assq :emph-multiline parameters)
+      (when (memq :emph-multiline parameters)
 	(goto-char (point-min))
 	(while (re-search-forward org-emph-re nil t)
 	  (subst-char-in-region (match-beginning 0) (match-end 0) ?\n ?\  t)
@@ -12858,13 +13163,18 @@
   (interactive
    (list (progn
 	   (message "Export visible: [a]SCII  [h]tml  [b]rowse HTML  [x]OXO  [ ]keep buffer")
-	   (char-to-string (read-char-exclusive)))
+	   (read-char-exclusive))
 	 current-prefix-arg))
-  (if (not (member type '("a" "\C-a" "b" "\C-b" "h" "x" " ")))
+  (if (not (member type '(?a ?\C-a ?b ?\C-b ?h ?x ?\ )))
       (error "Invalid export key"))
-  ;; FIXME: do this more explicit?
-  (let* ((binding (key-binding (concat "\C-c\C-x" type)))
-	 (keepp (equal type " "))
+  (let* ((binding (cdr (assoc type
+			      '((?a . org-export-as-ascii)
+				(?\C-a . org-export-as-ascii)
+				(?b . org-export-as-html-and-open)
+				(?\C-b . org-export-as-html-and-open)
+				(?h . org-export-as-html)
+				(?x . org-export-as-xoxo)))))
+	 (keepp (equal type ?\ ))
 	 (file buffer-file-name)
 	 (buffer (get-buffer-create "*Org Export Visible*"))
 	 s e)
@@ -13049,6 +13359,8 @@
 					(org-infile-export-plist)))
 
 	 (style (plist-get opt-plist :style))
+	 (link-validate (plist-get opt-plist :link-validation-function))
+	 valid
 	 (odd org-odd-levels-only)
 	 (region-p (org-region-active-p))
          (region
@@ -13068,6 +13380,7 @@
 			   (file-name-sans-extension
 			    (file-name-nondirectory buffer-file-name))
 			   ".html"))
+	 (current-dir (file-name-directory buffer-file-name))
          (buffer (find-file-noselect filename))
          (levels-open (make-vector org-level-max nil))
 	 (date (format-time-string "%Y/%m/%d" (current-time)))
@@ -13314,6 +13627,10 @@
 		  (if (string-match "::\\(.*\\)" filename)
 		      (setq search (match-string 1 filename)
 			    filename (replace-match "" t nil filename)))
+		  (setq valid
+			(if (functionp link-validate)
+			    (funcall link-validate filename current-dir)
+			  t))		    
 		  (setq file-is-image-p
 			(string-match (org-image-file-name-regexp) filename))
 		  (setq thefile (if abs-p (expand-file-name filename) filename))
@@ -13339,7 +13656,8 @@
 				       (and org-export-html-inline-images
 					    (not descp))))
 			      (concat "<img src=\"" thefile "\"/>")
-			    (concat "<a href=\"" thefile "\">" desc "</a>")))))
+			    (concat "<a href=\"" thefile "\">" desc "</a>")))
+		(if (not valid) (setq rpl desc))))
 	     ((member type '("bbdb" "vm" "wl" "mhe" "rmail" "gnus" "shell" "info" "elisp"))
 	      (setq rpl (concat "<i>&lt;" type ":"
 				(save-match-data (org-link-unescape path))
@@ -13650,27 +13968,31 @@
 
 (defun org-html-handle-time-stamps (s)
   "Format time stamps in string S, or remove them."
-  (let (r b)
-    (while (string-match org-maybe-keyword-time-regexp s)
-      (or b (setq b (substring s 0 (match-beginning 0))))
-      (if (not org-export-with-timestamps)
-	  (setq r (concat r (substring s 0 (match-beginning 0)))
-		s (substring s (match-end 0)))
-	(setq r (concat
-		 r (substring s 0 (match-beginning 0))
-		 (if (match-end 1)
-		     (format "@<span class=\"timestamp-kwd\">%s @</span>"
-			     (match-string 1 s)))
-		 (format " @<span class=\"timestamp\">%s@</span>"
-			 (substring (match-string 3 s) 1 -1)))
-	      s (substring s (match-end 0)))))
-    ;; Line break of line started and ended with time stamp stuff
-    (if (not r)
-	s
-      (setq r (concat r s))
-      (unless (string-match "\\S-" (concat b s))
-	(setq r (concat r "@<br/>")))
-      r)))
+  (catch 'exit
+    (let (r b)
+      (while (string-match org-maybe-keyword-time-regexp s)
+	;; FIXME: is it good to never export CLOCK, or do we need control?
+	(if (and (match-end 1) (equal (match-string 1 s) org-clock-string))
+	    (throw 'exit ""))
+	(or b (setq b (substring s 0 (match-beginning 0))))
+	(if (not org-export-with-timestamps)
+	    (setq r (concat r (substring s 0 (match-beginning 0)))
+		  s (substring s (match-end 0)))
+	  (setq r (concat
+		   r (substring s 0 (match-beginning 0))
+		   (if (match-end 1)
+		       (format "@<span class=\"timestamp-kwd\">%s @</span>"
+			       (match-string 1 s)))
+		   (format " @<span class=\"timestamp\">%s@</span>"
+			   (substring (match-string 3 s) 1 -1)))
+		s (substring s (match-end 0)))))
+      ;; Line break if line started and ended with time stamp stuff
+      (if (not r)
+	  s
+	(setq r (concat r s))
+	(unless (string-match "\\S-" (concat b s))
+	  (setq r (concat r "@<br/>")))
+	r))))
 
 (defun org-html-protect (s)
   ;; convert & to &amp;, < to &lt; and > to &gt;
@@ -14212,6 +14534,7 @@
 ;; All the other keys
 
 (define-key org-mode-map "\C-c\C-a" 'show-all)  ; in case allout messed up.
+(define-key org-mode-map "\C-xns" 'org-narrow-to-subtree)
 (define-key org-mode-map "\C-c$"    'org-archive-subtree)
 (define-key org-mode-map "\C-c\C-j" 'org-goto)
 (define-key org-mode-map "\C-c\C-t" 'org-todo)
@@ -14255,24 +14578,7 @@
 (define-key org-mode-map "\C-c~"          'org-table-create-with-table.el)
 (define-key org-mode-map "\C-c\C-q"       'org-table-wrap-region)
 (define-key org-mode-map "\C-c\C-e"       'org-export)
-;(define-key org-mode-map "\C-c\C-xa"      'org-export-as-ascii)
-;(define-key org-mode-map "\C-c\C-x\C-a"   'org-export-as-ascii)
-;(define-key org-mode-map "\C-c\C-xv"      'org-export-visible)
-;(define-key org-mode-map "\C-c\C-x\C-v"   'org-export-visible)
-;; OPML support is only an option for the future
-;(define-key org-mode-map "\C-c\C-xo"      'org-export-as-opml)
-;(define-key org-mode-map "\C-c\C-x\C-o"   'org-export-as-opml)
-;(define-key org-mode-map "\C-c\C-xi"      'org-export-icalendar-this-file)
-;(define-key org-mode-map "\C-c\C-x\C-i"   'org-export-icalendar-all-agenda-files)
-;(define-key org-mode-map "\C-c\C-xc"      'org-export-icalendar-combine-agenda-files)
-;(define-key org-mode-map "\C-c\C-x\C-c"   'org-export-icalendar-combine-agenda-files)
-;(define-key org-mode-map "\C-c\C-xt"      'org-insert-export-options-template)
 (define-key org-mode-map "\C-c:"          'org-toggle-fixed-width-section)
-;(define-key org-mode-map "\C-c\C-xh"      'org-export-as-html)
-;(define-key org-mode-map "\C-c\C-xx"      'org-export-as-xoxo)
-;(define-key org-mode-map "\C-c\C-x\C-x"   'org-export-as-xoxo)
-;(define-key org-mode-map "\C-c\C-xb"      'org-export-as-html-and-open)
-;(define-key org-mode-map "\C-c\C-x\C-b"   'org-export-as-html-and-open)
 
 (define-key org-mode-map "\C-c\C-x\C-k"   'org-cut-special)
 (define-key org-mode-map "\C-c\C-x\C-w"   'org-cut-special)
@@ -14283,15 +14589,9 @@
 (define-key org-mode-map "\C-c\C-x\C-o" 'org-clock-out)
 (define-key org-mode-map "\C-c\C-x\C-x" 'org-clock-cancel)
 (define-key org-mode-map "\C-c\C-x\C-d" 'org-clock-display)
-
-;(define-key org-mode-map "\C-c\C-ef"    'org-publish-current-file)
-;(define-key org-mode-map "\C-c\C-ep"    'org-publish-current-project)
-;(define-key org-mode-map "\C-c\C-ec"    'org-publish)
-;(define-key org-mode-map "\C-c\C-ea"    'org-publish-all)
-;(define-key org-mode-map "\C-c\C-e\C-f" 'org-publish-current-file)
-;(define-key org-mode-map "\C-c\C-e\C-p" 'org-publish-current-project)
-;(define-key org-mode-map "\C-c\C-e\C-c" 'org-publish)
-;(define-key org-mode-map "\C-c\C-e\C-a" 'org-publish-all)
+(define-key org-mode-map "\C-c\C-x\C-r" 'org-clock-report)
+
+(define-key org-mode-map "\C-c\C-x\C-u" 'org-dblock-update)
 
 (when (featurep 'xemacs)
   (define-key org-mode-map 'button3   'popup-mode-menu))
@@ -14785,6 +15085,7 @@
      ["Clock out" org-clock-out t]
      ["Clock cancel" org-clock-cancel t]
      ["Display times" org-clock-display t]
+     ["Create clock table" org-clock-report t]
      "--"
      ["Record DONE time"
       (progn (setq org-log-done (not org-log-done))
@@ -15284,7 +15585,8 @@
 	  (forward-char -1)
 	  (if (memq (preceding-char) '(?\n ?\^M))
 	      ;; leave blank line before heading
-	      (forward-char -1))))))
+	      (forward-char -1)))))
+  (point))
 
 (defun org-show-subtree ()
   "Show everything after this heading at deeper levels."
@@ -15334,8 +15636,12 @@
 			   (org-invisible-p)))
        (org-show-hierarchy-above)))
 
+
+;;; Experimental code
+
+
 ;;; Finish up
-
+	
 (provide 'org)
 
 (run-hooks 'org-load-hook)
--- a/lisp/textmodes/tex-mode.el	Tue Jun 20 01:17:33 2006 +0000
+++ b/lisp/textmodes/tex-mode.el	Tue Jun 20 07:35:06 2006 +0000
@@ -597,7 +597,7 @@
 (defun tex-font-lock-match-suscript (limit)
   "Match subscript and superscript patterns up to LIMIT."
   (when (re-search-forward "[_^] *\\([^\n\\{}]\\|\
-\\\\\\([a-zA-Z@]+\\|[^ \t\n]\\)\\|{[^\\{]*}\\|\\({\\)\\)" limit t)
+\\\\\\([a-zA-Z@]+\\|[^ \t\n]\\)\\|\\({\\)\\)" limit t)
     (when (match-end 3)
       (let ((beg (match-beginning 3))
 	    (end (save-restriction
--- a/lispref/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/lispref/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,7 @@
+2006-06-19  Richard Stallman  <rms@gnu.org>
+
+	* processes.texi (Bindat Spec): Clarify previous change.
+
 2006-06-16  Richard Stallman  <rms@gnu.org>
 
 	* tips.texi (Coding Conventions): Better explain conventions
--- a/lispref/processes.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/lispref/processes.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -2230,13 +2230,12 @@
 @var{tag} matches unconditionally if it is @code{t}.
 @end itemize
 
-@item repeat @var{count} @var{field-spec}@dots{}
-Process the set of @var{field-spec}s recursively, in order, and loop
-starting from the first one, for @var{count} times overall (looping
-@code{@var{count} @minus{} 1} times).
-@var{count} may be an integer, or a list of one element naming a
-previous field.  For correct operation, each @var{field-spec} must
-include a name.
+@item repeat @var{count} @var{field-specs}@dots{}
+Process the @var{field-specs} recursively, in order, then repeat
+starting from the first one, processing all the specs @var{count}
+times overall.  @var{count} may be an integer, or a list of one
+element that names a previous field.  For correct operation, each spec
+in @var{field-specs} must include a name.
 @end table
 
 @node Bindat Functions
--- a/man/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,18 @@
+2006-06-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* message.texi (News Headers): Update message-syntax-checks section.
+
+2006-06-19  Karl Berry  <karl@gnu.org>
+
+	* info.texi (Advanced): mention C-q, especially with ?.
+
+2006-06-19  Carsten Dominik  <dominik@science.uva.nl>
+
+	* org.texi (Publishing links): Document the `:link-validation-function'
+	property.
+	(Extensions and Hacking): New chapter, includes some sections of the
+	"Miscellaneous" chapter.
+
 2006-06-16  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
 	* macos.texi (Mac Input): Add description of mac-function-modifier.
@@ -11,6 +26,11 @@
 
 	* mule.texi (Recognize Coding): Clarify previous change.
 
+2006-06-09  Kenichi Handa  <handa@m17n.org>
+
+	* mule.texi (Recognize Coding): Describe the convention of "CODING!"
+	notation.
+
 2006-06-07  Kevin Ryde  <user42@zip.com.au>
 
 	* mule.texi (Coding Systems): Footnote xref "MS-DOS and MULE" in main
--- a/man/ediff.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/ediff.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -1614,6 +1614,9 @@
 ignoring letter case or not. It can be set in @file{.emacs} using
 @code{setq-default}.
 
+When case sensitivity is toggled, all difference
+regions are recomputed.
+
 @node Highlighting Difference Regions, Narrowing, Selective Browsing, Customization
 @section Highlighting Difference Regions
 
@@ -2316,6 +2319,14 @@
 
 Using @code{ediff-cleanup-hook}, one can make Ediff delete the variants
 unconditionally (e.g., by making @code{ediff-janitor} into one of these hooks).
+
+@item ediff-keep-tmp-versions
+@vindex @code{ediff-keep-tmp-versions}
+Default is @code{nil}. If @code{t}, the versions of the files being
+compared or merged using operations such as @code{ediff-revision} or
+@code{ediff-merge-revisions} are not deleted on exit. The normal action is
+to clean up and delete these version files.
+
 @item ediff-grab-mouse
 @vindex @code{ediff-grab-mouse}
 Default is @code{t}.  Normally, Ediff grabs mouse and puts it in its
@@ -2457,6 +2468,7 @@
 (jaffe@@chipmunk.cita.utoronto.ca),
 David Karr (dkarr@@nmo.gtegsc.com),
 Norbert Kiesel (norbert@@i3.informatik.rwth-aachen.de),
+Steffen Kilb (skilb@@gmx.net),
 Leigh L Klotz (klotz@@adoc.xerox.com),
 Fritz Knabe (Fritz.Knabe@@ecrc.de),
 Heinz Knutzen (hk@@informatik.uni-kiel.d400.de),
--- a/man/faq.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/faq.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -3659,7 +3659,7 @@
 
 For information on Emacs for Windows 95 and NT, read the FAQ produced by
 @email{voelker@@cs.washington.edu, Geoff Voelker} and currently maintained
-by @email{ramprasad_i82@@yahoo.com, Ramprasad B}, available at
+by @email{ramprasad@@gnu.org, Ramprasad B}, available at
 
 @uref{http://www.gnu.org/software/emacs/windows/ntemacs.html}
 
--- a/man/info.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/info.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -918,6 +918,15 @@
 specific to it, which are documented in several chapters of @ref{Top,,
 GNU Info, info-stnd, GNU Info}.)
 
+@kindex C-q @r{(Info mode)}
+  One advanced command useful with most of the others described here
+is @kbd{C-q}, which ``quotes'' the next character so that it is
+entered literally (@pxref{Inserting Text,,,emacs,The GNU Emacs
+Manual}).  For example, pressing @kbd{?} ordinarily brings up a list
+of completion possibilities.  If you want to (for example) search for
+an actual @samp{?} character, the simplest way is to insert it using
+@kbd{C-q ?}.  This works the same in Emacs and stand-alone Info.
+
 @menu
 * Search Text::          How to search Info documents.
 * Search Index::         How to search the indices for specific subjects.
--- a/man/message.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/message.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -1681,56 +1681,73 @@
 Valid checks are:
 
 @table @code
-@item subject-cmsg
-Check the subject for commands.
-@item sender
-@cindex Sender
-Insert a new @code{Sender} header if the @code{From} header looks odd.
-@item multiple-headers
-Check for the existence of multiple equal headers.
-@item sendsys
-@cindex sendsys
-Check for the existence of version and sendsys commands.
-@item message-id
-Check whether the @code{Message-ID} looks ok.
-@item from
-Check whether the @code{From} header seems nice.
-@item long-lines
-@cindex long lines
-Check for too long lines.
-@item control-chars
-Check for invalid characters.
-@item size
-Check for excessive size.
-@item new-text
-Check whether there is any new text in the messages.
-@item signature
-Check the length of the signature.
 @item approved
 @cindex approved
 Check whether the article has an @code{Approved} header, which is
 something only moderators should include.
+@item continuation-headers
+Check whether there are continuation header lines that don't begin with
+whitespace.
+@item control-chars
+Check for invalid characters.
 @item empty
 Check whether the article is empty.
-@item invisible-text
-Check whether there is any invisible text in the buffer.
-@item empty-headers
-Check whether any of the headers are empty.
 @item existing-newsgroups
 Check whether the newsgroups mentioned in the @code{Newsgroups} and
 @code{Followup-To} headers exist.
-@item valid-newsgroups
-Check whether the @code{Newsgroups} and @code{Followup-to} headers
-are valid syntactically.
+@item from
+Check whether the @code{From} header seems nice.
+@item illegible-text
+Check whether there is any non-printable character in the body.
+@item invisible-text
+Check whether there is any invisible text in the buffer.
+@item long-header-lines
+Check for too long header lines.
+@item long-lines
+@cindex long lines
+Check for too long lines in the body.
+@item message-id
+Check whether the @code{Message-ID} looks syntactically ok.
+@item multiple-headers
+Check for the existence of multiple equal headers.
+@item new-text
+Check whether there is any new text in the messages.
+@item newsgroups
+Check whether the @code{Newsgroups} header exists and is not empty.
+@item quoting-style
+Check whether text follows last quoted portion.
 @item repeated-newsgroups
 Check whether the @code{Newsgroups} and @code{Followup-to} headers
 contains repeated group names.
+@item reply-to
+Check whether the @code{Reply-To} header looks ok.
+@item sender
+@cindex Sender
+Insert a new @code{Sender} header if the @code{From} header looks odd.
+@item sendsys
+@cindex sendsys
+Check for the existence of version and sendsys commands.
+@item shoot
+Check whether the domain part of the @code{Message-ID} header looks ok.
 @item shorten-followup-to
 Check whether to add a @code{Followup-to} header to shorten the number
 of groups to post to.
+@item signature
+Check the length of the signature.
+@item size
+Check for excessive size.
+@item subject
+Check whether the @code{Subject} header exists and is not empty.
+@item subject-cmsg
+Check the subject for commands.
+@item valid-newsgroups
+Check whether the @code{Newsgroups} and @code{Followup-to} headers
+are valid syntactically.
 @end table
 
-All these conditions are checked by default.
+All these conditions are checked by default, except for @code{sender}
+for which the check is disabled by default if
+@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
 
 @item message-ignored-news-headers
 @vindex message-ignored-news-headers
--- a/man/org.texi	Tue Jun 20 01:17:33 2006 +0000
+++ b/man/org.texi	Tue Jun 20 07:35:06 2006 +0000
@@ -3,7 +3,7 @@
 @setfilename ../info/org
 @settitle Org Mode Manual
 
-@set VERSION 4.37
+@set VERSION 4.38
 @set DATE June 2006
 
 @dircategory Emacs
@@ -86,6 +86,8 @@
 * Exporting::                   Sharing and publishing of notes
 * Publishing::                  Create a web site of linked Org-mode files
 * Miscellaneous::               All the rest which did not fit elsewhere
+* Extensions and Hacking::      
+* History and Acknowledgments::  
 * Index::                       The fast road to specific information
 * Key Index::                   Key bindings and where they are described
 
@@ -162,7 +164,7 @@
 
 Progress Logging
 
-* Closing items::               When was this entry makred DONE?
+* Closing items::               When was this entry marked DONE?
 * Clocking work time::          When exactly did you work on this item?
 
 Tags
@@ -231,17 +233,19 @@
 * The very busy C-c C-c key::   When in doubt, press C-c C-c
 * Clean view::                  Getting rid of leading stars in the outline
 * TTY keys::                    Using Org-mode on a tty
-* FAQ::                         Frequently asked questions
 * Interaction::                 Other Emacs packages
 * Bugs::                        Things which do not work perfectly
-* Acknowledgments::             These people provided feedback and more
 
 Interaction with other packages
 
-* Extensions::                  Third-party extensions for Org-mode
 * Cooperation::                 Packages Org-mode cooperates with
 * Conflicts::                   Packages that lead to conflicts
 
+Extensions and Hacking
+
+* Extensions::                  
+* Dynamic blocks::              
+
 @end detailmenu
 @end menu
 
@@ -296,9 +300,10 @@
 The Org-mode table editor can be integrated into any major mode by
 activating the minor Orgtbl-mode.
 
+@cindex FAQ
 There is a website for Org-mode which provides links to the newest
-version of Org-mode, as well as additional information, screen shots
-and example files.  This page is located at
+version of Org-mode, as well as additional information, frequently asked
+questions (FAQ), links to tutorials etc.  This page is located at
 @uref{http://www.astro.uva.nl/~dominik/Tools/org/}.
 
 @page
@@ -341,6 +346,10 @@
 (require 'org-install)
 @end lisp
 
+If you use Org-mode with XEmacs, you also need to install the file
+@file{noutline.el} from the @file{xemacs} subdirectory of the Org-mode
+distribution.
+
 @cindex org-mode, turning on
 With this setup, all files with extension @samp{.org} will be put into
 Org-mode.  As an alternative, make the first line of a file look like
@@ -621,9 +630,16 @@
 special top-level heading, or even to a different file.
 @table @kbd
 @kindex C-c $
-@item @kbd{C-c $}
+@item C-c $
 Archive the subtree starting at the cursor position to the location
 given by @code{org-archive-location}.
+@kindex C-u C-c $
+@item C-u C-c $
+When @kbd{C-c $} is called with @kbd{C-u} prefix argument, check for
+(sub)trees without any open TODO items and offer to archive them.  When
+the cursor is on a headline when this command is called, inly check the
+direct children of this headline.  When the cursor is @emph{not} on a
+headline, check all level 1 trees.
 @end table
 
 @cindex archive locations
@@ -1674,7 +1690,11 @@
 Insert a link.  This prompts for a link to be inserted into the buffer.
 You can just type a link, using text for an internal link, or one of the
 link type prefixes mentioned in the examples above.  Through completion,
-all links stored during the current session can be accessed.  The link
+all links stored during the current session can be
+accessed@footnote{After insertion of a stored link, the link will be
+removed from the list of stored links.  To keep it in the list later
+use, use a triple @kbd{C-u} prefix to @kbd{C-c C-l}, or configure the
+option @code{org-keep-stored-link-after-insertion}.}.  The link
 will be inserted into the buffer, along with a descriptive text.  Note
 that you don't have to use this command to insert a link.  Links in
 Org-mode are plain text, and you can type or paste them straight into
@@ -2227,10 +2247,9 @@
 @item Time range with CLOCK keyword
 @cindex CLOCK keyword
 When using the clock to time the work that is being done on specific
-items, time ranges preceeded by the CLOCK keyword are inserted
+items, time ranges preceded by the CLOCK keyword are inserted
 automatically into the file.  The time stamps are enclosed in square
 brackets instead of angular brackets.  @xref{Clocking work time}.
-@c FIXME: Reference needed
 @end table
 
 @node Creating timestamps, Progress logging, Time stamps, Timestamps
@@ -2376,7 +2395,7 @@
 stop working on an aspect of a project.
 
 @menu
-* Closing items::               When was this entry makred DONE?
+* Closing items::               When was this entry marked DONE?
 * Clocking work time::          When exactly did you work on this item?
 @end menu
 
@@ -2405,8 +2424,8 @@
 
 Org-mode allows you to clock the time you spent on specific tasks in a
 project.  When you start working on an item, you can start the clock.
-When you stop working on that tast, or when you makr the task done, the
-clock is stoppend and the corresponding time interval is recorded.  It
+When you stop working on that task, or when you mark the task done, the
+clock is stopped and the corresponding time interval is recorded.  It
 also computes the total time spent on each subtree of a project.
 
 @table @kbd
@@ -2435,6 +2454,22 @@
 recorded under that heading, including the time of any subheadings. You
 can use visibility cycling to study the tree, but the overlays disappear
 automatically when the buffer is changed.
+@kindex C-c C-x C-r
+@item C-c C-x C-r
+Insert a dynamic block containing a clock report as an org-mode table
+into the current file.
+@example
+#+BEGIN: clocktable :maxlevel 2 :emphasize nil
+
+#+END: clocktable
+@end example
+@noindent
+If such a block already exists, its content is replaced by the new
+table.  The @samp{BEGIN} line can specify options:
+@example
+:maxlevels   @r{Maximum level depth to which times are listed in the table.}
+:emphasize   @r{When @code{t}, emphasize level one and level two items}
+@end example
 @end table
 
 The @kbd{l} key may be used in the timeline (@pxref{Timeline}) and in
@@ -3765,6 +3800,24 @@
 org-publish to upload the related files, these links will work
 too. @ref{Complex example} for an example of this usage.
 
+Sometime an Org-mode file to be published may contain links that are
+only valid in your production environment, but not in the publishing
+location.  In this case, use the property 
+
+@multitable @columnfractions 0.4 0.6
+@item @code{:link-validation-function}
+@tab Function to validate links
+@end multitable
+
+@noindent
+to define a function for checking link validity.  This function must
+accept two arguments, the file name and a directory relative to which
+the file name is interpreted in the production environment.  If this
+function returns @code{nil}, then the HTML generator will only insert a
+description into the HTML file, but no link.  One option for this
+function is @code{org-publish-validate-link} which checks if the given
+file is part of any project in @code{org-publish-project-alist}.
+
 @node Project page index,  , Publishing links, Configuration
 @subsection Project page index
 
@@ -3891,7 +3944,7 @@
 functions normally only publish changed files. You can override this and
 force publishing of all files by giving a prefix argument. 
 
-@node Miscellaneous, Index, Publishing, Top
+@node Miscellaneous, Extensions and Hacking, Publishing, Top
 @chapter Miscellaneous
 
 @menu
@@ -3901,10 +3954,8 @@
 * The very busy C-c C-c key::   When in doubt, press C-c C-c
 * Clean view::                  Getting rid of leading stars in the outline
 * TTY keys::                    Using Org-mode on a tty
-* FAQ::                         Frequently asked questions
 * Interaction::                 Other Emacs packages
 * Bugs::                        Things which do not work perfectly
-* Acknowledgments::             These people provided feedback and more
 @end menu
 
 @node Completion, Customization, Miscellaneous, Miscellaneous
@@ -4043,14 +4094,13 @@
 mentioned scattered throughout this manual.  One specific function of
 this key is to add @emph{tags} to a headline (@pxref{Tags}).  In many
 other circumstances it means something like @emph{Hey Org-mode, look
-here and update according to what you see here}.  Here is a summary of what
-this means in different contexts.
+here and update according to what you see here}.  Here is a summary of
+what this means in different contexts.
 
 @itemize @minus
-@c @item
-@c If the cursor is in a headline, prompt for tags and insert them
-@c into the current line, aligned to `org-tags-column'.  When called
-@c with prefix arg, realign all tags in the current buffer.
+@item
+If there are highlichts in the buffer from the creation of a sparse
+tree, or from clock display, remove these highlights.
 @item
 If the cursor is in one of the special @code{#+KEYWORD} lines, this
 triggers scanning the buffer for these lines and updating the
@@ -4180,7 +4230,7 @@
 RET} in that file.  The reverse operation is @kbd{M-x
 org-convert-to-oddeven-levels}.
 
-@node TTY keys, FAQ, Clean view, Miscellaneous
+@node TTY keys, Interaction, Clean view, Miscellaneous
 @section Using org-mode on a tty
 @cindex tty keybindings
 
@@ -4217,251 +4267,19 @@
 @item @kbd{S-@key{down}}    @tab @kbd{C-c C-x @key{down}}  @tab
 @end multitable
 
-@node FAQ, Interaction, TTY keys, Miscellaneous
-@section Frequently asked questions
-@cindex FAQ
-
-@enumerate
-@cindex @code{keymapp nil} error
-@item @b{When I try to use Org-mode, I always get
-@code{(wrong-type-argument keymapp nil)}}.@*
-@cindex allout.el, conflict with
-This is a conflict with an outdated version of the @file{allout.el}.
-See @ref{Conflicts}.
-
-@item @b{Org-mode seems to be a useful default mode for the various
-@file{README} files I have scattered through my directories.  How do I
-turn it on for all @file{README} files?}
-
-@lisp
-(add-to-list 'auto-mode-alist '("README$" . org-mode))
-@end lisp
-
-@item @b{I would like to use editing features of org-mode in other
-modes, is this possible?}@*
-@c
-Not really.  For tables there is @code{orgtbl-mode} which implements the
-table editor as a minor mode.  For other features you need to switch to
-Org-mode temporarily, or prepare text in a different buffer.
-
-@item @b{Can I get the visibility-cycling features in outline-mode and
-outline-minor-mode?}@* 
-@c
-Yes, these functions are written in a way that they are independent of
-the outline setup.  The following setup provides standard Org-mode
-functionality in outline-mode on @key{TAB} and @kbd{S-@key{TAB}}.  For
-outline-minor-mode, we use @kbd{C-@key{TAB}} instead of @key{TAB},
-because @key{TAB} usually has mode-specific tasks.
-@lisp
-(add-hook 'outline-minor-mode-hook
-  (lambda ()
-    (define-key outline-minor-mode-map [(control tab)] 'org-cycle)
-    (define-key outline-minor-mode-map [(shift tab)] 'org-global-cycle)))
-(add-hook 'outline-mode-hook
-  (lambda ()
-    (define-key outline-mode-map [(tab)] 'org-cycle)
-    (define-key outline-mode-map [(shift tab)] 'org-global-cycle)))
-@end lisp
-
-Or check out @file{outline-magic.el}, which does this and also provides
-promotion and demotion functionality.  @file{outline-magic.el} is
-available at @url{http://www.astro.uva.nl/~dominik/Tools/OutlineMagic}.
-
-@item @b{Some of my links stopped working after I upgraded to a version
-4.20 or later.  Why is this, and how can I fix it?}@*
-@c
-These must be links in plain text, containing white space, such as
-@samp{bbdb:Richard Stallman}.  You need to protect these links by
-putting double brackets around them, like @samp{[[bbdb:Richard
-Stallman]]}.
-
-@item @b{I see that Org-mode now creates links using the double bracket
-convention that hides the link part and the brackets, only showing the
-description part.  How can I convert my old links to this new format?}@*
-@c
-Execute once in each Org-mode file: @kbd{M-x org-upgrade-old-links}.
-This replaces angular brackets with the new link format.
-
-@item @b{I don't care if you find the new bracket links great, I am
-attached to the old style using angular brackets and no hiding of the
-link text.  Please give them back to me, don't tell me it is not
-possible!}@*
-@c
-Would I let you down like that?  If you must, you can do this
-
-@lisp
-(setq org-link-style 'plain
-      org-link-format "<%s>")
-@end lisp
-
-@item @b{When I am executing shell/elisp links I always get a 
-confirmation prompt and need to type @kbd{yes @key{RET}}, that's 4 key
-presses!  Can I get rid of this?}@*
-@c
-@cindex shell links, confirmation
-@cindex dangerous commands
-The confirmation is there to protect you from unwantingly execute
-potentially dangerous commands.  For example, imagine a link
-@samp{[[shell:rm -rf ~/*][Google Search]]}.  In an Org-mode buffer, this
-command would look like @samp{Google Search}, but really it would remove
-your home directory.  If you wish, you can make it easier to respond to
-the query by setting @code{org-confirm-shell-link-function} and/or
-@code{org-confirm-elisp-link-function} to @code{y-or-n-p}.  Then a
-single @kbd{y} keypress will be enough to confirm those links.  It is
-also possible to turn off this check entirely, but I do not recommend to
-do this.  Be warned.
-
-@item @b{All these stars are driving me mad, I just find the Emacs
-outlines unreadable. Can't you just put white space and a single star as a
-starter for headlines?}@*
-@c
-See @ref{Clean view}.
-
-@item @b{I would like to have two windows on the same Org-mode
-file, but with different outline visibility.  Is that possible?}@*
-@c
-@cindex @code{make-indirect-buffer}
-@cindex indirect buffers
-In GNU Emacs, you may use @emph{indirect buffers} which do exactly this.
-See the documentation on the command @code{make-indirect-buffer}.  In
-XEmacs, this is currently not possible because of the different outline
-implementation.
-
-@item @b{When I export my TODO list, every TODO item becomes a
-separate section.  How do I enforce these items to be exported as an
-itemized list?}@*
-@c
-If you plan to use ASCII or HTML export, make sure things you want to
-be exported as item lists are level 4 at least, even if that does mean
-there is a level jump.  For example:
-
-@example
-* Todays top priorities
-**** TODO write a letter to xyz
-**** TODO Finish the paper
-**** Pick up kids at the school
-@end example
-
-Alternatively, if you need a specific value for the heading/item
-transition in a particular file, use the @samp{+OPTIONS} line to
-configure the @samp{H} switch.
-
-@example
-+OPTIONS:   H:2; ...
-@end example
-
-@item @b{I would like to export only a subtree of my file to HTML.
-How?}@*
-@c
-@cindex exporting a subtree
-If you want to export a subtree, mark the subtree as region and then
-export.  Marking can be done with @kbd{C-c @@ C-x C-x}, for example.
-
-@item @b{Org-mode takes over the S-cursor keys.  I also want to use
-CUA-mode, is there a way to fix this conflict?}@*
-Yes, see @ref{Conflicts}.
-
-@item @b{One of my table columns has started to fill up with
-@samp{#ERROR}.  What is going on?}@*
-@c
-Org-mode tried to compute the column from other fields using a
-formula stored in the @samp{#+TBLFM:} line just below the table, and
-the evaluation of the formula fails.  Fix the fields used in the
-formula, or fix the formula, or remove it!
-
-@item @b{When I am in the last column of a table and just above a
-horizontal line in the table, pressing TAB creates a new table line
-@i{before} the horizontal line.  How can I quickly move to the line
-@i{below} the horizontal line instead?}@*
-@c
-Press @key{down} (to get on the separator line) and then @key{TAB}.
-Or configure the variable @code{org-table-tab-jumps-over-hlines}.
-
-@item @b{How can I change the indentation of an entire table without
-fixing every line by hand?}@*
-@c
-@cindex indentation, of tables
-The indentation of a table is set by the first line.  So just fix the
-indentation of the first line and realign with @key{TAB}.
-
-@item @b{Is it possible to include entries from org-mode files into my
-emacs diary?}@*
-@c
-Since the org-mode agenda is much more powerful and can contain the
-diary (@pxref{Calendar/Diary integration}), you should think twice
-before deciding to do this.  Integrating Org-mode information into the
-diary is, however, possible.  You need to turn on @emph{fancy diary
-display} by setting in @file{.emacs}:
-
-@lisp
-(add-hook 'diary-display-hook 'fancy-diary-display)
-@end lisp
-
-Then include the following line into your @file{~/diary} file, in
-order to get the entries from all files listed in the variable
-@code{org-agenda-files}:
-
-@example
-&%%(org-diary)
-@end example
-@noindent
-You may also select specific files with
-
-@example
-&%%(org-diary) ~/path/to/some/org-file.org
-&%%(org-diary) ~/path/to/another/org-file.org
-@end example
-
-If you now launch the calendar and press @kbd{d} to display a diary, the
-headlines of entries containing a timestamp, date range, schedule, or
-deadline referring to the selected date will be listed.  Just like
-Org-mode's agenda view, the diary for @emph{today} contains additional
-entries for overdue deadlines and scheduled items.  See also the
-documentation of the @command{org-diary} function.  Under XEmacs, it is
-not possible to jump back from the diary to the org, this works only in
-the agenda buffer.
-
-@end enumerate
-
-
-@node Interaction, Bugs, FAQ, Miscellaneous
+@node Interaction, Bugs, TTY keys, Miscellaneous
 @section Interaction with other packages
 @cindex packages, interaction with other
 Org-mode lives in the world of GNU Emacs and interacts in various ways
 with other code out there.
 
 @menu
-* Extensions::                  Third-party extensions for Org-mode
 * Cooperation::                 Packages Org-mode cooperates with
 * Conflicts::                   Packages that lead to conflicts
 @end menu
 
-@node Extensions, Cooperation, Interaction, Interaction
-@subsection Third-party extensions for Org-mode
-
-The following extensions for Org-mode have been written by other people:
-
-@table @asis
-@cindex @file{org-mouse.el}
-@item @file{org-mouse.el} by Piotr Zielinski
-This package implements extended mouse functionality for Org-mode.  It
-allows you to cycle visibility and to edit the document structure with
-the mouse.  Best of all, it provides a context-sensitive menu on
-@key{mouse-3} that changes depending on the context of a mouse-click.
-@file{org-mouse.el} is freely available at @url{http://www.cl.cam.ac.uk/~pz215/files/org-mouse.el}.
-@cindex @file{org-publish.el}
-@item @file{org-publish.el} by David O'Toole
-This package provides facilities for publishing related sets of Org-mode
-files together with linked files like images as a webpages.  It is
-highly configurable and can be used for other publishing purposes as
-well.  As of Org-mode version 4.30, @file{org-publish.el} is part of
-the Org-mode distribution.  It is not yet part of Emacs, however, due to
-a pending copyright assignment.  In the mean time, @file{org-publish.el}
-can be downloaded from David's site:
-@url{http://dto.freeshell.org/e/org-publish.el}.
-@end table
-
-@node Cooperation, Conflicts, Extensions, Interaction
+
+@node Cooperation, Conflicts, Interaction, Interaction
 @subsection Packages that Org-mode cooperates with
 
 @table @asis
@@ -4538,7 +4356,7 @@
 @end table
 
 
-@node Bugs, Acknowledgments, Interaction, Miscellaneous
+@node Bugs,  , Interaction, Miscellaneous
 @section Bugs
 @cindex bugs
 
@@ -4564,10 +4382,6 @@
 (for example because the application does not exist or refuses to open
 the file), it does so silently.  No error message is displayed.
 @item
-Plain list items should be able to hold a TODO item.  Unfortunately this
-has so many technical problems that I will only consider this change for
-the next major release (5.0).
-@item
 The remote-editing commands in the agenda buffer cannot be undone with
 @code{undo} called from within the agenda buffer.  But you can go to
 the corresponding buffer (using @key{TAB} or @key{RET} and execute
@@ -4577,22 +4391,140 @@
 If a formula uses @emph{calculated} fields further down the row,
 multiple recalculation may be needed to get all fields consistent.
 @item
-Several words in a row may @b{*be made bold*}, but this does not work if
-the string is distributed over two lines.
+A single letter cannot be made bold, for example @samp{*a*}.
 @item
 The exporters work well, but could be made more efficient.
 @end itemize
 
-@node Acknowledgments,  , Bugs, Miscellaneous
-@section Acknowledgments
+
+@node Extensions and Hacking, History and Acknowledgments, Miscellaneous, Top
+@appendix Extensions, Hooks and Hacking
+
+This appendix lists extensions for Org-mode written by other authors.
+It also covers some aspects where users can easily extend the
+functionality of Org-mode.
+
+@menu
+* Extensions::                  
+* Dynamic blocks::              
+@end menu
+
+@node Extensions, Dynamic blocks, Extensions and Hacking, Extensions and Hacking
+@section Third-party extensions for Org-mode
+
+The following extensions for Org-mode have been written by other people:
+
+@table @asis
+@cindex @file{org-mouse.el}
+@item @file{org-mouse.el} by Piotr Zielinski
+This package implements extended mouse functionality for Org-mode.  It
+allows you to cycle visibility and to edit the document structure with
+the mouse.  Best of all, it provides a context-sensitive menu on
+@key{mouse-3} that changes depending on the context of a mouse-click.
+@file{org-mouse.el} is freely available at @url{http://www.cl.cam.ac.uk/~pz215/files/org-mouse.el}.
+@cindex @file{org-publish.el}
+@item @file{org-publish.el} by David O'Toole
+This package provides facilities for publishing related sets of Org-mode
+files together with linked files like images as a webpages.  It is
+highly configurable and can be used for other publishing purposes as
+well.  As of Org-mode version 4.30, @file{org-publish.el} is part of the
+Org-mode distribution.  It is not yet part of Emacs, however, a delay
+caused by the preparations for the 22.1 release.  In the mean time,
+@file{org-publish.el} can be downloaded from David's site:
+@url{http://dto.freeshell.org/e/org-publish.el}.
+@cindex @file{org-blog.el}
+@item @file{org-blog.el} by David O'Toole
+A blogging plug-in for @file{org-publish.el}.
+@cindex @file{org-blogging.el}
+@item @file{org-blogging.el} by  Bastien Guerry
+Publish Org-mode files as
+blogs. @url{http://www.cognition.ens.fr/~guerry/org-blogging.html}.
+@end table
+
+@node Dynamic blocks,  , Extensions, Extensions and Hacking
+@section Dynamic blocks
+
+Org-mode documents can contain @emph{dynamic blocks}.  These are
+specially marked regions that are updates by some user-written
+function.  A good example for such a block is the clock table inserted
+by the command @kbd{C-c C-x C-r} (@pxref{Clocking work time}).
+
+Dynamic block are enclosed by a BEGIN-END structure that assigns a name
+to the block and can also specify parameters for the function producing
+the content of the block.
+
+@example
+#+BEGIN: myblock :parameter1 value1 :parameter2 value2 .....
+
+#+END:
+@end example
+
+Dynamic blocks are updated with the following commands
+
+@table @kbd
+@kindex C-c C-x C-u
+@item C-c C-x C-u
+Update dynamic block at point.
+@kindex C-u C-c C-x C-u
+@item C-u C-c C-x C-u
+Update all dynamic blocks in the current file.
+@end table
+
+Updating a dynamic block means to remove all the text between BEGIN and
+END, parse the BEGIN line for parameters and then call the specific
+writer function for this block to insert the new content.  For a block
+with name @code{myblock}, the writer function is
+@code{org-dblock-write:myblock} with as only parameter a property list
+with the parameters given in the begin line.  Here is a trivial example
+of a block that keeps track of when the block update function was last
+run:
+
+@example
+#+BEGIN: block-update-time :format "on %m/%d/%Y at %H:%M"
+
+#+END:
+@end example
+
+@noindent
+The corresponding block writer function could look like this:
+
+@lisp
+(defun org-dblock-write:date-and-time (params)
+   (let ((fmt (or (plist-get params :format) "%d. %m. %Y")))
+     (insert "Last block update at: "
+	     (format-time-string fmt (current-time)))))
+@end lisp
+
+If you want to make sure that all dynamic blocks are always up-to-date,
+you could add the function @code{org-update-all-dblocks} to a hook, for
+example @code{before-save-hook}.  @code{org-update-all-dblocks} is
+written in a way that is does nothing in buffers that are not in Org-mode.
+
+
+@node History and Acknowledgments, Index, Extensions and Hacking, Top
+@appendix History and Acknowledgments
 @cindex acknowledgments
+@cindex history
 @cindex thanks
 
-Org-mode was created by @value{AUTHOR}, who still maintains it at the
-Org-mode homepage @uref{http://www.astro.uva.nl/~dominik/Tools/org/}.
-The following people (in alphabetic order) have helped the development
-along with ideas, suggestions and patches.  Many thanks to all of you,
-Org-mode would not be what it is without your input.
+Org-mode was conceived in 2003 out of frustration over the user
+interface of the emacs outline-mode.  The first driver was simply to
+make working with an outline tree possible without having to remember
+more than 10 commands just for hiding and unhiding parts of the outline
+tree, and to allow to restructure a tree easily.  Visibility cycling and
+structure editing were originally implemented in the package
+@file{outline-magic.el}, but quickly moved to the more general
+@file{org.el}.  TODO entries and table support were added relatively
+quickly, and pointed to the two main drivers of Org-mode: Creating a
+new plain text mode with intuitive editing features, and to
+incorporate project planning functionality directly into a notes file.
+
+Since the first release, hundreds of emails either directly to me or
+later on @code{emacs-orgmode@@gnu.org} have been a constant source of
+bug reports, feedback and new ideas.  While I cannot mention everyone, I
+try to keep here a list of the people who had significant
+influence in shaping one or more aspects of Org-mode.  Many thanks to
+all of you.  If I have forgotten someone, please accept my apologies.
 
 @itemize @bullet
 @item
@@ -4607,8 +4539,9 @@
 @i{Pavel Chalmoviansky} influenced the agenda treatment of items with
 specified time.
 @item
-@i{Gregory Chenov} patched support for lisp forms into table
-calculations and improved XEmacs compatibility.
+@i{Gregory Chernov} patched support for lisp forms into table
+calculations and improved XEmacs compatibility, in particular by porting
+@file{nouline.el} to XEmacs.
 @item
 @i{Sacha Chua} suggested to copy some linking code from Planner.
 @item
@@ -4619,6 +4552,8 @@
 @item
 @i{Nic Ferrier} contributed mailcap and XOXO support.
 @item
+@i{Bastien Guerry} provoded extensive feedback.
+@item
 @i{Kai Grossjohann} pointed out key-binding conflicts caused by
 Org-mode.
 @item
@@ -4655,6 +4590,10 @@
 @item
 Linking to VM/BBDB/GNUS was inspired by @i{Tom Shannon}'s
 @file{organizer-mode.el}.
+@c FIXME:
+@c @item
+@c @i{Daniel Sinder} came up with the idea if internal archiving my locking
+@c subtrees.
 @item
 @i{David O'Toole} wrote @file{org-publish.el} and drafted the manual
 chapter about publishing.
@@ -4684,9 +4623,10 @@
 @i{Piotr Zielinski} wrote @file{org-mouse.el} and showed how to follow
 links with mouse-1.
 @end itemize
- 
-@node Index, Key Index, Miscellaneous, Top
-@chapter Index
+
+
+@node Index, Key Index, History and Acknowledgments, Top
+@unnumbered Index
 
 @printindex cp
 
--- a/src/ChangeLog	Tue Jun 20 01:17:33 2006 +0000
+++ b/src/ChangeLog	Tue Jun 20 07:35:06 2006 +0000
@@ -1,3 +1,13 @@
+2006-06-19  Richard Stallman  <rms@gnu.org>
+
+	* window.c (size_window): New arg FIRST_ONLY.  All callers changed.
+	(adjust_window_trailing_edge): Specially compute FIRST_PARALLEL
+	for the case of a top-level window and the following minibuffer.
+	Don't exit because of no `next' when there is a parent.
+	Use the FIRST_ONLY feature when resizing following windows.
+	
+	* syntax.c (init_syntax_once): Give most control chars' syntax Spunct.
+
 2006-06-17  Kim F. Storm  <storm@cua.dk>
 
 	* dispnew.c (update_frame): Check for input pending on entry.
--- a/src/syntax.c	Tue Jun 20 01:17:33 2006 +0000
+++ b/src/syntax.c	Tue Jun 20 07:35:06 2006 +0000
@@ -3346,6 +3346,20 @@
 
   Vstandard_syntax_table = Fmake_char_table (Qsyntax_table, temp);
 
+  /* Control characters should not be whitespace.  */
+  temp = XVECTOR (Vsyntax_code_object)->contents[(int) Spunct];
+  for (i = 0; i <= ' ' - 1; i++)
+    SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, i, temp);
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, 0177, temp);
+
+  /* Except that a few really are whitespace.  */
+  temp = XVECTOR (Vsyntax_code_object)->contents[(int) Swhitespace];
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, ' ', temp);
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, '\t', temp);
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, '\n', temp);
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, 015, temp);
+  SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, 014, temp);
+
   temp = XVECTOR (Vsyntax_code_object)->contents[(int) Sword];
   for (i = 'a'; i <= 'z'; i++)
     SET_RAW_SYNTAX_ENTRY (Vstandard_syntax_table, i, temp);
--- a/src/window.c	Tue Jun 20 01:17:33 2006 +0000
+++ b/src/window.c	Tue Jun 20 07:35:06 2006 +0000
@@ -63,7 +63,7 @@
 static void window_scroll_line_based P_ ((Lisp_Object, int, int, int));
 static int window_min_size_1 P_ ((struct window *, int));
 static int window_min_size P_ ((struct window *, int, int, int *));
-static void size_window P_ ((Lisp_Object, int, int, int));
+static void size_window P_ ((Lisp_Object, int, int, int, int, int));
 static int freeze_window_start P_ ((struct window *, void *));
 static int window_fixed_size_p P_ ((struct window *, int, int));
 static void enlarge_window P_ ((Lisp_Object, int, int));
@@ -2826,17 +2826,23 @@
 
 /* Set WINDOW's height or width to SIZE.  WIDTH_P non-zero means set
    WINDOW's width.  Resize WINDOW's children, if any, so that they
-   keep their proportionate size relative to WINDOW.  Propagate
-   WINDOW's top or left edge position to children.  Delete windows
-   that become too small unless NODELETE_P is non-zero.
+   keep their proportionate size relative to WINDOW.
+
+   If FIRST_ONLY is 1, change only the first of WINDOW's children when
+   they are in series.  If LAST_ONLY is 1, change only the last of
+   WINDOW's children when they are in series.
+
+   Propagate WINDOW's top or left edge position to children.  Delete
+   windows that become too small unless NODELETE_P is non-zero.
 
    If NODELETE_P is 2, that means we do delete windows that are
    too small, even if they were too small before!  */
 
 static void
-size_window (window, size, width_p, nodelete_p)
+size_window (window, size, width_p, nodelete_p, first_only, last_only)
      Lisp_Object window;
      int size, width_p, nodelete_p;
+     int first_only, last_only;
 {
   struct window *w = XWINDOW (window);
   struct window *c;
@@ -2911,6 +2917,7 @@
 
   if (!NILP (*sideward))
     {
+      /* We have a chain of parallel siblings whose size should all change.  */
       for (child = *sideward; !NILP (child); child = c->next)
 	{
 	  c = XWINDOW (child);
@@ -2918,8 +2925,44 @@
 	    c->left_col = w->left_col;
 	  else
 	    c->top_line = w->top_line;
-	  size_window (child, size, width_p, nodelete_p);
+	  size_window (child, size, width_p, nodelete_p,
+		       first_only, last_only);
+	}
+    }
+  else if (!NILP (*forward) && last_only)
+    {
+      /* Change the last in a series of siblings.  */
+      Lisp_Object last_child;
+      int child_size;
+
+      for (child = *forward; !NILP (child); child = c->next)
+	{
+	  c = XWINDOW (child);
+	  last_child = child;
 	}
+
+      child_size = XINT (width_p ? c->total_cols : c->total_lines);
+      size_window (last_child,
+		   size - old_size + child_size,
+		   width_p, nodelete_p, first_only, last_only);
+    }
+  else if (!NILP (*forward) && first_only)
+    {
+      /* Change the first in a series of siblings.  */
+      int child_size;
+
+      child = *forward;
+      c = XWINDOW (child);
+
+      if (width_p)
+	c->left_col = w->left_col;
+      else
+	c->top_line = w->top_line;
+
+      child_size = XINT (width_p ? c->total_cols : c->total_lines);
+      size_window (child,
+		   size - old_size + child_size,
+		   width_p, nodelete_p, first_only, last_only);
     }
   else if (!NILP (*forward))
     {
@@ -2928,7 +2971,7 @@
       int last_pos, first_pos, nchildren, total;
       int *new_sizes = NULL;
 
-      /* Determine the fixed-size portion of the this window, and the
+      /* Determine the fixed-size portion of this window, and the
 	 number of child windows.  */
       fixed_size = nchildren = nfixed = total = 0;
       for (child = *forward; !NILP (child); child = c->next, ++nchildren)
@@ -2991,7 +3034,7 @@
 	  /* Set new height.  Note that size_window also propagates
 	     edge positions to children, so it's not a no-op if we
 	     didn't change the child's size.  */
-	  size_window (child, new_size, width_p, 1);
+	  size_window (child, new_size, width_p, 1, first_only, last_only);
 
 	  /* Remember the bottom/right edge position of this child; it
 	     will be used to set the top/left edge of the next child.  */
@@ -3010,7 +3053,7 @@
 	    int child_size;
 	    c = XWINDOW (child);
 	    child_size = width_p ? XINT (c->total_cols) : XINT (c->total_lines);
-	    size_window (child, child_size, width_p, 2);
+	    size_window (child, child_size, width_p, 2, first_only, last_only);
 	  }
     }
 }
@@ -3026,7 +3069,7 @@
      int height;
      int nodelete;
 {
-  size_window (window, height, 0, nodelete);
+  size_window (window, height, 0, nodelete, 0, 0);
 }
 
 
@@ -3041,7 +3084,7 @@
      int width;
      int nodelete;
 {
-  size_window (window, width, 1, nodelete);
+  size_window (window, width, 1, nodelete, 0, 0);
 }
 
 /* Change window heights in windows rooted in WINDOW by N lines.  */
@@ -4281,8 +4324,8 @@
 
       if (NILP (window))
 	{
-	  /* This can happen if WINDOW on the previous iteration was
-	     at top level of the tree and we did not exit.  */
+	  /* This happens if WINDOW on the previous iteration was
+	     at top level of the window tree.  */
 	  Fset_window_configuration (old_config);
 	  error ("Specified window edge is fixed");
 	}
@@ -4296,6 +4339,14 @@
 	{
 	  if (! NILP (parent) && !NILP (XWINDOW (parent)->vchild))
 	    first_parallel = XWINDOW (parent)->vchild;
+	  else if (NILP (parent) && !NILP (p->next))
+	    {
+	      /* Handle the vertical chain of main window and minibuffer
+		 which has no parent.  */
+	      first_parallel = window;
+	      while (! NILP (XWINDOW (first_parallel)->prev))
+		first_parallel = XWINDOW (first_parallel)->prev;
+	    }
 	}
       else
 	{
@@ -4304,8 +4355,10 @@
 	}
 
       /* If this level's succession is in the desired dimension,
-	 and this window is the last one, its trailing edge is fixed.  */
-      if (NILP (XWINDOW (window)->next) && NILP (first_parallel))
+	 and this window is the last one, and there is no higher level,
+	 its trailing edge is fixed.  */
+      if (NILP (XWINDOW (window)->next) && NILP (first_parallel)
+	  && NILP (parent))
 	{
 	  Fset_window_configuration (old_config);
 	  error ("Specified window edge is fixed");
@@ -4347,7 +4400,7 @@
 	      XSETINT (CURBEG (p->next),
 		       XINT (CURBEG (p->next)) + delta);
 	      size_window (p->next, XINT (CURSIZE (p->next)) - delta,
-			   horiz_flag, 0);
+			   horiz_flag, 0, 1, 0);
 	      break;
 	    }
 	}
@@ -4359,7 +4412,7 @@
 	     child = XWINDOW (child)->next)
 	  if (! EQ (child, window))
 	    size_window (child, XINT (CURSIZE (child)) + delta,
-			 horiz_flag, 0);
+			 horiz_flag, 0, 0, 1);
 
       window = parent;
     }