diff lisp/org/org.el @ 96975:60149c696033

2008-07-24 Carsten Dominik <dominik@science.uva.nl> * org-exp.el (org-export-region-as-html, org-export-as-html): Make sure that calls from `org-export-region-as-html' do not do the special check for a subtree. * org-agenda.el (org-batch-store-agenda-views): Fix parsing bug. * org.el (org-open-file): Use `org-open-directory-means-index-dot-org'. (org-open-directory-means-index-dot-org): New option. * org.el (org-make-link-string): Remove link attributes from description. (org-open-at-point): Remove link attributes bevore using the path. * org-exp.el (org-export-as-html): Handle link attributes. * org.el (org-extract-attributes, org-attributes-to-string): New functions. * org-table.el (org-table-to-lisp): New function. * org.el (org-narrow-to-subtree): Do not include the final newline into the narrowed region. * org-agenda.el (org-agenda-custom-commands-local-options): Fixed bug with user-define skipping condition. * org-agenda.el (org-agenda-get-restriction-and-command): Fixed typo. * org-exp.el (org-export-html-style-default): Automatic overflow handling for pre fields. (org-export-as-ascii, org-export-as-html): Change default format for time stamp. * org-table.el (org-table-export): Offer completion for translator functions, and do not require a heading above the table. * org.el (org-renumber-ordered-list, org-beginning-of-item-list): Cater for the case of a list starting in the first line of the buffer. * org-publish.el (org-publish-find-title): Bug fix. (org-publish-org-index): Implement new :index-style option. * org-publish.el (org-publish-timestamp-filename): Use SHA1-encoded file names in the timestamp directory. * org-publish.el (org-publish-needed-p): Be verbose about files published and files skipped. * org-exp.el (org-export-preprocess-string): Swap link normalization and inernal link targeting. * org-publish.el (org-publish-needed-p): Create timestamp directory when it does not exist. * org-clock.el (org-clock-out-when-done): Doc fix. * org.el (org-agenda-skip-unavailable-files): Doc fix. * org-exp.el (org-export-remove-comment-blocks-and-subtrees): Ignore case when searching for the COMMENT cookie at export time. * org-exp.el (org-get-file-contents) (org-get-and-remove-property): New functions. (org-export-handle-include-files): Handle the new prefix options. (org-export-as-html): Fix the verse environment. * org.el (org-time=, org-time<, org-time<=, org-time>) (org-time>=, org-time<>, org-2ft): New functions. (org-op-to-function): Also provide for the time testing fucntions. * org-exp.el (org-export-html-style-default): New constant. * org-exp.el (org-export-html-style-extra): New variable. (org-export-splice-style): New function. * org-exp.el (org-export-plist-vars, org-export-as-html): Implement `org-export-creator-info'. (org-export-creator-info): New option. * org.el (org-clock-drawer-start-re, org-clock-drawer-end-re) (org-property-drawer-re, org-clock-drawer-re): New constants. * org-exp.el (org-icalendar-use-deadline) (org-icalendar-use-scheduled): New options. (org-icalendar-include-todo): Default changed to t. (org-print-icalendar-entries): Implement better utilization of scheduling and deadline time stamps. (org-export-target-internal-links, org-export-as-html): Allow file lines without the "file:" prefix if the file path is an absolute path or starts with ".". * org-clock.el (org-clocktable-shift): Also undertand yesterday, lastweek etc. (org-clock-special-range): Also undertand yesterday, lastweek etc. * org.el (org-agenda-skip-archived-trees): Docstring now discourages using this. (org-scan-tags): Check for org-agenda-archives-mode. (org-map-entries): Make sure org-agenda-archives-mode is nil. (org-agenda-files): Functionality of second arg changed. * org-agenda.el (org-agenda-archives-mode): New variable (org-write-agenda, org-prepare-agenda, org-agenda-list) (org-search-view, org-todo-list, org-tags-view) (org-agenda-list-stuck-projects): Call `org-agenda-files' with `ifmode' argument. (org-agenda-quit): Reset the archives mode. (org-agenda-archives-mode): New command. (org-agenda-set-mode-name): Include archives info. * org.el (org-paste-subtree): Make sure the yanked headline is visible if it was yanked at a visible point. (org-move-item-up): Fix the bug with moving white space at the end of the item. (org-show-empty-lines-in-parent): New function.
author Carsten Dominik <dominik@science.uva.nl>
date Thu, 24 Jul 2008 13:59:56 +0000
parents 1e197e79733b
children adc2dffbdfc3
line wrap: on
line diff
--- a/lisp/org/org.el	Thu Jul 24 13:00:20 2008 +0000
+++ b/lisp/org/org.el	Thu Jul 24 13:59:56 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <carsten at orgmode dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.05a
+;; Version: 6.06a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -91,7 +91,7 @@
 
 ;;; Version
 
