]> code.delx.au - gnu-emacs/blobdiff - lisp/org/org.el
Merge from emacs-24; up to 2014-07-27T09:41:59Z!ttn@gnu.org
[gnu-emacs] / lisp / org / org.el
index 2a451ed5456975959c714718d51bea96cb0086c5..1604241f6b39bede449c03ec903ff415478ff2ec 100644 (file)
@@ -111,6 +111,8 @@ Stars are put in group 1 and the trimmed body in group 2.")
 (unless (boundp 'diary-fancy-buffer)
   (org-defvaralias 'diary-fancy-buffer 'fancy-diary-buffer))
 
 (unless (boundp 'diary-fancy-buffer)
   (org-defvaralias 'diary-fancy-buffer 'fancy-diary-buffer))
 
+(declare-function org-add-archive-files "org-archive" (files))
+
 (declare-function org-inlinetask-at-task-p "org-inlinetask" ())
 (declare-function org-inlinetask-outline-regexp "org-inlinetask" ())
 (declare-function org-inlinetask-toggle-visibility "org-inlinetask" ())
 (declare-function org-inlinetask-at-task-p "org-inlinetask" ())
 (declare-function org-inlinetask-outline-regexp "org-inlinetask" ())
 (declare-function org-inlinetask-toggle-visibility "org-inlinetask" ())
@@ -118,7 +120,10 @@ Stars are put in group 1 and the trimmed body in group 2.")
 (declare-function org-clock-get-last-clock-out-time "org-clock" ())
 (declare-function org-clock-timestamps-up "org-clock" (&optional n))
 (declare-function org-clock-timestamps-down "org-clock" (&optional n))
 (declare-function org-clock-get-last-clock-out-time "org-clock" ())
 (declare-function org-clock-timestamps-up "org-clock" (&optional n))
 (declare-function org-clock-timestamps-down "org-clock" (&optional n))
+(declare-function org-clock-remove-overlays "org-clock" (&optional beg end noremove))
 (declare-function org-clock-sum-current-item "org-clock" (&optional tstart))
 (declare-function org-clock-sum-current-item "org-clock" (&optional tstart))
+(declare-function org-clock-update-time-maybe "org-clock" ())
+(declare-function org-clocktable-shift "org-clock" (dir n))
 
 (declare-function orgtbl-mode "org-table" (&optional arg))
 (declare-function org-clock-out "org-clock" (&optional switch-to-state fail-quietly at-time))
 
 (declare-function orgtbl-mode "org-table" (&optional arg))
 (declare-function org-clock-out "org-clock" (&optional switch-to-state fail-quietly at-time))
@@ -133,6 +138,10 @@ Stars are put in group 1 and the trimmed body in group 2.")
 (declare-function org-agenda-list "org-agenda" (&optional arg start-day span))
 (declare-function org-agenda-redo "org-agenda" (&optional all))
 (declare-function org-table-align "org-table" ())
 (declare-function org-agenda-list "org-agenda" (&optional arg start-day span))
 (declare-function org-agenda-redo "org-agenda" (&optional all))
 (declare-function org-table-align "org-table" ())
+(declare-function org-table-begin "org-table" (&optional table-type))
+(declare-function org-table-blank-field "org-table" ())
+(declare-function org-table-end "org-table" (&optional table-type))
+(declare-function org-table-insert-row "org-table" (&optional arg))
 (declare-function org-table-paste-rectangle "org-table" ())
 (declare-function org-table-maybe-eval-formula "org-table" ())
 (declare-function org-table-maybe-recalculate-line "org-table" ())
 (declare-function org-table-paste-rectangle "org-table" ())
 (declare-function org-table-maybe-eval-formula "org-table" ())
 (declare-function org-table-maybe-recalculate-line "org-table" ())
@@ -179,6 +188,7 @@ Stars are put in group 1 and the trimmed body in group 2.")
                         (intern (concat "org-babel-expand-body:" lang)))))))
        org-babel-load-languages))
 
                         (intern (concat "org-babel-expand-body:" lang)))))))
        org-babel-load-languages))
 