-(defconst org-version "6.05a"
+(defconst org-version "6.06a"
   "The version number of the file org.el.")
 
 (defun org-version (&optional here)
@@ -1062,6 +1062,13 @@
   :group 'org-link-follow
   :type 'boolean)
 
+(defcustom org-open-directory-means-index-dot-org nil
+  "Non-nil means, a link to a directory really means to index.org.
+When nil, following a directory link will run dired or open a finder/explorer
+window on that directory."
+  :group 'org-link-follow
+  :type 'boolean)
+
 (defcustom org-link-mailto-program '(browse-url "mailto:%a?subject=%s")
   "Function and arguments to call for following mailto links.
 This is a list with the first element being a lisp function, and the
@@ -2573,7 +2580,9 @@
 
 (defcustom org-agenda-skip-archived-trees t
   "Non-nil means, the agenda will skip any items located in archived trees.
-An archived tree is a tree marked with the tag ARCHIVE."
+An archived tree is a tree marked with the tag ARCHIVE.  The use of this
+variable is no longer recommended, you should leave it at the value t.
+Instead, use the key `v' to cycle the archives-mode in the agenda."
   :group 'org-archive
   :group 'org-agenda-skip
   :type 'boolean)
@@ -4206,6 +4215,12 @@
 	     (= (match-end 0) (point-max)))
 	(outline-flag-region (point) (match-end 0) nil))))
 
+(defun org-show-empty-lines-in-parent ()
+  "Move to the parent and re-show empty lines before visible headlines."
+  (save-excursion
+    (let ((context (if (org-up-heading-safe) 'children 'overview)))
+      (org-cycle-show-empty-lines context))))
+
 (defun org-cycle-hide-drawers (state)
   "Re-hide all drawers after a visibility state change."
   (when (and (org-mode-p)
@@ -4895,6 +4910,7 @@
       (insert (make-string (- ne-ins ne-beg) ?\n)))
     (move-marker ins-point nil)
     (org-compact-display-after-subtree-move)
+    (org-show-empty-lines-in-parent)
     (unless folded
       (org-show-entry)
       (show-children)
@@ -4974,7 +4990,8 @@
     (error "%s"
      (substitute-command-keys
       "The kill is not a (set of) tree(s) - please use \\[yank] to yank anyway")))
-  (let* ((txt (or tree (and kill-ring (current-kill 0))))
+  (let* ((visp (not (org-invisible-p)))
+	 (txt (or tree (and kill-ring (current-kill 0))))
 	 (^re (concat "^\\(" outline-regexp "\\)"))
 	 (re  (concat "\\(" outline-regexp "\\)"))
 	 (^re_ (concat "\\(\\*+\\)[  \t]*"))
@@ -5028,6 +5045,8 @@
     (goto-char beg)
     (skip-chars-forward " \t\n\r")
     (setq beg (point))
+    (if (and (org-invisible-p) visp)
+	(save-excursion (outline-show-heading)))
     ;; Shift if necessary
     (unless (= shift 0)
       (save-restriction
@@ -5109,7 +5128,7 @@
     (save-match-data
       (narrow-to-region
        (progn (org-back-to-heading) (point))
-       (progn (org-end-of-subtree t t) (point))))))
+       (progn (org-end-of-subtree t) (point))))))
 
 
 ;;; Outline Sorting
@@ -5908,6 +5927,7 @@
       (setq beg (point)))
     (goto-char beg0)
     (org-end-of-item)
+    (org-back-over-empty-lines)
     (setq end (point))
     (goto-char beg0)
     (catch 'exit
@@ -5923,7 +5943,7 @@
 	      (throw 'exit t)))))
     (condition-case nil
 	(org-beginning-of-item)
-      (error (goto-char beg)
+      (error (goto-char beg0)
 	     (error "Cannot move this item further up")))
     (setq ind1 (org-get-indentation))
     (if (and (org-at-item-p) (= ind ind1))
@@ -6021,9 +6041,10 @@
 	      (buffer-substring (point-at-bol) (match-beginning 3))))
 	;; (term (substring (match-string 3) -1))
 	ind1 (n (1- arg))
-	fmt)
+	fmt bob)
     ;; find where this list begins
     (org-beginning-of-item-list)
+    (setq bobp (bobp))
     (looking-at "[ \t]*[0-9]+\\([.)]\\)")
     (setq fmt (concat "%d" (match-string 1)))
     (beginning-of-line 0)
@@ -6031,7 +6052,7 @@
     (catch 'exit
       (while t
 	(catch 'next
-	  (beginning-of-line 2)
+	  (if bobp (setq bobp nil) (beginning-of-line 2))
 	  (if (eobp) (throw 'exit nil))
 	  (if (looking-at "[ \t]*$") (throw 'next nil))
 	  (skip-chars-forward " \t") (setq ind1 (current-column))
@@ -6097,7 +6118,8 @@
 	  (if (or (< ind1 ind)
 		  (and (= ind1 ind)
 		       (not (org-at-item-p)))
-		  (bobp))
+		  (and (= (point-at-bol) (point-min))
+		       (setq pos (point-min))))
 	      (throw 'exit t)
 	    (when (org-at-item-p) (setq pos (point-at-bol)))))))
     (goto-char pos)))
@@ -6733,7 +6755,7 @@
     (setq description nil))
   (when (and (not description)
 	     (not (equal link (org-link-escape link))))
-    (setq description link))
+    (setq description (org-extract-attributes link)))
   (concat "[[" (org-link-escape link) "]"
 	  (if description (concat "[" description "]") "")
 	  "]"))
@@ -7006,6 +7028,27 @@
     (org-defkey minibuffer-local-completion-map " " 'self-insert-command)
     (apply 'completing-read args)))
 
+(defun org-extract-attributes (s)
+  "Extract the attributes cookie from a string and set as text property."
+  (let (a attr (start 0))
+    (save-match-data
+      (when (string-match "{{\\([^}]+\\)}}$" s)
+	(setq a (match-string 1 s) s (substring s 0 (match-beginning 0)))
+	(while (string-match "\\([a-zA-Z]+\\)=\"\\([^\"]*\\)\"" a start)
+	  (setq key (match-string 1 a) value (match-string 2 a)
+		start (match-end 0)
+		attr (plist-put attr (intern key) value))))
+      (org-add-props s nil 'org-attributes attr))
+    s))
+
+(defun org-attributes-to-string (plist)
+  "Format a property list into an HTML attribute list."
+  (let ((s "") key value)
+    (while plist
+      (setq key (pop plist) value (pop plist))
+      (setq s (concat s " "(symbol-name key) "=\"" value "\"")))
+    s))
+
 ;;; Opening/following a link
 
 (defvar org-link-search-failed nil)
@@ -7106,13 +7149,18 @@
 	(save-excursion
 	  (skip-chars-forward "^]\n\r")
 	  (when (org-in-regexp org-bracket-link-regexp)
-	    (setq link (org-link-unescape (org-match-string-no-properties 1)))
+	    (setq link (org-extract-attributes
+			(org-link-unescape (org-match-string-no-properties 1))))
 	    (while (string-match " *\n *" link)
 	      (setq link (replace-match " " t t link)))
 	    (setq link (org-link-expand-abbrev link))
-	    (if (string-match org-link-re-with-space2 link)
-		(setq type (match-string 1 link) path (match-string 2 link))
-	      (setq type "thisfile" path link))
+	    (cond
+	     ((or (file-name-absolute-p link)
+		  (string-match "^\\.\\.?/" link))
+	      (setq type "file" path link))
+	     ((string-match org-link-re-with-space2 link)
+	      (setq type (match-string 1 link) path (match-string 2 link)))
+	     (t (setq type "thisfile" path link)))
 	    (throw 'match t)))
 
 	(when (get-text-property (point) 'org-linked-text)
@@ -7530,6 +7578,9 @@
 	 (apps (append org-file-apps (org-default-apps)))
 	 (remp (and (assq 'remote apps) (org-file-remote-p file)))
 	 (dirp (if remp nil (file-directory-p file)))
+	 (file (if (and dirp org-open-directory-means-index-dot-org)
+		   (concat (file-name-as-directory file) "index.org")
+		 file))
 	 (dfile (downcase file))
 	 (old-buffer (current-buffer))
 	 (old-pos (point))
@@ -8586,7 +8637,7 @@
       nil)))
 
 (defun org-get-repeat ()
-  "Check if tere is a deadline/schedule with repeater in this entry."
+  "Check if there is a deadline/schedule with repeater in this entry."
   (save-match-data
     (save-excursion
       (org-back-to-heading t)
@@ -9196,6 +9247,7 @@
 
 ;;;; Tags
 
+(defvar org-agenda-archives-mode)
 (defun org-scan-tags (action matcher &optional todo-only)
   "Scan headline tags with inheritance and produce output ACTION.
 
@@ -9211,9 +9263,9 @@
 		     (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		     (org-re
 		      "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*$")))
-	 (props (list 'face nil
+	 (props (list 'face 'default
 		      'done-face 'org-done
-		      'undone-face nil
+		      'undone-face 'default
 		      'mouse-face 'highlight
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
@@ -9265,8 +9317,11 @@
 		    (org-remove-uniherited-tags (cdar tags-alist))))
 	  (when (and (or (not todo-only) (member todo org-not-done-keywords))
 		     (eval matcher)
-		     (or (not org-agenda-skip-archived-trees)
-			 (not (member org-archive-tag tags-list))))
+		     (or
+		      (not (member org-archive-tag tags-list))
+		      ;; we have an archive tag, should we use this anyway?
+		      (or (not org-agenda-skip-archived-trees)
+			  (and (eq action 'agenda) org-agenda-archives-mode))))
 	    (unless (eq action 'sparse-tree) (org-agenda-skip))
 
 	    ;; select this headline
@@ -9420,8 +9475,10 @@
 			   cat-p (equal pn "CATEGORY")
 			   re-p (equal (string-to-char pv) ?{)
 			   str-p (equal (string-to-char pv) ?\")
+			   time-p (save-match-data (string-match "^\"<.*>\"$" pv))
 			   pv (if (or re-p str-p) (substring pv 1 -1) pv))
-		     (setq po (org-op-to-function po str-p))
+		     (if time-p (setq pv (org-matcher-time pv)))
+		     (setq po (org-op-to-function po (if time-p 'time str-p)))
 		     (if (equal pn "CATEGORY")
 			 (setq gv '(get-text-property (point) 'org-category))
 		       (setq gv `(org-cached-entry-get nil ,pn)))
@@ -9476,21 +9533,46 @@
     (cons match0 matcher)))
 
 (defun org-op-to-function (op &optional stringp)
+  "Turn an operator into the appropriate function."
   (setq op
 	(cond
-	 ((equal  op   "<"       ) '(<     string<      ))
-	 ((equal  op   ">"       ) '(>     org-string>  ))
-	 ((member op '("<=" "=<")) '(<=    org-string<= ))
-	 ((member op '(">=" "=>")) '(>=    org-string>= ))
-	 ((member op '("="  "==")) '(=     string=      ))
-	 ((member op '("<>" "!=")) '(org<> org-string<> ))))
-  (nth (if stringp 1 0) op))
+	 ((equal  op   "<"       ) '(<     string<      org-time<))
+	 ((equal  op   ">"       ) '(>     org-string>  org-time>))
+	 ((member op '("<=" "=<")) '(<=    org-string<= org-time<=))
+	 ((member op '(">=" "=>")) '(>=    org-string>= org-time>=))
+	 ((member op '("="  "==")) '(=     string=      org-time=))
+	 ((member op '("<>" "!=")) '(org<> org-string<> org-time<>))))
+  (nth (if (eq stringp 'time) 2 (if stringp 1 0)) op))
 
 (defun org<> (a b) (not (= a b)))
 (defun org-string<= (a b) (or (string= a b) (string< a b)))
 (defun org-string>= (a b) (not (string< a b)))
 (defun org-string>  (a b) (and (not (string= a b)) (not (string< a b))))
 (defun org-string<> (a b) (not (string= a b)))
+(defun org-time=  (a b) (=     (org-2ft a) (org-2ft b)))
+(defun org-time<  (a b) (<     (org-2ft a) (org-2ft b)))
+(defun org-time<= (a b) (<=    (org-2ft a) (org-2ft b)))
+(defun org-time>  (a b) (>     (org-2ft a) (org-2ft b)))
+(defun org-time>= (a b) (>=    (org-2ft a) (org-2ft b)))
+(defun org-time<> (a b) (org<> (org-2ft a) (org-2ft b)))
+(defun org-2ft (s)
+  "Convert S to a floating point time.
+If S is already a number, just return it.  If it is a string, parse
+it as a time string and apply `float-time' to it.  f S is nil, just return 0."
+  (cond
+   ((numberp s) s)
+   ((stringp s)
+    (condition-case nil
+	(float-time (apply 'encode-time (org-parse-time-string s)))
+      (error 0.)))
+   (t 0.)))
+
+(defun org-matcher-time (s)
+  (cond
+   ((equal s "<now>") (float-time))
+   ((equal s "<today>")
+    (float-time (append '(0 0 0) (nthcdr 3 (decode-time)))))
+   (t (org-2ft s))))
 
 (defun org-match-any-p (re list)
   "Does re match any element of list?"
@@ -9998,7 +10080,8 @@
              the the function returns t, FUNC will not be called for that
              entry and search will continue from the point where the
              function leaves it."
-  (let* ((org-agenda-skip-archived-trees (memq 'archive skip))
+  (let* ((org-agenda-archives-mode nil) ; just to make sure
+	 (org-agenda-skip-archived-trees (memq 'archive skip))
 	 (org-agenda-skip-comment-trees (memq 'comment skip))
 	 (org-agenda-skip-function
 	  (car (org-delete-all '(comment archive) skip)))
@@ -10009,12 +10092,12 @@
      ((eq match t)   (setq matcher t))
      ((eq match nil) (setq matcher t))
      (t (setq matcher (if match (org-make-tags-matcher match) t))))
-
+    
     (when (eq scope 'tree)
       (org-back-to-heading t)
       (org-narrow-to-subtree)
       (setq scope nil))
-
+    
     (if (not scope)
 	(progn
 	  (org-prepare-agenda-buffers
@@ -10069,6 +10152,22 @@
 (defconst org-property-end-re "^[ \t]*:END:[ \t]*$"
   "Regular expression matching the first line of a property drawer.")
 
+(defconst org-clock-drawer-start-re "^[ \t]*:CLOCK:[ \t]*$"
+  "Regular expression matching the first line of a property drawer.")
+
+(defconst org-clock-drawer-end-re "^[ \t]*:END:[ \t]*$"
+  "Regular expression matching the first line of a property drawer.")
+
+(defconst org-property-drawer-re
+  (concat "\\(" org-property-start-re "\\)[^\000]*\\("
+	  org-property-end-re "\\)\n?")
+  "Matches an entire property drawer.")
+
+(defconst org-clock-drawer-re
+  (concat "\\(" org-clock-drawer-start-re "\\)[^\000]*\\("
+	  org-property-end-re "\\)\n?")
+  "Matches an entire clock drawer.")
+
 (defun org-property-action ()
   "Do an action on properties."
   (interactive)
@@ -11475,7 +11574,7 @@
 	      date2 (list m d (+ y1 (* (if (< n1 cday) 1 -1) dn)))
 	      n2 (calendar-absolute-from-gregorian date2)))
        ((eq dw 'month)
-	;; approx number of month between the tow dates
+	;; approx number of month between the two dates
 	(setq nmonths (floor (/ (- cday sday) 30.436875)))
 	;; How often does dn fit in there?
 	(setq d (nth 1 start) m (car start) y (nth 2 start)
@@ -11489,12 +11588,11 @@
 	(setq m2 (+ m dn) y2 y)
 	(if (> m2 12) (setq y2 (1+ y2) m2 (- m2 12)))
 	(setq n2 (calendar-absolute-from-gregorian (list m2 d y2)))
-	(while (< n2 cday)
+	(while (<= n2 cday)
 	  (setq n1 n2 m m2 y y2)
 	  (setq m2 (+ m dn) y2 y)
 	  (if (> m2 12) (setq y2 (1+ y2) m2 (- m2 12)))
 	  (setq n2 (calendar-absolute-from-gregorian (list m2 d y2))))))
-
       (if show-all
 	  (cond
 	   ((eq prefer 'past) n1)
@@ -11828,14 +11926,13 @@
 	   (buffer-list)))
     (delete nil blist)))
 
-(defun org-agenda-files (&optional unrestricted ext)
+(defun org-agenda-files (&optional unrestricted archives)
   "Get the list of agenda files.
 Optional UNRESTRICTED means return the full list even if a restriction
 is currently in place.
-When EXT is non-nil, try to add all files that are created by adding EXT
-to the file nemes.  Basically, this is a way to add the archive files
-to the list, by setting EXT to \"_archive\"  If EXT is non-nil, but not
-a string, \"_archive\" will be used."
+When ARCHIVES is t, include all archive files hat are really being
+used by the agenda files.  If ARCHIVE is `ifmode', do this only if
+`org-agenda-archives-mode' is t."
   (let ((files
 	 (cond
 	  ((and (not unrestricted) (get 'org-agenda-files 'org-restrict)))
@@ -11855,16 +11952,9 @@
 				 (lambda (file)
 				   (and (file-readable-p file) file)))
 				files))))
-    (when ext
-      (setq ext (if (and (stringp ext) (string-match "\\S-" ext))
-		    ext "_archive"))
-      (setq files (apply 'append
-			 (mapcar
-			  (lambda (f)
-			    (if (file-exists-p (concat f ext))
-				(list f (concat f ext))
-			      (list f)))
-			  files))))
+    (when (or (eq archives t)
+	      (and (eq archives 'ifmode) (eq org-agenda-archives-mode t)))
+      (setq files (org-add-archive-files files)))
     files))
 
 (defun org-edit-agenda-file-list ()
@@ -12327,13 +12417,15 @@
       (cd dir))
     (if (not (file-exists-p dvifile))
 	(progn (message "Failed to create dvi file from %s" texfile) nil)
-      (call-process "dvipng" nil nil nil
-		    "-E" "-fg" fg "-bg" bg
-                    "-D" dpi
-		    ;;"-x" scale "-y" scale
-		    "-T" "tight"
-		    "-o" pngfile
-		    dvifile)
+      (condition-case nil
+	  (call-process "dvipng" nil nil nil
+			"-E" "-fg" fg "-bg" bg
+			"-D" dpi
+			;;"-x" scale "-y" scale
+			"-T" "tight"
+			"-o" pngfile
+			dvifile)
+	(error nil))
       (if (not (file-exists-p pngfile))
 	  (progn (message "Failed to create png file from %s" texfile) nil)
 	;; Use the requested file name and clean up
@@ -12427,7 +12519,9 @@
 
 (org-defkey org-mode-map "\C-c\C-a" 'show-all)  ; in case allout messed up.
 (org-defkey org-mode-map "\C-c\C-r" 'org-reveal)
-(org-defkey narrow-map "s" 'org-narrow-to-subtree)
+(if (boundp 'narrow-map)
+    (org-defkey narrow-map "s" 'org-narrow-to-subtree)
+  (org-defkey org-mode-map "\C-xns" 'org-narrow-to-subtree))
 (org-defkey org-mode-map "\C-c$"    'org-archive-subtree)
 (org-defkey org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
 (org-defkey org-mode-map "\C-c\C-x\C-a" 'org-toggle-archive-tag)
@@ -13220,9 +13314,6 @@
      ["Cycling opens ARCHIVE trees"
       (setq org-cycle-open-archived-trees (not org-cycle-open-archived-trees))
       :style toggle :selected org-cycle-open-archived-trees]
-     ["Agenda includes ARCHIVE trees"
-      (setq org-agenda-skip-archived-trees (not org-agenda-skip-archived-trees))
-      :style toggle :selected (not org-agenda-skip-archived-trees)]
      "--"
      ["Move Subtree to Archive" org-advertized-archive-subtree t]
  ;    ["Check and Move Children" (org-archive-subtree '(4))
@@ -14390,7 +14481,9 @@
 (eval-after-load "imenu"
   '(progn
      (add-hook 'imenu-after-jump-hook
-	       (lambda () (org-show-context 'org-goto)))))
+	       (lambda ()
+		 (if (eq major-mode 'org-mode)
+		     (org-show-context 'org-goto))))))
 
 ;; Speedbar support
 
@@ -14513,4 +14606,3 @@
 ;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd
 
 ;;; org.el ends here
-