+(declare-function org-babel-tangle-file "ob-tangle" (file &optional target-file lang))
 ;;;###autoload
 (defun org-babel-load-file (file &optional compile)
   "Load Emacs Lisp source code blocks in the Org-mode FILE.
 ;;;###autoload
 (defun org-babel-load-file (file &optional compile)
   "Load Emacs Lisp source code blocks in the Org-mode FILE.
@@ -5109,9 +5119,9 @@ Support for group tags is controlled by the option
                    "\\(?: +\\(\\[#.\\]\\)\\)?"
                    "\\(?: +"
                    ;; Stats cookies can be stuck to body.
                    "\\(?: +\\(\\[#.\\]\\)\\)?"
                    "\\(?: +"
                    ;; Stats cookies can be stuck to body.
-                   "\\(?:\\[[0-9%%/]+\\] *\\)?"
+                   "\\(?:\\[[0-9%%/]+\\] *\\)*"
                    "\\(%s\\)"
                    "\\(%s\\)"
-                   "\\(?: *\\[[0-9%%/]+\\]\\)?"
+                   "\\(?: *\\[[0-9%%/]+\\]\\)*"
                    "\\)"
                    (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?")
                    "[ \t]*$")
                    "\\)"
                    (org-re "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?")
                    "[ \t]*$")
@@ -5417,8 +5427,7 @@ The following commands are available:
       (org-add-hook 'isearch-mode-end-hook 'org-isearch-end 'append 'local)
     ;; Emacs 22 deals with this through a special variable
     (org-set-local 'outline-isearch-open-invisible-function
       (org-add-hook 'isearch-mode-end-hook 'org-isearch-end 'append 'local)
     ;; Emacs 22 deals with this through a special variable
     (org-set-local 'outline-isearch-open-invisible-function
-                  (lambda (&rest ignore) (org-show-context 'isearch)))
-    (org-add-hook 'isearch-mode-end-hook 'org-fix-ellipsis-at-bol 'append 'local))
+                  (lambda (&rest ignore) (org-show-context 'isearch))))
 
   ;; Setup the pcomplete hooks
   (set (make-local-variable 'pcomplete-command-completion-function)
 
   ;; Setup the pcomplete hooks
   (set (make-local-variable 'pcomplete-command-completion-function)
@@ -5473,9 +5482,6 @@ The following commands are available:
 
 (put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify)
 
 
 (put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify)
 
-(defsubst org-fix-ellipsis-at-bol ()
-  (save-excursion (goto-char (window-start)) (recenter 0)))
-
 (defun org-find-invisible-foreground ()
   (let ((candidates (remove
                     "unspecified-bg"
 (defun org-find-invisible-foreground ()
   (let ((candidates (remove
                     "unspecified-bg"
@@ -5881,7 +5887,7 @@ by a #."
           ((member dc1 '("+title:" "+author:" "+email:" "+date:"))
            (add-text-properties
             beg (match-end 3)
           ((member dc1 '("+title:" "+author:" "+email:" "+date:"))
            (add-text-properties
             beg (match-end 3)
-            (if (member (intern (substring dc1 0 -1)) org-hidden-keywords)
+            (if (member (intern (substring dc1 1 -1)) org-hidden-keywords)
                 '(font-lock-fontified t invisible t)
               '(font-lock-fontified t face org-document-info-keyword)))
            (add-text-properties
                 '(font-lock-fontified t invisible t)
               '(font-lock-fontified t face org-document-info-keyword)))
            (add-text-properties
@@ -6145,15 +6151,25 @@ Use `org-reduced-level' to remove the effect of `org-odd-levels'."
 
 (defvar org-font-lock-keywords nil)
 
 
 (defvar org-font-lock-keywords nil)
 
-(defsubst org-re-property (property &optional literal)
+(defsubst org-re-property (property &optional literal allow-null)
   "Return a regexp matching a PROPERTY line.
   "Return a regexp matching a PROPERTY line.
-Match group 3 will be set to the value if it exists."
-  (concat "^\\(?4:[ \t]*\\)\\(?1::\\(?2:"
-         (if literal property (regexp-quote property))
-         "\\):\\)[ \t]+\\(?3:[^ \t\r\n].*?\\)\\(?5:[ \t]*\\)$"))
+
+When optional argument LITERAL is non-nil, do not quote PROPERTY.
+This is useful when PROPERTY is a regexp.  When ALLOW-NULL is
+non-nil, match properties even without a value.
+
+Match group 3 is set to the value when it exists.  If there is no
+value and ALLOW-NULL is non-nil, it is set to the empty string."
+  (concat
+   "^\\(?4:[ \t]*\\)"
+   (format "\\(?1::\\(?2:%s\\):\\)"
+          (if literal property (regexp-quote property)))
+   (if allow-null
+       "\\(?:\\(?3:$\\)\\|[ \t]+\\(?3:.*?\\)\\)\\(?5:[ \t]*\\)$"
+     "[ \t]+\\(?3:[^ \r\t\n]+.*?\\)\\(?5:[ \t]*\\)$")))
 
 (defconst org-property-re
 
 (defconst org-property-re
-  (org-re-property ".*?" 'literal)
+  (org-re-property ".*?" 'literal t)
   "Regular expression matching a property line.
 There are four matching groups:
 1: :PROPKEY: including the leading and trailing colon,
   "Regular expression matching a property line.
 There are four matching groups:
 1: :PROPKEY: including the leading and trailing colon,
@@ -6355,7 +6371,7 @@ needs to be inserted at a specific position in the font-lock sequence.")
     (insert s)
     (let ((org-odd-levels-only odd-levels))
       (org-mode)
     (insert s)
     (let ((org-odd-levels-only odd-levels))
       (org-mode)
-      (font-lock-fontify-buffer)
+      (org-font-lock-ensure)
       (buffer-string))))
 
 (defvar org-m nil)
       (buffer-string))))
 
 (defvar org-m nil)
@@ -6712,7 +6728,8 @@ in special contexts.
       (setq org-cycle-global-status 'overview)
       (run-hook-with-args 'org-cycle-hook 'overview)))))
 
       (setq org-cycle-global-status 'overview)
       (run-hook-with-args 'org-cycle-hook 'overview)))))
 
-(defvar org-called-with-limited-levels);Dyn-bound in Ě€org-with-limited-levels'.
+(defvar org-called-with-limited-levels nil
+  "Non-nil when `org-with-limited-levels' is currently active.")
 
 (defun org-cycle-internal-local ()
   "Do the local cycling action."
 
 (defun org-cycle-internal-local ()
   "Do the local cycling action."
@@ -6729,7 +6746,8 @@ in special contexts.
            (setq has-children (org-list-has-child-p (point) struct)))
        (org-back-to-heading)
        (setq eoh (save-excursion (outline-end-of-heading) (point)))
            (setq has-children (org-list-has-child-p (point) struct)))
        (org-back-to-heading)
        (setq eoh (save-excursion (outline-end-of-heading) (point)))
-       (setq eos (save-excursion (1- (org-end-of-subtree t t))))
+       (setq eos (save-excursion (org-end-of-subtree t t)
+                                 (when (bolp) (backward-char)) (point)))
        (setq has-children
              (or (save-excursion
                    (let ((level (funcall outline-level)))
        (setq has-children
              (or (save-excursion
                    (let ((level (funcall outline-level)))
@@ -6894,21 +6912,20 @@ With a numeric prefix, show all headlines up to that level."
 ;; buffers, where outline-regexp is needed.
 (defun org-overview ()
   "Switch to overview mode, showing only top-level headlines.
 ;; buffers, where outline-regexp is needed.
 (defun org-overview ()
   "Switch to overview mode, showing only top-level headlines.
-Really, this shows all headlines with level equal or greater than the level
+This shows all headlines with a level equal or greater than the level
 of the first headline in the buffer.  This is important, because if the
 first headline is not level one, then (hide-sublevels 1) gives confusing
 results."
   (interactive)
 of the first headline in the buffer.  This is important, because if the
 first headline is not level one, then (hide-sublevels 1) gives confusing
 results."
   (interactive)
-  (let ((pos (point))
-       (level (save-excursion
-                (goto-char (point-min))
-                (if (re-search-forward (concat "^" outline-regexp) nil t)
-                    (progn
-                      (goto-char (match-beginning 0))
-                      (funcall outline-level))))))
-    (and level (hide-sublevels level))
-    (recenter '(4))
-    (goto-char pos)))
+  (save-excursion
+    (let ((level
+          (save-excursion
+            (goto-char (point-min))
+            (if (re-search-forward (concat "^" outline-regexp) nil t)
+                (progn
+                  (goto-char (match-beginning 0))
+                  (funcall outline-level))))))
+      (and level (hide-sublevels level)))))
 
 (defun org-content (&optional arg)
   "Show all headlines in the buffer, like a table of contents.
 
 (defun org-content (&optional arg)
   "Show all headlines in the buffer, like a table of contents.
@@ -7105,13 +7122,11 @@ Otherwise make it visible."
   (pos-visible-in-window-p
    (save-excursion (org-end-of-subtree t) (point))))
 
   (pos-visible-in-window-p
    (save-excursion (org-end-of-subtree t) (point))))
 
-(defun org-first-headline-recenter (&optional N)
-  "Move cursor to the first headline and recenter the headline.
-Optional argument N means put the headline into the Nth line of the window."
+(defun org-first-headline-recenter ()
+  "Move cursor to the first headline and recenter the headline."
   (goto-char (point-min))
   (when (re-search-forward (concat "^\\(" org-outline-regexp "\\)") nil t)
   (goto-char (point-min))
   (when (re-search-forward (concat "^\\(" org-outline-regexp "\\)") nil t)
-    (beginning-of-line)
-    (recenter (prefix-numeric-value N))))
+    (set-window-start (selected-window) (point-at-bol))))
 
 ;;; Saving and restoring visibility
 
 
 ;;; Saving and restoring visibility
 
@@ -7545,23 +7560,22 @@ When NEXT is non-nil, check the next line instead."
           (looking-at "[ \t]*$")))))
 
 (defun org-insert-heading (&optional arg invisible-ok)
           (looking-at "[ \t]*$")))))
 
 (defun org-insert-heading (&optional arg invisible-ok)
-  "Insert a new heading or item with same depth at point.
+  "Insert a new heading or an item with the same depth at point.
 
 If point is at the beginning of a heading or a list item, insert
 
 If point is at the beginning of a heading or a list item, insert
-a heading or a list item before it.
-
-If point is at the beginning of a normal line, turn this line
-into a heading.
+a new heading or a new item above the current one.  If point is
+at the beginning of a normal line, turn the line into a heading.
 
 If point is in the middle of a headline or a list item, split the
 headline or the item and create a new headline/item with the text
 in the current line after point \(see `org-M-RET-may-split-line'
 on how to modify this behavior).
 
 
 If point is in the middle of a headline or a list item, split the
 headline or the item and create a new headline/item with the text
 in the current line after point \(see `org-M-RET-may-split-line'
 on how to modify this behavior).
 
-With one universal prefix argument: If point is within a list,
-insert a heading instead of a list item.  Otherwise, set the
-value of `org-insert-heading-respect-content' to `t' for the
-duration of the command.
+With one universal prefix argument, set the user option
+`org-insert-heading-respect-content' to t for the duration of
+the command.  This modifies the behavior described above in this
+ways: on list items and at the beginning of normal lines, force
+the insertion of a heading after the current subtree.
 
 With two universal prefix arguments, insert the heading at the
 end of the grandparent subtree.  For example, if point is within
 
 With two universal prefix arguments, insert the heading at the
 end of the grandparent subtree.  For example, if point is within
@@ -7589,12 +7603,19 @@ command."
               (or arg (not itemp))))
       ;; At beginning of buffer or so high up that only a heading
       ;; makes sense.
               (or arg (not itemp))))
       ;; At beginning of buffer or so high up that only a heading
       ;; makes sense.
-      (insert
-       (if (or (bobp) (org-previous-line-empty-p)) "" "\n")
-       (if (org-in-src-block-p) ",* " "* "))
+      (cond ((and (bolp) (not respect-content)) (insert "* "))
+           ((not respect-content)
+            (unless may-split (end-of-line))
+            (insert "\n* "))
+           ((re-search-forward org-outline-regexp-bol nil t)
+            (beginning-of-line)
+            (insert "* \n")
+            (backward-char))
+           (t (goto-char (point-max))
+              (insert "\n* ")))
       (run-hooks 'org-insert-heading-hook))
 
       (run-hooks 'org-insert-heading-hook))
 
-     ((and itemp (not (equal arg '(4))))
+     ((and itemp (not (member arg '((4) (16)))))
       ;; Insert an item
       (org-insert-item))
 
       ;; Insert an item
       (org-insert-item))
 
@@ -7614,11 +7635,12 @@ command."
                               nil))
               ;; Get a level string to fall back on
               (fix-level
                               nil))
               ;; Get a level string to fall back on
               (fix-level
-               (save-excursion
-                 (org-back-to-heading t)
-                 (if (org-previous-line-empty-p) (setq empty-line-p t))
-                 (looking-at org-outline-regexp)
-                 (make-string (1- (length (match-string 0))) ?*)))
+               (if (org-before-first-heading-p) "*"
+                 (save-excursion
+                   (org-back-to-heading t)
+                   (if (org-previous-line-empty-p) (setq empty-line-p t))
+                   (looking-at org-outline-regexp)
+                   (make-string (1- (length (match-string 0))) ?*))))
               (stars
                (save-excursion
                  (condition-case nil
               (stars
                (save-excursion
                  (condition-case nil
@@ -7650,8 +7672,12 @@ command."
               pos hide-previous previous-pos)
 
          ;; If we insert after content, move there and clean up whitespace
               pos hide-previous previous-pos)
 
          ;; If we insert after content, move there and clean up whitespace
-         (when (and respect-content (not (org-on-heading-p)))
-           (org-end-of-subtree nil t)
+         (when (and respect-content
+                    (not (org-looking-at-p org-outline-regexp-bol)))
+           (if (not (org-before-first-heading-p))
+               (org-end-of-subtree nil t)
+             (re-search-forward org-outline-regexp-bol)
+             (beginning-of-line 0))
            (skip-chars-backward " \r\n")
            (and (not (looking-back "^\*+"))
                 (looking-at "[ \t]+") (replace-match ""))
            (skip-chars-backward " \r\n")
            (and (not (looking-back "^\*+"))
                 (looking-at "[ \t]+") (replace-match ""))
@@ -7680,10 +7706,9 @@ command."
                    (setq initial-content (org-trim initial-content)))
                  (goto-char pos))
              ;; a normal line
                    (setq initial-content (org-trim initial-content)))
                  (goto-char pos))
              ;; a normal line
-             (unless (bolp)
-               (setq initial-content (buffer-substring (point) (point-at-eol)))
-               (delete-region (point) (point-at-eol))
-               (setq initial-content (org-trim initial-content)))))
+             (setq initial-content
+                   (org-trim (buffer-substring (point) (point-at-eol))))
+             (delete-region (point) (point-at-eol))))
 
          ;; If we are at the beginning of the line, insert before it.  Else after
          (cond
 
          ;; If we are at the beginning of the line, insert before it.  Else after
          (cond
@@ -7708,13 +7733,12 @@ command."
   "Make the number of empty lines before current exactly N.
 So this will delete or add empty lines."
   (save-excursion
   "Make the number of empty lines before current exactly N.
 So this will delete or add empty lines."
   (save-excursion
-    (goto-char (point-at-bol))
-    (if (looking-back "\\s-+" nil 'greedy)
-       (replace-match ""))
-    (or (bobp) (insert "\n"))
-    (while (> N 0)
-      (insert "\n")
-      (setq N (1- N)))))
+    (beginning-of-line)
+    (let ((p (point)))
+      (skip-chars-backward " \r\t\n")
+      (unless (bolp) (forward-line))
+      (delete-region (point) p))
+    (when (> N 0) (insert (make-string N ?\n)))))
 
 (defun org-get-heading (&optional no-tags no-todo)
   "Return the heading of the current entry, without the stars.
 
 (defun org-get-heading (&optional no-tags no-todo)
   "Return the heading of the current entry, without the stars.
@@ -7783,17 +7807,15 @@ This is a list with the following elements:
   (org-move-subtree-down)
   (end-of-line 1))
 
   (org-move-subtree-down)
   (end-of-line 1))
 
-(defun org-insert-heading-respect-content (&optional arg invisible-ok)
+(defun org-insert-heading-respect-content (&optional invisible-ok)
   "Insert heading with `org-insert-heading-respect-content' set to t."
   "Insert heading with `org-insert-heading-respect-content' set to t."
-  (interactive "P")
-  (let ((org-insert-heading-respect-content t))
-    (org-insert-heading '(4) invisible-ok)))
+  (interactive)
+  (org-insert-heading '(4) invisible-ok))
 
 (defun org-insert-todo-heading-respect-content (&optional force-state)
   "Insert TODO heading with `org-insert-heading-respect-content' set to t."
 
 (defun org-insert-todo-heading-respect-content (&optional force-state)
   "Insert TODO heading with `org-insert-heading-respect-content' set to t."
-  (interactive "P")
-  (let ((org-insert-heading-respect-content t))
-    (org-insert-todo-heading force-state '(4))))
+  (interactive)
+  (org-insert-todo-heading force-state '(4)))
 
 (defun org-insert-todo-heading (arg &optional force-heading)
   "Insert a new heading with the same level and TODO state as current heading.
 
 (defun org-insert-todo-heading (arg &optional force-heading)
   "Insert a new heading with the same level and TODO state as current heading.
@@ -8150,7 +8172,8 @@ case."
     (save-match-data
       (save-excursion (outline-end-of-heading)
                      (setq folded (outline-invisible-p)))
     (save-match-data
       (save-excursion (outline-end-of-heading)
                      (setq folded (outline-invisible-p)))
-      (outline-end-of-subtree))
+      (progn (org-end-of-subtree nil t)
+            (unless (eobp) (backward-char))))
     (outline-next-heading)
     (setq ne-end (org-back-over-empty-lines))
     (setq end (point))
     (outline-next-heading)
     (setq ne-end (org-back-over-empty-lines))
     (setq end (point))
@@ -8303,7 +8326,7 @@ the inserted text when done."
                                   (string-match
                                    "^\\*+$" (buffer-substring
                                              (point-at-bol) (point))))
                                   (string-match
                                    "^\\*+$" (buffer-substring
                                              (point-at-bol) (point))))
-                             (- (match-end 1) (match-beginning 1)))
+                             (- (match-end 0) (match-beginning 0)))
                             ((and (bolp)
                                   (looking-at org-outline-regexp))
                              (- (match-end 0) (point) 1))))
                             ((and (bolp)
                                   (looking-at org-outline-regexp))
                              (- (match-end 0) (point) 1))))
@@ -9076,14 +9099,16 @@ if `orgstruct-heading-prefix-regexp' is not empty."
            (if fallback
                (let* ((orgstruct-mode)
                       (binding
            (if fallback
                (let* ((orgstruct-mode)
                       (binding
-                       (loop with key = ,key
-                             for rep in
-                             '(nil
-                               ("<\\([^>]*\\)tab>" . "\\1TAB")
-                               ("<\\([^>]*\\)return>" . "\\1RET")
-                               ("<\\([^>]*\\)escape>" . "\\1ESC")
-                               ("<\\([^>]*\\)delete>" . "\\1DEL"))
-                             do
+                       (let ((key ,key))
+                         (catch 'exit
+                           (dolist
+                               (rep
+                                '(nil
+                                  ("<\\([^>]*\\)tab>" . "\\1TAB")
+                                  ("<\\([^>]*\\)return>" . "\\1RET")
+                                  ("<\\([^>]*\\)escape>" . "\\1ESC")
+                                  ("<\\([^>]*\\)delete>" . "\\1DEL"))
+                                nil)
                              (when rep
                                (setq key (read-kbd-macro
                                           (let ((case-fold-search))
                              (when rep
                                (setq key (read-kbd-macro
                                           (let ((case-fold-search))
@@ -9091,7 +9116,8 @@ if `orgstruct-heading-prefix-regexp' is not empty."
                                              (car rep)
                                              (cdr rep)
                                              (key-description key))))))
                                              (car rep)
                                              (cdr rep)
                                              (key-description key))))))
-                             thereis (key-binding key))))
+                             (when (key-binding key)
+                               (throw 'exit (key-binding key))))))))
                  (if (keymapp binding)
                      (org-set-transient-map binding)
                    (let ((func (or binding
                  (if (keymapp binding)
                      (org-set-transient-map binding)
                    (let ((func (or binding
@@ -10592,6 +10618,10 @@ application the system uses for this file type."
     (move-marker org-open-link-marker nil)
     (run-hook-with-args 'org-follow-link-hook)))
 
     (move-marker org-open-link-marker nil)
     (run-hook-with-args 'org-follow-link-hook)))
 
+(defsubst org-uniquify (list)
+  "Non-destructively remove duplicate elements from LIST."
+  (let ((res (copy-sequence list))) (delete-dups res)))
+
 (defun org-offer-links-in-entry (buffer marker &optional nth zero)
   "Offer links in the current entry and return the selected link.
 If there is only one link, return it.
 (defun org-offer-links-in-entry (buffer marker &optional nth zero)
   "Offer links in the current entry and return the selected link.
 If there is only one link, return it.
@@ -13640,8 +13670,7 @@ How much context is shown depends upon the variables
                      (error nil))
                    (not (bobp)))
          (org-flag-heading nil)
                      (error nil))
                    (not (bobp)))
          (org-flag-heading nil)
-         (when siblings-p (org-show-siblings)))))
-    (unless (eq key 'agenda) (org-fix-ellipsis-at-bol))))
+         (when siblings-p (org-show-siblings)))))))
 
 (defvar org-reveal-start-hook nil
   "Hook run before revealing a location.")
 
 (defvar org-reveal-start-hook nil
   "Hook run before revealing a location.")
@@ -13836,7 +13865,7 @@ a file becomes an N^2 operation - but with this variable set, it scales
 as N.")
 
 (defun org-scan-tags (action matcher todo-only &optional start-level)
 as N.")
 
 (defun org-scan-tags (action matcher todo-only &optional start-level)
-  "Sca headline tags with inheritance and produce output ACTION.
+  "Scan headline tags with inheritance and produce output ACTION.
 
 ACTION can be `sparse-tree' to produce a sparse tree in the current buffer,
 or `agenda' to produce an entry list for an agenda view.  It can also be
 
 ACTION can be `sparse-tree' to produce a sparse tree in the current buffer,
 or `agenda' to produce an entry list for an agenda view.  It can also be
@@ -14744,8 +14773,8 @@ Returns the new tags string, or nil to not change the current settings."
       (if expert
          (set-buffer (get-buffer-create " *Org tags*"))
        (delete-other-windows)
       (if expert
          (set-buffer (get-buffer-create " *Org tags*"))
        (delete-other-windows)
-       (split-window-vertically)
-       (org-switch-to-buffer-other-window (get-buffer-create " *Org tags*")))
+       (set-window-buffer (split-window-vertically) (get-buffer-create " *Org tags*"))
+       (org-switch-to-buffer-other-window " *Org tags*"))
       (erase-buffer)
       (org-set-local 'org-done-keywords done-keywords)
       (org-fast-tag-insert "Inherited" inherited i-face "\n")
       (erase-buffer)
       (org-set-local 'org-done-keywords done-keywords)
       (org-fast-tag-insert "Inherited" inherited i-face "\n")
@@ -15269,7 +15298,10 @@ things up because then unnecessary parsing is avoided."
                             '("SCHEDULED" "DEADLINE" "CLOCK" "CLOSED"
                               "TIMESTAMP" "TIMESTAMP_IA")))
             (catch 'match
                             '("SCHEDULED" "DEADLINE" "CLOCK" "CLOSED"
                               "TIMESTAMP" "TIMESTAMP_IA")))
             (catch 'match
-              (while (re-search-forward org-maybe-keyword-time-regexp end t)
+              (while (and (re-search-forward org-maybe-keyword-time-regexp end t)
+                          (not (text-property-any 0 (length (match-string 0))
+                                                  'face 'font-lock-comment-face
+                                                  (match-string 0))))
                 (setq key (if (match-end 1)
                               (substring (org-match-string-no-properties 1)
                                          0 -1))
                 (setq key (if (match-end 1)
                               (substring (org-match-string-no-properties 1)
                                          0 -1))
@@ -15397,7 +15429,7 @@ an empty drawer to delete."
        (if (and range
                 (goto-char (car range))
                 (re-search-forward
        (if (and range
                 (goto-char (car range))
                 (re-search-forward
-                 (org-re-property property)
+                 (org-re-property property nil t)
                  (cdr range) t))
            (progn
              (delete-region (match-beginning 0) (1+ (point-at-eol)))
                  (cdr range) t))
            (progn
              (delete-region (match-beginning 0) (1+ (point-at-eol)))
@@ -15562,7 +15594,7 @@ If it is not a string, an error is raised."
          (setq range (org-get-property-block beg end 'force))
          (goto-char (car range))
          (if (re-search-forward
          (setq range (org-get-property-block beg end 'force))
          (goto-char (car range))
          (if (re-search-forward
-              (org-re-property property) (cdr range) t)
+              (org-re-property property nil t) (cdr range) t)
              (progn
                (delete-region (match-beginning 0) (match-end 0))
                (goto-char (match-beginning 0)))
              (progn
                (delete-region (match-beginning 0) (match-end 0))
                (goto-char (match-beginning 0)))
@@ -15773,9 +15805,7 @@ This is computed according to `org-property-set-functions-alist'."
                  (funcall set-function prompt
                           (mapcar 'list (org-property-values property))
                           nil nil "" nil cur)))))
                  (funcall set-function prompt
                           (mapcar 'list (org-property-values property))
                           nil nil "" nil cur)))))
-    (if (equal val "")
-       cur
-      val)))
+    (org-trim val)))
 
 (defvar org-last-set-property nil)
 (defvar org-last-set-property-value nil)
 
 (defvar org-last-set-property nil)
 (defvar org-last-set-property-value nil)
@@ -15853,8 +15883,10 @@ an empty drawer to delete."
                    (org-icompleting-read "Property: " props nil t)
                  (caar props))))
      (list prop)))
                    (org-icompleting-read "Property: " props nil t)
                  (caar props))))
      (list prop)))
-  (if (org-entry-delete nil property delete-empty-drawer)
-      (message "Property %s deleted" property)))
+  (if (not property)
+      (message "No property to delete in this entry")
+    (org-entry-delete nil property delete-empty-drawer)
+    (message "Property \"%s\" deleted" property)))
 
 (defun org-delete-property-globally (property)
   "Remove PROPERTY globally, from all entries."
 
 (defun org-delete-property-globally (property)
   "Remove PROPERTY globally, from all entries."
@@ -17743,9 +17775,9 @@ This requires Emacs >= 24.1, build with imagemagick support."
 
 (defcustom org-agenda-inhibit-startup nil
   "Inhibit startup when preparing agenda buffers.
 
 (defcustom org-agenda-inhibit-startup nil
   "Inhibit startup when preparing agenda buffers.
-When this variable is `t' (the default), the initialization of
-the Org agenda buffers is inhibited: e.g. the visibility state
-is not set, the tables are not re-aligned, etc."
+When this variable is `t', the initialization of the Org agenda
+buffers is inhibited: e.g. the visibility state is not set, the
+tables are not re-aligned, etc."
   :type 'boolean
   :version "24.3"
   :group 'org-agenda)
   :type 'boolean
   :version "24.3"
   :group 'org-agenda)
@@ -21819,9 +21851,7 @@ for the search purpose."
   "Return the reverse of STRING."
   (apply 'string (reverse (string-to-list string))))
 
   "Return the reverse of STRING."
   (apply 'string (reverse (string-to-list string))))
 
-(defsubst org-uniquify (list)
-  "Non-destructively remove duplicate elements from LIST."
-  (let ((res (copy-sequence list))) (delete-dups res)))
+;; defsubst org-uniquify must be defined before first use
 
 (defun org-uniquify-alist (alist)
   "Merge elements of ALIST with the same key.
 
 (defun org-uniquify-alist (alist)
   "Merge elements of ALIST with the same key.
@@ -23273,14 +23303,6 @@ If there is no such heading, return nil."
                (forward-char -1))))))
   (point))
 
                (forward-char -1))))))
   (point))
 
-(defadvice outline-end-of-subtree (around prefer-org-version activate compile)
-  "Use Org version in org-mode, for dramatic speed-up."
-  (if (derived-mode-p 'org-mode)
-      (progn
-       (org-end-of-subtree nil t)
-       (unless (eobp) (backward-char 1)))
-    ad-do-it))
-
 (defun org-end-of-meta-data-and-drawers ()
   "Jump to the first text after meta data and drawers in the current entry.
 This will move over empty lines, lines with planning time stamps,
 (defun org-end-of-meta-data-and-drawers ()
   "Jump to the first text after meta data and drawers in the current entry.
 This will move over empty lines, lines with planning time stamps,
@@ -23777,8 +23799,7 @@ Show the heading too, if it is currently invisible."
                   isearch-mode-end-hook-quit)
        ;; Only when the isearch was not quitted.
        (org-add-hook 'post-command-hook 'org-isearch-post-command
                   isearch-mode-end-hook-quit)
        ;; Only when the isearch was not quitted.
        (org-add-hook 'post-command-hook 'org-isearch-post-command
-                     'append 'local)))
-    (org-fix-ellipsis-at-bol)))
+                     'append 'local)))))
 
 (defun org-isearch-post-command ()
   "Remove self from hook, and show context."
 
 (defun org-isearch-post-command ()
   "Remove self from hook, and show context."